赞
踩
更多模型介绍基于深度学习的文本分类
模型大致分类如下:
论文:《Bag of Tricks for Efficient Text Classification》
Keras实现源码
Tensorflow实现源码
(1)简介
Fasttext是Facebook推出的一个便捷的工具,包含文本分类和词向量训练两个功能
Fasttext的分类实现很简单:把输入转化为词向量,取平均,再经过线性分类器得到类别。输入的词向量可以是预先训练好的,也可以随机初始化,跟着分类任务一起训练。
(2)优点
(3)适用场景
对于文本长且对速度要求高的场景,Fasttext是baseline首选。同时用它在无监督语料上训练词向量,进行文本表示也不错。不过想继续提升效果还需要更复杂的模型。
论文《Convolutional Neural Networks for Sentence Classification》
Python 实现工具包
Tensorflow实现文本分类
TextCNN是Yoon Kim在2014年提出的模型,开创了用CNN编码n-gram特征的先河
模型结构如图,图像中的卷积都是二维的,而TextCNN则使用「一维卷积」,即filter_size * embedding_dim,有一个维度和embedding相等。这样就能抽取filter_size个gram的信息。以1个样本为例,整体的前向逻辑是:
在TextCNN的实践中,有很多地方可以优化(参考这篇论文《A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification》):
TextCNN是很适合中短文本场景的强baseline,但不太适合长文本,因为卷积核尺寸通常不会设很大,无法捕获长距离特征。同时max-pooling也存在局限,会丢掉一些有用特征。另外再仔细想的话,TextCNN和传统的n-gram词袋模型本质是一样的,它的好效果很大部分来自于词向量的引入,因为解决了词袋模型的稀疏性问题
论文《Deep Pyramid Convolutional Neural Networks for Text Categorization》
2017年,腾讯提出了把TextCNN做到更深的DPCNN模型:
上图中的ShallowCNN指TextCNN。DPCNN的核心改进如下:
论文《Recurrent convolutional neural networks for text classification》
Pytorch实现源码
Keras实现源码
Tensorflow实现源码
除了DPCNN那样增加感受野的方式,RNN也可以缓解长距离依赖的问题
论文《Attention-Based Bidirectional Long Short-Term Memory Networks for Relation Classification》
Pytorch实现源码
Tensorflow实现源码
Keras实现源码
从前面介绍的几种方法,可以自然地得到文本分类的框架,就是先基于上下文对token编码,然后pooling出句子表示再分类。在最终池化时,max-pooling通常表现更好,因为文本分类经常是主题上的分类,从句子中一两个主要的词就可以得到结论,其他大多是噪声,对分类没有意义。而到更细粒度的分析时,max-pooling可能又把有用的特征去掉了,这时便可以用attention进行句子表示的融合:
论文《Hierarchical Attention Networks for Document Classification》
TensorFlow实现源码
Keras实现源码
上文都是句子级别的分类,虽然用到长文本、篇章级也是可以的,但速度精度都会下降,于是有研究者提出了层次注意力分类框架,即Hierarchical Attention。先对每个句子用 BiGRU+Att 编码得到句向量,再对句向量用 BiGRU+Att 得到doc级别的表示进行分类:
BERT分类的优化可以尝试:
• 多试试不同的预训练模型,比如RoBERT、WWM、ALBERT
• 除了 [CLS] 外还可以用 avg、max 池化做句表示,甚至可以把不同层组合起来
• 在领域数据上增量预训练
• 集成蒸馏,训多个大模型集成起来后蒸馏到一个上
• 先用多任务训,再迁移到自己的任务
pytorch实现源码:https://github.com/649453932/Chinese-Text-Classification-Pytorch
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。