当前位置:   article > 正文

自然语言处理实战项目——好差评_自然语言处理外卖评论

自然语言处理外卖评论

深度学习项目实战-网络评价的文本智能分析系统

应用:VOC源声分类,网上商城好差评分类。
需求背景:网购东西的好坏往往会进行一个评价,比如在淘宝上面买了一个电视,有正面、负面评价。人可以简单地看一下就能知道它是好评还是差评,如何让计算机来实现同样的能力呢?传统的一些统计方法、或者说基于穷尽暴力法就是一一对应 显然是不好用的,因为网络的评价各种各样,长短不一、用词不一样,情绪不一样、甚至还有一些反讽、反面黑的等等,传统的语言分析是无法满足需求的,因此这一张引入最前沿的深度学习技术:LSTM+MLP(经典的RNN结构加上全连接神经网络)来实现对变化多样的网络评价来实现自动、智能的分析,来评估这个评价到底是好评还是差评。对于个别商户用的不多,但对于整个系统,比如淘宝系统对成千上万个商户进行分析和评价这一点就非常有价值。这也是一些大的互联网运营商的需求所在,能对网络的评价进行智能的分析,不再需要大量的客服或者说检查员进行检查、评价、和审核。

项目实战代码

相比于计算视觉和大数据处理呢,自然语言处理在数据的处理上会更加麻烦一些。因为人对话、不管是中文、英文和计算机接受的0、1是不同的,这里要有相应的转换或者人机交互这样的相应的代码和实现。

#标签及词汇表
labels, vocabulary = list(data["label"].unique()),list(data["evaluation"].unique())  #就是将数据中相应的label和评价独立出来,看看都有哪些具体的字符

#构造字符级别的特征
string=""
for word in vocabulary:
    string+=word    
vocabulary=set(string)
print(vocabulary)

# 制作字典列表,用在人机交互
word_dictionary={word:i+1 for i, word in enumerate(vocabulary)}
#制作训练输入和训练标签  #虽然循环神经网络一大好处是不限制句子的长短,但是在实际训练中我们还是希望句子的长度一样;有的句子长,可能200个词,有的句子短,2个词完事了,这里就需要对句子进行填充。
#对于训练输入要进行序列填充,按input_shape填充,长度不足的按0补充
x=[[word_dictionary[word] for word in sent] for sent in data["evaluation"]]
x=pad_sequences(maxlen=180, truncating="pre", sequences=x,padding="post",value=0)
print(x.shape)  #这里句子的长度是180,根据任务统计来的。如果不到180,就用0来填充;如果超过180,比如200个,那么就把它截短成180:truncating="pre"相当于截取前面的部分

#对于训练目标进行ONE-HOT-CODING  #虽然只有好评差评两点,但是也要进行to_categorical;labelsize是2
y=[[label_dictionary[sent]]for sent in data["label"]]
y=[np_utils.to_categorical(label,num_classes=label_size) for label in y]
y=np.array([list(_[0]) for _ in y])  #对数据格式进行处理,方便对标签进行接收
print(y.shape)

#搭建模型
model=Sequential()
model.add(Embedding(input_dim=vocab_size+1,output_dim=20,input_length=180,mask_zero=True)) #注意:和大数据分析机器视觉不一样的是多了一个embedding层,每个数值做一个映射不好,这样的话有两千多个,如果搭建一个2000多个one-hot-coding的话,一是训练会很麻烦,二是词汇之间的关联性是不好的,不利于模型最后得到一个好的表现。所以这里用embedding,词嵌,把它压缩成output_dim这一个词,就是一个矩阵;比如a对应[0.01 0.02...];即把2000多个维度长的one-hot-coding压缩成一个20个维度长的向量。	用这20个维度长的向量来代替每一个词的表现。input_length=180就是句子长度是180。相当于我们对一个模型的输入是一个三维的矩阵。m*n*k,m是样本的数量,n对应output_dim是多少,k就是句子的长度。注意这里input_length对于embedding的意思是词汇表的大小要加1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

(未完待续)

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

闽ICP备14008679号