2016-10-16 86 views
5

讀取tensorflow word2vec模型輸出如何輸出與特定單詞相關的單詞?word2vec - 獲得最近的單詞

閱讀src:https://github.com/tensorflow/tensorflow/blob/r0.11/tensorflow/examples/tutorials/word2vec/word2vec_basic.py可以查看如何繪製圖像。

但是有沒有一個數據結構(例如字典)作爲訓練模型的一部分而創建的,該模型允許訪問距離給定單詞最近的n個單詞? 例如,如果word2vec生成的圖像:

enter image description here

圖片src:https://www.tensorflow.org/versions/r0.11/tutorials/word2vec/index.html

在該圖像的話'來,他,它被包含在同一個羣集中,有一個函數,它接受作爲輸入'到'並輸出'他,它'(在這種情況下,n = 2)?

回答

4

這種方法一般適用於word2vec。如果您可以將word2vec保存爲文本/二進制文件,如google/GloVe單詞向量。那麼你需要的只是gensim

要安裝:

Via github

Python代碼:

from gensim.models import Word2Vec 

gmodel=Word2Vec.load_word2vec_format(fname) 
ms=gmodel.most_similar('good',10) 
for x in ms: 
    print x[0],x[1] 

然而,這將搜索所有的話給出結果,也有近似最近鄰(ANN),這將給你結果更快,但是準確性有所折衷。

在最新的gensim中,01​​用於執行ANN,請參閱notebooks以獲取更多信息。

Flann is another library for Approximate Nearest Neighbors.

0

獲取gensimgensim.models.Word2Vec模型中使用similar_by_word方法。

similar_by_word需要3個參數,

  1. 輸入字
  2. N - 對於前n個類似的單詞(可選,默認值= 10)
  3. restrict_vocab(可選,默認=無)

示例

import gensim, nltk 

class FileToSent(object): 
    """A class to load a text file efficiently """ 
    def __init__(self, filename): 
     self.filename = filename 
     # To remove stop words (optional) 
     self.stop = set(nltk.corpus.stopwords.words('english')) 

    def __iter__(self): 
     for line in open(self.filename, 'r'): 
      ll = [i for i in unicode(line, 'utf-8').lower().split() if i not in self.stop] 
      yield ll 

然後根據您輸入的句子(sentence_file.txt),

sentences = FileToSent('sentence_file.txt') 
model = gensim.models.Word2Vec(sentences=sentences, min_count=2, hs=1) 
print model.similar_by_word('hack', 2) # Get two most similar words to 'hack' 
# [(u'debug', 0.967338502407074), (u'patch', 0.952264130115509)] (Output specific to my dataset)