搜狐文本匹配算法大赛方案总结
每天给你送来NLP技术干货!
来自:炼丹笔记
在自然语言理解中,自然语言推理(Nature Language Inference,NLI)
被认为是一个非常基础但重要的研究任务。它要求机器去理解自然语言的深层次语义信息,进而做出合理的推理。更具体的推理任务,则是判断句子关系,即对于给定的两个句子,判断它们含义是否一致。
在上述背景之下,搜狐发起并主办 “2021搜狐校园算法大赛”,有针对性地设置30万条数据,总奖金池6.5万元。
本次比赛的数据均来自人工标注,数据均为文字片段,每两个片段为一组,参赛选手需要为每对文本在两个颗粒度上判断文本对中的两段文字是否匹配。其中,一个颗粒度较为宽泛,两段文字属于一个话题即可视为匹配;另一个颗粒度较为严格,两段文字必须是同一事件才视为匹配。
本次比赛初赛预计涉及18万条数据,复赛预计涉及3万条数据,决赛预计涉及9万条数据,数据格式为json。
参赛选手需要正确判断两段文字是否匹配,数据分为A和B两个文件,A和B文件匹配标准不一样。
A文件匹配标准较为宽泛,两段文字是同一个话题便视为匹配。 B文件匹配标准较为严格,两段文字须是同一个事件才视为匹配。
文件内,source
为第一段文字 ,target
第二段文字 ,labelA
为A文件中匹配情况,labelB
为B文件中匹配情况,“0”表示不匹配,“1”表示匹配。
{
"source": "英国伦敦,20/21赛季英超第20轮,托特纳姆热刺VS利物浦。热刺本赛季18轮联赛是9胜6平3负,目前积33分排名联赛第5位。利物浦本赛季19轮联赛是9胜7平3负,目前积34分排名联赛第4位。从目前的走势来看,本场比赛从热刺的角度来讲,是非常被动的。最终,本场比赛的比分为托特纳姆热刺1-3利",
"target": " 北京时间1月29日凌晨4时,英超联赛第20轮迎来一场强强对话,热刺坐镇主场迎战利物浦。 热刺vs利物浦,比赛看点如下: 第一:热刺能否成功复仇?双方首回合,热刺客场1-2被利物浦绝杀,赛后穆里尼奥称最好的球队输了,本轮热刺主场迎战利物浦,借着红军5轮不胜的低迷状态,能否成功复仇? 第二:利物浦近",
"labelA": "1"
}
本次评测任务采用macro F1方法,即对A、B两个文件的label分别计算F1值然后求平均,为最终得分。
第2名
第3名
https://github.com/zzy99/competition-solutions
短文本进行填充,长文本进行截断(长文本的信息主要集中在首部),这样统一了短短、短长、长长任务;让labelA和labelB的数据共享同一个模型参数,混合进行多任务训练,彼此协同提升性能。
其他上分操作:
交叉验证 模型融合:多折、多阶段、多权重 对抗训练 知识蒸馏:多个教师模型 阈值后处理
第8名
https://github.com/CQUPT-GML/2021Sohu_Text_Matching
Model使用NEZHA-base做的单模单折,修改了LayerNorm的结构,调整了均值和方差。
数据处理上我们尝试了以下方法:
数据对偶(短短或长长使用) P->Q ==> Q->P (效果不好) 数据闭包 Q->P P->R ==> Q->R (这里要注意区分0,1标签在传递过程中的变化) (提升不是很明显) 数据清洗:划分置信区间,使用BCE_loss对伪标签进行训练 (效果不明显) 长度排序:计算文本长度后,进行排序,长度类似的文本尽可能的排在一起,同一个Batch时,padding计算有帮助 (效果有提升,速度加快)
对模型有以下模型修改:
Lookahead梯度惩罚(尝试了比FGM效果好,效果有提升) 划分阈值(解决类别不平衡,效果有提升) 长文本处理-摘要提取,使用Snownlp提取多个摘要,并用TextRank计算最重要的摘要,尝试两种方案: 对所有长文本摘要提取,并替换原文本(效果不好) 只对短长B文本摘要提取,并替换原文本(效果变好,尤其是短长B,这么尝试的目的是因为短长B效果非常差) 对长文本进行分段式切割,并进行交叉计算(短短,长长效果变好,短长变差)
特征工程包括如下:
输出没有使用平均池化,而是使用TF-IDF计算的词权,进行按权池化 Bert+CRF预处理(对BAD CASE进行分析可以发现很多时候效果不好是因为长句整体语义相同,但是主语或者地点不同,我们使用NER主语和地点当作一个新的token embedding加入)
第15名
https://github.com/KKenny0/sohu2021
解题思路
为了从数据中学习到尽可能多的信息,同时又兼顾 A、B 以及三种小分类标准,我们的方案基于多任务学习的框架,共享一部分参数来进行表示学习,再设计任务特定的分类器来进行标签预测。
模型设计
框架设计基于 BERT 的交互模型,通过 BERT 来得到 source-target pair 的向量表示。本方案的整体结构如下图所示:
文本编码
在本方案中使用最后 3 层的结果来进行下游任务的学习。此外,针对此次比赛可划分为 6 个子任务的特点,我们引入了 Special Tokens 的概念。
提出了 6 种 Type Token 来引导文本的表示学习:
Token 任务类型 SSA 短短匹配 A 类 SSB 短短匹配 B 类 SLA 短长匹配 A 类 SLA 短长匹配 A 类 LLA 长长匹配 A 类 LLB 长长匹配 A 类 使用
[<S>]、[</S>]
和[<T>]、[</T>]
来分别区分 source 和 target。(相应的 special tokens 已经添加到 models/* 下所给的 vocab.txt 文件中)
多任务学习
为了更好地学习Type Token
的表示,并辅助Task-Attentive Classifier
的学习,我们提出了数据类型标签预测任务,即根据Type Token
的表示来判断当前输入属于哪种任务类型。
Task-Attentive Classifier
本着“和而不同”的思想,A、B 两个任务各独立使用一个的Task-Attentive Classifier
,同时将 Type Token 的表示作为额外的条件信息传入Classifier
进行 attention 计算,以获得 type-specific 的特征进行标签预测。
上分技巧
数据划分:本方案中所使用的训练数据囊括『复赛所提供的训练集和初赛所提供的所有数据』,使用复赛提供的验证集来 evalute 模型的效果。 模型融合:根据三个模型在线下验证集上的 F1 值设置了不同权重,同时通过自动搜索找到了最优的权重组合,得到线下。
模型 | 链接 |
---|---|
BERT-wwm-ext | https://github.com/ymcui/Chinese-BERT-wwm |
RoBERTa-wwm-ext | https://github.com/ymcui/Chinese-BERT-wwm |
WoBERT | https://github.com/ZhuiyiTechnology/WoBERT |
对抗训练、指数移动平均(EMA)和 Focal Loss
提交方案的改进
本次开源的方案从数据划分、模型结构和模型融合三个方面对复赛提交方案进行改进。
数据划分:扩大训练集,复赛提供的训练集-->复赛提供的训练集+初赛的所有数据。 模型结构:重新设计了网络结构,改善了 Task-specific encoding
的方式。模型融合:复赛所提交方案使用 BERT-wwm-ext
和ERNIE-1.0
进行模型融合。此方案则使用BERT-wwm-ext
、RoBERTa-wwm-ext
和WoBERT
进行融合。
Coggle数据科学:https://mp.weixin.qq.com/s/NBek4Pyt4OOsz0QCM466-Q
微信扫码关注该文公众号作者