如何为要分类的单个新文档计算TF * IDF?
classification
machine-learning
text-mining
4
0

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

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

我的问题是,仅凭一个文档如何计算TF * IDF?

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

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

加1

因此,实际上有2种细微不同的分类方案:

  1. 对内容已知但标签未知的一些文档进行分类。
  2. 对一些完全看不见的文档进行分类。

对于1,我们可以合并所有带有和不带有标签的文档。并获得所有它们的TF * IDF。 这样,即使我们只使用带有标签的文档进行培训,培训结果仍将包含没有标签的文档的影响。

但是我的情况是2。

假设我从训练集语料库的摘要中获得了关于术语T的以下信息:

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

我应该如下计算看不见的文档D的t的IDF吗?

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

加2

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

参考资料:
Stack Overflow
收藏
评论
共 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时,可以使用加法平滑技术(也称为拉普拉斯平滑)进行平滑。如果您要使用生成模型(如Naive Bayes算法)进行文档分类,则使用MLE。

收藏
评论

TF-IDF对于独立于语料库的单个文档没有意义。从根本上讲,是要强调相对稀有和翔实的单词。

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

您是要使用来自TF-IDF的整个训练集和测试集中的摘要信息,还是仅使用训练集,这取决于您的问题制定方式。如果是这种情况,您只想将分类系统应用于具有其内容但不具有其标签的文档(这实际上很常见),则可以对整个语料库使用TF-IDF。如果要在训练后将分类系统应用于完全看不见的文档,则只想使用训练集中的TF-IDF摘要信息。

收藏
评论

TF显然仅取决于新文档。

IDF,您只能根据您的训练语料进行计算。

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号