python-word2vec模塊使用詳解

這裏,我們不講word2vec的原理(其實是還了解不透徹,以後明白了再寫,大家在閱讀本文之前,可以先簡單瞭解一下其推理過程),就只瞭解其參數和輸入輸出。網上還有對word2vec用tensorflow進行的實現,以後再說吧。

1.Word2vec作用:表達不同詞之間的相似和類比關係

2.安裝方法:pip install --upgrade gensim #因爲Gensim開發了一套工具箱叫做gensim,裏面繼承了Word2vec方法。

3.輸入參數格式:

import gensim
#sentences=[["a","b"],["b","c"] ... ]
sentences=word2vec.Text8Corpus("test.txt")  #text8爲語料庫文件名
#sentences是訓練所需預料,可通過該方式加載,此處訓練集爲英文文本或分好詞的中文文本

sentences是訓練所需材料,可通過兩種格式載入:
1.文本格式:
將每篇文章 分詞去停用詞後,用空格分割,將其存入txt文本中(每一行一篇文章)
在這裏插入圖片描述
這個格式文本處理後,便可通過 sentences=word2vec.Text8Corpus("test.txt") 將其讀取爲參數格式

2.list嵌套格式
將每篇文章 分詞去停用詞後,存入list中。
即[ [第一篇文章分詞結果] , [第二篇文章分詞結果], …]
在這裏插入圖片描述
4.模型構建參數詳解:
在得到正確形式的sentences參數,便可將其帶入生成模型的函數中,生成模型:

model=gensim.models.Word2Vec(sentences,sg=1,size=100,window=5,min_count=2,negative=3,sample=0.001,hs=1,workers=4)

#該步驟也可分解爲以下三步(但沒必要):
#model=gensim.model.Word2Vec() 建立一個空的模型對象
#model.build_vocab(sentences) 遍歷一次語料庫建立詞典
#model.train(sentences) 第二次遍歷語料庫建立神經網絡模型

#sg=1是skip—gram算法,對低頻詞敏感,默認sg=0爲CBOW算法
#size是神經網絡層數,值太大則會耗內存並使算法計算變慢,一般值取爲100到200之間。
#window是句子中當前詞與目標詞之間的最大距離,3表示在目標詞前看3-b個詞,後面看b個詞(b在0-3之間隨機)
#min_count是對詞進行過濾,頻率小於min-count的單詞則會被忽視,默認值爲5。
#negative和sample可根據訓練結果進行微調,sample表示更高頻率的詞被隨機下采樣到所設置的閾值,默認值爲1e-3,
#negative: 如果>0,則會採用negativesamping,用於設置多少個noise words
#hs=1表示層級softmax將會被使用,默認hs=0且negative不爲0,則負採樣將會被選擇使用。
#workers是線程數,此參數只有在安裝了Cpython後纔有效,否則只能使用單核

Word2vec官方手冊上還有很多參數說明:
在這裏插入圖片描述
我們並不需要全部瞭解,大部分參數都可以使用其默認值(不輸入),而其中比較重要的有:

# min_count,是去除小於min_count的單詞
# size,神經網絡層數
# sg, 算法選擇
# window, 句子中當前詞與目標詞之間的最大距離
# workers,線程數

5.模型操作:
在構建好模型model後:
1.保存模型:

model.save("文本名")	#模型會保存到該 .py文件同級目錄下,該模型打開爲亂碼
#model.wv.save_word2vec_format("文件名",binary = "Ture/False")  #通過該方式保存的模型,能通過文本格式打開,也能通過設置binary是否保存爲二進制文件。但該模型在保存時丟棄了樹的保存形式(詳情參加word2vec構建過程,以類似哈夫曼樹的形式保存詞),所以在後續不能對模型進行追加訓練

.save保存的模型打開:
在這裏插入圖片描述
.wv.save_word2vec_format保存的模型打開:
在這裏插入圖片描述
2.加載模型:

#對.sava保存的模型的加載:
gensim.models.Word2Vec.load("模型文件名")

#對..wv.save_word2vec_format保存的模型的加載:
model = model.wv.load_word2vec_format('模型文件名')

3.模型追加訓練:

model.train(more_sentences)

如果對..wv.save_word2vec_format加載的模型進行追加訓練,會報錯:
AttributeError: 'Word2VecKeyedVectors' object has no attribute 'train'

6.輸出:

計算一個詞的最近似的詞:
model.most_similar("word",topn=10)	#計算與該 詞最近似的詞,topn指定排名前n的詞

計算兩個詞的相似度:
model.similarity("word1","word2")  

獲取詞向量(有了這個不就意味着可以進行相關詞語的加減等運算,雖然我不是太懂):
model ['word']

結果(因爲用於測試的文本數量不足,所得數據可能不太準確):
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章