日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

清华 词向量库_word2vec 构建中文词向量

發布時間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 清华 词向量库_word2vec 构建中文词向量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

詞向量作為文本的基本結構——詞的模型,以其優越的性能,受到自然語言處理領域研究人員的青睞。良好的詞向量可以達到語義相近的詞在詞向量空間里聚集在一起,這對后續的文本分類,文本聚類等等操作提供了便利,本文將詳細介紹如何使用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 构建中文词向量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。