赞
踩
百度的“2020语言与智能技术竞赛”开赛了,今年有五个赛道,分别是机器阅读理解、推荐任务对话、语义解析、关系抽取、事件抽取。每个赛道中,主办方都给出了基于PaddlePaddle的baseline模型,这里笔者也基于bert4keras给出其中三个赛道的个人baseline,从中我们可以看到用bert4keras搭建baseline模型的方便快捷与简练。
思路简析#
这里简单分析一下这三个赛道的任务特点以及对应的baseline设计。
阅读理解#
样本示例:
这个baseline其实没什么好说的,就是经过BERT之后,接两个全连接+Softmax分别预测答案的首和尾。有些训练样本标注了多个答案,但预测的时候只需要预测一个答案,所以训练阶段每次只随机选取一个答案进行训练。
关系抽取#
样本示例:
关系抽取就是去年的三元组抽取,只不过今年做了一些升级。升级的地方在于考虑同一个predicate的多义性,比如“饰演”,有可能是指饰演了哪部电视剧,也有可能指饰演了电视剧中的哪个角色,如果同一个句子中含有多个不同的被饰演的对象(object),那么要全部抽取出来才算对。说是说升级,但其实没有本质变化,我们只需要把predicate和object对应的前缀拼接起来作为不同的predicate,就退化为常规的三元组抽取问题了,比如“饰演_@value”、“饰演_inWork”当成两个不同的predicate分别抽取。笔者baseline模型依然是基于去年的“半指针-半标注”设计,详情可参考《基于DGCNN和概率图的轻量级信息抽取模型》。
事件抽取#
样本示例:
事件抽取是一个比较新的任务,要抽取出事件类型以及描述该事件的一些元素,同一个句子可能有多个事件,同一个实体可以同时描述多个事件(比如“XX月XX日”可能同时是多个事件发生时间)。本身事件抽取是比较复杂的任务,但是这次比赛主办方只评测(event_type, role, argument) 构成的三元组,也就是这样的三元组匹配上了,就加1分。而event_type、role都是离散的类别,argument则是原文中的一个实体,所以官方这样的评测指标就将这个任务退化为普通的实体标注问题了,因此可以用常规的序列标注模型来解决,笔者的baseline以及官方的baseline,都是转化为序列标注任务给出的。
匹配原序列#
上面三个比赛,本质上都是抽取问题,也就是说输出的实体都是原文中的片段。但是原始文本经过BERT的tokenizer后,不一定跟原始文本对得上了,存在小幅度的“增”、“删”、“改”的可能性(比如转小写、空格数目变化、部分字符转写),这些小幅度的改动对于工程上的评估是无关紧要的,但是对于这种比赛或学术的评测却是很重要的,因为如果不同的字符哪怕看起来一样,都会匹配错误。比如读者可以把下属代码复制到python运行一下:
为了将分词后的结果对应回原序列,笔者专门花了点时间,给bert4keras的Tokenizer补充了rematch方法,只要传入原始文本和分词后的结果,那么将会返回token到原始文本的映射关系,有了这个映射关系,就可以直接在原始文本中切片了。具体操作大家直接看baseline即可。
文章小结#
写了三个baseline,又水了一篇博客~
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
打赏
微信打赏
支付宝打赏
因为网站后台对打赏并无记录,因此欢迎在打赏时候备注留言。你还可以点击这里或在下方评论区留言来告知你的建议或需求。
如果您需要引用本文,请参考:
苏剑林. (Apr. 02, 2020). 《bert4keras在手,baseline我有 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/7321
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。