2012-01-24 4 views
3

Я проектирую метрику для измерения, когда поисковый термин «неоднозначен». Оценка близка к единице означает, что она неоднозначна («Аякс» может быть языком программирования, чистящим решением, греческим героем, европейским футбольным клубом и т. Д.), А оценка близка к нулю означает, что довольно ясно, что пользователь («Леди Гага», вероятно, означает только одно). Часть этой метрики состоит в том, что у меня есть список возможных интерпретаций и частота этих интерпретаций из прошлых данных, и мне нужно превратить это в число от 0 до 1.Предложения по проектированию метрики

Например: можно сказать, что термин " Кошки "- миллион испытаний в 850 000 раз, когда пользователь имел в виду пушистую вещь, которая мяукает, в 80 000 раз они означали мюзикл под этим именем, а остальные - сокращения для вещей, каждый из которых означал тривиальное число раз. Я бы сказал, что это должно иметь низкий показатель двусмысленности, потому что, хотя существует несколько возможных значений, один из них был, безусловно, предпочтительным. В противоположность этому, можно сказать, что термин «Друзья» - миллион испытаний в 500 000 раз, когда пользователь имел в виду людей, с которыми они все время болтаются, в 450 000 раз они означали телешоу под этим именем, а остальное - другое значение , Это должно получить более высокую оценку неоднозначности, поскольку различные значения были намного ближе по частоте.

TLDR: Если я сортирую массив в порядке убывания, мне нужен способ взять массивы, которые быстро сбрасываются на числа, близкие к нулю, и массивы, которые падают медленнее, чем числа, близкие к одному. Если массив был [1,0,0,0 ...], он должен получить идеальный балл 0, и если он был [1/n, 1/n, 1/n ...], это должно получиться отличным счетом 1. Какие-нибудь предложения?

ответ

4

То, что вы ищете, звучит очень похоже на меру информации в теории информации Entropy. Это показатель того, насколько неопределенная случайная величина основана на вероятностях каждого исхода. Она определяется по формуле:

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

где p(x[i]) является вероятность i го possiblility. Таким образом, в вашем случае 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 

Чем выше число здесь означает больше неопределенности.

Обратите внимание, что я использую журнал базу 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) в качестве своего показателя.

+0

Спасибо за этот отличный ответ – hackartist

+0

Две вещи при ближайшем рассмотрении, я бы просто не использовал H (x), а не 1.0-H (x), поскольку из примеров, которые вы показываете H (X) = -log (1) = 0,0 - случай, когда нет двусмысленности, и H (X) = - (0.33 * log3 (0.33) + 0.33 * log3 (0.33) + 0.33 * log3 (0.33)) = 1.0 - это случай, когда неоднозначность очень высока, а во-вторых, как вы знаете, что, используя другую базу в журнале, вы всегда можете получить число меньше 1? – hackartist

Смежные вопросы