当前位置:   article > 正文

【深度学习】RNN入门——LSTM情感分析代码

lstm情感分析代码

一、目的

NLP,使用LSTM对评论进行情感分析

二、流程

0、标注语料收集

下面是我的语料和代码。读者可能会好奇我为什么会把这些“私人珍藏”共享呢?其实很简单,因为我不是干这行的哈,数据挖掘对我来说只是一个爱好,一个数学与Python结合的爱好,因此在这方面,我不用担心别人比我领先哈。

语料下载:sentiment.zip

采集到的评论数据:sum.zip

来源:https://spaces.ac.cn/archives/3414

1、word2vec

作用:将词转化为计算机可以处理的向量,直接ont-hot编码会过于稀疏,使用google开源的word2vec工具进行处理

简介:https://blog.csdn.net/linghugoolge/article/details/88356692

转化方法:首先转为ont-hot,之后压缩到低维,使用浅层神经网络

2、代码

  1. import pandas as pd #导入Pandas
  2. import numpy as np #导入Numpy
  3. import jieba #导入结巴分词
  4. from keras.preprocessing import sequence
  5. from keras.optimizers import SGD, RMSprop, Adagrad
  6. from keras.utils import np_utils
  7. from keras.models import Sequential
  8. from keras.layers.core import Dense, Dropout, Activation
  9. from keras.layers.embeddings import Embedding
  10. from keras.layers.recurrent import LSTM, GRU
  11. from sklearn import metrics
  12. from __future__ import absolute_import #导入3.x的特征函数
  13. from __future__ import print_function
  14. neg=pd.read_excel('neg.xls',header=None,index=None)
  15. pos=pd.read_excel('pos.xls',header=None,index=None) #读取训练语料完毕
  16. pos['mark']=1
  17. neg['mark']=0 #给训练语料贴上标签
  18. pn=pd.concat([pos,neg],ignore_index=True) #合并语料
  19. neglen=len(neg)
  20. poslen=len(pos) #计算语料数目
  21. cw = lambda x: list(jieba.cut(x)) #定义分词函数
  22. pn['words'] = pn[0].apply(cw)
  23. comment = pd.read_excel('sum.xls') #读入评论内容
  24. #comment = pd.read_csv('a.csv', encoding='utf-8')
  25. comment = comment[comment['rateContent'].notnull()] #仅读取非空评论
  26. comment['words'] = comment['rateContent'].apply(cw) #评论分词
  27. d2v_train = pd.concat([pn['words'], comment['words']], ignore_index = True)
  28. w = [] #将所有词语整合在一起
  29. for i in d2v_train:
  30. w.extend(i)
  31. dict = pd.DataFrame(pd.Series(w).value_counts()) #统计词的出现次数
  32. del w,d2v_train
  33. dict['id']=list(range(1,len(dict)+1))
  34. get_sent = lambda x: list(dict['id'][x])
  35. pn['sent'] = pn['words'].apply(get_sent) #速度太慢
  36. maxlen = 50
  37. print("Pad sequences (samples x time)")
  38. pn['sent'] = list(sequence.pad_sequences(pn['sent'], maxlen=maxlen))
  39. x = np.array(list(pn['sent']))[::2] #训练集
  40. y = np.array(list(pn['mark']))[::2]
  41. xt = np.array(list(pn['sent']))[1::2] #测试集
  42. yt = np.array(list(pn['mark']))[1::2]
  43. xa = np.array(list(pn['sent'])) #全集
  44. ya = np.array(list(pn['mark']))
  45. print('Build model...')
  46. model = Sequential()
  47. model.add(Embedding(len(dict)+1, 1))
  48. model.add(LSTM(1)) # try using a GRU instead, for fun
  49. model.add(Dropout(0.5))
  50. model.add(Dense(1))
  51. model.add(Activation('sigmoid'))
  52. model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
  53. model.fit(x, y, batch_size=1, nb_epoch=1) #训练时间为若干个小时
  54. pre = model.predict_classes(xt,batch_size=30)
  55. score = model.evaluate(xt,yt,batch_size=30)
  56. print(metrics.classification_report(yt,pre))
  57. print(model.metrics_names)
  58. print( score)

参考:https://spaces.ac.cn/archives/3414

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/890573
推荐阅读
相关标签
  

闽ICP备14008679号