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

Why Word2Vec's most_similar() function is giving senseless results on training?

我是 运行 简历语料库中的 gensim word2vec 代码(已删除停用词),用于从预定义关键字列表中识别语料库中的相似上下文词。

尽管对输入参数、停用词删除等进行了多次迭代,但相似的上下文词根本没有意义(就距离或上下文而言) 例如。相关性和矩阵多次出现在相同的 window 中,但矩阵不属于相关性

的 most_similar 结果

系统详情及代码如下 gensim 2.3.0 ,运行 在 Python 2.7 Anaconda 上 培训简历:55,418 句 每句话的平均字数:3-4 个字(post 停用词移除) 代码:

    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 的信息,但无法安装该软件包。

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

启用 INFO 级日志记录并确保它指示真正的训练正在进行。 (也就是说,您会看到增量进度花费的时间超过了预期的文本数量,超过了预期的迭代次数。)

您可能会遇到这个 open bug issue in Phrases,其中请求短语提升(与 trigram[sentences] 一样)仅提供单次迭代,而不是 [=12] 的可多次迭代的集合对象=] 需要。

Word2Vec 需要通过语料库一次进行词汇发现,然后再次 iter 次进行训练。如果 sentences 或者 phrasing-wrappers 只支持单次迭代,只会发现词汇表——训练会立即结束,模型会显示为未训练。

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