1、不同类别文本量统计,类别不平衡差异

2、文本长度统计

3、文本处理,比如文本语料中简体与繁体共存,这会加大模型的学习难度。因此,他们对数据进行繁体转简体的处理。

同时,过滤掉了对分类没有任何作用的停用词,从而降低了噪声。

4、上文提到训练数据中,存在严重的样本不均衡问题,如果不对该问题做针对性的处理,则会严重制约模型效果指标的提升。

通过对数据进行了大量的分析后,他们提出了一个简单有效的缓解样本不均衡问题的方法,基于标签传播的数据增强方法。

【如果标题A与标题B一致,而标题A与标题C一致,那么可以得出结论,标题B与标题C一致。

同理,如果标题A与标题B一致,而标题A与标题D不一致,那么可以得出结论,标题B与标题D也不一致。

此外,Travel团队还通过将新闻对中的两条文本相互交换位置,来扩充训练数据集。】

基础模型

BERT是Google最新推出的基于双向Transformer的大规模预训练语言模型,在11项NLP任务中夺得SOTA结果,引爆了整个NLP界。

BERT取得成功的一个关键因素是Transformer的强大特征提取能力。

Transformer可以利用Self-Attention机制实现快速并行训练,改进了RNN最被人所诟病的“训练慢”的缺点,可以高效地对海量数据进行快速建模。

同时,BERT拥有多层注意力结构(12层或24层),并且在每个层中都包含有多个“头”(12头或16头)。

由于模型的权重不在层与层之间共享,一个BERT模型相当于拥有12×12=224或24×16=384种不同的注意力机制,不同层能够提取不同层次的文本或语义特征,这可以让BERT具有超强的文本表征能力。

在比赛中,Travel团队在增强后的训练数据上对Google预训练BERT模型进行了微调(Finetune),使用了如图5所示的方式。

模型融合,是指对已有的多个基模型按照一定的策略进行集成以提升模型效果的一种技术,常见的技术包括Voting、Averaging、Blending、Stacking等等。

这些模型融合技术在前人的许多工作中得到了应用并且取得了不错的效果,然而任何一种技术只有在适用场景下才能发挥出最好的效果,

例如Voting、Averaging技术的融合策略较为简单,一般来说效果提升不是非常大,但优点是计算逻辑简单、计算复杂度低、算法效率高;

而Stacking技术融合策略较复杂,一般来说效果提升比较明显,但缺点是算法计算复杂度高,对计算资源的要求较苛刻。

本任务使用的基模型为BERT,该模型虽然拥有非常强大的表征建模能力,但同时BERT的网络结构复杂,包含的参数众多,计算复杂度很高,即使使用了专用的GPU计算资源,其训练速度也是比较慢的,因此这就要求在对BERT模型融合时不能直接使用Stacking这种高计算复杂度的技术,因此我们选择了Blending这种计算复杂度相对较低、融合效果相对较好的融合技术对基模型BERT做融合。

同时,Travel团队借鉴了神经网络中网络分层的设计思想来设计模型融合框架,他们想既然神经网络可以通过增加网络深度来提升模型的效果,那么在模型融合中是否也可以通过增加模型融合的层数来提升模型融合的效果呢?基于这一设想,他们提出了一种多层次深度模型融合框架,该框架通过增加模型的层数进而提升了融合的深度,最终取得了更好的融合效果。

具体来说,他们的框架包括三个层次,共进行了两次模型融合。第一层采用Blending策略进行模型训练和预测,在具体实践中,他们选定了25个不同的BERT模型作为基模型;第二层采用5折的Stacking策略对25个基模型进行第一次融合,这里他们选用了支持向量机(SVM)、逻辑回归(LR)、K近邻(KNN)、朴素贝叶斯(NB),这些传统的机器学习模型,既保留了训练速度快的优点,也保证了模型间的差异性,为后续融合提供了效率和效果的保证;第三层采用了一个线性的LR模型,进行第二次模型融合并且生成了最终的结果。模型融合的架构如图6所示:

图6 模型融合架构

整体方案模型训练分为三个阶段,如图7所示:

  • 第一个阶段,将训练数据划分为两部分,分别为Train Data和Val Data。Train Data用于训练BERT模型,用训练好的BERT模型分别预测Val Data和Test Data。将不同BERT模型预测的Val Data和Test Data的结果分别进行合并,可以得到一份新的训练数据New Train Data和一份新的测试数据New Test Data。
  • 第二阶段,将上一阶段的New Train Data作为训练数据,New Test Data作为测试数据。本阶段将New Train Data均匀的划分为5份,使用“留一法”训练5个SVM模型,用这5个模型分别去预测剩下的一份训练数据和测试数据,将5份预测的训练数据合并,可以得到一份新的训练数据NewTrainingData2,将5份预测的测试数据采用均值法合并,得到一份新的测试数据NewTestData2。同样的方法再分别训练LR、KNN、NB等模型。
  • 第三阶段,将上一阶段的NewTrainingData2作为训练数据,NewTestData2作为测试数据,重新训练一个LR模型,预测NewTestData2的结果作为最终的预测结果。为了防止过拟合,本阶段采用5折交叉验证的训练方式。

图7 假新闻分类方案的整体架构和训练流程

评价指标

为了缓解数据集中存在的类别分布不均衡问题,本任务使用带权重的准确率作为衡量模型效果的评价指标,

在官方测试集上,Travel团队的最优单模型的准确率达到0.86750,25个BERT模型简单平均融合后准确率达0.87700(+0.95PP),25个BERT模型结果以加权平均的形式融合后准确率达0.87702(+0.952PP),他们提出的多层次模型融合技术准确率达0.88156(+1.406PP)。实践证明,美团NLP中心的经验融合模型在假新闻分类任务上取得了较大的效果提升。

 

