关于设计指标的建议

时间:2012-01-24 03:04:01

标签: arrays algorithm language-agnostic metrics

我正在设计一个指标来衡量搜索字词何时“含糊不清”。得分接近1意味着它是模棱两可的(“Ajax”可能是编程语言,清洁解决方案,希腊英雄,欧洲足球俱乐部等)并且得分接近于零意味着很清楚用户是什么意思是(“Lady Gaga”可能只意味着一件事)。此指标的部分是我有一个可能的解释列表和过去数据中这些解释的频率,我需要将其转换为0到1之间的数字。

例如:让我们说术语是“Cats” - 一百万次试验中850,000次,用户意味着喵喵叫的东西,80,000次他们的意思是这个名字的音乐剧,其余的只是每个东西的缩写意味着无数次。我会说这应该具有较低的歧义分数,因为即使有多种可能的含义,一个是迄今为止的首选含义。相比之下,我们可以说这是“朋友”这个词 - 百万次试验中的500万次用户意味着他们一直在外面玩耍的人,他们认为这个名字的电视节目有450,000次,其余的则是其他意义。这应该得到更高的模糊度分数,因为不同的含义在频率上更接近。

TLDR:如果我按递减顺序对数组进行排序,我需要一种方法来将数据快速下降到接近于零的数字,并且数组从较慢的数字下降到接近1的数字。如果数组是[1,0,0,0 ...],这应该得到0的完美分数,如果是[1 / n,1 / n,1 / n ......],这应该得到一个满分1.任何建议?

1 个答案:

答案 0 :(得分:4)

您正在寻找的内容与信息理论中的Entropy衡量标准非常相似。它衡量随机变量的不确定性是基于每个结果的概率。它由下式给出:

H(X) = -sum(p(x[i]) * log( p(x[i])) )

其中p(x[i])i可能性的概率。因此,在您的情况下,p(x[i])将是某个搜索短语与实际含义相对应的概率。在猫示例中,您将拥有:

p(x[0]) = 850,000 / (850,000+80,000) = 0.914
p(x[1]) = 80,000 / (850,000+80,000) = 0.086
H(X) = -(0.914*log2(0.914) + 0.086*log2(0.086)) = 0.423

对于好友案例,您将拥有:(假设只有一个其他类别)

H(X) = -(0.5*log2(0.5) + 0.45*log2(0.45) + 0.05*log2(0.05)) = 1.234

此处较高的数字意味着更多的不确定性。

请注意,我在两种情况下都使用了log base 2,但是如果你使用基数的对数等于可能性的数量,你可以得到比例为0到1。

H(X) = -(0.5*log3(0.5) + 0.45*log3(0.45) + 0.05*log3(0.05)) = 0.779

另请注意,最不明确的情况是所有可能性具有相同概率:

H(X) = -(0.33*log3(0.33) + 0.33*log3(0.33) + 0.33*log3(0.33)) = 1.0

最不明确的情况是只有一种可能性:

H(X) = -log(1) = 0.0

由于您希望最不明确的字词接近1,因此您可以使用1.0-H(X)作为指标。