相似的

use*_*384 4 java text similarity tf-idf

我正在使用TF/IDF来计算相似度.例如,如果我有以下两个doc.

Doc A => cat dog
Doc B => dog sparrow
Run Code Online (Sandbox Code Playgroud)

这是正常的,它的相似性是50%,但是当我计算它的TF/IDF时.如下

Doc A的Tf值

dog tf = 0.5
cat tf = 0.5
Run Code Online (Sandbox Code Playgroud)

Doc B的Tf值

dog tf = 0.5
sparrow tf = 0.5
Run Code Online (Sandbox Code Playgroud)

Doc A的IDF值

dog idf = -0.4055
cat idf = 0
Run Code Online (Sandbox Code Playgroud)

Doc B的IDF值

dog idf = -0.4055 ( without +1 formula 0.6931)
sparrow idf = 0
Run Code Online (Sandbox Code Playgroud)

Doc A的TF/IDF值

0.5x-0.4055 + 0.5x0 = -0.20275
Run Code Online (Sandbox Code Playgroud)

Doc B的TF/IDF值

0.5x-0.4055 + 0.5x0 = -0.20275
Run Code Online (Sandbox Code Playgroud)

现在看起来有-0.20275的相似性.是吗?或者我错过了什么?或者也是下一步呢?请告诉我,我也可以计算一下.

我使用了维基百科提到的tf/idf公式

Yuv*_*l F 17

让我们看看我是否得到了你的问题:你想要计算两个文件之间的TF/IDF相似性:

Doc A: cat dog
Run Code Online (Sandbox Code Playgroud)

Doc B: dog sparrow
Run Code Online (Sandbox Code Playgroud)

我认为这是你的整个语料库.因此,|D| = 2 对于所有单词,Tfs确实为0.5.为了计算'狗' log(|D|/|d:dog in d| = log(2/2) = 0 的IDF,同样,'cat'和'sparrow'的IDF是log(2/1) = log(2) =1 (我使用2作为日志基础来使这更容易).

因此,'dog'的TF/IDF值将为0.5*0 = 0,'cat'和'sparrow'的TF/IDF值将为0.5*1 = 0.5

要测量两个文档之间的相似性,您应该计算(cat,sparrow,dog)空间中的向量之间的余弦:(0.5,0,0)和(0,0.5,0)并得到结果0.

把它们加起来:

  1. 您在IDF计算中有错误.
  2. 此错误会创建错误的TF/IDF值.
  3. 维基百科的文章没有充分解释TF/IDF对相似性的使用.我更喜欢Manning,Raghavan和Schütze的解释.