本教程为原创,转载请注明教学视频地址,
视频教程链接:https://www.bilibili.com/video/av30543613
书面教程和代码链接:https://github.com/aespresso/chinese_sentiment 如果想在本地运行代码,请下载书面教程中的词向量库,并解压"语料.zip"覆盖根目录
用Tensorflow进行中文自然语言处理--情感分析
f(′真好喝′)=1
f(′太难喝了′)=0
简介
大家好,我是Espresso,这是我制作的第一个教程,是一个简单的中文自然语言处理的分类实践。
制作此教程的目的是什么呢?虽然现在自然语言处理的学习资料很多,英文的资料更多,但是网上资源很乱,尤其是中文的系统的学习资料稀少,而且知识点非常分散,缺少比较系统的实践学习资料,就算有一些代码但因为缺少注释导致要花费很长时间才能理解,我个人在学习过程中,在网络搜索花费了一整天时间,才把处理中文的步骤和需要的软件梳理出来。
所以我觉得自己有义务制作一个入门教程把零散的资料结合成一个实践案例方便各位同学学习,在这个教程中我注重的是实践部分,理论部分我推荐学习deeplearning.ai的课程,在下面的代码部分,涉及到哪方面知识的,我推荐一些学习资料并附上链接,如有侵权请e-mail:a66777@188.com。
另外我对自然语言处理并没有任何深入研究,欢迎各位大牛吐槽,希望能指出不足和改善方法。
需要的库
numpy
jieba
gensim
tensorflow
matplotlib
In [2]:
# 首先加载必用的库
%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")
c:\users\jinan\appdata\local\programs\python\python36\lib\site-packages\gensim\utils.py:1209: UserWarning: detected Windows; aliasing chunkize to chunkize_serial
warnings.warn("detected Windows; aliasing chunkize to chunkize_serial")
预训练词向量
本教程使用了北京师范大学中文信息处理研究所与中国人民大学 DBIIR 实验室的研究者开源的"chinese-word-vectors" github链接为:
https://github.com/Embedding/Chinese-Word-Vectors
如果你不知道word2vec是什么,我推荐以下一篇文章:
https://zhuanlan.zhihu.com/p/26306795
这里我们使用了"chinese-word-vectors"知乎Word + Ngram的词向量,可以从上面github链接下载,我们先加载预训练模型并进行一些简单测试:
In [3]:
# 使用gensim加载预训练中文分词embedding
cn_model = KeyedVectors.load_word2vec_format('chinese_word_vectors/sgns.zhihu.bigram',
binary=False)
词向量模型
在这个词向量模型里,每一个词是一个索引,对应的是一个长度为300的向量,我们今天需要构建的LSTM神经网络模型并不能直接处理汉字文本,需要先进行分次并把词汇转换为词向量,步骤请参考下图,步骤的讲解会跟着代码一步一步来,如果你不知道RNN,GRU,LSTM是什么,我推荐deeplearning.ai的课程,网易公开课有免费中文字幕版,但我还是推荐有习题和练习代码部分的的coursera原版:
In [29]:
# 由此可见每一个词都对应一个长度为300的向量
embedding_dim = cn_model['山东大学'].shape[0]
print('词向量的长度为{}'.format(embedding_dim))
cn_model['山东大学']
词向量的长度为300
Out[29]:
array([-2.603470e-01, 3.677500e-01, -2.379650e-01, 5.301700e-02,
-3.628220e-01, -3.212010e-01, -1.903330e-01, 1.587220e-01,
-7.156200e-02, -4.625400e-02, -1.137860e-01, 3.515600e-01,
-6.408200e-02, -2.184840e-01, 3.286950e-01, -7.110330e-01,
1.620320e-01, 1.627490e-01, 5.528180e-01, 1.016860e-01,
1.060080e-01, 7.820700e-01, -7.537310e-01, -2.108400e-02,
-4.758250e-01, -1.130420e-01, -2.053000e-01, 6.624390e-01,
2.435850e-01, 9.171890e-01, -2.090610e-01, -5.290000e-02,
-7.969340e-01, 2.394940e-01, -9.028100e-02, 1.537360e-01,
-4.003980e-01, -2.456100e-02, -1.717860e-01, 2.037790e-01,
-4.344710e-01, -3.850430e-01, -9.366000e-02, 3.775310e-01,
2.659690e-01, 8.879800e-02, 2.493440e-01, 4.914900e-02,
5.996000e-03, 3.586430e-01, -1.044960e-01, -5.838460e-01,
3.093280e-01, -2.828090e-01, -8.563400e-02, -5.745400e-02,
-2.075230e-01, 2.845980e-01, 1.414760e-01, 1.678570e-01,
1.957560e-01, 7.782140e-01, -2.359000e-01, -6.833100e-02,
2.560170e-01, -6.906900e-02, -1.219620e-01, 2.683020e-01,
1.678810e-01, 2.068910e-01, 1.987520e-01, 6.720900e-02,
-3.975290e-01, -7.123140e-01, 5.613200e-02, 2.586000e-03,
5.616910e-01, 1.157000e-03, -4.341190e-01, 1.977480e-01,
2.519540e-01, 8.835000e-03, -3.554600e-01, -1.573500e-02,
-2.526010e-01, 9.355900e-02, -3.962500e-02, -1.628350e-01,
2.980950e-01, 1.647900e-01, -5.454270e-01, 3.888790e-01,
1.446840e-01, -7.239600e-02, -7.597800e-02, -7.803000e-03,
2.020520e-01, -4.424750e-01, 3.911580e-01, 2.115100e-01,
6.516760e-01, 5.668030e-01, 5.065500e-02, -1.259650e-01,
-3.720640e-01, 2.330470e-01, 6.659900e-02, 8.300600e-02,
2.540460e-01, -5.279760e-01, -3.843280e-01, 3.366460e-01,
2.336500e-01, 3.564750e-01, -4.884160e-01, -1.183910e-01,
1.365910e-01, 2.293420e-01, -6.151930e-01, 5.212050e-01,
3.412000e-01, 5.757940e-01, 2.354480e-01, -3.641530e-01,
7.373400e-02, 1.007380e-01, -3.211410e-01, -3.040480e-01,
-3.738440e-01, -2.515150e-01, 2.633890e-01, 3.995490e-01,
4.461880e-01, 1.641110e-01, 1.449590e-01, -4.191540e-01,
2.297840e-01, 6.710600e-02, 3.316430e-01, -6.026500e-02,
-5.130610e-01, 1.472570e-01, 2.414060e-01, 2.011000e-03,
-3.823410e-01, -1.356010e-01, 3.112300e-01, 9.177830e-01,
-4.511630e-01, 1.272190e-01, -9.431600e-02, -8.216000e-03,
-3.835440e-01, 2.589400e-02, 6.374980e-01, 4.931630e-01,