为什么Word2Vec的most_similar()函数在训练时会产生毫无意义的结果?

时间:2017-09-11 14:19:27

标签: python-2.7 gensim word2vec word-embedding

我在简历语料库中删除了gensim word2vec代码(删除了停用词),以便从预定义关键字列表中识别语料库中的类似上下文单词。

尽管使用输入参数进行了多次迭代,删除了禁止词等,但类似的上下文单词根本没有意义(就距离或上下文而言) 例如。相关和矩阵在同一窗口中发生了好几次,但矩阵并没有落在相似的最相似结果中

以下是系统和代码的详细信息 gensim 2.3.0,在Python 2.7 Anaconda上运行 培训简历:55,418个句子 每个句子的平均单词:3-4个单词(删除后的停用词) 代码:

    wordvec_min_count=int()
    size = 50
    window=10
    min_count=5
    iter=50
    sample=0.001
    workers=multiprocessing.cpu_count()
    sg=1
    bigram = gensim.models.Phrases(sentences, min_count=10, threshold=5.0)
    trigram = gensim.models.Phrases(bigram[sentences], min_count=10, threshold=5.0)
    model=gensim.models.Word2Vec(sentences = trigram[sentences], size=size, alpha=0.005, window=window, min_count=min_count,max_vocab_size=None,sample=sample, seed=1, workers=workers, min_alpha=0.0001, sg=sg, hs=1, negative=0, cbow_mean=1,iter=iter)

model.wv.most_similar('correlation')
Out[20]: 
[(u'rankings', 0.5009744167327881),
 (u'salesmen', 0.4948525130748749),
 (u'hackathon', 0.47931140661239624),
 (u'sachin', 0.46358123421669006),
 (u'surveys', 0.4472047984600067),
 (u'anova', 0.44710394740104675),
 (u'bass', 0.4449636936187744),
 (u'goethe', 0.4413239061832428),
 (u'sold', 0.43735259771347046),
 (u'exceptional', 0.4313117265701294)]

我迷失了为什么结果如此随机?有没有检查word2vec的准确性?

对于most_similar()函数,还有word2vec的替代方法吗?我读了一下gloVE但是无法安装包。

这方面的任何信息都会有所帮助

1 个答案:

答案 0 :(得分:1)

启用INFO级别的日志记录,并确保它表明正在进行真正的培训。 (也就是说,您会看到在预期的文本数量上超过预期的迭代次数的增量进度。)

您可能正在点击此open bug issue in Phrases,其中请求短语提升(与trigram[sentences]一样)仅提供单次迭代,而不是Word2Vec的可乘法迭代的集合对象需要。

Word2Vec需要通过语料库进行一次词汇发现,然后iter次再次进行培训。如果sentences或短语包装器仅支持单次迭代,则只会发现词汇 - 训练将立即结束,模型将显示为未经训练。

正如您在该问题中所看到的,解决方法是执行短语转换并将结果保存到内存列表(如果适合)或磁盘上的单独文本语料库中(&#39) ; s已被短语组合)。然后,使用一个真正可重新启动的迭代 - 这也将节省一些冗余处理。