文本分类模型_【文本分类】几个可作为Baseline的模型
点击上方,选择星标或置顶,每天给你送干货!
阅读大概需要9分钟
跟随小博主,每天进步一丢丢
来自:AINLP
作者:老宋的茶书会
知乎专栏:NLP与深度学习
研究方向:自然语言处理
前言
最近,从TensorFlow 迁移至 Pytorch, 所以诞生了这个仓库:NLP-Pytorch, 里面实现了一些文本分类的模型与阅读理解的模型。
Github地址:https://github.com/songyingxin/TextClassification-Pytorch
我认为文本分类任务对初学者是最友好的,且企业中大多数都是都需要文本分类, 很多情况下你去了公司实习,做文本分类的可能性极大。本文对几个经典的文本分类模型进行总结,具体的实现可参见仓库, 考虑到 Bert 的诞生, 词向量可能会退出舞台,因此,只实现了这几大基本模型,后续的可能要在 Bert 上做文章了。
1. TextCNN[1]
表示一个第i 个词其 k 维的词向量表示, 对于一个长度为 n 的句子,有:, 我们通过对向量矩阵 X 进行卷积操作来提取特征, 其中, x_{i:i+j} 表示第 i 个词到第 i+j 个词,共 j+1 个词。
对于一个窗口大小为 h 的卷积核, 其 shape 为 , 其提取特征的过程为:1个卷积核对 X 一次卷积的过程需要对 分别进行卷积操作, 我们得到最终的特征表示:然后,文章对特征向量 c 采用最大池化操作来提取最重要特征:上述的过程描述的是一个卷积核对 X 提取特征的过程,而实际中,我们往往要采用多种窗口大小的卷积核,且每种窗口的卷积核有很多个,这里假设卷积核的窗口大小为 3, 4, 5, 卷积核的shape分别为 , 其对应的卷积核数量为 。
对于窗口大小为 3 的卷积核, 我们在一次卷积过后获得一个 的矩阵, 然后对该矩阵进行最大池化得到一个 的向量, 该向量就是窗口为3 的卷积核所提取的全部特征。
同样的道理,窗口为 4 的卷积核所提取的特征为一个 的向量, 窗口为 5 的卷积核所提取的特征为一个 的向量。
最后我们将这三个向量拼接起来形成一个 的向量, 然后将该向量送入输出层:
2. 对TextCNN 的分析 [3]
文章 [3] 对CNN 用于文本分类时的超参进行分析,这些超参包括:词向量的选择,Filter 的大小, 卷积核的数量, 激活函数的选择, Pooling 策略, 正则化方法。
Word Embedding
文章比较了三种情况:Word2vec, Glove, Word2vec + Glove, 而实际上,三者的性能相差无几, 具体的依旧要看任务数据集,并没有定论,因此在实际的开发中,分别采用不同的预训练词向量来帮助我们更好的选择。
Filter Size
不同的数据集有其适合的 Filter Size, 文章建议区域大小为 1-10 内进行线性搜索, 但如果数据集中的句子长度较大(100+), 那么可以考虑设置较大的 Filter Size。
不同size的 Filter 进行结合会对结果产生影响,当把与最优 Filter size 相近的Filter 结合时会提升效果,但如果与较远的Filter 结合会损害性能。因此,文章建议最初采用一个 Filter , 调节 size 来找到最优的 Filter size, 然后探索最优Filter size的周围的各种 size 的组合。
卷积核数量
对于不同的数据集而言,卷积核的设置也有所不同,最好不要超过600,超过600可能会导致过拟合, 推荐范围为100-600。同时,卷积核数量增多,训练时间会变长,因此需要对训练效率做一个权衡。
激活函数
尽量多尝试激活函数, 实验表明,Relu, tanh 表现较佳。
Pooling 策略
实验分析得出, 1-max pooling 始终优于其他池化策略,这可能是因为在分类任务中,上下文的位置并不重要,且句子中的 n-granms 信息可能要比整个句子更具预测性。
正则化方法
实验表明,在输出层加上L2正则化并没有改善性能,dropout是有用的,虽然作用不明显,这可能是因为参数量很少,难以过拟合的原因所致。文章建议不要轻易的去掉正则化项,可以将 dropout 设置为一个较小值 (0-0.5),推荐0.5 , 对于L2, 使用一个相对较大的约束。当我们增加卷积核数量时,可能会导致过拟合,此时就要考虑添加适当的正则项了。
3. TextRNN
以双向LSTM 或GRU来获取句子的信息表征, 以最后一时刻的 h 作为句子特征输入到 softmax 中进行预测, 很简单的模型,就不详细介绍了。
4. TextRCNN [4]
说实话,这篇论文写的真乱,一个很简单的思想,看起来比 Transformer 还复杂,真的是有点醉, 不推荐看原论文,写的真的很冗余。
文章的思想很简单:
首先,对于单词 w_i , 获得其词向量表示
然后, 采用双向 GRU 来获取每个词的上下文向量表示
为了更好的表示词的信息,文章将原始词向量 , 上下文表示 结合起来,形成词的新的向量表示,这里作者采用一个全连接网络来聚合这些信息:
采用最大池化来获取句子的最终表示:
最后,采用一个softmax 来做分类:
5. HAN [5]
问题定义
HAN 主要针对 document-level 的分类, 假定document 中有L个句子:, 对于句子 s_{i}, 其包含有 T_{i} 个单词: 。
Word Encoder
对于一个句子 s_{i} ,文章采用词向量矩阵将其做 Embedding, 然后采用双向 GRU 来获得该句子的上下文表示, 以第 i 个句子中的第 j 个单词为例:Word Attention
考虑到在每个句子中,各个词对句子信息的贡献不同,因此此处引入一个注意力机制来提取语义信息,更好的获得句子的表示。Sentence Encoder
一个 document 中有L个句子,我们需要对这L个句子的信息进行整合,但很明显,句子之间的信息是由关联的,因此文章采用双向GRU对句子信息进行综合来获得每个句子新的表示:Sentence Attention
考虑到在一个document中,各个句子的重要程度并不同,因此采用一个Attention 来对句子信息进行整合最终形成 document 的最终信息:Document Classification
最后
虽然文本分类是最简单的任务,但其在企业中应用最为广泛,十分适合初学者入门学习。
Reference
[1] TextCNN:Convolutional Neural Networks for Sentence Classification
[3] A Sensitivity Analysis of (and Practitioners' Guide to) Convolutional Neural Networks for Sentence Classification
[4] Recurrent Convolutional Neural Network for Text Classification
[5] Hierarchical Attention Networks for Document Classification
[n] Large Scale Multi-label Text Classification With Deep Learning
原文链接:https://zhuanlan.zhihu.com/p/64603089
方便交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。
方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。
记得备注呦
推荐阅读:
【ACL 2019】腾讯AI Lab解读三大前沿方向及20篇入选论文
【一分钟论文】IJCAI2019 | Self-attentive Biaffine Dependency Parsing
【一分钟论文】 NAACL2019-使用感知句法词表示的句法增强神经机器翻译
【一分钟论文】Semi-supervised Sequence Learning半监督序列学习
【一分钟论文】Deep Biaffine Attention for Neural Dependency Parsing
详解Transition-based Dependency parser基于转移的依存句法解析器
经验 | 初入NLP领域的一些小建议
学术 | 如何写一篇合格的NLP论文
干货 | 那些高产的学者都是怎样工作的?
一个简单有效的联合模型
近年来NLP在法律领域的相关研究工作
让更多的人知道你“在看”
文本分类模型_【文本分类】几个可作为Baseline的模型相关推荐
- 文本分类模型_文本分类模型之TextCNN
六年的大学生涯结束了,目前在搜索推荐岗位上继续进阶,近期正好在做类目预测多标签分类的项目,因此把相关的模型记录总结一下,便于后续查阅总结. 一.理论篇: 在我们的场景中,文本数据量比较大,因此直接采用 ...
- textcnn文本词向量_文本分类模型之TextCNN
六年的大学生涯结束了,目前在搜索推荐岗位上继续进阶,近期正好在做类目预测多标签分类的项目,因此把相关的模型记录总结一下,便于后续查阅总结. 一.理论篇: 在我们的场景中,文本数据量比较大,因此直接采用 ...
- python分类流程_文本分类指南:你真的要错过 Python 吗?
雷锋网按:本文为雷锋字幕组编译的技术博客,原标题 A Comprehensive Guide to Understand and Implement Text Classification in Py ...
- 文本聚类分析算法_文本自动分类——分类算法KNN(K最邻近)应用(一)
作者:刘丽帆 封面:云哲忆 刚刚开始接触Python的小伙伴都觉得编程很高深,提到编程可能首先想到的就是程序员,其实通俗一些来讲,Python等编程语言和我们常用的SPSS等软件区别就在于,SP ...
- 人口预测和阻尼-增长模型_使用分类模型预测利率-第2部分
人口预测和阻尼-增长模型 We are back! This post is a continuation of the series "Predicting Interest Rate w ...
- svm多分类代码_监督学习——分类算法I
本文是监督学习分类算法的第一部分,简单介绍对样本进行分类的算法,包括 判别分析(DA) 支持向量机(SVM) 随机梯度下降分类(SGD) K近邻分类(KNN) 朴素贝叶斯分类(NaiveBayes) ...
- Scikit-learn_分类算法_支持向量机分类
一.描述 支持向量机的基本原理是找到一个将所有数据样本分隔成两部分的超平面,使所有样本到这个超平面的累计距离最短. 超平面是指n维线性空间中维度为n-1的子空间.例如,在二维平面中,一维的直线可以将二 ...
- 时间序列分类算法_时间序列分类算法简介
时间序列分类算法 A common task for time series machine learning is classification. Given a set of time serie ...
- 世界之窗浏览器删除文本框信息_文本框——Excel里的便利贴
工作表里面的单元格应该是足够我们来记录数据和信息了.但是文本框这个功能在工作表中还是存在,可以理解为便利贴功能. 插入文本框 1.点击"插入"选项卡. 2.然后点击"文本 ...
- 生命周期模型_建立从思想到价值的生命周期模型
生命周期模型 数据科学家来自火星,软件工程师来自金星(第4部分)(DATA SCIENTISTS ARE FROM MARS AND SOFTWARE ENGINEERS ARE FROM VENUS ...
最新文章
- 某大厂女程序员哀叹:还不到三十岁,父母竟让自己和一个离异有娃的男人相亲!
- 【Structs2】struts2单例多例以及spring整合的问题
- ReactNative常用组件汇总
- 分布式文件系统对比与选型参考
- java ftp上传文件_jaVA使用FTP上传下载文件的问题
- Hibernate初学者教程
- 计蒜客---函数规律
- oracle em界面监控出来的奇怪图像_监控工程常见的5大难题,项目中都会遇到
- Python建立ip代理池(多线程)
- URAL 1664 Pipeline Transportation
- 华为y220t android版本升级,华为 Y220T(移动版)救砖教程 救砖包 刷回官方系统支持OTA升级...
- SQL SERver2005中row_number() 的用法
- 在电脑上怎样将长方形图片裁剪成圆形的图片?
- GIS功能区类型识别
- python批量将excel转成pdf_Python:将PDF转成Excel
- Android——百度语音唤醒
- 微信小程序使用第三方插件
- Python+正则表达式编写多线程百度贴吧网页爬虫
- 蓝桥杯官网 试题 PREV-109 历届真题 扫地机器人【第十届】【省赛】【研究生组】【C++】【Java】【Python】三种解法
- 【华为云技术分享】根因分析
热门文章
- 基于JAVA+Swing+MYSQL的工资管理系统
- 状态模式java 在线投票_Java 状态模式
- 剑指offer:二叉搜索树的第k个结点(中序遍历)
- MySQL错误:The user specified as a definer (XXX@XXX) does not exist (1449错误)最简解决方案...
- Collections带有的排序方法 传入的元素类型 需是子类或者这个类的实例
- Ubuntu 下通过 ppa 安装 RabbitVCS
- 关于sql多条件查询,但又不确定值的个数的方法。
- 项目展示-新浪微博客户端
- SQL导入Excel数据时,数字中混有字符将导致数据丢失的解决办法
- Android通过tcpdump抓包