CountVectorizer
将为您提取三元组(使用ngram_range=(3, 3)
)。文本特征提取文档介绍了这一点。然后,只需MultinomialNB
像以前一样使用转换后的特征矩阵。
请注意,这实际上是建模:
P(文档 | 标签) = P(单词X , 单词X-1 , 单词X-2 | 标签) * P(单词X-1 , 单词X-2 , 单词X-3 | 标签) * ...
那有什么不同?那么,第一项可以写成
P(word X , word X-1 , word X-2 | label) = P(word X | word X-1 , word X-2 , label) * P(word X-1 , word X-2 | label)
当然,所有其他术语也可以这样写,所以你最终会得到(为了简洁,去掉标签上的下标和条件):
P(X | X-1, X-2) P(X-1 | X-2, X-3) ... P(3 | 2, 1) P(X-1, X-2) P(X -2, X-3) ... P(2, 1)
现在,P(X-1, X-2) 可以写成 P(X-1 | X-2) P(X-2)。所以如果我们对所有这些条款都这样做,我们有
P(X | X-1, X-2) P(X-1 | X-2, X-3) ... P(3 | 2, 1) P(X-1 | X-2) P(X -2 | X-3) ... P(2 | 1) P(X-2) P(X-1) ... P(1)
所以这实际上就像使用三元组、二元组和一元组(尽管不直接估计二元组/一元组)。