【发布时间】:2019-12-21 17:46:33
【问题描述】:
在用于训练监督模型的 python https://github.com/facebookresearch/fastText/tree/master/python 的 fasttext 库的描述中,有不同的参数,其中包括:
-
ws: 上下文窗口的大小 -
wordNgrams: 单词 ngram 的最大长度。
如果我理解正确的话,他们都有责任考虑到单词的周围单词,但是他们之间的明显区别是什么?
【问题讨论】:
在用于训练监督模型的 python https://github.com/facebookresearch/fastText/tree/master/python 的 fasttext 库的描述中,有不同的参数,其中包括:
ws: 上下文窗口的大小wordNgrams: 单词 ngram 的最大长度。如果我理解正确的话,他们都有责任考虑到单词的周围单词,但是他们之间的明显区别是什么?
【问题讨论】:
首先,我们使用train_unsupervised API 创建一个单词表示模型。我们可以使用两种技术,skipgram 和 cbow。另一方面,我们使用train_supervised API 来创建文本分类模型。你问的是train_supervised API,所以我会坚持下去。
fasttext中文本分类的工作方式,默认是先用skipgram来表示单词。然后,使用从 skipgram 模型中学习到的这些词向量对输入文本进行分类。您询问的两个参数(ws 和 wordNgrams)与 skipgram/cbow 模型有关。
下图包含了我们如何使用输入文本来训练 skipgram 模型的简化说明。在这里,我们将ws参数定义为2,wordNgrams定义为1。
如我们所见,我们的训练数据中只有一个文本 The quick brown fox jumps over the lazy dog。我们将上下文窗口定义为两个,这意味着我们将创建一个中心为center word 的窗口,窗口中的下一个/上一个单词是target words。然后,我们一次移动这个窗口一个词。窗口大小越大,模型的训练样本越多,在给定小数据样本的情况下,模型变得越过拟合。
这是我们的第一个参数ws。根据第二个参数wordNgrams,如果我们将wordNgrams设置为2,它将考虑如下图所示的双词对。 (下图中的ws为简单起见)
检查此link,其中包含train_supervised 方法的源代码。
skipgram 和 cbow 之间的主要区别可以总结为下图:
【讨论】: