0

谁能帮我发现问题?我需要计算查询和文档集合之间的相似度,并且我已经使用了该程序:https://github.com/aliabbasrizvi/LatentSemanticIndexing][1]。在这个程序中,相似度是通过“点积”计算的,我将其更改为“余弦相似度”,但我得到了很高的相似度分数,而我应该在 0 和 1 之间得到它。谁能告诉我出了什么问题?TF_IDF有什么作用吗?或者是其他东西?

我得到的那些结果”

  1. 文档:b4,相关度得分:2.185808108221954

  2. 文档:h286,相关分数:1.1350011283882473E-16

这是我用于相似性的代码”

public double getVectorModulus(Matrix matrix) {                 
            double dotProduct = 0.0;
            double magnitude1 = 0.0;
            double magnitude2 = 0.0;
            double cosineSimilarity = 0.0;
            double a=0.0, b=0.0;
            int i = 0,j = 0;
              for ( i = 0; i < matrix.getRowDimension(); i++)
                { a=matrix.get(i, 0);
                  b= matrix.get(i, 0);
                   dotProduct += (a*b);  //a.b
                    magnitude1+=Math.pow(a, 2); //a^2
                    magnitude2+=Math.pow(b, 2); //b^2
                }
            magnitude1+=Math.sqrt(magnitude1); //   sqrt(a^2)
            magnitude2+=Math.sqrt(magnitude2); //   sqrt(b^2)
            if(magnitude1 !=0.0 | magnitude2 !=0.0)
                cosineSimilarity = dotProduct / (magnitude1 *magnitude2);    
    return cosineSimilarity;
    }
4

0 回答 0