NLP-分类模型:短文本分类概述【FastText、TextCNN、TextRNN、TextRCNN、DPCNN】-程序员宅基地

技术标签: 机器学习  # NLP/文本分类  自然语言处理  短文本分类  分类  

一、概述​

随着信息技术的发展,最稀缺的资源不再是信息本身,而是对信息的处理能力。且绝大多数信息表现为文本形式,如何在如此大量且复杂的文本信息中如何获取最有效的信息是信息处理的一大目标。文本分类可以帮助用户准确定位所需信息和分流信息。同时,互联网的快速发展催生了大量的书评影评、网络聊天、产品介绍等形式的短文本,其包含大量有价值的隐含信息,迫切需要自动化工具对短文本进行分类处理。

​ 基于人工智能技术的文本分类系统依据文本的语义可实现将大量文本自动分类。多种统计理论和机器学习方法被用于文本自动分类。但其存在最大的问题是特征空间的高维性和文档表示向量的稀疏性。中文词条的总数高达二十多万,如此高维特征空间对所有的算法都是偏大的。亟需一种有效的特征抽取方法,降低特征空间的维数,提高分类的效率和精度。

​ 文本分类方法主要分为两大类,分别是基于传统机器学习的方法和基于深度学习的方法。基于传统机器学习的文本分类方法主要是是对文本进行预处理、特征提取,然后将处理后的文本向量化,最后通过常见的机器学习分类算法来对训练数据集进行建模,传统的文本分类方法中,对文本的特征提取质量对文本分类的精度有很大的影响。基于深度学习的方法则是通过例如CNN等深度学习模型来对数据进行训练,无需人工的对数据进行特征抽取,对文本分类精度影响更多的是数据量以及训练的迭代次数。

​ 短文本相对于长文本,词汇个数少且描述信息弱,具有稀疏性和不规范性, 传统机器学习方法的文本表示是高纬度高稀疏的,特征表达能力很弱,而且神经网络很不擅长对此类数据的处理;此外需要人工进行特征工程,成本很高,不能很好的满足短文本分类的需求。而深度学习最初在之所以图像和语音取得巨大成功,一个很重要的原因是图像和语音原始数据是连续和稠密的,有局部相关性。应用深度学习解决大规模文本分类问题最重要的是解决文本表示,再利用CNN/RNN等网络结构自动获取特征表达能力,去掉繁杂的人工特征工程。

二、应用场景

短文本分类算法广泛应用于各个行业领域,如新闻分类、人机写作判断、垃圾邮件识别、用户情感分类、文案智能生成、商品智能推荐等。

​场景一:商品智能推荐,根据用户购买的商品名称作为预测样本进行文本分类,得到用户交易类别,结合其他数据构建用户画像,针对不同特征的用户画像预测用户下一步的购买行为,智能推荐商品及服务。

​场景二:文案智能生成,基于优质文案作为训练集,得到文本分类模型,当用户输入关键词时,智能推荐适配文案。

​场景三:给新闻自动分类或打标签,多个标签。

场景四:判断文章是人写还是机器写的。

​场景五:判断影评中的情感是正向、负向、中立,相类似应用场景很广泛。

三、解决方案

使用深度学习的词向量技术,把文本数据从高纬度高稀疏的神经网络难处理的方式,变成了类似图像、语音的连续稠密数据,将词语转化为稠密向量,解决了文本表示问题。词向量作为机器学习、深度学习模型的特征进行输入,对最终模型的效果作用比较大。

​ 同时,利用CNN/RNN等深度学习网络及其变体解决自动特征提取(即特征表达)的问题,对应的文本分类模型如下:

1、FastText

​ FastText是Facebook开源的词向量与文本分类工具,模型简单,训练速度快。FastText 的原理是将短文本中的所有词向量进行平均,然后直接接softmax层,同时加入一些n-gram 特征的 trick 来捕获局部序列信息。相对于其它文本分类模型,如SVM,Logistic Regression和Neural Network等模型,FastText在保持分类效果的同时,大大缩短了训练时间,同时支持多语言表达,但其模型是基于词袋针对英文的文本分类方法,组成英文句子的单词是有间隔的,而应用于中文文本,需分词去标点转化为模型需要的数据格式。

