machine-learning - 在比较不同文档对的余弦相似度时是否需要调整长度?
问题描述
假设我有两个文档,A 和 B,每个文档有两个版本,1 和 2。我计算 (A1, A2) 和 (B1, B2) 的余弦相似度。令 Sa = cosine(A1, A2),且 Sb = cosine(B1, B2)。
如果 Sa < Sb,我可以说文档 A 的变化或更新比文档 B 大吗?
一篇论文指出:“一对文档越长,两个文档中包含一个单词的可能性就越大,从而导致文档不同的可能性降低(有关分析证明,请参见附录 B)。” 论文可以在这里找到。
这是真的?由于词汇量的大小是有限的,因此对于 Jaccard 相似性,这种说法可能是正确的。然而,余弦相似度是一个角度,直观上文档的长度应该无关紧要。如果这是真的,那么调整长度相似度分数的最佳方法是什么,以便我可以在不同的文档对之间进行比较。谢谢!
我基于 22861 对运行了一些统计数据。事实上,文档长度和相似度是高度正相关的。平均值:
WC2 4829.637374
WCl 4389.449193
WCA 4609.543283
Cosine 0.750225
CosineR 0.786806
Jaccard 0.606962
JaccardR 0.653031
在哪里:
WC2 是 version2 的干净字数,不包括停用词、数字和标点符号。WCA 是平均值(WC1 和 WC2)。余弦是基于干净词的干净余弦相似度。
CosineR 是基于所有标记(包括停用词、数字和标点符号)的余弦相似度。
这是皮尔逊相关矩阵:
WC2 WCl WCA Cosine CosineR Jaccard JaccardR
WC2 1.000000 0.886743 0.972220 0.121300 0.122131 0.107936 0.123040
WCl 0.886743 1.000000 0.970310 0.238503 0.257914 0.220078 0.254090
WCA 0.972220 0.970310 1.000000 0.184233 0.194497 0.167911 0.193036
Cosine 0.121300 0.238503 0.184233 1.000000 0.978050 0.982066 0.971082
CosineR 0.122131 0.257914 0.194497 0.978050 1.000000 0.948325 0.981853
Jaccard 0.107936 0.220078 0.167911 0.982066 0.948325 1.000000 0.975908
JaccardR 0.123040 0.254090 0.193036 0.971082 0.981853 0.975908 1.000000
解决方案
正如您所说,文档的长度并未反映在余弦相似度中。您可以将余弦相似度乘以文档长度差的绝对值 (||A1|-|A2||*Sa
和||B1|-|B2||*Sb
)。
推荐阅读
- mysql - MySQL ERROR 1264 (22003):列的值超出范围
- java - 预期输出的值未显示
- uiimagepickercontroller - iOS14 中的 UIImagePickerController 和 PHPickerViewController 图像选择空白
- html - 使一个 HTML 元素在源代码中以相反顺序显示在另一个之上
- reactjs - react material-ui select您为选择组件提供了超出范围的值`undefined`
- python - 如何从没有标题的跨度标签中提取文本?
- javascript - 在 X 轴上拖动时如何添加 MouseDragEvent 侦听器?
- amazon-web-services - 添加 EKS 托管 Windows 节点组失败。如何调试?
- c++ - 检查 C++ 成员是否为私有的机制
- python - 使用正则表达式从字符串中删除日期?