词向量作为文本的基本结构——词的模型,以其优越的性能,受到自然语言处理领域研究人员的青睐。良好的词向量可以达到语义相近的词在词向量空间里聚集在一起,这对后续的文本分类,文本聚类等等操作提供了便利,本文将详细介绍如何使用word2vec构建中文词向量。

一、中文语料库

下载下来的文件名为: news_sohusite_xml.full.tar.gz

二、数据预处理

2.1 解压并查看原始数据

cd 到原始文件目录下,执行解压命令:

tar -zvxf news_sohusite_xml.full.tar.gz

得到文件 news_sohusite_xml.dat, 用vim打开该文件,

vim news_sohusite_xml.dat

得到如下结果:

2.2 取出内容

取出   中的内容,执行如下命令:

cat news_tensite_xml.dat | iconv -f gbk -t utf-8 -c | grep "" > corpus.txt

得到文件名为corpus.txt的文件,可以通过vim 打开

vim corpus.txt

得到如下效果:

2.3 分词

注意,送给word2vec的文件是需要分词的,分词可以采用jieba分词实现,安装jieba 分词

pip install jieba

对原始文本内容进行分词,python 程序如下:

1 ##!/usr/bin/env python

2 ## coding=utf-8

3 import jieba

4

5 filePath='corpus.txt'

6 fileSegWordDonePath ='corpusSegDone.txt'

7 # read the file by line

8 fileTrainRead = []

9 #fileTestRead = []

10 with open(filePath) as fileTrainRaw:

11 for line in fileTrainRaw:

12 fileTrainRead.append(line)

13

14

15 # define this function to print a list with Chinese

16 def PrintListChinese(list):

17 for i in range(len(list)):

18 print list[i],

19 # segment word with jieba

20 fileTrainSeg=[]

21 for i in range(len(fileTrainRead)):

22 fileTrainSeg.append([' '.join(list(jieba.cut(fileTrainRead[i][9:-11],cut_all=False)))])

23 if i % 100 == 0 :

24 print i

25

26 # to test the segment result

27 #PrintListChinese(fileTrainSeg[10])

28

29 # save the result

30 with open(fileSegWordDonePath,'wb') as fW:

31 for i in range(len(fileTrainSeg)):

32 fW.write(fileTrainSeg[i][0].encode('utf-8'))

33 fW.write('\n')

可以得到文件名为 corpusSegDone.txt 的文件,需要注意的是,对于读入文件的每一行,使用结巴分词的时候并不是从0到结尾的全部都进行分词,而是对[9:-11]分词 (如行22中所示: fileTrainRead[i][9:-11] ),这样可以去掉每行(一篇新闻稿)起始的 和结尾的。

同样的,可以通过vim 打开分词之后的文件,执行命令:

vim corpusSegDone.txt

得到如下图所示的结果:

三、构建词向量

3.1 安装word2vec

pip install word2vec

3.2 构建词向量

执行以下程序:

import word2vec

word2vec.word2vec('corpusSegDone.txt', 'corpusWord2Vec.bin', size=300,verbose=True)

即可构建词向量,得到结果放在文件名为 corpusWord2Vec.bin的文件中。可以通过设定size 的大小来指定词向量的维数。用vim打开生成的二进制文件会出现乱码,目前不知道解决方法。

3.3 显示并使用词向量

3.3.1 查看词向量

import word2vec

model = word2vec.load('corpusWord2Vec.bin')

print (model.vectors)

可以得到如下结果:

3.3.2 查看词表中的词

import word2vec

model = word2vec.load('corpusWord2Vec.bin')

index = 1000

