天池NLP赛道top指南

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
简介: 天池NLP赛道top指南

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


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



2021年1月,疫情形势依然严峻,幸运的是国家不仅及时稳住了疫情,还研发出有效的疫苗。借助疫情主题的比赛,我希望帮助更多读者,入门自然语言处理的基本任务——文本相似匹配


一、数据分析



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


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


问题1关心“是否得吃药”,问题2关心“该吃什么药”,侧重点不同所以意思不同,用label=0表示句子不相似。


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



数据集demo

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


数据增强


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


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



相同query1总是相邻排列


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


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


实体替换


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


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


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


二、匹配方法实现



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


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


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

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


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


文本CNN(TextCNN)


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



TextCNN模型结构


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


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


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


文本RNN(TextRCNN)


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



TextRCNN模型结构

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

首先通过词向量获得字符编码 ,随后将其通过双向RNN学习上下文特征,编码得到


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

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


BERT + MLP (fine-tune)


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



BERT-finetune

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


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



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


三、涨分trick



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


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


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


四、总结



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



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


相关文章
|
机器学习/深度学习 人工智能 自然语言处理
【人工智能】人工智能就业岗位发展方向有哪些?
人工智能领域的岗位多样,涵盖了从技术研发到应用实施、从产品设计到市场运营等各个方面,以下是人工智能就业岗位的主要发展方向
1074 59
|
9月前
|
存储 缓存 负载均衡
一致性哈希:解决分布式难题的神奇密钥
一致哈希是一种特殊的哈希算法,用于分布式系统中实现数据的高效、均衡分布。它通过将节点和数据映射到一个虚拟环上,确保在节点增减时只需重定位少量数据,从而提供良好的负载均衡、高扩展性和容错性。相比传统取模方法,一致性哈希能显著减少数据迁移成本,广泛应用于分布式缓存、存储、数据库及微服务架构中,有效提升系统的稳定性和性能。
539 1
|
关系型数据库 MySQL Devops
docker容器刚启动就停止 — 运行mysql 报错 mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
docker容器刚启动就停止 — 运行mysql 报错 mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
1923 0
|
12月前
|
Linux Python
解决django项目报错很离谱的报错之RuntimeError: populate() isn't reentrant
解决django项目报错很离谱的报错之RuntimeError: populate() isn't reentrant
|
12月前
|
应用服务中间件 Linux nginx
“直播”极简教程
本文以一个非常简单的实际例子,搭建一个直播所需要的基础软件支撑平台,浅尝直播业务中核心业务概念及他们的交互流程。 对于一场直播,大致会拥有如下环节: * 主播通过直播设备将画面推送到直播平台 * 平台接收主播推送的画面 * 观众通过平台找到主播的直播画面,具体来说就是要找到主播的房间号 * 观众从平台拉取房间号中的直播画面
453 11
“直播”极简教程
|
机器学习/深度学习 自然语言处理 数据挖掘
【NLP】深度学习的NLP文本分类常用模型
本文详细介绍了几种常用的深度学习文本分类模型,包括FastText、TextCNN、DPCNN、TextRCNN、TextBiLSTM+Attention、HAN和Bert,并提供了相关论文和不同框架下的实现源码链接。同时,还讨论了模型的优缺点、适用场景以及一些优化策略。
1080 1
|
JavaScript 前端开发 数据可视化
ECharts 雷达图案例001-自定义节点动画
使用ECharts创建自定义雷达图,通过JavaScript动态更新高亮和交互反馈,增强用户体验。关键步骤包括:开启动画效果,数据更新时保持图表状态,鼠标悬浮时动态高亮指标,优化动画性能。案例展示了ECharts在数据可视化中的灵活性和表现力。[查看完整案例](https://download.csdn.net/download/No_Name_Cao_Ni_Mei/89454380)。
752 0
 ECharts 雷达图案例001-自定义节点动画
|
JavaScript Java 关系型数据库
springboot+vue校园闲置物品交易网站(源码+文档)
校园闲置物品交易网站实现了以下功能: 管理员:首页、个人中心、用户管理、商品类型管理、商品信息管理、系统管理、订单管理等。 用户:首页、个人中心、商品信息管理、我的收藏管理、订单管理。 前台首页:首页、商品信息、商品资讯、个人中心、后台管理、购物车等相应操作;
|
机器学习/深度学习 数据采集 人工智能
【AAAI 2024】解锁深度表格学习(Deep Tabular Learning)的关键:算术特征交互
近日,阿里云人工智能平台PAI与浙江大学吴健、应豪超老师团队合作论文《Arithmetic Feature Interaction is Necessary for Deep Tabular Learning》正式在国际人工智能顶会AAAI-2024上发表。本项工作聚焦于深度表格学习中的一个核心问题:在处理结构化表格数据(tabular data)时,深度模型是否拥有有效的归纳偏差(inductive bias)。
|
算法 数据处理 调度
Python中的异步编程与多线程
传统的Python程序在处理I/O密集型任务时常常面临性能瓶颈,而异步编程和多线程是解决这一问题的两种常见方式。本文将介绍Python中异步编程和多线程的基本概念、使用方法以及适用场景,并结合实例进行详细讲解。
236 1