2、TextCNN

​ TextCNN相比于FastText,利用CNN (Convolutional Neural Network)来提取句子中类似 n-gram 的关键信息,且结构简单,效果好。

3、TextRNN

尽管TextCNN能够在很多任务里面能有不错的表现,但CNN最大的问题是固定 filter_size 的视野,一方面无法建模更长的序列信息,另一方面 filter_size 的超参调节很繁琐。CNN本质是做文本的特征表达工作,而自然语言处理中更常用的是递归神经网络(RNN, Recurrent Neural Network),能够更好的表达上下文信息。具体在文本分类任务中,Bi-directional RNN(实际使用的是双向LSTM)从某种意义上可以理解为可以捕获变长且双向的的 “n-gram” 信息。

4、TextRNN + Attention

CNN和RNN用在文本分类任务中尽管效果显著,但都有一个缺点,直观性和可解释性差。而注意力(Attention)机制是自然语言处理领域一个常用的建模长时间记忆机制,能够直观的给出每个词对结果的贡献,是Seq2Seq模型的标配。实际上文本分类从某种意义上也、可以理解为一种特殊的Seq2Seq,所以可以考虑将Attention机制引入。

​ Attention的核心点是在翻译每个目标词(或预测商品标题文本所属类别)所用的上下文是不同的,这样更合理。加入Attention之后能够直观的解释各个句子和词对分类类别的重要性。

5、TextRCNN(TextRNN + CNN)

​  用前向和后向RNN得到每个词的前向和后向上下文的表示,这样词的表示就变成词向量和前向后向上下文向量concat起来的形式,最后连接TextCNN相同卷积层,pooling层即可,唯一不同的是卷积层 filter_size = 1。

​ 总结:实际应用中,CNN模型在中文文本分类中应用效果已经很不错了。研究表明,TextRCNN对准确率提升大约1%,不是十分显著。最佳实践是先用TextCNN模型把整体任务效果调试到最好,再尝试改进模型。

四、模型的选择

理论和实践之间的Gap往往差异巨大,学术paper更关注的是模型架构设计的新颖性等,更重要的是新的思路;而实践最重要的是在落地场景的效果,关注的点和方法都不一样。这部分简单梳理实际做项目过程中的一点经验教训。

模型显然并不是最重要的:不能否认,好的模型设计对拿到好结果的至关重要,也更是学术关注热点。但实际使用中,模型的工作量占的时间其实相对比较少。虽然在第二部分介绍了5种CNN/RNN及其变体的模型,实际中文本分类任务单纯用CNN已经足以取得很不错的结果了,我们的实验测试RCNN对准确率提升大约1%,并不是十分的显著。最佳实践是先用TextCNN模型把整体任务效果调试到最好,再尝试改进模型。

理解你的数据:虽然应用深度学习有一个很大的优势是不再需要繁琐低效的人工特征工程,然而如果你只是把他当做一个黑盒,难免会经常怀疑人生。一定要理解你的数据,记住无论传统方法还是深度学习方法,数据 sense 始终非常重要。要重视 badcase 分析,明白你的数据是否适合,为什么对为什么错。

关注迭代质量 - 记录和分析你的每次实验:迭代速度是决定算法项目成败的关键,学过概率的同学都很容易认同。而算法项目重要的不只是迭代速度,一定要关注迭代质量。如果你没有搭建一个快速实验分析的套路,迭代速度再快也只会替你公司心疼宝贵的计算资源。建议记录每次实验,实验分析至少回答这三个问题:为什么要实验?结论是什么?下一步怎么实验?

超参调节:超参调节是各位调参工程师的日常了,推荐一篇文本分类实践的论文 A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification,里面贴了一些超参的对比实验,如果你刚开始启动文本分析任务,不妨按文章的结果设置超参,怎么最快的得到超参调节其实是一个非常重要的问题,可以读读 萧瑟的这篇文章 深度学习网络调参技巧 - 知乎专栏。

一定要用 dropout:有两种情况可以不用:数据量特别小,或者你用了更好的正则方法,比如bn。实际中我们尝试了不同参数的dropout,最好的还是0.5,所以如果你的计算资源很有限,默认0.5是一个很好的选择。

