余弦相似度和tf-idf

N00*_*mer 31 information-retrieval tf-idf vsm cosine-similarity

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

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

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

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

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

rcr*_*ick 38

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

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

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

TF-IDF通过考虑每个术语一般发生的频率(D epument F频率)来调整原始术语频率. nverse d ocument ˚F requency通常是通过在(维基百科图片)发生词的文档数除以文件数的日志:

IDF,归功于维基百科

把"日志"想象成一个微小的细微差别,可以帮助事情长期发挥作用 - 它会随着论证的增长而增长,所以如果这个术语很少见,那么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
Run Code Online (Sandbox Code Playgroud)

这些都是非常小的数字; 相反,让我们看看另一个单词,它只发生在你的100个食谱语料库中的9个:'arugula'.它在第一个doc中出现两次,在第二个doc中出现三次,而在第三个文档中不出现.

'芝麻菜'的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
Run Code Online (Sandbox Code Playgroud)

'arugula' 对于文档2 非常重要,至少与'egg'相比.谁在乎鸡蛋发生多少次?一切都包含鸡蛋!这些术语向量比简单计数更具信息性,并且它们将导致文档1和2(如果使用文档3)更接近于使用简单术语计数时的文档.在这种情况下,可能会出现相同的结果(嘿!我们这里只有两个术语),但差别会更小.

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


Fre*_*Foo 34

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

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

在此输入图像描述

其中θ是矢量之间的角度.如θ从0度到90度的范围内,COS θ范围从1到0 θ 可以仅范围从0到90度,因为TF-IDF矢量都是非负的.

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

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

  • 谢谢,然后我没有错:D很高兴你的问题快速得到解答,而不是等待上学^^ (3认同)

Gun*_*jan 6

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

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