【问题标题】:How to calculate TF*IDF for a single new document to be classified?如何计算要分类的单个新文档的 TF*IDF?
【发布时间】:2023-03-04 17:51:01
【问题描述】:

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

我期待将来对新文档进行分类。但是为了分类,我需要先把文档变成一个document-term向量,这个向量也应该由TF*IDF值组成。

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

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

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

添加 1

所以实际上有两种细微不同的分类场景:

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

对于 1,我们可以组合 所有 文档,包括有标签和没有标签。并获得所有这些的 TF*IDF。 这样,即使我们只使用有标签的文档进行训练,训练结果仍然会包含没有标签的文档的影响。

但我的情况是 2。

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

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

我应该为 unseen 文档 D 计算 t 的 IDF,如下所示?

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

添加 2

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

【问题讨论】:

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


    【解决方案1】:

    对于看不见的单词,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 技术进行平滑处理,该技术也称为拉普拉斯平滑处理。如果您使用 Generative models(如 Naive Bayes 算法进行文档分类),则使用 MLE。

    【讨论】:

      【解决方案2】:

      TF 显然只依赖于新文档。

      IDF,你只在你的训练语料库上计算。

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

      【讨论】:

      • 谢谢。我用 unseen terms 更新了我的问题。您能否更详细地介绍“经典文档检索(搜索)”场景?您所说的“他们查询的文档不会成为您的语料库的一部分”是什么意思?
      • en.wikipedia.org/wiki/Information_retrieval TF-IDF 不仅用于机器学习(训练/测试拆分等),还用于 IR(=搜索!)。看不见的术语:忽略它们。无论如何,没有文档会匹配这些,因此您不需要知道 IDF 权重。
      • 此外,在训练中看到的在测试中看到的术语在分类文档中根本没有用,你应该把它们扔掉。除非您想使用 OOV 令牌并估计其在您的训练语料库中的价值,否则对于确定真正的课程没有什么价值,请不要打扰
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-05-11
        • 1970-01-01
        • 2021-06-17
        • 2017-02-27
        • 2017-12-07
        • 2017-04-07
        • 1970-01-01
        • 2018-11-09
        • 2019-01-10
        相关资源
        最近更新 更多