LSTM文本分类实战

作者:王千发

编辑:龚 赛

什么是文本分类

1

文本分类在文本处理中是很重要的一个模块,它的应用也非常广泛,比如:垃圾过滤,新闻分类,等等。传统的文本分类方法的流程基本是:

  1. 预处理:首先进行分词,然后是除去停用词;
  2. 将文本表示成向量,常用的就是文本表示向量空间模型;
  3. 进行特征选择,这里的特征就是词语,去掉一些对于分类帮助不大的特征。常用的特征选择的方法是词频过滤,互信息,信息增益,卡方检验等;
  4. 接下来就是构造分类器,在文本分类中常用的分类器一般是SVM,朴素贝叶斯等;
  5. 训练分类器,后面只要来一个文本,进行文本表示和特征选择后,就可以得到文本的类别。

深度学习进行文本分类

2

回归的目的是预测数值型的目标值。最直接的办法是依据输入写出一个目标值的计算公式。假如你想预测小姐姐男友汽车的功率,可能会这么计算:前面介绍了传统的文本分类做法,传统做法主要问题的文本表示是高纬度高稀疏的,特征表达能力很弱,而且神经网络很不擅长对此类数据的处理;此外需要人工进行特征工程,成本很高。应用深度学习解决大规模文本分类问题最重要的是解决文本表示,再利用CNN/RNN等网络结构自动获取特征表达能力,去掉繁杂的人工特征工程,端到端的解决问题。利用深度学习做文本分类,首先还是要进行分词,这是做中文语料必不可少的一步,这里的分词使用的jieba分词。 深度学习处理文本分类问题中,词语的表示不用one-hot编码,而是使用词向量(word embedding),词向量是词语的一种分布式表示,Hinton最早再1986年就提出了。分布式表示可以这么理解,举个例子,假设有三个词语‘水’,‘冰’,‘冰水’,如果使用one-hot编码,那就编码成:水[1,0,0],冰[0,1,0],冰水[0,0,1]。这就代表了向量空间的第一个维度表示的是‘水’,第二个维度表示的是‘冰’,第三个维度表示的是‘冰水’,每个维度表示的含义不同,而且每个词语的向量之间的夹角都是90度,即使在语义上相似的词语,也无法体现出来。假如我们使用分布式表示,用二维向量表示这个词语,我们指定第一维的含义是‘水’,第二维的含义是‘冰’,那么第一个词语‘水’表示为[1,0],第二个词语’冰‘表示为[0,1],那么‘冰水’既有水也有冰,可以表示为[0.5,0.5],这样的分布式表示,既降低了维度,也体现了语义信息。现在最常用的词向量的分布式表示就是word2vec,是由Tomas Mikolov在2013年提出的,是一种无监督,训练出的词向量具备稠密,包含语义信息的特点。 使用深度学习进行文本分类,不需要进行特征选择这一步,因为深度学习具有自动学习特征的能力。

使用LSTM进行文本分类

3

前面已经说了词语的表示了,那么在LSTM中,一句话应该如何建模表示呢?“作者 在 少年 时 即 喜 阅读 ,能 看出 他 精读 了 无数 经典,因而 他 有 一个 庞大 的 内心 世界。”这是段分好词的话,将每个词语的词向量按顺序送进LSTM里面,最后LSTM的输出就是这段话的表示,而且能够包含句子的时序信息。

现在我们来搭建一个基于LSTM的文本分类的模型,其结构图如下:

实验用的语料是商品评论的预料,分为两类,一类是好评,一类是差评。代码用PyTorch写的,下面附上部分代码:

这里我没有没有用word2vec预训练词向量,用了PyTorch里面的nn.Embedding()函数,将one-hot编码的词向量,转换为300维的词向量,并且在训练过程中不断更新词向量。最终的输出通过一个sigmoid函数是因为希望输出在0~1之间,因为数据的标签就是差评为0,好评为1. 下面是训练部分的代码:

前面是一些参数选择,这里的词向量选择的300维,损失函数是交叉熵损失函数。模型训练最终在3轮之后就收敛了,总共训练数据大概2W条,其中三分之二训练,三分之二测试,准确率在91%左右,这对于短文本分类是一个不错的结果了。还有一个值得讨论的问题,在测试时,我设定当模型输出值小于0.5时,是差评;大于0.5时,是好评。但是这个阈值是可调的,通过调整这个阈值,也能提高模型预测的准确率。模型完整代码以及数据在github上。包括cpu版和gpu版,gpu版大概训练时间是20多分钟,cpu版没有测试。

参考资料:

  • [1] http://kexue.fm/archives/3414/
  • [2] https://zhuanlan.zhihu.com/p/25928551
  • [3] https://www.qcloud.com/community/article/185672
  • [4] https://zhuanlan.zhihu.com/p/30546071

数据来源:

  • [1] http://kexue.fm/archives/3414/

原文发布于微信公众号 - 机器学习算法全栈工程师(Jeemy110)

原文发表时间:2018-01-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

入门 | CNN也能用于NLP任务,一文简述文本分类任务的7个模型

本文是我之前写过的一篇基于推特数据进行情感分析的文章(https://ahmedbesbes.com/sentiment-analysis-on-twitter...

1725
来自专栏大学生计算机视觉学习DeepLearning

转-------CNN图像相似度匹配 2-channel network

5735
来自专栏CreateAMind

原始图片中的ROI如何映射到到feature map?

最后找到一篇靠谱的文章 卷积神经网络物体检测之感受野大小计算 - machineLearning - 博客园,它给出了一个不错的启发,还附带了代码,最关键的是它...

1264
来自专栏AI研习社

视频 | 硅谷深度学习网红传授超参数优化宝典

AI 研习社按:今天为大家带来硅谷深度学习网红 Siraj 在人工智能在线大会 AI WITH THE BEST(AIWTB)上的演讲,雷锋字幕组独家译制。本次...

3405
来自专栏新智元

Bengio NIPS 最新论文:用线性分类探测器理解中间层,更好地诊断神经网络模型

【新智元导读】本文介绍 Bengio 和他的学生 Guillaume Alain 的最新论文,这篇论文也被即将于 12 月举行的著名会议 NIPS 接收。本文中...

3736
来自专栏新智元

【ICML Oral】DeepMind提出深度学习新方向:神经过程模型

【新智元导读】函数逼近是机器学习中许多问题的核心,DeepMind的最新研究结合了神经网络和随机过程的优点,提出神经过程模型,在多任务上实现了很好的性能和高计算...

410
来自专栏计算机视觉战队

深度判别和共享特征学习的图像分类

秋雨思童年,落花念爱霖!一场秋雨的洗礼,让我们进入了真正能感觉得到的秋季。秋季是丰收的季节,不知朋友您收获如何?但是我相信您一定硕果累累,满载着各种成果、业绩和...

2807
来自专栏深度学习思考者

正则化方法:L1和L2 regularization、数据集扩增、dropout

正则化方法:防止过拟合,提高泛化能力   在机器学习各种模型训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合)。其直观...

2427
来自专栏AI星球

吾爱NLP(5)—词向量技术-从word2vec到ELMo

"词和句子的嵌入已成为所有基于深度学习的自然语言处理(NLP)系统的重要组成部分,它们在固定长度的稠密向量中编码单词和句子,以大幅度提高神经网络处理文本数据的能...

1767
来自专栏企鹅号快讯

基础 Word2vec的原理介绍

一,词向量的概念 将 word映射到一个新的空间中,并以多维的连续实数向量进行表示叫做“Word Represention” 或 “Word Embedding...

20210

扫码关注云+社区