为文档分类计算IDF(逆文档频率)

5

我在文档分类中计算逆向文档频率(IDF)时有疑问。我有多个类别,每个类别有多个用于训练的文档。我使用以下公式为文档中的每个术语计算IDF:

IDF(t,D)=log(Total Number documents/Number of Document matching term);

我的问题是:

  1. "Corpus中文档的总数"是什么意思?这个文档计数是来自当前类别还是所有可用类别?
  2. "匹配术语的文档数"是什么意思?这个术语匹配的文档数是来自当前类别还是所有可用类别?
2个回答

9

语料中的文档总数是指您在语料库中拥有的文档数量。所以如果您有20个文档,那么这个值就是20

匹配词项的文档数是指词项t出现在多少篇文档中的计数。所以如果您总共有20个文档,而词项t出现在其中15篇文档中,则匹配词项的文档数的值为15。

对于这个例子,此值应为IDF(t,D)=log(20/15) = 0.1249

现在,如果我理解正确,您对每个文档有多个类别,并且希望能够使用一个或多个这些类别对新文档进行分类。一种方法是为每个类别创建一个文档。每个类别文档应包含所有标记有该类别的文本。然后,您可以在这些文档上执行tf * idf

然后,通过将用于查询的术语值相加,使用为每个类别计算的不同术语值,可以简单地将新文档分类。将用于计算乘积的术语值产生最高结果的类别将排名第一。

另一种可能性是使用查询中每个术语的idf创建一个向量。在查询中不出现的所有术语都赋予0的值。然后,可以使用例如余弦相似度将查询向量与每个类别向量进行比较。

平滑处理也是处理查询中未在语料库中出现的单词的有用技术。

我建议阅读Christopher D. Manning、Prabhakar Raghavan和Hinrich Schütze所著的“信息检索简介”的6.2节和6.3节


谢谢,我得到了答案。但是你能否稍微详细地解释一下如何对新文档进行分类?也就是如何获取新文档的匹配类别?然后如何形成新文档的频率向量以进行匹配? - vignesh kumar rathakumar
@Sicco,我正在做你在答案中提到的事情。但是我只有两个类别,所以只有两个文档。由于文档数量很少,我的单词逆文档频率(Idf)只能为{0, 0.5},这使我失去了太多信息。 - Mangat Rai Modi

0

我写了一篇小文章,描述了词频-逆文档频率。你可以在这里找到它:http://bigdata.devcodenote.com/2015/04/tf-idf-term-frequency-inverse-document.html

以下是文章的一段摘录:

TF-IDF是在文档分类中广泛使用的最基本的度量指标。 让我们来尝试定义这些术语:

词频基本上是指某个词在一个文档中出现的频率与其他词在该文档中出现频率的重要性比较。

而逆文档频率则是指给定文集(我们希望将其分类到不同类别中的文档集合)中该词在所有文档中出现的重要性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接