python - 单词 ngrams 的最大长度与上下文窗口大小之间的差异

标签 python nlp fasttext

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

  • ws:上下文窗口的大小
  • wordNgrams:单词ngram的最大长度。

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

最佳答案

首先,我们使用 train_unsupervised API 创建一个Word-Representation Model。我们可以使用两种技术,skipgramcbow .另一方面,我们使用 train_supervised API 来创建文本分类模型。你问的是 train_supervised API,所以我会坚持下去。

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

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

enter image description here

正如我们所见,我们的训练数据中只有一个文本,即 The quick brown fox jumps over the lazy dog。我们将上下文窗口定义为两个,这意味着我们将创建一个窗口,其中心是 center word,窗口中的下一个/前两个单词是 target words。然后,我们一次一个字地移动这个窗口。窗口大小越大,模型的训练样本越多,在给定小数据样本的情况下,模型过度拟合的程度就越高。

这是我们的第一个参数 ws。根据第二个参数 wordNgrams,如果我们将 wordNgrams 设置为 2,它将考虑如下图所示的双词对。 (为了简单起见,下图中的ws就是一个)

enter image description here

引用

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

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

skipgram vs. cbow

关于python - 单词 ngrams 的最大长度与上下文窗口大小之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57507056/

相关文章:

python - lstm 之后的 TimeDistributed(Dense()) 与 Dense()

python - 在 Scikit 中进行文本分类时是否需要标准化数据

python - 负采样中排除正样本

machine-learning - 使用基于更大语料库的另一个模型添加词汇并改进词嵌入

python - 如何从 firebase 检索数据数组

python - 在语句末尾添加分号。这是 Python 中的好/坏编程习惯吗?

python - 如何配置 VS Code pytest 扩展以在集成终端(而不是集成输出)中显示测试结果?

python - 如何在cmake当前目录的所有子目录中生成__init__.py?

Gensimmost_similar() 与 Fasttext 词向量返回无用/无意义的词

python - 无法重新创建用于训练 FastText 的 Gensim 文档。类型错误 : Either one of corpus_file or corpus_iterable value must be provided