专栏首页大数据智能实战基于gensim Doc2Vec的评论文本情感分类测试实验

基于gensim Doc2Vec的评论文本情感分类测试实验

在gensim的主题模型中,直接集成了doc2vec模块,其中一个重要的例子就是情感分类的。对应的项目主页为:https://linanqiu.github.io/2015/10/07/word2vec-sentiment/

1、Doc2Vec的简单介绍

Word2vec已经非常成熟并且得到了众多的运用,推动了深度学习在自然语言处理领域取得了巨大进展。在word2vec的基础上,来自google的Quoc Le和Tomas Mikolov在2014年提出了Doc2Vec模型,该模型能够实现对段落和文档的嵌入式表示,原始论文地址如下:https://cs.stanford.edu/~quocle/paragraph_vector.pdf。

其架构如下所示:

在上图中,可见其与word2vec的区别在于加了一个paragraph id的输入。即每个段落/句子都被映射到向量空间中,可以用矩阵D的一列来表示。每个单词同样被映射到向量空间,可以用矩阵W的一列来表示。然后将段落向量和词向量级联或者求平均得到特征,预测句子中的下一个单词。这个段落向量/句向量也可以认为是一个单词,它的作用相当于是上下文的记忆单元或者是这个段落的主题,这种训练方法被称为Distributed Memory Model of Paragraph Vectors(PV-DM)

其代码也非常简洁,主要由三行组成:

1、调用doc2vec

2、建立词汇表

3、开始训练。

sources = {'test-neg.txt':'TEST_NEG', 'test-pos.txt':'TEST_POS', 'train-neg.txt':'TRAIN_NEG', 'train-pos.txt':'TRAIN_POS', 'train-unsup.txt':'TRAIN_UNS'}

log.info('TaggedDocument')
sentences = TaggedLineSentence(sources)

log.info('D2V')
model = Doc2Vec(min_count=1, window=10, size=100, sample=1e-4, negative=5, workers=7)
model.build_vocab(sentences.to_array())
model.train(sentences.sentences_perm(), epochs=model.iter, total_examples=model.corpus_count)

# log.info('Epoch')
# for epoch in range(10):
# 	log.info('EPOCH: {}'.format(epoch))
# 	model.train(sentences.sentences_perm())

注:代码在新版的gensim中,无需用for epoch的方式来训练,如果用了这种方法会报错如下:

You must specify either total_examples or total_words, for proper job parameters updation

直接利用如下语句则可解决这种问题。

model.train(sentences.sentences_perm(), epochs=20, total_examples=model.corpus_count)

2、实验结果

当设置epochs为5的时候,可以见到其准确率约为82.6%

而设置epochs为20的时候,可以见到其准确率约为85.6%

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 算法面试能过几关:咱也不知道,咱也不敢问

    微信公众号“程序员小灰”的作者,具有多年软件行业从业经验,先后在京东金融、摩拜科技从事研发工作,对算法有一定的兴趣和经验。

    用户1682855
  • Python:使用多线程并发执行任务,并接收有序的返回值

    在使用多线程时,简单的IO操作有时满足不了我们的需求,我们需要有序的接收返回值,例如:调用第三方API

    Python疯子
  • C++/Python 近期问题总结201804

    出现如上提示的确是因为缩进出现了问题,但是在某些编辑器中(尤其是在线编辑器),看似对齐,实际上却没有对齐。因此,下一次遇到这类问题,应当把代码复制到另一个编辑器...

    gojam
  • RxJS 学习系列 12. 合并操作符 concatAll, mergeAll, switchAll

    这节讲处理高阶 Observable 的操作符 所谓的 Higher Order Observable 就是指一个 Observable 发送出的元素还是一个...

    mafeifan
  • 大规模异步新闻爬虫【5】:网页正文的提取

    前面我们实现的新闻爬虫,运行起来后很快就可以抓取大量新闻网页,存到数据库里面的都是网页的html代码,并不是我们想要的最终结果。最终结果应该是结构化的数据,包含...

    一墨编程学习
  • 【因子后花园】一个显著的新因子:现金循环周期(CCC)

    我们将对量化因子进行一个全方位的介绍与挖掘。并且结合众多机构人士一起,把这个专题做好、做精!

    量化投资与机器学习微信公众号
  • javascript基础修炼(12)——手把手教你造一个简易的require.js

    许多前端工程师沉浸在使用脚手架工具的快感中,认为require.js这种前端模块化的库已经过气了,的确如果只从使用场景来看,在以webpack为首的自动化打包趋...

    大史不说话
  • flashtext:大规模文本数据清洗利器

    做 文本分析 【文本数据挖掘快速入门】时候经常遇到同意多形词,如 BigApple/NewYork/NN 都可能代指纽约市,当我们统计纽约市出现的次数的时候我们...

    AiTechYun
  • RxJS 学习系列 11. 合并操作符 concat, merge, concatAll

    这节讲非常重要同时非常容易混淆的合并操作符,从名字上次都是合并,但是区别还是蛮大的,我会尽量结合Marble Diagram(弹珠图)解释清楚。

    mafeifan
  • 构建一个能够打败人类的围棋神经网络

    上一节,我们从围棋服务器中下载大量棋谱,并将其转换成网络可以解析的数据格式,在神经网络的开发中完成了最繁琐的一步,也就是数据准备。接下来我们将创建一个神经网络,...

    望月从良

扫码关注云+社区

领取腾讯云代金券