介绍:(需要有部分机器学习和深度学习,还有NLP的理论知识)
- 使用深度学习框架TensorFlow中的keras接口实现BiLstm神经网络,用训练集训练出一个模型,可以判断酒店评论文本的正负向情绪。
- 数据集使用了8886条酒店评论,其中正向评论有4443条,负向评论有4443条。正负向评论都打好了标签,正向标1,负向标0。
- 该模型的embedding用了word2vec预训练模型,是中科大的一个开源的词向量模型。
- 模型的准确率达到97%。
- 博主是在juypter notebook上执行的。
源码以及操作:(配置好环境和设置好路径可以直接运行)
#导包:
# 首先加载必用的库
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import re
import jieba # 结巴分词
# gensim用来加载预训练word vector
from gensim.models import KeyedVectors
import warnings
warnings.filterwarnings("ignore")
# 用来解压
import bz2
import csv
from tensorflow.python.keras import metrics
import tensorflow as tf
#导入预训练模型,需先下载预训练模型放入指定目录,导入时需要等待几分钟到十几分钟不等。
with open("embeddings/sgns.zhihu.bigram", 'wb') as new_file, open("embeddings/sgns.zhihu.bigram.bz2", 'rb') as file:
decompressor = bz2.BZ2Decompressor()
for data in iter(lambda : file.read(100 * 1024), b''):
new_file.write(decompressor.decompress(data))
cn_model = KeyedVectors.load_word2vec_format('embeddings/sgns.zhihu.bigram',
binary=False, unicode_errors="ignore")
#读入数据集,分好训练样本和训练标签
train_texts_orig = []
# 文本所对应的labels, 也就是标记
train_target = []
with open("negative_samples.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
for line in lines:
dic = eval(line)
train_texts_orig.append(dic["text"])
train_target.append(dic["label"])
filename = 'ChnSentiCorp_htl_all.txt'
with open(filename, "r", encoding="utf-8") as f:
lines = f.readlines()
for line in lines:
line = re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()]+", "",line)
p=(int)(line[0])
train_target.append(p)
line= line.replace(line[0],'')
train_texts_orig.