我对计算文档分类中的IDF(逆文档频率)有疑问。我有多个类别,包含多个培训文档。我正在使用以下公式计算文档中每个术语的IDF:
IDF(t,D)=log(Total Number documents/Number of Document matching term);
我的问题是:
答案 0 :(得分:9)
Total Number documents in Corpus
只是您语料库中的文档数量。因此,如果您有20个文档,那么此值为20
。
Number of Document matching term
是术语t
出现的文档数量的计数。因此,如果您总共有20个文档,并且15个文档中出现t
一词,则Number of Documents matching term
的值为15。
此示例的值因此为IDF(t,D)=log(20/15) = 0.1249
现在,如果我是正确的,那么每个文档有多个类别,并且您希望能够使用这些类别中的一个或多个对新文档进行分类。一种方法是为每个类别创建一个文档。每个类别文档都应包含所有标有此类别的文本。然后,您可以对这些文档执行tf*idf
。
然后,可以通过使用针对每个类别计算的不同术语值对查询的术语值求和来实现对新文档进行分类的简单方式。用于计算产品的最高结果的术语值的类别将排在第1位。
另一种可能性是使用查询中每个术语的idf
为查询创建一个向量。查询中未出现的所有术语的值均为0
。然后可以使用例如cosine similarity来比较查询向量与每个类别向量的相似性。
Smoothing也是处理查询中未在您的语料库中出现的单词的有用技巧。
我建议阅读Christopher D. Manning,Prabhakar Raghavan和HinrichSchütze撰写的“信息检索简介”sections 6.2 and 6.3。
答案 1 :(得分:-1)
我在这里写了一篇描述术语频率 - 逆文档频率的小帖子:http://bigdata.devcodenote.com/2015/04/tf-idf-term-frequency-inverse-document.html
以下是该帖子的摘录:
TF-IDF是在文档分类中广泛使用的最基本的度量标准。 让我们尝试定义这些术语:
与文档中的其他单词相比,术语频率基本上是文档中某个单词出现频率的重要性。
另一方面,反向文档频率对于给定集合(我们要将其分类为不同类别的文档)中的所有文档中出现的单词具有重要意义。