print (model.vocab[index]

得到结果如下:

可以得到词表中第1000个词为 确保。

3.3.3 显示空间距离相近的词

一个好的词向量可以实现词义相近的一组词在词向量空间中也是接近的,可以通过显示词向量空间中相近的一组词并判断它们语义是否相近来评价词向量构建的好坏。代码如下:

import word2vec

model = word2vec.load('corpusWord2Vec.bin')

indexes = model.cosine(u'加拿大')

for index in indexes[0]:

print (model.vocab[index])

得到的结果如下:

可以修改希望查找的中文词,例子如下:

四、二维空间中显示词向量

将词向量采用PCA进行降维,得到二维的词向量,并打印出来,代码如下:

1 #!/usr/bin/env python

2 # coding=utf-8

3 import numpy as np

4 import matplotlib

5 import matplotlib.pyplot as plt

6

7 from sklearn.decomposition import PCA

8 import word2vec

9 # load the word2vec model

10 model = word2vec.load('corpusWord2Vec.bin')

11 rawWordVec=model.vectors

12

13 # reduce the dimension of word vector

14 X_reduced = PCA(n_components=2).fit_transform(rawWordVec)

15

16 # show some word(center word) and it's similar words

17 index1,metrics1 = model.cosine(u'中国')

18 index2,metrics2 = model.cosine(u'清华')

19 index3,metrics3 = model.cosine(u'牛顿')

20 index4,metrics4 = model.cosine(u'自动化')

21 index5,metrics5 = model.cosine(u'刘亦菲')

22

23 # add the index of center word

24 index01=np.where(model.vocab==u'中国')

25 index02=np.where(model.vocab==u'清华')

26 index03=np.where(model.vocab==u'牛顿')

27 index04=np.where(model.vocab==u'自动化')

28 index05=np.where(model.vocab==u'刘亦菲')

29

30 index1=np.append(index1,index01)

31 index2=np.append(index2,index03)

32 index3=np.append(index3,index03)

33 index4=np.append(index4,index04)

34 index5=np.append(index5,index05)

35

36 # plot the result

37 zhfont = matplotlib.font_manager.FontProperties(fname='/usr/share/fonts/truetype/wqy/wqy-microhei.ttc')

38 fig = plt.figure()

39 ax = fig.add_subplot(111)

40

41 for i in index1:

42 ax.text(X_reduced[i][0],X_reduced[i][1], model.vocab[i], fontproperties=zhfont,color='r')

43

44 for i in index2:

45 ax.text(X_reduced[i][0],X_reduced[i][1], model.vocab[i], fontproperties=zhfont,color='b')

46

47 for i in index3:

48 ax.text(X_reduced[i][0],X_reduced[i][1], model.vocab[i], fontproperties=zhfont,color='g')

49

50 for i in index4:

51 ax.text(X_reduced[i][0],X_reduced[i][1], model.vocab[i], fontproperties=zhfont,color='k')

52

53 for i in index5:

54 ax.text(X_reduced[i][0],X_reduced[i][1], model.vocab[i], fontproperties=zhfont,color='c')

55

56 ax.axis([0,0.8,-0.5,0.5])

57 plt.show()

中文的显示需要做特殊处理,详见代码 line: 37

下图是执行结果:

主要参考

清华 词向量库_word2vec 构建中文词向量相关推荐

  1. word2vec 构建中文词向量

    2019独角兽企业重金招聘Python工程师标准>>> word2vec 构建中文词向量 词向量作为文本的基本结构--词的模型,以其优越的性能,受到自然语言处理领域研究人员的青睐.良 ...

  2. 敏感词过滤之——自定义构建查询词库与快速查询实现

    关于敏感词过滤的一点思考与实践 业务场景 思考与研究 逻辑分析 代码实现(php) 构建敏感词树 分割字符串 敏感词树长分支的递归实现 读取敏感词库 敏感词树的查询 查询实现 调用 测试.分析与总结 ...

  3. python删除中文停用词_python词云 wordcloud+jieba生成中文词云图

    简介 Python+jieba+wordcloud+txt+gif生成动态中文词云 本文基于爬虫爬取某微信号三个月的文章为例,展示了生成中文词云的完整过程.本文需要的两个核心Python类库: jie ...

  4. python词云 wordcloud+jieba生成中文词云图

    简介 Python+jieba+wordcloud+txt+gif生成动态中文词云 本文基于爬虫爬取某微信号三个月的文章为例,展示了生成中文词云的完整过程.本文需要的两个核心Python类库: jie ...

  5. c ++向量库_C ++中的2D向量–实用指南2D向量

    c ++向量库 Also referred to as vector of vectors, 2D vectors in C++ form the basis of creating matrices ...

  6. python中文词云图代码_python绘制中文词云图

    1. 明确任务 最近学习过程中看到很多分析报告中都有运用到可视化的词云,也有看到五花八门的工具教程,刚好有一份<都挺好>电视剧的弹幕源数据.便决定用这份数据尝试使用python绘制词云. ...

  7. AAAI 2018 论文 | 蚂蚁金服公开最新基于笔画的中文词向量算法

    导读:词向量算法是自然语言处理领域的基础算法,在序列标注.问答系统和机器翻译等诸多任务中都发挥了重要作用.词向量算法最早由谷歌在2013年提出的word2vec,在接下来的几年里,该算法也经历不断的改 ...

  8. 文本分类Keras RNN实践——应用腾讯和百度中文词向量

    中文词向量 深度学习在NLP领域大展身手,而深度学习处理文本,离不开文本的向量化. 英语独特的语法规则,使得单用空格就能将句子中的单词分割开来,从而取得词向量,这极大简化了英语的NLP预处理过程,工业 ...

  9. 腾讯AI Lab开源大规模高质量中文词向量数据,800万中文词随你用

    今日,腾讯AI Lab 宣布开源大规模.高质量的中文词向量数据.该数据包含800多万中文词汇,相比现有的公开数据,在覆盖率.新鲜度及准确性上大幅提高,为对话回复质量预测和医疗实体识别等自然语言处理方向 ...

最新文章

  1. 最小二乘法和最大似然估计
  2. 2020年10月GitHub上最热门的开源项目
  3. VForum 2008系列之三:分论坛视频-实现自动化的虚拟数据中心
  4. 腾讯基于全时态数据库技术的数据闪回
  5. 【渝粤题库】国家开放大学2021春1078复变函数题目
  6. ubuntu - 如何以root身份使用图形界面管理文件?
  7. php.amazeui,AmazeUI 导航条的实现示例
  8. python数据分析——如何用python连接远程数据库
  9. 通过Keepalived实现Redis Failover自动故障切换功能[实践分享]
  10. 移动U盘数据恢复,移动U盘数据恢复方法
  11. matlab画中国地图深浅,科学网—MATLAB绘制中国地图 - 栾威的博文
  12. ddwrt open*** tun
  13. 如何编写DTD文档类型定义
  14. 06 Redis中BigKey、HotKey的发现与处理
  15. Keras系列之文本向量化
  16. 哔哩哔哩 B站挂了!完了,5个9可靠性,超时了!
  17. AWS RDS多可用区部署与只读副本的区别
  18. Mstar Mac Phy 驱动学习
  19. 模拟输出21点所有可能的Black Jack牌型
  20. 经常玩电脑正确的坐姿_电脑族玩游戏正确坐姿 7要点坐不伤身

热门文章

  1. CUDA 7 流并发性优化
  2. 英特尔Intel® Arria® 10 FPGA加速器设计
  3. 寻找汽车连接的解决方案
  4. 高精地图与自动驾驶(下)
  5. styleable cannot be resolved or is not a field
  6. android studio 通过界面快速查看md5
  7. postgreSQL外键引用查询 查询外键被那些表占用
  8. MySQL8——源码安装
  9. 百度地图轨迹回放,自定义路书,边走边画线
  10. asp.net httpmodule 访问页面控件 备忘