FastText模型可找到仅在语法上相似的相似单词

时间:2019-07-04 23:41:55

标签: python similarity word-embedding fasttext

我正在探索gensim中实现的FastText单词嵌入。 我正在使用20新闻组语料库(from sklearn.datasets import fetch_20newsgroups)来训练FastText模型。基本清理(除去标点符号,停用词和数字)后,语料库的min_count=4阈值大约有30K个单词,用于模型训练:

fastmodel = FastText(all_tokens, size=300, window=3, min_count=4, iter=30, sg=1)

经过培训后,我将使用该模型查找最相似的单词:

fastmodel.wv.most_similar(positive=['baseball'], topn=10, restrict_vocab=30000)

>>>[('eyeball', 0.6450698375701904),
 ('fireball', 0.6277647018432617),
 ('basketball', 0.6046291589736938),
 ('softball', 0.5981404781341553),
 ('fastball', 0.5965794324874878),
 ('pinball', 0.5785440802574158),
 ('oddball', 0.5607066750526428),
 ('spaceball', 0.5140796899795532),
 ('football', 0.5082539319992065),
 ('ball', 0.5010384321212769)]

您可以看到前10个单词中的一半是有意义的。但是,其他5个单词(包括最相似的两个最顶部单词)(“眼球”和“火球”)是奇数球(双关语)。他们与“棒球”的唯一相似之处是“球”一词,但这不是语义相似,更像是句法相似。

我认为,我理解为什么会这样。 FastText将单词分为ngram,fourgram'ball'将其向量贡献给包含它的所有单词。但是,这种理解并不能真正帮助解决如何过滤掉这些单词的问题。

我发现一个post可以解决类似的问题。尽管在那里,问题是无意义的单词被返回了。通过使用设置为50000的restrict_vocab可以解决此问题。尽管如此,返回的单词并不是没有意义的,它们是真实的单词,只是语义上并不相似。

我想知道这是否是FastText方法的固有限制。但是,我找不到在线提到的这种限制的任何迹象,因此很可能我在这里遗漏了一些东西。

0 个答案:

没有答案