【发布时间】:2019-01-08 07:37:54
【问题描述】:
据我所知,在 Bag Of Words 方法中,特征是一组单词及其在文档中的频率计数。另一方面,N-grams,例如 unigrams 的作用完全相同,但它没有考虑单词出现的频率。
我想使用 sklearn 和 CountVectorizer 来实现 BOW 和 n-gram 方法。
对于 BOW,我的代码如下所示:
CountVectorizer(ngram_range=(1, 1), max_features=3000)
是否足以将 'binary' 参数设置为 True 以执行 n-gram 特征选择?
CountVectorizer(ngram_range=(1, 1), max_features=3000, binary=True)
n-gram 与 BOW 方法相比有哪些优势?
【问题讨论】:
-
"N-grams ...不考虑单词出现的频率" 不,它考虑了n-grams的出现频率.不,'binary' 参数与 n-gram 没有任何关系。如果你想使用 n-gram,你需要提供一个 n-gram 顺序,比如
(1,2)(包括“one”-grams 和bigrams)或(2,2),它只包括bigrams。 -
如果我错了,我会更正,但如果我这样做,它将计算单词/短语的出现次数(一元或二元,取决于配置)。这是一种弓法。 n-gram 不应该关心单词的出现频率吗?
-
什么?看,将 n-gram 模型视为 BOW 的 type。您通常采用 ngram 的频率。您不必这样做,这就是 binary 参数的用途。您可以探索不同的方法及其结果,但通常会使用计数,而不仅仅是文档中的二进制文件。
-
啊,好的。我以为 n-gram 和 BOW 是完全不同的方法……现在一切都变得不稳定了。谢谢!
-
实际上,您通常不使用原始计数,而是使用某种加权因子,例如 tf–idf。
标签: python scikit-learn feature-extraction feature-selection n-gram