背景介绍
实体链指是指对于给定的一个文本(如搜索Query、微博、对话内容、文章、视频、图片的标题等),将其中的实体与给定知识库中对应的实体进行关联。实体链指一般有两种任务设计方式:Pipeline式和端到端式。
赛题说明
百度飞桨举办的千言数据集:面向中文短文本的实体链指任务给出了中文短文本、短文本中的mention以及对应位置,需要预测文本中mention对应实体在给定知识库中的id,如果在知识库中没有对应实体即NIL,需要再给出实体类别。
训练集数据共7W条,query平均长度22,包含26W个mention,每个mention有6.3个候选实体,被链接到的NIL实体有3W个,其中1.6W在知识库中有同名实体。可以发现有三个特点:
- 文本长度短,上下文信息有限
- 候选实体数量多
- NIL数量多,占比超过了10%
模型方案
这次比赛已经给出了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转换为特定类型的实体参与排序,针对这个问题,我们设计了三种方案:
- 方案1:只对知识库中存在的实体进行排序,当top1的score小于阈值时,认为是NIL实体;
- 方案2:构造NIL实体样本“mention-mention,类型:未知类型”,例如:“英雄三国-英雄三国,类型:未知类型”,表示该实体是一个未知实体。预测和训练时,所有mention候选实体中增加一个未知实体,参与排序;
- 方案3:将所有候选实体拼接,和query样本一起输入模型进行分类,判断是不是NIL实体,理论上这样可以带来更多全局信息。考虑到训练速度,我们先用1)中的方案进行排序,然后将top3的实体描述拼接,训练一个分类模型。
对抗训练
对抗训练是指在模型的训练过程中构建对抗样本,参与模型训练的方法。正常训练过程中,如果梯度方向陡峭,那么很小的扰动都会产生很大的影响。为了防止这种扰动,对抗训练在模型训练的过程中使用带扰动的对抗样本进行攻击,从而提升模型的鲁棒性。我们实验了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层)的对比说明了一寸长一寸强,更多的参数可以有更好的表现。
对比单任务和多任务时,我们使用了基于ERNIE的模型。通过对比多任务和单任务的模型效果,我们发现多任务不但流程简单,而且效果也比单任务联合好。排序时模型需要借助类型信息判断mention与候选实体是否一致;NIL分类时能学习到知识库中其他候选实体的信息,所以两个任务共享参数可以使模型提取到两个任务的共性,提升模型效果。
从模型1、2、3可以看到对抗学习是一种通用的模型优化方法,在各种模型上都有明显提升,但是FGM和最强一阶对抗方式PGD实体链指任务上差距并不明显。
NIL不同方式参与排序的实验中,我们发现使用构造NIL样本参与匹配和对排序TOP1的score卡阈值这两种方式结果差别不大,AUC分别为0.97和0.96,训练NIL分类器的AUC仅为0.94,猜测是因为对候选实体进行top3采样时,已经有了误差积累。
通过将表现好的模型进行融合我们在dev测试集上的F1达到了88.7,在A榜数据集F1达到88.63,在B榜数据集F1达到91.20,最终排名第二。
小布助手的探索
小布助手每天处理千万级别的用户问题,其中涉及实体词的query高达30%。这些由不同人发出的真实对话里,既包含千人千面的主观表达,更包含大量的创新词汇,多义词,同义词,同时也经常会面对“李白是谁”、“我要听《李白》”这类mention有歧义的问题。
小布助手的技术积累不仅帮助我们在比赛中名列前茅,而且已经帮用户解决“哥哥的代表作”、“李白是谁”、“我要听《李白》”等常见而语音助手又极易误解的用户问题。黑格尔说过:人是靠思想站立起来的。思考赋予人类尊严,驱动文明不断向前。小布助手汇聚无数背后英雄的思想,也在默默努力,然后用有趣贴心有灵魂惊艳所有人。
赛后感想
工欲善其事,必先利其器,本次比赛使用了飞桨2.0框架进行训练,动态图模式下程序可即时执行并输出结果,提高了编码效率。借助百度的PaddleNLP工具包,可以无缝切换ERNIE、BRART、RoBERTa等预训练模型,非常适合比赛时快速实验。
PaddleNLP工具包链接:https://github.com/PaddlePadd...
这次比赛的赛题也很值得探索,实体消歧和分类两个任务如何有机结合,可以做很多尝试。一个实体链指任务就有抽象成多种方式,足以见得兵无常势,水无常形,我们在解决算法问题时,要跳出思维定势,尝试从不同的角度去抽象问题,找到最佳的解决方案。
本项目链接:
除了实体链指任务,千言项目还有情感分析、阅读理解、开放域对话、文本相似度、语义解析、机器同传、信息抽取等方向持续打榜中。
参考文献
[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.
作者介绍
樊乘源
OPPO 小布助手 NLP 工程师
负责对话和知识图谱相关工作,研究方向包括意图分类、序列标注、关系抽取、实体链指等。