使用语言模型进行术语加权
Using language models for term weighting
我知道 scikit 使用 Vectorizer 支持 n-gram。但那些只是字符串。我想使用统计语言模型 (https://en.wikipedia.org/wiki/Language_model) like this one: http://www.nltk.org/_modules/nltk/model/ngram.html.
所以,我想要的是一个使用概率作为项权重的 Vectorizer,而不是让我们说 tf-idf 或只是一个标记计数。 scikit 不支持这有什么原因吗?我对语言建模相对缺乏经验,所以我不确定这种方法是否适合文本分类。
这取决于你所说的术语是什么意思。如果 - 像往常一样 - term 只是一个词,那么概率模型的工作方式与......简单的 tf 加权(即使没有 idf!)。为什么?因为 P(word)
的经验估计量只是 # word / # all_words
,而 # all_words
是常数,那么权重就变成了 #word
,这很简单 term frequency。所以从这个意义上说,scikit 可以满足您的需求。
好的,也许你想考虑上下文?那么什么样的语境呢?您要独立分析 P(pre-word1, word)
并将其用作 word
的加权和吗?那为什么不P(word, post-word1)
呢?为什么不 P(pre-word2, pre-word1, word, post-word1, post-word2)
等?当双字母组不可用时,为什么不包括一些基于单字母组的重新加权?答案很简单,一旦你开始使用语言模型作为加权方案,可能引入的数量就会呈指数级增长,并且没有 "typical" 方法,值得作为库的 "standard" 实施不是 NLP 库。
我知道 scikit 使用 Vectorizer 支持 n-gram。但那些只是字符串。我想使用统计语言模型 (https://en.wikipedia.org/wiki/Language_model) like this one: http://www.nltk.org/_modules/nltk/model/ngram.html.
所以,我想要的是一个使用概率作为项权重的 Vectorizer,而不是让我们说 tf-idf 或只是一个标记计数。 scikit 不支持这有什么原因吗?我对语言建模相对缺乏经验,所以我不确定这种方法是否适合文本分类。
这取决于你所说的术语是什么意思。如果 - 像往常一样 - term 只是一个词,那么概率模型的工作方式与......简单的 tf 加权(即使没有 idf!)。为什么?因为 P(word)
的经验估计量只是 # word / # all_words
,而 # all_words
是常数,那么权重就变成了 #word
,这很简单 term frequency。所以从这个意义上说,scikit 可以满足您的需求。
好的,也许你想考虑上下文?那么什么样的语境呢?您要独立分析 P(pre-word1, word)
并将其用作 word
的加权和吗?那为什么不P(word, post-word1)
呢?为什么不 P(pre-word2, pre-word1, word, post-word1, post-word2)
等?当双字母组不可用时,为什么不包括一些基于单字母组的重新加权?答案很简单,一旦你开始使用语言模型作为加权方案,可能引入的数量就会呈指数级增长,并且没有 "typical" 方法,值得作为库的 "standard" 实施不是 NLP 库。