我使用Google的word2vec训练了一个嵌入模型的单词。输出是一个包含单词及其向量的文件。
我在deeplearing4j中加载了这个训练过的模型。
WordVectors vec = WordVectorSerializer.loadTxtVectors(new File("vector.txt"));
Collection<String> lst = vec.wordsNearest("someWord", 10);
但是,尽管我使用了相同的矢量文件,但是从deeplearing4j的包和word2vec的距离函数获得的两个相似单词列表完全不同。
有没有人对deeplaring4j中的工作原理以及这些差异来自何处有很好的理解?
答案 0 :(得分:1)
列表是否相似?两组似乎都是相似的单词吗?
根据我的理解,列表应该几乎完全匹配 - 它们应该在相同的输入向量上实现相同的计算。如果他们没有,特别是如果原来的word2vec.c相似列表看起来更合理,那么我会怀疑DL4J中的一个错误。
if (lookupTable() instanceof InMemoryLookupTable) {...}
分支的代码可能是正确的 - 我不熟悉nd4j API - 但对于排名余弦相似度值的计算几乎看起来太华丽了; getWordVectorMatrix()
代替getWordVectorMatrixNormalized()
答案 1 :(得分:0)
可能有多种原因导致您从不同的实现中获取不同的向量(因此在相似的单词中有所不同)。我可以提一些
如果您的文件数量(培训数据)&gt;&gt;单词的数量(词汇量大小),单词的向量在几次迭代后会稳定下来,你可以从两者中找到一些最相似的单词,类似。