单词 ngram 的最大长度与上下文大小之间的差异 window

Difference between max length of word ngrams and size of context window

在用于 python https://github.com/facebookresearch/fastText/tree/master/python 训练监督模型的 fasttext 库的描述中有不同的论点,其中包括:

如果我没理解错的话,两者都是负责考虑单词周围的词,但是它们之间明显的区别是什么?

首先,我们使用train_unsupervisedAPI创建一个Word-Representation模型。我们可以使用两种技术,skipgram and cbow。另一方面,我们使用 train_supervised API 创建 文本分类模型 。你问的是train_supervisedAPI,那我就坚持吧。

文本分类在 fasttext 中的工作方式是首先默认使用 skipgram 表示单词。然后,使用从 skipgram 模型中学习到的 word-vectors 对输入文本进行分类。您询问的两个参数(wswordNgrams)与 skipgram/cbow 模型有关。

下图包含我们如何使用输入文本训练 skipgram 模型的简化说明。在这里,我们定义 ws 参数为 2,wordNgrams 为 1。

正如我们所见,我们的训练数据中只有一个文本,即 The quick brown fox jumps over the lazy dog。我们定义上下文window为二,也就是说我们会创建一个window,其中心是center word,window中的next/previous两个词是target words。然后,我们一次移动这个 window 一个单词。 window 大小越大,模型的训练样本越多,在给定少量数据样本的情况下,模型就越过度拟合。

这是我们的第一个参数 ws。根据第二个参数 wordNgrams,如果我们将 wordNgrams 设置为 2,它将像下图那样考虑 two-word 对。 (下图中的ws为简单起见)

参考

  • 检查此 link,其中包含 train_supervised 方法的源代码。

  • skipgram 和 cbow 之间的主要区别可以总结为下图: