优化word2vec模型比较

时间:2017-08-18 18:28:52

标签: machine-learning nlp word2vec dot-product model-comparison

我为每个用户都有一个word2vec模型,所以我理解不同模型上的两个单词是什么样的。是否有更优化的方法来比较训练有素的模型?

userAvec = Word2Vec.load(userAvec.w2v)  
userBvec = Word2Vec.load(userBvec.w2v)  

#for word in vocab, perform dot product:

cosine_similarity = np.dot(userAvec['president'], userBvec['president'])/(np.linalg.norm(userAvec['president'])* np.linalg.norm(userBvec['president']))

这是比较两种型号的最佳方式吗?有没有更强大的方法来看两个模型如何比较而不是逐字逐句?图片1000个用户/模型,每个用户/模型在词汇中具有相似数量的单词。

1 个答案:

答案 0 :(得分:1)

你问题的核心是一个错误的假设。

如果模型userAvecuserBvec是在单独的会话中接受培训,则根据单独的数据,userAvec['president']userBvec['president']之间的计算角度本身就是毫无意义的。在算法初始化中存在随机性,然后在大多数训练模式中 - 通过诸如负采样,频繁字下采样以及由于线程调度可变性导致的训练示例的任意重新排序之类的事情。结果,即使具有完全相同的语料库和参数的重复模型训练也可导致相同单词的不同坐标。

只有相同的距离/方向,在相同的迭代过程中共同训练的单词,才有意义。

因此,对于特定单词,两个模型的前N个相似单词列表是否相似可能会很有趣。但是,在替代模型中相同单词的坐标之间的角度的原始值不是有意义的度量。