Word2Vec實驗淺嘗

天天wa發表於2020-11-23

word2vec環境

這裡我使用python中的包gensim,該包封裝了word2vec及其優化。
實驗環境為 Win10+python3.9+pycharm
這裡的下載過程直接使用pip,開啟cmd,進入pip所在的Scripts位置,輸入

pip3 install gensim

由於預設下載網址是國外網址,這裡建議將源地址改成清華映象,具體方法見
https://blog.csdn.net/wo334499/article/details/72832552
在這裡插入圖片描述

所用資料集

用來訓練的資料集是從維基百科中爬取的中文詞條,使用jieba進行分詞,這裡感謝最小森林大佬提供的資料集
該資料集是已經進行去分詞和去停用詞過後的資料集,可以直接用於訓練word2vec
同時,我們也提供了基於MSR訓練集的版本,該訓練集是由SIGHAN Bakeoff 2005釋出的四個中文資料集之一,包含3000+句子,下載地址為
http://sighan.cs.uchicago.edu/bakeoff2005/
對於該資料集我們需要先進行分詞處理,再用於訓練

針對維基百科爬取資料訓練

from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
# 訓練模型
sentences = LineSentence('wiki.zh.word.txt')
# size:詞向量的維度
# window:上下文環境的視窗大小
# min_count:忽略出現次數低於min_count的詞
model = Word2Vec(sentences, size=128, window=5, min_count=5, workers=4)
# 儲存模型
model.save('word_embedding_128')

該資料集的訓練時間較長,我這裡大概跑了1個多小時(普通辦公本,笑)

針對MSR資料集訓練

首先我們要對其進行分詞,將分詞結果進行儲存

import jieba
text=[]
f=open("msr_test.txt",'r', encoding='GBK')
t=f.readline()
while t:
    text.append(t)
    t=f.readline()
f.close();
f=open('result2.txt',"w");
for word in text: #輸出結果
    word=jieba.cut(word)
    f.write(" ".join(word))
f.close()

分詞後結果如下

揚帆 遠東 做 與 中國 合作 的 先行 
希臘 的 經濟 結構 較 特殊 。 
海運業 雄踞 全球 之 首 , 按 噸位 計佔 世界 總數 的 1 7 % 。 
另外 旅遊 、 僑匯 也 是 經濟 收入 的 重要 組成部分 , 製造業 規模 相對 較 小 。 
多年 來 , 中希 貿易 始終 處於 較 低 的 水平 , 希臘 幾乎 沒有 在 中國 投資 。 
十幾年來 , 改革開放 的 中國 經濟 高速 發展 , 遠東 在 崛起 。 
瓦西里 斯 的 船隻 中有 4 0 % 駛向 遠東 , 每個 月 幾乎 都 有 兩三條 船 停靠 中國 港口 。 
他 感受 到 了 中國 經濟 發展 的 大潮 。 
他 要 與 中國 人 合作 。 
他 來到 中國 , 成為 第一個 訪華 的 大 船主 。 
訪問 歸來 , 他 對 中國 發展 充滿信心 , 他 向 希臘 海運 部長 介紹 了 情況 , 提出 了 兩國 在 海運 、 造船業 方面 合作 的 建議 。 
1 9 9 5 年 1 0 月 , 希臘 海運 部長 訪華 時 , 他 根據 “ 船長 ” 的 建議 與 中方 探討 了 在 海運 、 造船 方面 合作 的 可能 與 途徑 。 
“ 船長 ” 本人 還 與 幾個 船主 聯合 起來 準備 與 我 遠洋 公司 建立 合資企業 。 
“ 船長 ” 常說 , 要麼 不幹 , 幹 就要 爭 第一 。 
他 擁有 世界 最大 的 私人 集裝箱船 隊 , 也 要 做 與 中國 合作 的 先行 。

訓練過程如下

from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
# 訓練模型
sentences = LineSentence('result2.txt')
# size:詞向量的維度
# window:上下文環境的視窗大小
# min_count:忽略出現次數低於min_count的詞
model = Word2Vec(sentences, size=100, window=5, min_count=3, workers=4)
# 儲存模型
model.save('word_embedding_msr')

該資料集由於資料量較小,大概10s左右就能訓練完成,所以我們在這裡僅用作展示word2vec訓練完成後的輸出為何。

這裡找‘中國‘對應的詞向量,如下

[-0.343487   -0.64089763  0.04869369  0.30353695  0.69588625 -0.14519633
 -0.72343487  0.36691028 -0.4456488   0.19088745  0.08641527  0.13320787
  0.3254474  -0.410061   -0.16562903 -0.0349944   0.2895313   0.6492203
 -0.6339436  -0.330329   -0.3913359  -0.2970704   0.20166887  0.16386898
 -0.3957427  -0.05471497 -0.4112644  -0.23662147  0.03442516 -0.43710214
 -0.771916   -0.1959945  -0.2717788   0.08272666  0.4859701   0.49311143
  0.8147059   0.11530653  0.02399883  0.35907894 -0.5990176   0.03943931
  0.4130272   0.1654321   0.642082   -0.55487806  0.41838712 -0.0030092
 -0.15443897  0.34707847 -0.60119224  0.11023442  0.4595765  -0.15609838
 -0.50447994 -0.4849194  -0.31738335 -0.06616133 -0.16081819  0.21695867
 -0.9720431  -0.39655724  0.131794   -0.51368624  0.98723054  0.5436631
 -0.59230137 -0.79371446  0.61901087  0.8051073   0.19478592 -0.44383404
  0.868485   -0.35039797  0.52206135 -0.53102964 -0.34816676  0.5235386
  0.31923193  0.77775395  1.2184122  -0.35520673  0.12621686 -0.10448229
  1.1372876  -0.05676529 -0.23803782 -0.00363045 -0.46833056 -0.7078941
 -0.31415704  0.10456796 -0.15455903  0.46362948 -0.15287219 -0.69624406
 -0.04977696 -0.28300795  0.37679717 -0.5752296 ]

相關文章