当前位置:   article > 正文

使用RNN进行情感分析_rnn情感分析

rnn情感分析

RNN网络使用了单词的序列信息,网络结构如下:
在这里插入图片描述
首先,将单词传入embedding层,之所以使用嵌入层,是因为单词数量太多,使用嵌入式方式词向量来表示单词更有效率。我们在这里使用word2vec方式来实现,我们在这里只需要加入嵌入层即可,网络会自主学习嵌入矩阵。
通过embedding层,新的单词表示传入LSTM cells。这将是一个递归链接网络,所以单词的序列信息会在网络之间传递。最后,LSTM cells连接一个sigmoid output layer。使用sigmoid可以预测该文本是积极的还是消极的情感。输出层只有一个单元节点(使用sigmoid激活)。只需要关注最后一个sigmoid的输出,损失只计算最后一步的输出和标签的差异。以下是python的代码:
首先导入相关的库和打开需要的数据文件

import numpy as np
import tensorflow as tf
with open('./data/reviews.txt', 'r') as f:
    reviews = f.read()
with open('./data/labels.txt', 'r') as f:
    labels = f.read()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

数据清洗,使用embedding层,需要将单词编码成整数。这里需要去除标点符号,同时去除不同文本之间的分隔符号\n,先把\n当成分隔符号,分割所有评论。然后在将所有评论再次连接称为一个大的文本。

from string import punctuation
#移除所有标点符号
all_text = ''.join([c for c in reviews if c not in punctuation])
# 以'\n'为分隔符,拆分文本
reviews = all_text.split('\n')

all_text = ' '.join(reviews)
# 文本拆分为单独的单词列表
words = all_text.split()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

embedding lookup要求输入的网格数据是整数。最简单的方法就是创建数据字典:{单词:整数}。然后将评论全部一一对应转换成整数,传入网络。

from collections import Counter
counts = Counter(words)
#按计数进行排序
vocab = sorted(counts, key=counts.get, reverse=True)
# 生成字典:{单词:整数}
vocab_to_int = {
   word: ii for ii, word in enumerate(vocab, 1)}

# 将文本列表 转换为 整数列表
reviews_ints = []
for each in reviews:
    reviews_ints.append([vocab_to_int[word] for word in each.split()])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

将标签positive和negative转换成数值

labels = labels.split('\n')
labels = np.array([1 if each == 'positive' else 0 for each in labels])
from collections import Counter
review_lens = Counter([len(x) for x in reviews_ints])
  • 1
  • 2
  • 3
  • 4

这里有一个问题:有一条评论长度为0,而且最大的评论长度为2514,对我们演示来说太长了。所以我们将其截断成200的长度:1、评论长度小于200的,我们对其左边填充0,2、对于大于200的,我们只截取其前200个单词。

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

    闽ICP备14008679号