本文由百度飞桨举办的千言数据集:面向中文短文本的实体链指任务比赛中取得优异成绩的小布助手算法工程师樊乘源投稿。
背景介绍
实体链指是指对于给定的一个文本(如搜索Query、微博、对话内容、文章、视频、图片的标题等),将其中的实体与给定知识库中对应的实体进行关联。实体链指一般有两种任务设计方式:Pipeline式和端到端式。
Pipeline式实体链指步骤一般有:命名实体识别、候选实体选取、实体消歧,其中最关键的一步是实体消歧。Ganea[1]将文本和候选实体encode为两个向量,使用语义匹配来进行实体消歧。Shuang Chen[2]则将消歧问题转化为实体类型分类,得到实体类别后,通过Link Count确定最终链接到的实体。
端到端式实体链指使用一体化模型进行链指,Nikolaos Kolitsas[3]通过模型结构创新,实现了一个模型同时实体识别和消歧。Samuel Broscheit[4]则大道至简,借助大量的语料和强大的预训练模型直接使用序列标注的方式进行实体链指。
任务抽象方式
赛题说明
百度飞桨举办的千言数据集:面向中文短文本的实体链指任务给出了中文短文本、短文本中的mention以及对应位置,需要预测文本中mention对应实体在给定知识库中的id,如果在知识库中没有对应实体即NIL,需要再给出实体类别。
训练集数据共7W条,query平均长度22,包含26W个mention,每个mention有6.3个候选实体,被链接到的NIL实体有3W个,其中1.6W在知识库中有同名实体。可以发现有三个特点:
模型方案
这次比赛已经给出了mention信息,我们只需要考虑两个任务:实体消歧和NIL分类。任务的关键有以下几点:如何设计输入样本、如何设计模型结构、NIL实体如何与其他实体一起排序、如何挖掘更丰富和多维度的特征等。
样本构造
我们选取了ERNIE、RoBERTa等预训练语言模型进行语义特征抽取,将需要链指的文本和实体描述信息用[SEP]符号拼接,作为模型的输入。
query样本构造:query样本输入时需要将mention的位置信息传入模型,让模型能判断mention在query中的具体位置,例如:“海绵宝宝:海绵宝宝和派大星努力工作,两人来到高速公路上!”中出现了两次海绵宝宝,分别链接到了动画片《海绵宝宝》和动画人物海绵宝宝,需要加以区分。为了解决这一问题我们通过引入标识符将位置信息传入,在mention两边加入统一的标识符“#”,样本如下:
实体描述样本构造:数据库中的实体包含了实体的标准说法subject,实体的类型type和实体的一些相关SPO信息。构造样本时将mention字段和实体标准名用“-”拼接作为输入,强化标准名和mention是否相同这一特征。实体类型是消歧重要的信息,我们构造了“类型:实体类型”这种描述,提供实体类型信息,为了防止截断,将其放在实体标准名之后。SPO信息只使用了属性值,这样可以使超过最大输入长度的样本数量减少35%。
统计特征样本构造:数据和特征决定了模型的上界,为了丰富模型输入,将实体类型、实体长度、mention长度、实体和mention的Jaccard相似度等特征进行embedding了之后,和模型输出的特征向量拼接。
模型结构
实体消歧本质上是对候选实体进行排序的过程,使用query和实体信息作为输入,对候选实体进行排序,给出候选实体分数,选出TOP1实体。在排序学习中,有三种常见模式pointwise,pairwise和listwise,对于实体消歧这种只需要TOP1的排序任务,并不需要考虑候选实体之间的顺关系,只考虑全局相关性,因此我们选取了pointwise方法。
排序学习模型示意
实体分类任务和实体链指任务看起来没有直接联系,但是Shuang Chen[2]提出当可以预测出mention的类型时,消歧就相当容易。因此我们设计了多任务模型框架,同时进行排序和分类,两个任务共享模型参数,一起训练,损失函数一起优化,通过共享排序任务和分类任务的信息,模型可以有更好的表现,多任务损失函数如下。
最终我们模型结构如下,将query和实体描述拼接,输入预训练语言模型,将CLS、mention开始和结束位置的向量拼接作为特征向量。排序任务将特征向量输入全连接层,然后经过tanh最终输出[-1,1]区间的分数,分数越高代表越有可能是目标实体。分类任务将特征向量输入全链接层,经过softmax层输出各个分类的得分。
实体链指和分类模型结构
模型优化
数据清洗
基于置信学习数据清理:分析数据集我们发现,数据之中存在部分标注错误,根据Northcutt[6]置信学习的思想,我们在原始数据上用n-flod方式训练了5个模型,用这些模型预测原始训练集的标签,然后融合5个模型输出的标签作为真实标签,再从原始训练集中清理真实标签与原标签不一致的样本,根据经验清理的样本数量最好不大于10%。
NIL实体排序方式实验
实体消歧过程中NIL实体如何和其他实体一起排序,是单独作为一个分类任务,还是将NIL转换为特定类型的实体参与排序,针对这个问题,我们设计了三种方案:
对抗训练
对抗训练流程示意
对抗训练是指在模型的训练过程中构建对抗样本,参与模型训练的方法。正常训练过程中,如果梯度方向陡峭,那么很小的扰动都会产生很大的影响。为了防止这种扰动,对抗训练在模型训练的过程中使用带扰动的对抗样本进行攻击,从而提升模型的鲁棒性。我们实验了FGM和PGD两种生成对抗样本的方式。
对抗样本生成代码
实验结果分析
模型可解释性
可解释性建模示意
在训练完模型后,我们首先会想要知道模型学到了哪些特征。C Guan[7]提出了一种基于互信息的可视化方法,这种方法相较其他可视化方法,具有普适性和一贯性的特点,即解释指标有明确的意义,同时又能比较神经元之间、层与层之间和模型与模型之间的差异。
可解释性建模代码
为了了解模型到底关注哪些输入特征,我们基于Paddle2.0复现了该算法,对各个词的重要程度进行了可视化,颜色越深重要程度越高。通过可视化发现,模型倾向于关注实体的类型和用来区分实体的片段,例如示例1吃得慢、食物、吃法、火腿肠,示例2中的珊迪、海绵宝宝、开关电源品牌。示例3种的人物、种族、梦三国等,可以看到多任务模型关注的特征都是对消歧有帮助的。
实验结果分析
相关实验中参数配置如下:ERNIE和BERT的模型batch size为64,初始学习率为 5e-5,max_seq_length为256,RoBERTa-Large的模型batch size为32,初始学习率为 1e-5,max_seq_length为256,均采用了基于指数衰减的学习率衰减策略。
对比不同预训练模型和置信度学习的结果,发现模型效果RoBERTa-Large > ERNIE+置信度学习>ERNIE>BERT。可以看到ERNIE专门针对中文数据进行了任务优化,确实比BERT的效果更好,但是ERNIE(12层)和RoBERTa-Large(24层)的对比说明了一寸长一寸强,更多的参数可以有更好的表现。
表1 预训练模型对比
对比单任务和多任务时,我们使用了基于ERNIE的模型。通过对比多任务和单任务的模型效果,我们发现多任务不但流程简单,而且效果也比单任务联合好。排序时模型需要借助类型信息判断mention与候选实体是否一致;NIL分类时能学习到知识库中其他候选实体的信息,所以两个任务共享参数可以使模型提取到两个任务的共性,提升模型效果。
表2 单任务和多任务对比
从模型1、2、3可以看到对抗学习是一种通用的模型优化方法,在各种模型上都有明显提升,但是FGM和最强一阶对抗方式PGD实体链指任务上差距并不明显。
表3 对抗学习效果
NIL不同方式参与排序的实验中,我们发现使用构造NIL样本参与匹配和对排序TOP1的score卡阈值这两种方式结果差别不大,AUC分别为0.97和0.96,训练NIL分类器的AUC仅为0.94,猜测是因为对候选实体进行top3采样时,已经有了误差积累。
NIL不同方式参与排序的ROC曲线
通过将表现好的模型进行融合我们在dev测试集上的F1达到了88.7,在A榜数据集F1达到88.63,在B榜数据集F1达到91.20,最终排名第二。
小布助手的探索
小布助手每天处理千万级别的用户问题,其中涉及实体词的query高达30%。这些由不同人发出的真实对话里,既包含千人千面的主观表达,更包含大量的创新词汇,多义词,同义词,同时也经常会面对“李白是谁”、“我要听《李白》”这类mention有歧义的问题。
为了更好地理解用户的问题,小布不仅借助OGraph在实体消歧方向进行探索,还在命名实体识别和候选实体挖掘上做了很多工作。我们使用B/I标签进行命名实体识别,为了提升输入信息的丰富程度,使用Lattice LSTM和FLAT等结构,引入词汇信息作为特征补充。为了做好候选实体选取的召回,从搜索点击日志、自研知识图谱OGraph等来源离线挖掘同义词库,为了解决复合实体的问题,离线挖掘了上下位关系,添加到同义词库中,提升实体的召回率。
小布助手实体链指流程
小布助手的技术积累不仅帮助我们在比赛中名列前茅,而且已经帮用户解决“哥哥的代表作”、“李白是谁”、“我要听《李白》”等常见而语音助手又极易误解的用户问题。黑格尔说过:人是靠思想站立起来的。思考赋予人类尊严,驱动文明不断向前。小布助手汇聚无数背后英雄的思想,也在默默努力,然后用有趣贴心有灵魂惊艳所有人。
赛后感想
工欲善其事,必先利其器,本次比赛使用了飞桨2.0框架进行训练,动态图模式下程序可即时执行并输出结果,提高了编码效率。借助百度的PaddleNLP工具包,可以无缝切换ERNIE、BRART、RoBERTa等预训练模型,非常适合比赛时快速实验。
PaddleNLP工具包链接:
https://github.com/PaddlePaddle/PaddleNLP
这次比赛的赛题也很值得探索,实体消歧和分类两个任务如何有机结合,可以做很多尝试。一个实体链指任务就有抽象成多种方式,足以见得兵无常势,水无常形,我们在解决算法问题时,要跳出思维定势,尝试从不同的角度去抽象问题,找到最佳的解决方案。
本项目链接:
https://aistudio.baidu.com/aistudio/projectdetail/1639840
除了实体链指任务,千言项目还有情感分析、阅读理解、开放域对话、文本相似度、语义解析、机器同传、信息抽取等方向持续打榜中。
传送门:
https://www.luge.ai/
参考文献
[1]Deep Joint Entity Disambiguation with Local Neural Attention. Octavian-Eugen Ganea, Thomas Hofmann.
[2]Improving Entity Linking by Modeling Latent Entity Type Information,Shuang Chen, Jinpeng Wang, Feng Jiang, Chin-Yew Lin.
[3]End-to-End Neural Entity Linking. Nikolaos Kolitsas, Octavian-Eugen Ganea, Thomas Hofmann.
[4] Improving Entity Linking by Modeling Latent Entity Type Information. Shuang Chen, Jinpeng Wang, Feng Jiang, Chin-Yew Lin.
[5]Towards Deep Learning Models Resistant to Adversarial Attacks. A Madry, A Makelov, L Schmidt, D Tsipras.
[6]Confident Learning: Estimating Uncertainty in Dataset Labels. Curtis G. Northcutt, Lu Jiang, Isaac L. Chuang.
[7]Towards a Deep and Unified Understanding of Deep Neural Models in NLP. Chaoyu Guan, Xiting Wang, Quanshi Zhang, Runjin Chen, Di He, Xing Xie.
飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,是中国首个开源开放、技术领先、功能完备的产业级深度学习平台,包括飞桨开源平台和飞桨企业版。飞桨开源平台包含核心框架、基础模型库、端到端开发套件与工具组件,持续开源核心能力,为产业、学术、科研创新提供基础底座。飞桨企业版基于飞桨开源平台,针对企业级需求增强了相应特性,包含零门槛AI开发平台EasyDL和全功能AI开发平台BML。EasyDL主要面向中小企业,提供零门槛、预置丰富网络和模型、便捷高效的开发平台;BML是为大型企业提供的功能全面、可灵活定制和被深度集成的开发平台。
END
本文分享自 PaddlePaddle 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!