背景简介
本人是深度学习入门的菜菜菜鸟一枚…
利用LSTM + word2vec词向量进行文本情感分类/情感分析实验,吸收了网上的资源和代码并尝试转化为自己的东西~
实验环境
- win7 64位系统
- Anaconda 4.3.0 , Python 2.7 version
- Pycharm开发环境
- python包:keras,gensim,numpy等
实验数据
本文的实验数据是来自网上的中文标注语料,涉及书籍、酒店、计算机、牛奶、手机、热水器六个方面的购物评论数据,具体介绍参见该文:购物评论情感分析。
数据处理
上面提到的数据在网上见到的次数比较多,原始格式是两个excel文件,如图:
对,就是这两个…估计来到本文的小伙伴也见过。一些代码就是直接从这两个excel里读取数据、分词、处理…不过我表示自己习惯从txt文本里获取数据,因此本人将数据合并、去重(原数据里有不少重复的评论)、分词(用的是哈工大LTP分词)之后存为一份txt文本,保留的数据情况如下:
正面评价个数:8680个
负面评价个数:8000个
文本如图所示:
然后人工生成一份【语料类别】文本,用1表示正面评价,用0表示负面评价,与评论数据一一对应。
生成词语的索引字典、词向量字典
利用上述文本语料生成词语的索引字典和词向量字典。
注意:当Word2vec词频阈值设置为5时,词频小于5的词语将不会生成索引,也不会生成词向量数据。
工具:gensim里的Word2vec,Dictionary
代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
功能:利用大语料生成词语的索引字典、词向量,然后保存为pkl文件
时间:2017年3月8日 13:19:40
"""
import pickle
import logging
import tkFileDialog
import numpy as np
np.random.seed(1337) # For Reproducibility
from Functions.TextSta import TextSta
from gensim.models.word2vec import Word2Vec
from gensim.corpora.dictionary import Dictionary
# 创建词语字典,并返回word2vec模型中词语的索引,词向量
def create_dictionaries(p_model):
gensim_dict = Dictionary()
gensim_dict.doc2bow(p_model.vocab.keys(), allow_update=True)
w2indx = {v: k + 1 for k, v in gensim_dict.items()} # 词语的索引,从1开始编号
w2vec = {word: model[word] for word in w2indx.keys()} # 词语的词向量
return w2indx, w2vec
# 主程序
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
print u"请选择大语料的分词文本