基于IMDb数据集的情感分析(Doc2Vec模型与神经网络实现)

使用Doc2Vec模型参加Kaggle的NLP比赛,最终score达到0.97,前2%。

本文所有的代码都可以在我的github上找到

在上一篇博文中,我们使用了TF-IDF,准确率达到了0.95,已经进入前100,但还不够,我们试试使用更加高大上的Doc2Vec结合神经网络模型,其准确率能否再次提升。

数据介绍

  • 本数据来源于IMDB电影评论集,是Kaggle上一个入门的项目
  • 在Kaggle上详细使用了word2vec进行向量化,本文主要介绍Doc2Vec模型的使用,并使用神经网络模型提高准确率。
  • 数据包括
    • **测试数据(testData):**25000条
    • 未标注数据(unlabelData):5000条
    • 训练数据(trainData):25000条(正负情感各一半)
    • 每个电影的评论都不超过30条(测试集电影与训练集电影不相同)
    • 我们使用所有数据来作为doc2vect模型的语料
  • 本文主要使用python中的pandasnltkgensimTensorFlow库进行数据清理和分析。
  • 注意,在kaggle上,针对此题的评分标准是按照ROC曲线(AUC) ,并不是硬分类,参考Wikipedia

数据预处理

此部分的JupyterNotebook参考这里

对于拿到的电影评论数据,我们需要进行数据清理以后才能使用doc2vec进行向量化。

本文采用pandas库进行数据预处理,好处是可以使用apply函数对其进行并发操作,提高效率。

NLP的数据预处理一般包括以下几个部分:

  1. 如果是网页内容,首先需要去掉Html tag
  2. 将文档分割成句子。
  3. 将句子分割成词语。
  4. 纠正拼写错误(可选)、替换缩写词(可选)。
  5. Lemmatizerstemming
    • 词型还原或词干提取,两者的差别可参考这里
  6. 去除停顿词,去除标点、转化为小写字母。
  7. 去掉长度过短的词语。

本项目没有纠正拼写错误(口语化词语太多)、没有去处数字(实测会提高精度)最后将训练集分开(posneg)。

Doc2vec

此部分的JupyterNotebook参考这里

Doc2Vec模型比较复杂,相对于word2vec模型,它可以直接得到每个文档的向量,省略了将词向量转换为段向量的过程。

由于其直接是段向量,因此考虑了词之间的顺序,具有较好的语义信息。

而传统的word2vec模型,使用平均词向量或聚类的方式得到的段向量没有考虑词的顺序。

输入数据

  • test.txt:25000 条评论用于测试
  • train
  • 0
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值