【发布时间】:2018-07-08 15:46:00
【问题描述】:
这个问题完全超出了我的想象。我正在使用 gensim 训练 Word2Vec 模型。我提供了多种语言的数据,即英语和印地语。当我试图找到最接近“人”的词时,这就是我得到的:
model.wv.most_similar(positive = ['man'])
Out[14]:
[('woman', 0.7380284070968628),
('lady', 0.6933152675628662),
('monk', 0.6662989258766174),
('guy', 0.6513140201568604),
('soldier', 0.6491742134094238),
('priest', 0.6440571546554565),
('farmer', 0.6366012692451477),
('sailor', 0.6297377943992615),
('knight', 0.6290514469146729),
('person', 0.6288090944290161)]
--------------------------------------------
问题是,这些都是英文单词。然后我试图找到相同含义的印地语和英语单词之间的相似之处,
model.similarity('man', 'आदमी')
__main__:1: DeprecationWarning: Call to deprecated `similarity` (Method will
be removed in 4.0.0, use self.wv.similarity() instead).
Out[13]: 0.078265618974427215
这个准确度应该比所有其他准确度都要好。我的印地语语料库是通过翻译英语语料库制作的。因此,这些词出现在类似的上下文中。因此它们应该很接近。
这就是我在这里所做的:
#Combining all the words together.
all_reviews=HindiWordsList + EnglishWordsList
#Training FastText model
cpu_count=multiprocessing.cpu_count()
model=Word2Vec(size=300,window=5,min_count=1,alpha=0.025,workers=cpu_count,max_vocab_size=None,negative=10)
model.build_vocab(all_reviews)
model.train(all_reviews,total_examples=model.corpus_count,epochs=model.iter)
model.save("word2vec_combined_50.bin")
【问题讨论】:
-
word2vec的工作方式是 - 如果两个词出现在相似的上下文中,则它们是相似的。如果在您的语料库中,具有相同含义的两个单词(例如“man”和“आदमी”)出现在非常不同的上下文中,您的算法永远无法判断它们是相似的 -
查看此问题的答案 - stackoverflow.com/questions/45571295/…
-
@kampta 有一个问题,我拥有的印地语数据是英文数据的翻译。因此,这些词应该在或多或少相似的上下文中。你提到的链接有2篇论文,我会通过它们。但是你知道为什么从翻译的印地语数据创建的嵌入比向量空间中的英语数据要远吗?
-
以上链接回答了您的问题 - “鉴于 word2vec 模型的随机初始化以及算法/实现引入的其他随机化,即使后续训练在完全相同的数据上运行也不会放置单词到完全相同的地方”
-
是的,但差别太大了。不仅如此,我还试图找出与一些英语单词和一些印地语单词最接近的 10 个单词。英语的一个显示只有英语的接近它,印地语的显示只有印地语的接近。我尝试了每种语言的 5 个单词。这就是结果。 IE。印地语和英语单词是在完全不同的空间中形成的。
标签: python nlp artificial-intelligence word2vec gensim