单词袋(BOW)vs N-gram(sklearn CountVectorizer)-文本文档分类

时间:2018-07-31 20:10:17

标签: python scikit-learn feature-extraction feature-selection n-gram

据我所知,在“单词袋”方法中,特征是一组单词及其在文档中的频率计数。另一方面,N-gram(例如unigram)的功能完全相同,但是它没有考虑单词出现的频率。

我想使用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方法有什么优势?

2 个答案:

答案 0 :(得分:1)

正如@ daniel-kurniadi回答的那样,您需要调整ngram_range参数的值以使用n-gram。例如,通过使用(1, 2),矢量化器将考虑到字母组合和二元组合。

ngrams优于BOW i的主要优点是要考虑单词的顺序。例如,在句子中:

  1. “我爱香草,但我讨厌巧克力”
  2. “我爱巧克力,但我讨厌香草”

含义明显不同,但是两种情况下基本的BOW表示都相同。使用n-gram(n> = 2)时,它将捕获术语的顺序,因此表示形式会有所不同。

答案 1 :(得分:0)

如果将ngram_range参数设置为(m,n),则它将成为N-gram实现。