gensim Word2Vec 訓練和使用(Model一定要加載到內存中,節省時間!!!)


訓練模型
利用gensim.models.Word2Vec(sentences)建立詞向量模型
該構造函數執行了三個步驟:建立一個空的模型對象,遍歷一次語料庫建立詞典,第二次遍歷語料庫建立神經網絡模型可以通過分別執行model=gensim.models.Word2Vec(),model.build_vocab(sentences),model.train(sentences)來實現
訓練時可以指定以下參數
min_count指定了需要訓練詞語的最小出現次數,默認為5
size指定了訓練時詞向量維度,默認為100
worker指定了完成訓練過程的線程數,默認為1不使用多線程。只有注意安裝Cython的前提下該參數設置才有意義
查詢查詢查詢查詢查詢查詢結果訓練可以通過model.save('fname')或model.save_word2vec_format(fname)來保存為文件,使用再model.load(fname)或model.load_word2vec_format(fname,encoding='utf-8')讀取查詢結果

例如:

from gensim.models.word2vec import Word2Vec

sentences = [['A1','A2'],[],[],....]
model= Word2Vec()
model.build_vocab(sentences)
model.train(sentences,total_examples = model.corpus_count,epochs = model.iter)

保存:
model.save('/tmp/MyModel')
#model.save_word2vec_format('/tmp/mymodel.txt',binary = False)
#model.save_word2vec_format('/tmp/mymodel.bin.gz',binary = True)

前一組方法保存的文件不能利用文本編輯器查看但是保存了訓練的全部信息,可以在讀取后追加訓練
后一組方法保存為word2vec文本格式但是保存時丟失了詞匯樹等部分信息,不能追加訓練

追加加訓練:
model = gensim.models.Word2Vec.load('/tmp/mymodel')
model.train(more_sentences)
加載:
model = gensim.models.Word2Vec.load('/tmp/mymodel')

#model = gensim.models.KeyedVectors.load_word2vec_format('/tmp/vectors.txt',binary = False)
#model = gensim.models.KeyedVectors。load_word2vec_format('/tmp/vectors.bin',binary = True)
##使用gzipped / bz2輸入也可以,不需要解壓:
#model = gensim.models.KeyedVectors.load_word2vec_format('/tmp/vectors.bin.gz',binary=True)

模型使用:

獲取詞向量
print(model ['man'])
print(type(model ['man']))
輸出:
[0.14116223 0.05663395 0.01500377 -0.03592452 ...]
numpy.ndarray
計算一個詞的最近似的詞,倒排序
model.most_similar(['男人'])

輸出:
[('女',0.7664012908935547),
( '男孩',0.6824870109558105),
( '青少年',0.6586930155754089),
( '女孩',0.5921714305877686),
( '強盜',0.5585119128227234),
( '男',0.5489763021469116),
('人',0.5420035719871521),
( '人',0.5342026352882385),
( '紳士',0.5337990522384644),
( '摩托車手',0.5336882472038269)]

計算兩詞之間的余弦相似度
word2vec一個很大的亮點:支持詞語的加減運算(實際中可能只有少數例子比較符合)
model.most_similar(positive = ['woman','king'],negative = ['man'],topn = 2)
輸出:
[('王后',0.7118192911148071),('君主',0.6189675331115723)]
---
model.similarity('女人', '男人')
輸出:
0.7664012234410319

計算兩個集合之間的余弦似度
當出現某個詞語不在這個訓練集合中的時候,會報錯!
list1 = ['我','走','我','學校']
list2 = ['我','去','家']
list_sim1 = model.n_similarity(list1,list2)
print(list_sim1)

輸出:
0.772446878519
選出集合中不同類的詞語
model.doesnt_match('breakfast cereal dinner lunch'.split())
輸出:
'谷類'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM