如何计算要分类的单个新文档的TF * IDF?

时间:2014-04-01 15:59:04

标签: machine-learning classification information-retrieval text-mining document-classification

我使用文档术语向量来表示文档集合。我使用TF*IDF来计算每个文档向量的术语权重。然后我可以使用这个矩阵来训练文档分类模型。

我期待将来对新文档进行分类。但是为了对它进行分类,我需要首先将文档转换为文档术语向量,并且向量也应该由TF * IDF值组成。

我的问题是,我怎么能用一个文件来计算TF * IDF?

据我了解,TF可以根据单个文档本身计算,但IDF只能用文档集合计算。在我目前的实验中,我实际上计算了整个文档集合的TF * IDF值。然后我将一些文档用作训练集,将其他用作测试集。

我突然意识到这似乎不适用于现实生活。

ADD 1

因此实际上有两种不同的分类场景:

  1. 对某些内容已知但标签不是的文档进行分类 已知的。
  2. 对一些完全看不见的文件进行分类。
  3. 对于1,我们可以合并所有文件,包括标签和不标签。并获得所有这些TF * IDF。 这样,即使我们只使用文档带标签进行培训,培训结果仍然会包含文件没有标签的影响。 < / p>

    但我的情况是2。

    假设我从培训设置语料库的摘要中获得了以下 T 的信息:

    • 训练集中T的文档计数为 n
    • 培训文档总数 N

    我是否应该为看不见的文件D计算t的IDF,如下所示?

    IDF(t,D)= log((N + 1)/(n + 1))

    ADD 2

    如果我在新文档中遇到一个术语之前没有出现在培训语料库中怎么办? 我应该如何在doc-term向量中计算它的权重?

3 个答案:

答案 0 :(得分:12)

TF-IDF对单个文档没有意义,独立于语料库。它从根本上讲是强调相对稀有和信息丰富的词汇。

您需要保留语料库摘要信息才能计算TF-IDF权重。特别是,您需要每个术语的文档计数和文档总数。

是否要使用TF-IDF的整个训练集和测试集中的摘要信息,或者仅针对训练集来确定您的问题。如果您只关心将您的分类系统应用于您拥有的内容但您没有标签的文档(这实际上非常常见),那么在整个语料库中使用TF-IDF是可以的。如果您想在训练后将分类系统应用于完全看不见的文档,那么您只想使用训练集中的TF-IDF摘要信息。

答案 1 :(得分:4)

TF显然只取决于新文件。

IDF,您只能在训练语料库中进行计算。

您可以为IDF计算添加松弛项,或者按照建议进行调整。但是对于合理的训练集,常数+1项不会产生很大的影响。 AFAICT,在经典文档检索(思考:搜索)中,你不必费心去做。通常,他们查询文件会成为您的语料库的一部分,那么为什么它会成为IDF的一部分呢?

答案 2 :(得分:3)

对于看不见的词,TF计算不是问题,因为TF是文档特定度量。在计算IDF时,您可以使用平滑的逆文档频率技术。

IDF = 1 + log(total documents / document frequency of a term)

这里IDF的下限是1.所以如果在训练语料库中没有看到一个单词,它的IDF就是1.因为,没有普遍认同的单一公式来计算tf-idf甚至idf,你的公式为tf-idf计算也是合理的。

请注意,在许多情况下,如果在分类任务中没有太大影响,则忽略看不见的术语。有时,人们会使用UNKNOWN_TOKEN这样的特殊符号替换看不见的令牌并进行计算。

替代TF-IDF :另一种计算文档每个术语权重的方法是使用最大似然估计。在计算MLE时,您可以使用additive smoothing技术平滑,这也称为拉普拉斯平滑。如果您使用像Naive Bayes算法的Generative models进行文档分类,则使用MLE。