在 python 的 fasttext 库的描述中 https://github.com/facebookresearch/fastText/tree/master/python对于训练监督模型有不同的论点,其中包括:
ws
:上下文窗口的大小wordNgrams
:单词ngram的最大长度。
如果我没理解错的话,它们都是负责考虑单词周围的单词,但是它们之间明显的区别是什么?
最佳答案
首先,我们使用 train_unsupervised
API 创建一个Word-Representation Model。我们可以使用两种技术,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 之间的主要区别可以总结为下图:
关于python - 单词 ngrams 的最大长度与上下文窗口大小之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57507056/