SemEval-2020自由文本关系抽取冠军方案解读 (附NLP竞赛常用技巧总结)

本文将回顾平安人寿近期在PaperWeekly × Biendata直播间进行的主题为「SemEval-2020自由文本关系抽取冠军方案解读(附NLP竞赛常用技巧总结)」的技术分享,由平安人寿AI团队资深算法工程师谢舒翼老师主讲。

全文框架概览

1. 赛题介绍

SemEval 由 ACL(国际计算语言学协会)主办,是全球范围影响力最强、规模最大、参赛人数最多的词汇与语义计算领域权威赛事,迄今已举办 14 届,历届吸引了卡内基梅隆大学、TCS Research、百度、美团、科大讯飞等国内外一流高校、顶级科研机构和知名企业参与。

1.1 任务简介

本次我们参赛任务为DeftEval: Extracting term-definition pairs in free text(自由文本定义抽取)。在该任务中,我们团队以满分成绩夺得了关系抽取赛道冠军。

 

 

主办方提供了两万多条从专业工具书筛选的句子,覆盖生物、历史、物理、心理学、金融、社会、政治等多个专业领域。该任务包含以下三个子任务:

 

  • Subtask1:给定一个句子,判断该句子里是否包含定义

  • Subtask2:在给定tag schema下的词粒度BIO标签预测

  • Subtask3:在给定relation schema下的关系抽取

 

其中,Subtask2的tag schema包含以下六种:

  1. Term: A primary term.

  2. Alias Term: A secondary or less common name for the primary term. Links to a term tag.

  3. Referential Term: A noun phrase(NP) reference to a previously mentioned term tag. Typically this/that/these + NP following a sentence boundary.

  4. Definition: A primary definition of a term. May not exist without a matching term.

  5. Referential Definition: NP reference to a previously mentioned definition tag. See Referential Term.

  6. Qualifier: A specific date, location, or other condition under which the definition holds true. Typically seen at the clause level.

 

Subtask3的relation schema包含以下五种:

  1. Direct-defines: Links definition to term.

  2. Indirect-defines: Links definition to referential term or term to referential definition.

  3. Refers-to: Links referential term to term or referential definition to definition.

  4. AKA: Links alias term to term.

  5. Supplements : Links qualifier to term.

 

1.2 数据集格式

训练数据集如下图所示有8列,用tab分隔,句子之间有空行,段落用2个空行分隔。

 

  • TOKEN是句子里的单词;

  • SOURCE标识当前句子来源于哪篇文章;

  • START/END是单词在文章中的起始位置;

  • TAG则是来自于前面所述tag schema里的标签,符合BIO标注格式;

  • TAG_ID是TAG标签的一个唯一标识,如果O标签则为-1;

  • ROOT_ID是指在关系中当前TAG_ID所关联的TAG_ID,下面表格中T10是对T9的一个定义,所以T10的ROOT_ID为T9;

  • RELATION则是上文relation schema里介绍的关系,表中的例子为Direct-Defines关系。

 

Subtask1判断一句话是否包含定义,Subtask2,已知前四列信息,预测第五列Tag,Subtask3,已知前六列信息,预测ROOT_ID和关系。

 

1.3 评估方法

以下是本次比赛三个任务的评测方案。

 

  • Subtask 1: 句子分类官方将对正负样本的准确率,召回率和F1值进行评估,但官方排名只看正样本的F1值。

  • Subtask 2: 序列标注官方将评估每个标签类别的准确率,召回率和F1值,以及所有类别的整体macro- and micro-averaged F1 。但官方排名只看所有评估类别的macro-averaged F1。被评估的类别包括:Term, Alias-Term, Referential-Term, Definition, Referential-Definition, and Qualifier。

  • Subtask 3: 关系抽取官方将评估每个关系类别的准确率,召回率和F1值,以及所有关系类别的整体macro- and micro-averaged F1 。但官方排名只看所有评估关系类别的macro-averaged F1。被评估的关系类别包括:Direct-defines, Indirect-defines, Refers-to, AKA, and Supplements。

    也即任务1只看正样本的F1值,任务2,3则以所有类别的Macro-F1为评价指标,其中Macro-F1是指分别计算每个类别的F1,然后做平均(各类别F1的权重相同),此种评价标准对小样本数据类别的准确率有较高的要求。

 

2. 任务分析

 

2.1 EDA (Exploratory Data Analysis)

通过统计的方法,分析训练样本句式,各类标签占比。我们发现40%左右的常见定义句式都是Term be Definition和Definition be called Term这两种格式。

 

比如:

  1. Term is/are Definition 在definition句子中占比约为27.31%

    示例:The small intestine is the organ where the digestion of protein , fats , and carbohydrates is completed.

  2. Definition be called Term 在definition句子中占比约为13.12%

    示例:The process by which capital ages and loses value is called depreciation.

 

 

经过统计发现,包含定义的句子在所有句子里占比23%左右,也即任务1的正样本数量不到负样本的三分之一,这对我们后面模型损失函数的超参数设计有一定指导作用。关系标签里占比最多的是直接定义,占到85-89%的比例,其他的关系标签都属于小样本标签,这些都是后续数据增强重点关注类别。

 

另外我们还对句子长度,跨句关联比例,段落句子个数,噪音文本等特征进行了统计。其中两个关联标签分布在相邻两个句子的情况,是本次赛题的难点。

 

对train/dev/test统计分析如下:

  1. train/dev中跨距关联语句占比约为0.02,大部分都是本句关联的

  2. train/dev/test语句长度约在26个单词左右

  3. train/dev/test中每个段落大约由4个句子组成

  4. 训练集里段落开头的数字单句要清洗

 

针对不同领域中不同标签占比进行统计分析发现,训练集/验证集/测试集在不同领域内的不同标签分布基本相同,同时统计每个领域内每个标签的占比可知,government领域中只有13.16%的数据带有标签,而biology领域中大约有33.79%的数据带有标签,远大于government。且biology领域内Qualifier标签远大于其他领域,占比约为0.73%,其他领域均小于0.2%。这些是符合常理认知的。

 

 

通过统计分析,我们还发现句子之间的一些关联性

  • 一个句子如果包含定义,则一定含有Definition标签

  • 各种实体之间的关系都是围绕定义或者实体本身

  • 实体和定义可能不在同一句话里

  • 指代定义通常是两个相邻的句子

 

2.2 数据增强

通常来说,英文文本的数据增强可以采用单复数、缩写、上下位词的替换,还可以通过随机增加、删除或者改写来生成新的样本。回译法也是常用的方法,就是先把英文翻译成其他语言再回译成英文。英文里使用nltk,wordnet可以获取单词的同义词。

这里我们用到了Crafting Text Adversarial Samples的思想:一个单词有高贡献是指去掉它后文本将被分为当前类的概率大幅减小。生成扩充语料的一个重要方面就是要保持样本的语义 。

 

在我们的任务中定义专有名词不能替换,句子要保持通顺。

 

Subtask1可以用回译法,Subtask2只能用同义词替换保持句子单词数一致。下图中新句子里红色的单词是我们经过替换产生的。

 

2.3 定义抽取关系抽取传统方法

传统的定义抽取方法一般有规则模版方法和基于特征工程的机器学习方法。我们基于观察和统计,会发现很多定义都是有定义连接动词的,但是有定义连接动词的pattern匹配到的也未必是定义。另一方面,用规则模版,特征工程的方法并不能在保持准确率的同时具有良好的泛化性。

 

而传统的关系抽取一般分两步走,先识别出实体,再判断出实体之间的关系。实体识别通常有双指针方法以及深度学习模型+CRF等方法,关系抽取可以转化为分类问题。

 

 

3. 模型构建

 

3.1 多任务学习

本赛题多个任务存在较强的关联性,Subtask2中如果预测出一些单词为Definition,则对应句子在Subtask1中应属于正样本。为解决传统方法的累积误差,我们引入多任务联合学习框架。多任务学习有以下三个好处:

 

  • 隐式数据增强:有效地增加了我们用于训练模型的样本量。由于所有数据都存在噪声,因此在对某个任务A进行模型训练时,我们的目标是学习任务A的良好表示形式,理想情况下可以忽略与数据相关的噪声并很好地进行概括。由于不同的任务具有不同的噪声模式,仅学习任务A可能会过拟合任务A,而学习A和B则可以使模型通过平均噪声模式获得更好的表示。

  • 更通用的文本表达:联合训练模型倾向于学到每个子任务都能学到的表达,这也将有助于该模型将来推广到新任务,因为对于足够多的训练任务而言表现良好的假设空间,只要它们来自同一环境,对于学习新颖任务也将表现良好。

  • 特征选择双重检验:如果一个feature对多个任务都非常重要,则这个feature很有可能对通用文本表达非常重要。

 

通常来说,多任务学习分为hard parameter sharing和soft parameter sharing, 其中soft parameter sharing每个任务有自己的参数,最后通过对不同任务的参数之间的差异加约束,表达相似性。

 

 

我们在建模过程中采用hard parameter sharing的方式,定义抽取任务和序列标注任务共享一个Shared Layer用以学习句子单词通用的表达,然后不同的任务各自有自己的Task Specific Layer。

 

关于损失函数的设计,我们定义

其中 是第i个单词标签为 的概率, 是CRF里转移矩阵标签 的概率,序列标注的损失函数为最大路径得分除以所有路径得分再取log的负数。 

分类任务的损失函数为

其中y是正确标签, 是预测概率,我们在交叉熵的基础上增加了两个超参数,用来控制正负样本的权重和容易分类样本对整体损失贡献的权重。当样本为正的时候,标签y=1,损失函数第二项为0,alpha的大小控制着正样本的权重,alpha越大,把正样本分错产生的损失也越大。当一个正样本比较容易分类,预测值 会非常接近1,当gamma越大的时候,容易分类样本贡献的损失也会越小,难分类样本贡献的损失会越大。

