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