如何找到 vector 之间的余弦相似度?
我需要找到相似度来衡量两行文本之间的相关性。
例如,我有两句话:
system for user interface
user interface machine
…以及它们各自的 vector 在 tF-idf 之后,然后使用 LSI 进行归一化,例如
[1,0.5]
和 [0.5,1]
.
如何测量这些 vector 之间的相似度?
最佳答案
如果你想避免依赖第三方库来完成这样一个简单的任务,这里有一个简单的 Java 实现:
public static double cosineSimilarity(double[] vectorA, double[] vectorB) {
double dotProduct = 0.0;
double normA = 0.0;
double normB = 0.0;
for (int i = 0; i < vectorA.length; i++) {
dotProduct += vectorA[i] * vectorB[i];
normA += Math.pow(vectorA[i], 2);
normB += Math.pow(vectorB[i], 2);
}
return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
}
请注意,该函数假定两个 vector 具有相同的长度。您可能需要明确检查它的安全性。
关于java - 如何计算两个 vector 的余弦相似度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/520241/