训练过程我们采用先训练Subtask2,再训练Subtask1,交替训练的方法。为解决训练数据不足,我们引入Pseudo-Label的技巧,但控制数量占比不超过有标签数据的十分之一。所谓Pseudo-Label,就是先用有标签数据训练一个模型,然后预测无标签数据,将概率较高的无标签数据打上伪标签,然后加入到训练数据中重新训练模型。

 

3.2 关系抽取模型

我们提出Enhancement Inference BERT模型对关系进行抽取 。模型输入两个实体,其中词向量取BERT最后四层hidden states的token embedding求平均。计算两个实体之间单词的Attention,然后通过TextB里词向量乘以一个归一化参数得到TextA的交互表达 ,同样的方式得到TextB的交互表达 ,最后通过差积,点积等操作,经过MLP,Softmax层输出关系label。

 

模型融合方面,我们采用五个预训练模型,五折交叉验证得到25个预测结果,然后采用hard voting的方式输出结果。其中XLM-Roberta是一个多语言训练模型,不需要传入额外的参数来指定当前输入的语言,模型可以通过input_id自己识别。

 

模型融合之后,我们会辅助一些实体纠正规则,用来解决一些嵌套NER,一词多tag的情况。

 

4. 总结

 

4.1比赛总结

本次比赛我们使用多任务联合训练框架,对定义抽取和词粒度BIO标注两项任务进行联合建模。提出Enhancement Inference BERT对实体关系进行分类,加上规则辅助对关系抽取任务进行预测。最终在关系抽取任务中获得第一。

 

数据集存在多重定义以及长距离的指代关系,同一句话存在不同的实体标注和关系,当前讨论的实体在前文或后文中描述过,需要结合上下文信息才能预测出结果,这些都对准确识别提出了很高的要求。光靠模型很难学习到一句多义的情况。因此本次比赛采用实体规则对模型预测实体结果进行纠正,实验结果如下所示:

 

 

4.2 NLP竞赛常用解题技巧总结

 

拿到赛题,我们首先需要理解题目和评测目标,浏览训练数据格式,分析数据各个类别占比,数据集的大小,会影响 Epoch 的数量,而很多学习率衰减策略是直接与 Epoch 相关的。异常点检测有3σ原则,Isolation Forest等方法 。1-2万的数据量,经验规则预训练模型Epoch 10-20次。

 

先保证baseline的合理性,后期再加入数据增强。效果第一,用大模型(中文BERT,ERNIE,NEZHA,英文BERT,Roberta,XLNET等)去拟合小数据,正则化,Batch不用太大。固定随机 seed,始终使用固定的随机 seed 能保证很多属性,例如在我们两次运行相同代码时能得到相同的输出。这能消除变化因子,进行合理的判断。

 

构建合理的Local CV至关重要,在test数据集放出来之前,我们通过五折交叉验证拆分训练集和验证集,把dev数据集作为test数据集。本地评估体系是验证新模型,新方案的有效手段。

 

过拟合,典型的表现为训练集损失远远小于验证集损失。除了常规的正则化,early stop等方法外,这里介绍一种Adversarial Training的方法,一般用于test数据集发布之后,训练一个分类器用于区分训练集和测试集,选取最像测试数据的前k个训练数据作为最终模型的验证数据。

 

模型输入也有许多优化方法,BPE(Byte-Pair Encoding)是其中一种,这种方法可以扩大词汇表,使unknown出现的少。对于字向量与词向量如果要采用相加的形式组合在一起,可以把词向量重复n次,n表示的是当前词有多少个字。

 

Ensemble里单模型的Diversity越大,最终Model的Bias就越低。在实际中很有可能表现相近的Model只有寥寥几个而且它们之间相关性还不低,但是实践告诉我们即使在这种情况下Ensemble还是能大幅提高成绩。

打 NLP 比赛像是搜索解空间,不断寻找下一个更优解,直到比赛结束。这样看来,快速构建一个 baseline,建立可靠的 Local CV 系统,然后不断尝试并验证新想法,收获好成绩似乎也有迹可循。

 

 

5. 应用价值

 

此次参赛所应用到的创新技术,在实际业务场景中,可支持保险信息抽取、保险实体识别、文本挖掘等技术应用,对搭建寿险垂直领域的知识图谱起到重要推动作用,能大幅提升对话式机器人的响应效率和服务体验。

 

目前对话式机器人作为平安人寿智能转型的利器之一,在代理人赋能和客户服务两大业务体系中已大规模落地,覆盖招聘、培训、销售支持、客服等业务场景,并将持续发挥价值。

# 资料获取 #

本期直播视频及资料获取方式如下:

 1 / 扫码关注 

长按识别二维码,关注「平安寿险PAI」

 

  2 / 回复暗号 

在后台回复“关系抽取”即可获取下载链接

更多阅读

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值