fine-tuning 是必选的:上文聊到了,如果只是使用word2vec训练的词向量作为特征表示,我赌你一定会损失很大的效果。

未必一定要 softmax loss: 这取决与你的数据,如果你的任务是多个类别间非互斥,可以试试着训练多个二分类器,也就是把问题定义为multi lable 而非 multi class,我们调整后准确率还是增加了>1%。

类目不均衡问题:基本是一个在很多场景都验证过的结论:如果你的loss被一部分类别dominate,对总体而言大多是负向的。建议可以尝试类似 booststrap 方法调整 loss 中样本权重方式解决。

避免训练震荡:默认一定要增加随机采样因素尽可能使得数据分布iid,默认shuffle机制能使得训练结果更稳定。如果训练模型仍然很震荡,可以考虑调整学习率或 mini_batch_size。

没有收敛前不要过早的下结论:玩到最后的才是玩的最好的,特别是一些新的角度的测试,不要轻易否定,至少要等到收敛吧。




参考资料:
短文本分类概述
文本分类解决方法综述
用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践
短文本分类和长文本分类的模型如何进行选择?
短文本分类和长文本分类的模型如何进行选择?
短文本情感分类探索
Bert等出来后,文本分类是否还要尝试fasttext,textcnn等模型?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013250861/article/details/123162234

智能推荐

超实用可执行程序-PDF文字复制后的回车符去除和谷歌百度英汉翻译-python GUI_文献翻译复制的时候都是回车-程序员宅基地

文章浏览阅读4.1k次,点赞4次,收藏3次。超实用python程序-PDF文字复制后的回车符去除和谷歌百度英汉翻译超实用python程序-PDF文字复制后的回车符去除和谷歌百度英汉翻译痛点界面与功能功能详细说明:过程记录代码和组件分析exe程序生成记录结语痛点PDF文档文字复制会包括回车符,使得文字粘贴和翻译都不方便,尤其是对于双栏的PDF。界面与功能以下为详细说明和..._文献翻译复制的时候都是回车

求正整数N以内的所有勾股数。 所谓勾股数,是指能够构成直角三角形三条边的三个正整数(a,b,c)。_编写程序,计算0到输入的整数n范围内的勾股数。假设3个正整数x、y和z是勾股数,-程序员宅基地

文章浏览阅读291次。#include"stdio.h"void main(){int n;int i,j,k;int count=0;while(scanf("%d",&n)){for(i=1;i<=n;++i)for(j=i+1;j<=n;++j)for(k=j+1;k<=n;++k)if(ii+jj==k*k){printf("[%d,%d,%d], ",i,j,k);count++;}printf(“total number: %d\n”,count);}}_编写程序,计算0到输入的整数n范围内的勾股数。假设3个正整数x、y和z是勾股数,

基于FPGA的BPSK、QPSK以及OQPSK实现_fpga实现bpsk调制-程序员宅基地

文章浏览阅读2.8k次,点赞10次,收藏56次。在现代通信领域中,大多数的信道因具有带通特性而不能直接传送基带信号,为了使数字信号能在带通信道中传输,必须用数字基带信号对载波进行调制,以使信号与信道的特性相匹配。二进制相移键控(BSPK)、正交相移键控(QPSK)、偏置正交相移键控(OQPSK)是重要的调制方式,被广泛地应用于现代通信的各个领域。_fpga实现bpsk调制

编写一个 函数把华氏温度转化为 摄氏温度,转换公式用递归的方法 编写 函数求Fibonacci级数。编写函数求两个数的最大公约数和最小公倍数_编写一个函数,将华氏温度转换为摄氏温度。公式为c=(f-32)×5/9。-程序员宅基地

文章浏览阅读3.1k次,点赞2次,收藏24次。编写一个 函数把华氏温度转化为 摄氏温度,转换公式:C=(F-32)*5/9//编写一个 函数把华氏温度转化为 摄氏温度,转换公式:C=(F-32)*5/9#include<iostream>#include<cmath>using namespace std;double Transform(double F) { return (F - 32) * 5 / 9;}int main() { double F; cout << "请输入华氏._编写一个函数,将华氏温度转换为摄氏温度。公式为c=(f-32)×5/9。

