我正在设计一个指标来衡量搜索词何时“模棱两可”。接近于 1 的分数意味着它是不明确的(“Ajax”可以是一种编程语言、一种清洁解决方案、希腊英雄、欧洲足球俱乐部等),接近于零的分数意味着用户很清楚意思是(“Lady Gaga”可能只意味着一件事)。这个指标的一部分是我有一个可能的解释列表和过去数据中这些解释的频率,我需要把它变成一个介于 0 和 1 之间的数字。
例如:让我们说这个词是“猫”——在一百万次试验中 850,000 次用户指的是毛茸茸的东西,80,000 次他们指的是那个名字的音乐剧,其余的都是事物的缩写,每个都只意味着微不足道次数。我会说这应该具有较低的歧义分数,因为即使有多种可能的含义,但到目前为止,一个是首选含义。相比之下,我们可以说这个词是“ friend ”——在一百万次试验中,500,000 次用户指的是他们一直和他们一起出去玩的人,450,000 次他们指的是那个名字的电视节目,其余的是其他一些意思.这应该得到更高的歧义分数,因为不同的含义在频率上更接近。
TLDR:如果我按降序对数组进行排序,我需要一种方法来获取快速下降到接近零的数字的数组和下降较慢的接近于 1 的数字的数组。如果数组是 [1,0,0,0...] 这应该得到 0 的满分,如果它是 [1/n,1/n,1/n...] 这应该得到满分1. 有什么建议吗?
最佳答案
您正在寻找的内容听起来与信息论中的 Entropy 度量非常相似。它是衡量随机变量基于每个结果的概率的不确定性的一种方法。它由以下给出:
H(X) = -sum(p(x[i]) * log( p(x[i])) )
其中
p(x[i])
是 i
th possiblility 的概率。因此,在您的情况下, p(x[i])
将是某个搜索短语对应于实际含义的概率。在 cat 示例中,您将拥有: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
对于 Friends 案例,您将拥有:(假设只有一个其他类别)
H(X) = -(0.5*log2(0.5) + 0.45*log2(0.45) + 0.05*log2(0.05)) = 1.234
这里的数字越大意味着不确定性越大。
请注意,我在这两种情况下都使用以对数为底的 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)
作为您的指标。关于arrays - 设计指标的建议,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8981528/