Предложения по разработке метрики - PullRequest
3 голосов
/ 24 января 2012

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

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

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

1 Ответ

4 голосов
/ 24 января 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...