计算两个列表之间的相似度
Posted
技术标签:
【中文标题】计算两个列表之间的相似度【英文标题】:Computing similarity between two lists 【发布时间】:2012-03-11 00:47:26 【问题描述】:编辑: 由于每个人都感到困惑,我想简化我的问题。我有两个有序列表。现在,我只想计算一个列表与另一个列表的相似程度。
例如,
1,7,4,5,8,9
1,7,5,4,9,6
什么是衡量这两个列表之间相似性的好方法,所以顺序很重要。例如,我们应该惩罚相似性,因为在两个列表中交换了 4,5?
我有 2 个系统。一个最先进的系统和一个我实施的系统。给定一个查询,两个系统都返回一个排序的文档列表。现在,我想比较我的系统和“最先进的系统”之间的相似性,以衡量我的系统的正确性。请注意,文件的顺序很重要,因为我们正在讨论排名系统。 有谁知道任何可以帮助我找到这两个列表之间相似性的措施。
【问题讨论】:
您是否假设“最先进的系统”返回的文档是好的?或者你想测试你的系统是否比“最先进的”更好?如果第二个:你的判断是什么?您如何评估查询是否确实相关? @amit:我假设最先进的系统返回的文档是好的。假设顺序非常重要,我想计算我的结果与它的相似程度 @amit:你为什么要删除你的答案? 我认为它不符合您的需要,目前正在改进 我认为您应该重新表述您的问题,因为每个人在阅读您的问题后都会得出相同的结论,即每次您要求人们重新阅读您的问题时,这意味着您的问题有问题问题。所以请详细说明一下。 【参考方案1】:DCG [Discounted Cumulative Gain] 和 nDCG [normalized DCG] 通常是衡量排名列表的好方法。
如果相关文档排名第一,它会获得全部增益,并且随着排名降低,增益会降低。
使用 DCG/nDCG 对比 SOA 基线评估系统:
注意:如果您将“最先进的系统”返回的所有结果设置为相关,那么您的系统与使用 DCG/nDCG 获得相同排名的系统相同 .
因此,可能的评估可能是:DCG(your_system)/DCG(state_of_the_art_system)
为了进一步增强它,您可以给出一个相关性等级 [relevance will not be binary] - 并且将根据每个文档在最新技术中的排名方式来确定。例如,rel_i = 1/log(1+i)
用于最先进系统中的每个文档。
如果此评估函数收到的值接近 1:您的系统与基线非常相似。
示例:
mySystem = [1,2,5,4,6,7]
stateOfTheArt = [1,2,4,5,6,9]
首先,根据最先进的系统[使用上面的公式],为每个文档打分:
doc1 = 1.0
doc2 = 0.6309297535714574
doc3 = 0.0
doc4 = 0.5
doc5 = 0.43067655807339306
doc6 = 0.38685280723454163
doc7 = 0
doc8 = 0
doc9 = 0.3562071871080222
现在你计算DCG(stateOfTheArt)
,并使用上面所说的相关性[注意相关性在这里不是二进制的,得到DCG(stateOfTheArt)= 2.1100933062283396
接下来,使用相同的相关权重为您的系统计算它并得到:DCG(mySystem) = 1.9784040064803783
因此,评价为DCG(mySystem)/DCG(stateOfTheArt) = 1.9784040064803783 / 2.1100933062283396 = 0.9375907693942939
【讨论】:
@user1221572:看看我的编辑,您可以使用nDCG(your_system)/nDCG(state_of_the_art_system)
来确定系统的相似程度。注意:重要的是,在此评估中相关性不会是二元的。
好的。请给我一个例子。我有两个列表 1,2,5,4,6 , 7 (我的系统)和 1,2,4,5,6,9 (最先进的)。相似度的衡量标准是什么
@user1221572:我加了一个例子,看看。
我不确定使用 ndcg 是否是个好主意,因为 ndcg(state_of_the_art) 将始终为 1。因此相似性将归结为 ndcg(your_system)。因此,我应该只使用 DCG(my system)/dcg(soa) 来计算相似度吗?这会有什么缺点吗
@user1221572:我建议的指标实际上是 nDCG 本身的变体。我认为使用它不会有任何缺点。【参考方案2】:
Kendalls tau 是您想要的指标。它测量列表中成对反转的数量。斯皮尔曼的足规也是如此,但测量的是距离而不是倒置。它们都是为手头的任务而设计的,测量两个排序列表中的差异。
【讨论】:
提到的问题“请注意,文档的顺序很重要,因为我们正在谈论排名系统”。 Kendalls tau 和 Spearman 的脚规则都没有考虑顺序。 @M1L0U 呃,这两个指标都是专门为考虑顺序或排名而设计的。 en.wikipedia.org/wiki/Rank_correlation 它们正是 OP 所需要的。 哦,是的,抱歉,我的意思是他们不会根据项目的真实排名来衡量错误。也就是说,与 DCG 或 NDCG 不同,如果您在排名靠前或排名靠后发生翻转,您需要支付同样多的费用。【参考方案3】:文件清单是否详尽?也就是说,系统 1 排序的每个文档等级是否也由系统 2 排序?如果是这样a Spearman's rho 可以满足您的目的。当他们不共享相同的文档时,最大的问题是如何解释该结果。我认为没有一种测量方法可以回答这个问题,尽管可能有一些测量方法实现了对它的隐含答案。
【讨论】:
根据 OP 在评论中给出的示例,我提到的方法(比 comp-sci 更具统计性)是 (rho) = 0.943。 它仍然有效... rho 使用成对的顺序并告诉您这些等级顺序之间的关系。 但是,我在答案中发布的更广泛的问题仍然成立。应该如何解释文档在最先进的系统中存在但在您的系统中不存在?这与说您的系统将其排在某个最低阈值以下是一样的吗?如果是这样,任何比较指标的值都会被夸大,因为只考虑排名在相似范围内的情况,而忽略系统之间存在很大分歧的情况。 从概念上讲,像您所说的那样的列表的一致性程度是(我认为,最简单的)定量地认为是两个列表之间排名分数的绝对差异的某种组合。发生在数字上的所有其他事情都是一种或另一种花哨的废话。 值得注意的是,正是这种假设,即分歧在早期队伍中最为重要,这使得部分忽略丢失文件的问题成为可能。具体来说,在 DCG 方法下,丢失的文档被认为只是“丢失的信号”,而在 Spearman Rho 方法中,包括这些结果会极大地改变统计数据的值。 DCG会不会出现类似的问题?考虑到您的示例...如果您突然知道有关 3 级文档的信息,这些值会发生什么变化?【参考方案4】:正如您所说,您想计算一个列表与另一个列表的相似程度。我认为简单地说,您可以从计算反转的数量开始。有一个 O(NlogN) 分而治之的方法。这是衡量两个列表之间“相似性”的一种非常简单的方法。 例如如果你想比较一个音乐网站上两个人的音乐品味有多“相似”,你可以把他们对一组歌曲的排名计算出来。其中的倒置。数量越少,他们的口味就越“相似”。
由于您已经考虑将“最先进的系统”作为正确性的基准,因此计数倒置应该可以为您提供排名“相似性”的基本衡量标准。 当然,这只是一种入门方法,但您可以根据自己对“反转间隙”等的严格程度来构建它。
D1 D2 D3 D4 D5 D6
-----------------
R1: 1, 7, 4, 5, 8, 9 [Rankings from 'state of the art' system]
R2: 1, 7, 5, 4, 9, 6 [ your Rankings]
由于排名是按文档顺序排列的,因此您可以根据 R1 编写自己的比较器函数(“最先进系统”的排名,从而计算与该比较器相比的反转数。
您可以为找到的每个反转“惩罚”“相似性”:i ' R2[j] (>'这里你使用你自己的比较器)
您可能会发现有用的链接:Link1 Link2 Link3
【讨论】:
【参考方案5】:我实际上知道为此目的的四种不同措施。
已经提到了三个:
NDCG 肯德尔的 Tau 斯皮尔曼的罗但如果您有两个以上的排名需要比较,请使用 Kendall's W。
【讨论】:
【参考方案6】:除了已经说过的,我想向您指出以下优秀论文:W. Webber et al, A Similarity Measure for Indefinite Rankings (2010)。除了包含对现有度量的良好回顾(例如上述 Kendall Tau 和 Spearman 的脚规则)外,作者还提出了一种直观吸引人的概率度量,适用于不同长度的结果列表,并且当并非所有项目都出现在两个列表中时。粗略地说,它由用户在检查项目 k(而不是放弃)后扫描项目 k+1 的“持久性”概率 p 参数化。 Rank-Biased Overlap (RBO) 是用户停止阅读时结果的预期重叠率。
RBO 的实现稍微复杂一些;您可以查看 Apache Pig here 中的实现。
另一个简单的度量是余弦相似度,两个向量之间的余弦,维度对应于项目,逆排名为权重。但是,它不会优雅地处理仅出现在其中一个列表中的项目(请参阅上面链接中的实现)。
-
对于列表 1 中的每个项目 i,令 h_1(i) = 1/rank_1(i)。对于列表 2 中未出现在列表 1 中的每个项目 i,令 h_1(i) = 0。针对列表 2 对 h_2 执行相同操作。
计算 v12 = sum_i h_1(i) * h_2(i); v11 = sum_i h_1(i) * h_1(i); v22 = sum_i h_2(i) * h_2(i)
返回 v12 / sqrt(v11 * v22)
对于您的示例,这给出的值为 0.7252747。
除了您的直接问题,请让我给您一些实用的建议。除非您的“生产系统”基线是完美的(或者我们正在处理黄金组),否则比较质量度量(例如上述 nDCG)而不是相似性几乎总是更好;新的排名有时会比基线更好,有时更差,您想知道前一种情况是否比后者更频繁地发生。其次,相似性度量在绝对尺度上解释并非易事。例如,如果您的相似度得分为 0.72,这是否意味着它真的相似或显着不同?相似性度量更有助于说,例如一种新的排名方法 1 比另一种新的排名方法 2 更接近生产。
【讨论】:
【参考方案7】:我想你在谈论比较两个信任我的信息检索系统并不是一件小事。这是一个复杂的计算机科学问题。
要衡量相关性或进行某种 A/B 测试,您需要具备以下条件:
衡量相关性的竞争对手。由于您有两个系统,因此满足此先决条件。
您需要手动评估结果。您可以要求您的同事对热门查询的查询/url 对进行评分,然后对漏洞进行评分(即未评分的查询/url 对您可以使用“学习排名”算法http://en.wikipedia.org/wiki/Learning_to_rank 获得一些动态排名功能。不要惊讶但那是真的(请阅读下面的 Google/Bing 示例)。
Google 和 Bing 是横向搜索市场的竞争对手。这些搜索引擎在世界各地聘请人工评委,并在他们身上投资数百万美元,以评估他们的查询结果。因此,对于每个查询/网址对,通常都会对前 3 名或前 5 名的结果进行评级。根据这些评级,他们可能会使用像 NDCG(归一化折扣累积增益)这样的指标,这是最好的指标之一,也是最受欢迎的指标之一。
根据***:
折扣累积增益 (DCG) 是衡量 Web 搜索引擎算法或相关应用程序有效性的指标,通常用于信息检索。 DCG 使用搜索引擎结果集中文档的分级相关性量表,根据文档在结果列表中的位置来衡量文档的有用性或增益。增益从结果列表的顶部到底部累积,每个结果的增益在较低的排名中打折。
***很好地解释了 NDCG。这是一篇简短的文章,请仔细阅读。
【讨论】:
我不想比较哪个系统更好。我只是想证明我的结果与最先进的系统相似。 NDCG 在这里如何帮助我以上是关于计算两个列表之间的相似度的主要内容,如果未能解决你的问题,请参考以下文章