1. 程式人生 > >gensim 之 word2vec

gensim 之 word2vec

gensim庫三大功能:

  • 可擴充套件的統計語義
  • 分析語義結構的純文字
  • 檢索語義上類似的文件

word2vec是gensim的一個子模組,可以用來實現上面三大功能

word2vec的理解

我個人理解:
機器學習中,一切都是基於向量的.自然語言處理中的句子都是依賴詞向量來表示.
而word2vec和lda相對應,是詞向量的兩種不同的模型:

  • word2vec屬於神經網路語言模型,根據詞與其周邊詞彙的關係訓練詞向量,然後將詞向量用來做nlp的任務
  • lda則是一種文件主題生成模型,比如lsi模型

在gensim中使用word2vec

from gensim.models import word2vec
import gensim
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s'
, level=logging.INFO) #第一次使用,需要載入文件集(http://mattmahoney.net/dc/text8.zip) sentences = word2vec.Text8Corpus('/tmp/text8') model = word2vec.Word2Vec(sentences, size=200) #儲存模型,以便下次直接使用 model.save('/tmp/text8.model') #下次使用的時候,無需載入sentences文件集,直接讀取model啦 #model = word2vec.Word2Vec('/tmp/text8.model') #word2vec好玩的地方,計算相似詞,woman+man+kiss+love-girl=bride
>>> model.most_similar(positive=['woman','man','kiss','love'],negative=['girl'],topn=5) #結果如下[('bride', 0.6755753755569458), ('me', 0.6339389681816101), #('baby', 0.6337762475013733), ('lady', 0.6284192204475403), ('devil', 0.6243280172348022)]

也可以這樣玩:
這裡寫圖片描述

#找出不同類的詞
model.doesnt_match(['fuck','head','foot'
,'hand'])#fuck model.doesnt_match("breakfast cereal dinner lunch".split())#cereal

還可以找兩個詞的相似度
這裡寫圖片描述

word2vec也支援短語:

>>> bigram_transformer = gensim.models.Phrases(sentences)
>>> model = Word2Vec(bigram_transformer[sentences], size=100, ...)