使用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中的
pandas、nltk、gensim、TensorFlow库进行数据清理和分析。 - 注意,在kaggle上,针对此题的评分标准是按照
ROC曲线(AUC) ,并不是硬分类,参考Wikipedia。
数据预处理
此部分的JupyterNotebook可参考这里。
对于拿到的电影评论数据,我们需要进行数据清理以后才能使用doc2vec进行向量化。
本文采用pandas库进行数据预处理,好处是可以使用apply函数对其进行并发操作,提高效率。
NLP的数据预处理一般包括以下几个部分:
- 如果是网页内容,首先需要去掉
Html tag - 将文档分割成句子。
- 将句子分割成词语。
- 纠正拼写错误(可选)、替换缩写词(可选)。
Lemmatizer、stemming
- 词型还原或词干提取,两者的差别可参考这里
- 去除停顿词,去除标点、转化为小写字母。
- 去掉长度过短的词语。
本项目没有纠正拼写错误(口语化词语太多)、没有去处数字(实测会提高精度)最后将训练集分开(pos和neg)。
Doc2vec
此部分的JupyterNotebook可参考这里。
Doc2Vec模型比较复杂,相对于word2vec模型,它可以直接得到每个文档的向量,省略了将词向量转换为段向量的过程。
由于其直接是段向量,因此考虑了词之间的顺序,具有较好的语义信息。
而传统的word2vec模型,使用平均词向量或聚类的方式得到的段向量没有考虑词的顺序。
输入数据
test.txt:25000 条评论用于测试train-neg.txt: 12500 条negative 评论用于训练train-pos.txt: 12500 条

本文介绍了一种使用Doc2Vec模型和LSTM神经网络进行情感分析的方法,基于IMDb数据集,训练出的模型在Kaggle上取得了0.97的高分。数据预处理采用了Gensim和nltk库,Doc2Vec模型用于得到段落向量,LSTM用于进一步提升准确率。实验结果显示,LSTM模型在测试集上实现了良好的准确率。
最低0.47元/天 解锁文章
1401





