1

我为每个用户都有一个 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 个用户/模型,每个用户/模型的词汇量相似。

4

1 回答 1

1

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

如果模型userAvecuserBvec是在单独的会话中针对单独的数据进行训练的,那么单独计算出的userAvec['president']和之间的角度userBvec['president']基本上是没有意义的。在算法初始化中存在随机性,然后在大多数训练模式中——通过负采样、频繁词下采样以及由于线程调度可变性而对训练示例进行任意重新排序等方式)。因此,即使使用完全相同的语料库和参数进行重复的模型训练,也会导致相同单词的不同坐标。

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

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

于 2017-08-20T17:22:03.837 回答