注1:参考学习 科学空间论坛 苏剑林 的博文
注2:记录实验复现细节,并根据版本更新对代码作出修正。
注3:python3.5;keras2.0.9
【QLBD】LSTM情感分析实验复现(一)one-hot encoding
【QLBD】LSTM情感分析实验复现(二)分词&one-hot
【QLBD】LSTM情感分析实验复现(三)one embedding
【QLBD】LSTM情感分析实验复现(四)word embdding
本文将以词作为最小语义单元,生产词向量。文本处理的第一步是分词,相比于字,分词的到的既包括特定的词,也包括单字成词的字,这样避免了通过字向量对两个字关系衡量不准确的问题,同时词相比于字表述的语义更加准确,通过词向量可以更好的挖掘出词与词之间的关系。
本文测试word embdding的表示方法:以词为单位,分词,将每个句子截断为100词(不够则补空字符串),然后将句子以词向量矩阵的形式输入到LSTM模型中进行学习分类。
一、程序模块调用
import numpy as np
import pandas as pd
import jieba #结巴分词
from keras.models import Sequential
from keras.layers import Dense, Activation, Dropout, Embedding
from keras.layers import LSTM
二、语料
pos = pd.read_excel('E:/Coding/yuliao/pos.xls',header=None,index=None)#10677篇
pos['label'] = 1
neg = pd.read_excel('E:/Coding/yuliao/neg.xls',header=None,index=None)#10428篇
neg['label'] = 0
all_ = pos.append(neg, ignore_index=True)
all_['words'] = all_[0].apply(lambda s: list(jieba.cut(s))) #分词
三、部分数值设置
maxlen = 100 #截断字数
min_count = 5 #出现次数少于该值的字扔掉。这是最简单的降维方法
四、语料处理一
content = [] #词表
for i in all_['words']:
content.extend(i)
abc = pd.Series(content).value_counts() #统计词频
abc = abc[abc >= min_count] #去掉低频词,简单降维
abc[:] = list(range(1, len(abc)+1)) #用0-14323间的整数对每个字按顺序重新赋值,一个整数代表一个字
abc[''] = 0 #添加空字符串用来补全
word_set = set(abc.index) #词典
五、语料处理二
def doc2num(s, maxlen): #构建将文本转化为数字向量的函数,maxlen=100
s = [i for