余弦相似度和tf-idf

时间:2011-06-06 17:36:22

标签: information-retrieval vsm cosine-similarity tf-idf

我对以下关于 TF-IDF 余弦相似性的评论感到困惑。

我正在读取两个,然后在维基相似性下的维基上我发现这句话“在信息检索的情况下,两个文档的余弦相似度将在0到1之间,因为术语频率(tf-idf权重) )不能是负数。两个项频率矢量之间的角度不能大于90.“

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

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

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

6 个答案:

答案 0 :(得分:36)

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

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

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

TF-IDF通过考虑每个术语一般发生的频率( D ocument F 频率)来调整原始术语频率。 nverse D ocument F 频率通常是文档数量的对数除以该术语出现的文档数量(图片来自维基百科) ):

IDF, credit to wikipedia

将“日志”视为一种微小的细微差别,可以帮助事情长期发挥作用 - 当它的论点增长时它会增长,所以如果这个术语很少见,那么IDF就会很高(很多文档除以非常少数文件),如果这个术语很常见,那么IDF就会很低(很多文件除以大量的文件〜= 1)。

假设您有100个食谱,除了一个之外的所有食谱都需要鸡蛋,现在您还有三个文件都包含“egg”,一个在第一个文档中,两个在第二个文档中,一个在第三个文档中。每个文档中“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个:'arugula'。它在第一个文档中出现两次,在第二个文档中出现三次,而在第三个文档中不出现。

'芝麻菜'的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和1。如果使用简单的术语计数,那么它们(就文件3而言)要比它们更接近。在这种情况下,可能会出现相同的结果(嘿!我们这里只有两个术语),但差别会更小。

这里的主要内容是TF-IDF在文档中生成更有用的术语度量,因此您不会关注真正常用的术语(停用词,'egg'),而忽视重要术语( '芝麻')。

答案 1 :(得分:33)

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

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

enter image description here

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

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

(公式取自Wikipedia,因此 d 2 。)

答案 2 :(得分:6)

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

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

答案 3 :(得分:-1)

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

答案 4 :(得分:-1)

Tf-idf仅用于根据tf - Term Frequency来查找文档中的向量 - 用于查找文档中出现的次数和反向文档频率 - 这可以衡量多少次该术语出现在整个系列中。

然后你可以找到文件之间的余弦相似性。

答案 5 :(得分:-1)

TFIDF是逆文档频率矩阵,找到与文档矩阵的余弦相似度会返回相似的列表