GenSim Word2Vec意外修剪

时间:2016-03-15 13:47:17

标签: gensim word2vec

我的目标是找到短语的矢量表示。下面是我的代码,它使用Word2Vec库提供的GenSim模型对bigrams进行部分工作。

from gensim.models import word2vec

def bigram2vec(unigrams, bigram_to_search):
    bigrams = Phrases(unigrams)
    model = word2vec.Word2Vec(sentences=bigrams[unigrams], size=20, min_count=1, window=4, sg=1, hs=1, negative=0, trim_rule=None)
    if bigram_to_search in model.vocab.keys():
        return model[bigram_to_search]
    else:
        return None

问题在于Word2Vec模型似乎正在对某些双字母组合进行自动修剪,即len(model.vocab.keys()) != len(bigrams.vocab.keys())。我尝试过调整各种参数,例如trim_rulemin_count,但它们似乎不会影响修剪。

PS - 我知道要查找的bigrams需要使用下划线而不是空格来表示,即调用我的函数的正确方法是bigram2vec(unigrams, 'this_report')

1 个答案:

答案 0 :(得分:0)

感谢GenSim support forum的进一步说明,解决方案是为正在生成的min_count设置相应的thresholdPhrases值(请参阅documentation有关Phrases类中这些参数的详细信息。修正后的解决方案代码如下。

from gensim.models import word2vec, Phrases

def bigram2vec(unigrams, bigram_to_search):
    bigrams = Phrases(unigrams, min_count=1, threshold=0.1)
    model = word2vec.Word2Vec(sentences=bigrams[unigrams], size=20, min_count=1, trim_rule=None)
    if bigram_to_search in model.vocab.keys():
        return model[bigram_to_search]
    else:
        return []