【问题标题】:Gensim most_similar() with Fasttext word vectors return useless/meaningless words带有 Fasttext 词向量的 Gensim most_similar() 返回无用/无意义的词
【发布时间】:2019-04-26 18:02:10
【问题描述】:

我使用 Gensim 和 Fasttext Word vectors 来返回相似的词。

这是我的代码:

import gensim

model = gensim.models.KeyedVectors.load_word2vec_format('cc.it.300.vec')

words = model.most_similar(positive=['sole'],topn=10)

print(words)

这将返回:

[('sole.', 0.6860659122467041), ('sole.Ma', 0.6750558614730835), ('sole.Il', 0.6727924942970276), ('sole.E', 0.6680260896682739), ('sole.A', 0.6419174075126648), ('sole.È', 0.6401025652885437), ('splende', 0.6336565613746643), ('sole.La', 0.6049465537071228), ('sole.I', 0.5922051668167114), ('sole.Un', 0.5904430150985718)]

问题在于“sole”(英文中的“sun”)返回一系列带有点的单词(如 sole.、sole.Ma、ecc...)。哪里有问题?为什么 most_similar 返回这个无意义的词?

编辑

我尝试使用english word vector 并且“sun”这个词返回:

[('sunlight', 0.6970556974411011), ('sunshine', 0.6911839246749878), ('sun.', 0.6835992336273193), ('sun-', 0.6780728101730347), ('suns', 0.6730450391769409), ('moon', 0.6499731540679932), ('solar', 0.6437565088272095), ('rays', 0.6423950791358948), ('shade', 0.6366724371910095), ('sunrays', 0.6306195259094238)] 

像relatedwords.org这样的结果无法重现吗?

【问题讨论】:

    标签: gensim fasttext


    【解决方案1】:

    也许更大的问题是:为什么 Facebook FastText cc.it.300.vec 模型包含这么多无意义的词? (我以前没有注意到 - 你有没有机会下载一个特殊的模型,它用额外的分析标记修饰了单词?)

    为了获得 FastText 的独特优势——包括为词汇表外的词合成似是而非的(比什么都好)向量的能力——你可能不想在纯文本 @ 上使用一般的 load_word2vec_format() 987654324@ 文件,而是.bin 文件上的 Facebook-FastText 特定加载方法。见:

    https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_vectors

    (我不确定这会对这些结果有所帮助,但如果选择使用 FastText,您可能会对“完全”使用它感兴趣。)

    最后,鉴于本次培训的来源——来自开放网络的常见抓取文本,其中可能包含大量拼写错误/垃圾——这些可能是合法的类似单词的标记,基本上是 sole 的拼写错误,经常出现在训练数据中获取词向量。 (而且因为它们确实是 'sole' 的拼写错误同义词,所以对于所有目的来说,它们不一定是坏结果,只是为了你想要的只看到“真实”单词的目的。)

    您可能会发现尝试使用most_similar()restrict_vocab 参数来仅接收来自所有已知词向量的前导(最频繁)部分的结果会很有帮助。例如,仅从前 50000 个单词中获取结果:

    words = model.most_similar(positive=['sole'], topn=10, restrict_vocab=50000)
    

    restrict_vocab 选择正确的值可能有助于在实践中省略长尾“垃圾”词,同时仍提供您所寻找的真实/常见的相似词。

    【讨论】:

    • restrict_vocab=50000 解决问题,谢谢!
    • 关于restrict_vocab的建议真的很棒!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多