本文主要对解决方案中使用的关键技术进行了介绍,比如数据增强、数据预处理、多层模型融合策略等,这些方法在实践中证明可以有效的提升预测的准确率。由于参赛时间所限,还有很多思路没有来及尝试,例如美团使用的BERT预训练模型是基于维基百科数据训练而得到的,而维基百科跟新闻在语言层面也存在较大的差异,所以可以将现有的BERT在新闻数据上进行持续地训练,从而使其能够对新闻数据具有更好的表征能。

https://tech.meituan.com/2019/02/21/wsdm-cup-meituan-nlp-practice.html

NLP 文本预处理的更多相关文章

  1. 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作

    目录 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作 前言 NLP相关的文本预处理 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作 前言 之所以心血来潮想写这篇博客,是因为最近在关注N ...

  2. 【NLP】Tika 文本预处理:抽取各种格式文件内容

    Tika常见格式文件抽取内容并做预处理 作者 白宁超 2016年3月30日18:57:08 摘要:本文主要针对自然语言处理(NLP)过程中,重要基础部分抽取文本内容的预处理.首先我们要意识到预处理的重 ...

  3. NLP自然语言处理入门-- 文本预处理Pre-processing

    引言 自然语言处理NLP(nature language processing),顾名思义,就是使用计算机对语言文字进行处理的相关技术以及应用.在对文本做数据分析时,我们一大半的时间都会花在文本预处理 ...

  4. L4文本预处理

    文本预处理 timemachine.txt数据下载地址 链接:https://pan.baidu.com/s/1RO2OLyTRQZ90HJUW7V7BCQ 提取码:bjox NLTK数据集下载 链接 ...

  5. NLP文本相似度

    NLP文本相似度 相似度 相似度度量:计算个体间相似程度 相似度值越小,距离越大,相似度值越大,距离越小 最常用--余弦相似度:​ 一个向量空间中两个向量夹角的余弦值作为衡量两个个体之间差异的大小 余 ...

  6. fastText、TextCNN、TextRNN……这里有一套NLP文本分类深度学习方法库供你选择

    https://mp.weixin.qq.com/s/_xILvfEMx3URcB-5C8vfTw 这个库的目的是探索用深度学习进行NLP文本分类的方法. 它具有文本分类的各种基准模型,还支持多标签分 ...

  7. NLP文本分类方法汇总

    模型: FastText TextCNN TextRNN RCNN 分层注意网络(Hierarchical Attention Network) 具有注意的seq2seq模型(seq2seq with ...

  8. Keras文本预处理

    学习了Keras文档里的文本预处理部分,参考网上代码写了个例子 import keras.preprocessing.text as T from keras.preprocessing.text i ...

  9. [ DLPytorch ] 文本预处理&语言模型&循环神经网络基础

    文本预处理 实现步骤(处理语言模型数据集距离) 文本预处理的实现步骤 读入文本:读入zip / txt 等数据集 with zipfile.ZipFile('./jaychou_lyrics.txt. ...

随机推荐

  1. Vue注意事项

    在使用Vue中的函数或自己定义的函数或指令的时候,Vue说明如下 在一些自己定义或系统定义的驼峰命名规则的时候,你需要到元素区域引用的使用中间的大写要改成小写在谭家 一条横杠如: 你在var=new ...

  2. Linux(一):Linux基础

    1. Linux入门 1.1. Linux概述 Linux是一套免费使用和自由传播的类Unix操作系统.Unix操作系统是上世纪70年代在贝尔实验室诞生的一个强大的多用户.多任务操作系统. Linux ...

  3. SQL SERVER-Job中Operators搬迁脚本

    选中operators按F7,然后选中对象,生成脚本 USE [msdb] GO /****** Object: Operator [DB_ITDESK] Script Date: 5/30/2019 ...

  4. Oracle存储过程、函数、包加密wrap

    wrap加密可以将PL/SQL的代码实现部分隐藏,提高代码的安全性,如存储过程.函数.包等都隐藏. wrap加密的方法有两种,下面以函数为例分别介绍一下: 方法一: 编写好函数后保存到 d:\test ...

  5. Tensorflow&CNN:验证集预测与模型评价

    版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/90480140 - 写在前面 本科毕业设计终于告一段落了.特 ...

  6. 数组中的filter,every,some,find,findIndex

    这些都是es5中数组新增的方法,一旦用到还是觉得挺实用的 var arr = [0,12,4,6,8]; var res = arr.filter(function(item,index,Arr){ ...

  7. python函数式编程-偏向函数

    Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的偏函数和数学意义上的偏函数不一样. 在介绍函数参数的时候,我们讲到,通过 ...

  8. php守护进程创建和简要分析

    守护进程可 由系统启动脚本 /etc/rc.local crontab任务, 用户shell 方式运行 具体概念可参考c的 进程守护化基本步骤 1.创建子进程,终止父进程 (pcntl_fork,ex ...

  9. Apache查看连接数和限制当前的连接数

    在wamp环境下查看apche连接数和限制当前的连接数 httpd_mpm.conf文件在你apache安装上当的\\conf\\extra中,还在就是在要apache httpd.conf中把#In ...

  10. python----装饰器(几种常见方式的使用与理解)

    更详细的装饰器,真心实力推荐,里面介绍的很清楚,介绍可见链接:https://blog.csdn.net/buster_zr/article/details/81104551 1.装饰器的理论: (1 ...