38

我对以下关于TF-IDFCosine Similarity的评论感到困惑。

我正在阅读这两者,然后在余弦相似度下的 wiki 上阅读我发现这句话“在信息检索的情况下,两个文档的余弦相似度范围为 0 到 1,因为术语频率(tf-idf 权重)不能负。两个词频向量之间的角度不能大于 90。

现在我想知道....它们不是两种不同的东西吗?

tf-idf 是否已经在余弦相似度内?如果是,那到底是什么——我只能看到内点积和欧几里得长度。

我认为 tf-idf 是在对文本运行余弦相似度之前可以做的事情。我错过了什么?

4

6 回答 6

42

Tf-idf 是您应用于文本以获取两个实值向量的转换。然后,您可以通过取它们的点积并将其除以它们的范数的乘积来获得任何向量对的余弦相似度。这会产生向量之间角度的余弦值。

如果d 2q是 tf-idf 向量,则

在此处输入图像描述

其中θ是向量之间的角度。由于θ的范围是 0 到 90 度,所以 cos θ的范围是 1 到 0。θ的范围 只能是 0 到 90 度,因为 tf-idf 向量是非负的。

tf-idf 和余弦相似度/向量空间模型之间没有特别深的联系;tf-idf 与文档术语矩阵配合得很好。但是,它在该域之外使用,原则上您可以在 VSM 中替换另一个转换。

(公式取自维基百科,因此是d 2。)

于 2011-06-06T17:48:20.283 回答
42

TF-IDF只是一种衡量token在文本中重要性的方法;这只是将文档转换为数字列表的一种非常常见的方法(术语向量,它提供了您获得余弦的角度的一个边缘)。

要计算余弦相似度,您需要两个文档向量;向量用索引表示每个唯一术语,该索引处的值是衡量该术语对文档和文档相似性一般概念的重要性的某种度量。

您可以简单地计算每个术语在文档中出现的次数(Term F requency),并将该整数结果用于向量中的术语得分,但结果不会很好。非常常见的术语(例如“is”、“and”和“the”)会导致许多文档看起来彼此相似。(这些特定示例可以通过使用停用词列表来处理,但其他不够通用而不能被视为停用词的常用术语会导致同样的问题。在 Stackoverflow 上,“问题”一词可能属于这一类。如果你在分析烹饪食谱时,您可能会遇到“鸡蛋”这个词的问题。)

TF- IDF通过考虑每个词项通常出现的频率(文档频率)来调整原始词条频率文档频率通常是文档数量除以该术语出现的文档数量的对数(图片来自维基百科):

IDF,归功于维基百科

将“日志”视为有助于长期解决问题的细微差别——当它的论点增长时它会增长,所以如果这个词很罕见,IDF 会很高(很多文档除以很少的文档) ,如果这个词很常见,IDF 会很低(很多文档除以很多文档 ~= 1)。

假设您有 100 个食谱,除了一个以外都需要鸡蛋,现在您还有三个文档都包含“鸡蛋”一词,一个在第一个文档中,两次在第二个文档中,一次在第三个文档中。每个文档中“egg”的词频为 1 或 2,文档频率为 99(或者,如果计算新文档,可以说是 102。让我们坚持使用 99)。

'egg' 的 TF-IDF 是:

1 * log (100/99) = 0.01    # document 1
2 * log (100/99) = 0.02    # document 2
1 * log (100/99) = 0.01    # document 3

这些都是很小的数字。相比之下,让我们看看另一个只出现在 100 个食谱语料库中的 9 个中的词:“芝麻菜”。它在第一个文档中出现两次,在第二个文档中出现三次,并且在第三个文档中不出现。

“芝麻菜”的 TF-IDF 是:

1 * log (100/9) = 2.40  # document 1
2 * log (100/9) = 4.81  # document 2
0 * log (100/9) = 0     # document 3

'arugula'对于文档 2非常重要,至少与 'egg' 相比。谁在乎卵子出现了多少次?万物皆有蛋!这些术语向量比简单计数提供的信息要多得多,并且它们将导致文档 1 和 2 比使用简单术语计数时更接近(相对于文档 3)。在这种情况下,可能会出现相同的结果(嘿!我们这里只有两个术语),但差异会更小。

这里的要点是 TF-IDF 为文档中的术语生成更有用的度量,因此您不会关注真正常见的术语(停用词,'egg'),而忽略重要的术语('arugula' )。

于 2013-10-26T22:05:46.497 回答
7

这些教程中解释了余弦相似度的完整数学过程

假设如果要计算两个文档之间的余弦相似度,第一步将是计算两个文档的 tf-idf 向量。然后求这两个向量的点积。这些教程将对您有所帮助:)

于 2014-12-03T05:41:59.657 回答
-1

tf/idf 加权在某些情况下会失败并在计算时在代码中生成 NaN 错误。阅读此内容非常重要: http ://www.p-value.info/2013/02/when-tfidf-and-cosine-similarity-fail.html

于 2013-06-07T22:43:18.160 回答
-1

tf-idf 仅用于从基于 tf 的文档中查找向量 - 词频 - 用于查找词在文档中出现的次数和逆文档频率 - 测量词出现的次数在整个收藏中。

然后您可以找到文档之间的余弦相似度。

于 2016-06-20T11:29:51.553 回答
-1

TFIDF 是逆文档频率矩阵,根据文档矩阵查找余弦相似度会返回相似列表

于 2020-11-13T19:00:23.573 回答