天池NLP赛道top指南

2020年初,新冠疫情席卷全球。除了“待在家,不乱跑”,我想还能从哪为抗击疫情出点微薄之力呢?

碰巧室友推送了一个天池公益赛“新冠疫情相似句对判定大赛”,于是秉持“重在参与”的心态参加了比赛。经过半个月的努力,最终的结果勉强不错(第6),收获了一台Kindle。​

image

2021年1月,疫情形势依然严峻,幸运的是咱们国家不仅及时稳住了疫情,还研发出有效的疫苗,全民免费接种。

借助疫情主题的比赛,我希望帮助更多读者,入门自然语言处理的基本任务——文本相似匹配

开源代码:

https://github.com/yechens/COVID-19-sentence-pair

01 数据分析

任务背景非常直观,主办方给定了“肺炎”、“支气管炎”、“上呼吸道感染”等医疗背景下的用户真实提问,要求选手通过算法识别任意2个问题,是否表达同一个意思。举例:

  • 问题1:“轻微感冒需不需要吃药?
  • 问题2:“轻微感冒需要吃什么药?

问题1关心“是否得吃药”,问题2关心“该吃什么药”,侧重点不同所以意思不同。

数据集样本都是三元组(query1, query2, label)。为了降低难度,每一个问题的长度被控制在20字以内。

比赛数据demo

比赛的训练集、验证集分别包含8746、2001条三元组。我们从dev中随机保留了800条样本作为最终dev,其余均加入训练。

数据增强

拿到数据简单分析后,我发现数据集已经过清洗,竟然异常的干净整齐(没有杂乱的符号、不通顺的句子),label分布几乎也接近1:1。

再观察数据,相同的query1总是按顺序排列在一起,随后跟着不同的query2。这种分布很容易想到一种数据增强策略:相似传递性

image
A <-> B 相似 and A <-> C 相似 => B <-> C 相似

最终我额外获得了5000条高质量的数据,比赛准确率因此提升了0.5%

实体替换

此外,我们也尝试了训练一个NER模型挖掘文本中的医疗实体,如“胸膜炎”、“肺气肿”,再通过word2vec查找最接近的实体进行替换。

但这种方式并没有提升最终结果。我觉得原因有2个:

  • 1W条样本规模偏小,NER模型识别误差较大
  • 词向量没有针对医疗场景训练,包含的医疗实体很少

02 匹配方法实现

文本匹配有非常多简单又实用的方法,例如:

  • 基于字符统计:字符串匹配、编辑距离、Jaccards距离
  • 基于语言模型:word2vec/glove词向量、BERT
  • 基于神经网络:孪生网络、TextCNN、DSSM、FastText等

由于比赛需要尽可能获得高分,这里主要介绍基于神经网络和BERT的文本匹配算法。

BERT[1]是一种预训练语言模型,通过海量文本、Transformer架构和MLM训练任务在众多NLP任务上取得了优异成果。对BERT不了解的读者,可以参考我之前的文章“从BERT、XLNet到MPNet,细看NLP预训练模型发展变迁史”[2]。

比赛中我们测试了5-6种不同的神经网络方法,并最终选择了3种在dev上表现最好的模型加权融合。具体可以参考code/model.py 文件。

文本CNN(TextCNN)

TextCNN是Yoon Kim[3]在2014年提出的用于句子分类的卷积神经网络。文本匹配任务本质上可以理解成二分类任务(0:不相似,1:相似),所以一般的分类模型也能满足匹配需求。

TextCNN

与图像中的二维卷积不同,TextCNN采用的是一维卷积,每个卷积核的大小为h✖️k(h为卷积核窗口,k为词向量维度)。文中采用了不同尺寸的卷积核,来提取不同文本长度的特征。

然后,作者对于卷积核的输出进行最大池化操作,只保留最重要的特征。各个卷积核输出经MaxPooling后拼接形成一个新向量,最后输出到全连接层分类器(Dropout + Linear + Softmax)实现分类。

我们知道,文本中的关键词对于判断2个句子是否相似有很大影响,而CNN局部卷积的特效能很好的捕捉这种关键特征。同时TextCNN还具有参数量小,训练稳定等优点。

文本RNN(TextRCNN)

相比TextCNN,TextRCNN的模型结构看起来复杂一些。

TextRCNN

简单浏览论文后,会发现它的思路其实简单,粗暴。

首先通过词向量获得字符编码e(wi),随后将其通过双向RNN学习上下文特征,编码得到两个方向的特征。

再将词向量 e(wi)cl(wi)cr(wi) 拼接得到新向量,输入经tanh函数激活的全连接网络。最后,将网络的输出最大池化,并输入另一个全连接分类器完成分类。

RNN模型对于长文本有较好的上下文“记忆”能力,更适合处理文本这种包含时间序列的信息。

BERT+MLP(fine-tune)

最后一种方法,直接用语言模型BERT最后一层Transformer的输出,接一层Dense实现文本匹配。

BERT

实验中我们发现,对最终输出的每个token特征取平均(MeanPooling)效果好于直接使用首字符“[CLS]”的特征。

模型权重上,崔一鸣等人[5]发布的中文roberta_wwm_ext_large模型效果要好于BERT_large。

image

最后,我们根据这三种模型在dev上的准确率设置了不同比重,通过自动搜索找到最优权重组合,在线上测试集取得了96.26%的准确率。

读者可以在“NLP情报局”后台回复“文本匹配”直接下载模型论文。

03 涨分trick

做一个深度学习主导的算法比赛,除了分析数据与模型,一些trick也是获得高分的重要因素。这里罗列了一些常用策略。

  • 数据增强[6]
  • 标签平滑
  • 自蒸馏
  • 文本对抗训练[7]
  • 模型融合
  • 特征筛选
  • 使用多个学习率[8]

针对这次文本匹配任务,数据增强、标签平滑、模型融合、多学习率都被证明是有效的。

04 总结

过去将近1年的天池“新冠疫情相似句对判定大赛”,任务并不复杂,是入门NLP项目实战,提升编程能力的很好锻炼机会。

image

比赛虽然结束了,疫情犹在。愿每位读者出门多加防护,一定要保护好自己哦!


如果你觉得这篇文章对你有帮助,欢迎点赞,让更多的人也能看到这篇内容 ❤️

关注公众号「NLP情报局」,第一时间阅读自然语言处理、机器学习算法相关干货~

Reference

[1] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.

[2] 从BERT、XLNet到MPNet,细看NLP预训练模型发展变迁史: https://zhuanlan.zhihu.com/p/166013414

[3] Convolutional Neural Networks for Sentence Classification.

[4] Recurrent Convolutional Neural Networks for Text Classification.

[5] Chinese-BERT-wwm: https://github.com/ymcui/Chinese-BERT-wwm

[6] 一文了解NLP中的数据增强方法: https://zhuanlan.zhihu.com/p/145521255

[7] 【炼丹技巧】功守道:NLP中的对抗训练 + PyTorch实现: https://zhuanlan.zhihu.com/p/91269728

[8] 称霸Kaggle的十大深度学习技巧: https://zhuanlan.zhihu.com/p/41379279

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353