我使用文档-词向量来表示一组文档。我使用TF*IDF来计算每个文档向量的词权重。然后我可以使用这个矩阵来训练一个用于文档分类的模型。
我期待未来对新文档进行分类。但为了对其进行分类,我首先需要将文档转换为文档-词向量,且该向量也应由TF*IDF值组成。
我的问题是,如何仅用单个文档计算TF*IDF?
据我了解,TF可以基于单个文档本身计算,但IDF只能通过一组文档计算。在我当前的实验中,我实际上是为整个文档集合计算TF*IDF值。然后我使用一些文档作为训练集,其他文档作为测试集。
我突然意识到这似乎不太适用于现实生活。
补充1
因此,实际上有两种微妙不同的分类场景:
- 对内容已知但标签未知的文档进行分类。
- 对完全未见的文档进行分类。
对于1,我们可以将所有文档结合起来,无论是否有标签。并在所有文档上获取TF*IDF。这样,即使我们只使用有标签的文档进行训练,训练结果仍然会受到无标签文档的影响。
但我的场景是2。
假设我从训练集语料库的摘要中获得了关于词T的以下信息:
- 训练集中词T的文档数量为n
- 训练文档的总数为N
我应该像下面这样计算未见文档D中词t的IDF吗?
IDF(t, D)= log((N+1)/(n+1))
补充2
如果我在新文档中遇到一个在训练语料库中之前未出现过的词,我应该如何在文档-词向量中计算它的权重?
回答:
对于单个文档,独立于语料库,TF-IDF没有意义。它本质上是强调相对稀有且信息量大的词语。
你需要保留语料库的摘要信息来计算TF-IDF权重。特别是,你需要每个词的文档计数和文档总数。
你是否希望使用整个训练集和测试集的摘要信息来计算TF-IDF,还是仅使用训练集的摘要信息,这取决于你的问题设定。如果你只关心将分类系统应用于内容已知但标签未知的文档(这实际上很常见),那么对整个语料库使用TF-IDF是可以的。如果你希望在训练后将分类系统应用于完全未见的文档,那么你只应使用训练集的TF-IDF摘要信息。