使用 fasttext 预训练词嵌入模型(CBOW vs skipgram)预测缺失词

数据挖掘 机器学习 nlp 预言 word2vec gensim
2022-02-07 19:29:07

我正在尝试通过从几个选项中进行选择来实现一个简单的单词预测算法来填补句子中的空白:

在伦敦街头驾驶 ---- 并不好玩。

  1. 苹果
  2. 国王

使用正确的模型:

问题 1.必须使用什么操作/功能才能找到最佳拟合选择?库中的相似度函数定义在一个词与另一个词之间,而不是一个词与词列表之间(例如 most_similar_to_given 函数)。我在任何地方都找不到这个原始功能,而它是 CBOW 承诺的主要操作(见下文)!在这里看到一些不直观的建议!我在这里想念什么?

我决定遵循头部优先的方法,从提供库和预训练数据集的 fastText 开始,但很快就陷入了文档中:

fastText 提供了两种计算单词表示的模型:skipgram 和 cbow('continuous-bag-of-words')。skipgram 模型通过附近的词来学习预测目标词。另一方面,cbow 模型根据其上下文预测目标词。上下文表示为包含在目标单词周围固定大小窗口中的单词包。

我的解释不清楚,因为“附近的词”与“上下文”具有相似的含义。我用谷歌搜索了一下,最终得到了这个替代定义

在 CBOW 模型中,将上下文(或周围单词)的分布式表示结合起来预测中间的单词。而在 Skip-gram 模型中,输入词的分布式表示用于预测上下文。

有了这个定义,CBOW 是我必须使用的正确模型。现在我有以下问题:

问题 2.使用哪个模型来训练fastText 预训练的词向量CBOW还是skipgram?

问题 3.知道必须使用的正确模型是 CBOW,我可以将由 skipgram 模型训练的预训练向量用于我的单词预测用例吗?

1个回答

问题一:

为此,我会使用 FastText 的 Gensim 包装器,因为 Gensim 有一个predict_output_word完全符合您要求的功能。给定一个上下文词列表,它提供了最合适的词。

问题2:

这取决于用户。FastText 本质上不是 CBOW 或 Skipgram。看到这个

问题 3:

是的,尽管 CBOW 和 SkipGram 是不同的训练程序,但它们有着共同的目标。两者都将生成词嵌入,其中(希望)语义上接近的词也具有接近的嵌入。SkipGram 和 CBOW 之间的主要区别在于用于语义接近性的固有启发式。