版權聲明:本文為博主原創文章,遵循 CC 4.0 by-sa 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/qq_28840013/article/details/89681499
這里,我們不講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是訓練所需預料,可通過該方式加載,此處訓練集為英文文本或分好詞的中文文本
1
2
3
4
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后才有效,否則只能使用單核
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Word2vec官方手冊上還有很多參數說明:
我們並不需要全部了解,大部分參數都可以使用其默認值(不輸入),而其中比較重要的有:
# min_count,是去除小於min_count的單詞
# size,神經網絡層數
# sg, 算法選擇
# window, 句子中當前詞與目標詞之間的最大距離
# workers,線程數
1
2
3
4
5
5.模型操作:
在構建好模型model后:
1.保存模型:
model.save("文本名") #模型會保存到該 .py文件同級目錄下,該模型打開為亂碼
#model.wv.save_word2vec_format("文件名",binary = "Ture/False") #通過該方式保存的模型,能通過文本格式打開,也能通過設置binary是否保存為二進制文件。但該模型在保存時丟棄了樹的保存形式(詳情參加word2vec構建過程,以類似哈夫曼樹的形式保存詞),所以在后續不能對模型進行追加訓練
1
2
.save保存的模型打開:
.wv.save_word2vec_format保存的模型打開:
2.加載模型:
#對.sava保存的模型的加載:
gensim.models.Word2Vec.load("模型文件名")
#對..wv.save_word2vec_format保存的模型的加載:
model = model.wv.load_word2vec_format('模型文件名')
1
2
3
4
5
3.模型追加訓練:
model.train(more_sentences)
如果對..wv.save_word2vec_format加載的模型進行追加訓練,會報錯:
AttributeError: 'Word2VecKeyedVectors' object has no attribute 'train'
1
2
3
4
6.輸出:
計算一個詞的最近似的詞:
model.most_similar("word",topn=10) #計算與該 詞最近似的詞,topn指定排名前n的詞
計算兩個詞的相似度:
model.similarity("word1","word2")
獲取詞向量(有了這個不就意味着可以進行相關詞語的加減等運算,雖然我不是太懂):
model ['word']
1
2
3
4
5
6
7
8
結果(因為用於測試的文本數量不足,所得數據可能不太准確):
---------------------
版權聲明:本文為CSDN博主「這是一個死肥宅」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_28840013/article/details/89681499