如何在 Facebook FastText 上处理一系列 n-gram?

How to work with a range of n-grams on Facebook FastText?

我正在尝试从命令行使用 FastText. It has a bunch of options along with a facility to train 训练文本分类器。其中一个选项是 wordNgrams.

在我的特定数据集中,我发现许多不相关的查询被高可信度分类,因为它们共享相似的标记。所以,我的计划是忽略 unigram 个标记并从 bigram 开始。现在我通过设置 wordNgrams = 5 从第 1 克到第 5 克,但我的计划是从第 2 克到第 5 克。但似乎 FastText 不支持这个。有什么办法可以做到这一点,这需要最小化这些 False Positives.

据我所知,即使 Facebook 的 fasttext 允许用户使用 -minn-maxn 设置 character-n-grams(子词信息)的范围,它仅提供单个 -wordNgrams 参数设置最大长度 word-multigrams.

然而,-supervised 模式也是以 order-oblivious 方式组合所有给定标记的情况。因此,您可以在自己的预处理中创建您想要的 n-grams (或其他 token-represented 特征)的任何组合,然后将它们传递给 fasttext (它将被视为所有 unigrams) .只要在训练中应用与后面分类中相同的预处理,效果应该是一样的。

(您甚至可以使用 sklearn CountVectorizer 的预处理。)

不过,请记住 ~Erwan 在评论中的警告:添加如此多不同的特征会增加过度拟合的风险,这可能会显示为您陈述的问题“许多不相关的查询被高度自信地分类,因为它们共享相似的代币”。 (该模型因包含如此多的 n-grams 而变得很大,它记住了 training-data 中的特殊细节。这导致它误入歧途,将 non-generalizable 推论应用于 out-of-training 数据。 )