继续创造,加快生长!这是我参加「日新计划 10 月更文挑战」的第3天,点击检查活动详情

根据深度学习的文本情感分类

本部分采用了根据深度学习的文本情感分类,搭建LSTM(Long-Short Term Memory,长短期记忆人工神经网络)网络模型,运用weibo_senti_100k数据集作为练习集进行练习。模型准确度到达98.37%,测试集准确率到达98.23%。然后用模型猜测“废物分类”微博谈论的情感,将猜测成果大于0.7的谈论设定为活跃情感,小于0.4的谈论设定为消极情感,0.4 – 0.7之间的为中立情感。根据此,终究得出不同阶段网民对废物分类舆情事情的情感情绪。

1、预练习词向量

运用了北京师范大学中文信息处理研讨所与中国人民大学 DBIIR 实验室的研讨者开源的”chinese-word-vectors” github链接为:
github.com/Embedding/C…

这儿咱们运用了”chinese-word-vectors”微博Word + Ngram的词向量

with open("E:/桌面/chinese_sentiment-master/embeddings/sgns.weibo.bigram", 'wb') as
new_file,   
open("E:/桌面/chinese_sentiment-master/embeddings/sgns.weibo.bigram.bz2", 'rb') as 
file:
    decompressor = bz2.BZ2Decompressor()
    for data in iter(lambda : file.read(100 * 1024), b''):
        new_file.write(decompressor.decompress(data))
```
# 运用gensim加载预练习中文分词embedding
cn_model = KeyedVectors.load_word2vec_format(
'E:/桌面/chinese_sentiment-master/embeddings/sgns.weibo.bigram',
                                             binary=False, unicode_errors="ignore")
```

词向量模型
在这个词向量模型里,每一个词是一个索引,对应的是一个长度为300的向量,咱们今天需求构建的LSTM神经网络模型并不能直接处理汉字文本,需求先进行分次并把词汇转换为词向量,步骤请参考下图。

文本情感分类(二)---以微博评论为例

2.导入数据集

#读取练习集
weibo = pd.read_csv('E:/桌面/weibo_senti_100k.csv')
label = weibo['label']
mark = np.array(label)
comment = np.array(weibo['review'])

运用weibo_senti_100k数据集

3.数据预处理

文本情感分类(二)---以微博评论为例
对数据中谈论部分进行去除标点符号、分词,然后将每一条谈论分词成果转换为词向量,组成句向量。

num_words = 50000
# 初始化embedding_matrix,之后在keras上进行运用
embedding_matrix = np.zeros((num_words, embedding_dim))
# embedding_matrix为一个 [num_words,embedding_dim] 的矩阵
# 维度为 50000 * 300
for i in range(num_words):
    embedding_matrix[i,:] = cn_model[cn_model.index2word[i]]
embedding_matrix = embedding_matrix.astype('float32')

文本情感分类(二)---以微博评论为例
接着进行索引长度标准化,由于每段评语的长度是不一样的,咱们如果单纯取最长的一个评语,并把其他评填充成同样的长度,这样非常浪费核算资源,所以咱们取一个折衷的长度。这儿咱们取tokens平均值并加上两个tokens的标准差作为最终的索引长度,取tokens平均值并加上两个tokens的标准差。

文本情感分类(二)---以微博评论为例

假定tokens长度的分布为正态分布,则max_tokens这个值能够包括95%左右的样本.

4.运用LSTM模型进行练习

# 用LSTM对样本进行分类
model = Sequential()
# 模型第一层为embedding
model.add(Embedding(num_words,
                    embedding_dim,
                    weights=[embedding_matrix],
                    input_length=max_tokens,
                    trainable=False))
model.add(Bidirectional(LSTM(units=64, return_sequences=True)))
model.add(LSTM(units=16, return_sequences=False))
model.add(Dense(1, activation='sigmoid'))
# 咱们运用adam以0.001的learning rate进行优化
optimizer = Adam(lr=1e-3)
model.compile(loss='binary_crossentropy',
              optimizer=optimizer,
              metrics=['accuracy'])
model.summary()

运用80%的样本练习,剩余20%测试。网络模型结构如下图。

文本情感分类(二)---以微博评论为例

文本情感分类(二)---以微博评论为例

5.模型评估

运用测试集进行猜测,准确率能够到达98.22%

文本情感分类(二)---以微博评论为例

文本情感分类(二)---以微博评论为例

6.运用模型猜测微博废物分类谈论文本

将猜测成果大于0.7的谈论设定为活跃情感,小于0.4的谈论设定为消极情感,0.4 – 0.7之间的为中立情感。

文本情感分类(二)---以微博评论为例
导入一个阶段的关于废物分类微博谈论,运用模型猜测情感,并计算各个情感微博谈论数量,方差

文本情感分类(二)---以微博评论为例

7.成果可视化

文本情感分类(二)---以微博评论为例

文本情感分类(二)---以微博评论为例