海康威视摄像头视频在web端播放解决方案ffmpeg + nginx + http-flv_海康威视 java sdk web 预览-程序员宅基地

文章浏览阅读7k次,点赞2次,收藏19次。一:下载海康JAVA-DEMO我开发环境是window10-64位 IDEA JDK1.8 的 和 mac IDEA JDK1.8 demo下载地址 https://www.hikvision.com/cn/download_more_570.html1:下载完成以后,必须认真看完这个txt,不然后面可能会出现“dll缺失”和“sdk文件不存在”这种异常2:sdk使用手册【必看】二:摄像设备ip,通道查看海康摄像头设备的录像文件一般都是存储在录像机,找出录像机的ip及账号密码在最新版IE11_海康威视 java sdk web 预览

Ubuntu执行mkfs.ubifs、ubinize文件失败解决_ubinize: error!: no sections found the ini-file "b-程序员宅基地

文章浏览阅读556次。Ubuntu执行mkfs.ubifs、ubinize文件失败解决_ubinize: error!: no sections found the ini-file "bin/ubinize.cfg

随便推点

华科电气专业转计算机专业,华中科技大学转专业-程序员宅基地

文章浏览阅读1k次。关于转专业,华科有两次机会,大一下是可以跨大类转,当然也可以在大类内部转;大二下是只能在学科大类内部转。华科有以下几个大类 信息大类、机械大类、土建环大类、电气大类、文科大类。跨大类转时信息大类与临床医学是不能转入的,但可以通过考光电中法班,通信中英班的方式转入,但是学费要高些,而且毕业是出国的(当然也可以选择不出)。很多同学对船舶与海洋工程不了解,其实这个专业就业非常不错,比信息大类内的不少专业..._华中科技大学转专业机会

spring cloud的RefreshScope注解进行热部署_spring refresh 热部署-程序员宅基地

文章浏览阅读2.5w次,点赞5次,收藏36次。需要热加载的bean需要加上@RefreshScope注解,当配置发生变更的时候可以在不重启应用的前提下完成bean中相关属性的刷新。经由@RefreshScope修饰的bean将会被RefreshScope代理,其关于bean生命周期的相关方法也在此定义。@ManagedOperation(description = "Dispose of the current instanc..._spring refresh 热部署

php抓取网指定内容,php获取网页内容方法总结-程序员宅基地

文章浏览阅读388次。抓取到的内容在通过正则表达式做一下过滤就得到了你想要的内容,至于如何用正则表达式过滤,在这里就不做介绍了,有兴趣的,以下就是几种常用的用php抓取网页中的内容的方法。1.file_get_contentsPHP代码复制代码代码如下:$url="http://www.jb51.net";$contents=file_get_contents($url);//如果出现中文乱码使用下面代码//$getc..._php正则截取file_get_contents里的域名

Android实现与PHP后端的交互(数据传输,文件传输)(超详细/附源码)_用php开发android系统usb通信-程序员宅基地

文章浏览阅读1.4k次。本篇文章将详细介绍Android与PHP的交互,实际上就是利用http进行通信的过程,通过Get方法和Post方法,实现数据传输,文件传输,博主在真机上进行了实测,并附上了源码的链接。_用php开发android系统usb通信

plsql如何导入csv文件,PLSQL导入csv文件到数据库-程序员宅基地

文章浏览阅读2w次,点赞10次,收藏40次。搜索热词好久不用oracle了,突然忘记怎么导入数据了。今天再记录一下吧。1、建表。目的是:被导入到数据的存储位置。因为数据库中曾经有过相同表结构的表,所以直接使用sql建表。sql">-- t_sdh_cc表create table t_sdh_cc as select * from t_sdh_cc_hn_cxh where 1=0;@H_404_7@2、建好表后,开始导入数据。2...._plsql导入csv

Micro Drive Data Recovery_which may indicate disk corruption.-程序员宅基地

文章浏览阅读607次。Our Microdrive data recovery service recovers lost, deleted or damaged photographic images, videos or data from any type of Microdrive. Our recovery specialists are able to un-delete Microdrive file_which may indicate disk corruption.

推荐文章

热门文章

相关标签