当前位置:   article > 正文

NLP-分类模型:短文本分类概述【FastText、TextCNN、TextRNN、TextRCNN、DPCNN】

短文本分类

一、概述​

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

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

​ 文本分类方法主要分为两大类,分别是基于传统机器学习的方法和基于深度学习的方法。基于传统机器学习的文本分类方法主要是是对文本进行预处理、特征提取,然后将处理后的文本向量化,最后通过常见的机器学习分类算法来对训练数据集进行建模,传统的文本分类方法中,对文本的特征提取质量对文本分类的精度有很大的影响。基于深度学习的方法则是通过例如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等模型?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/348855
推荐阅读
相关标签
  

闽ICP备14008679号