Как нормализовать баллы Lucene? - PullRequest
8 голосов
/ 21 марта 2011

Мне нужно нормализовать баллы Lucene между 0 и 1.

Например, случайный запрос возвращает следующие оценки ...

8.864665
2.792687
2.792687
2.792687
2.792687
0.49009037
0.33730242 
0.33730242 
0.33730242 
0.33730242 

Какой самый высокий балл? 10,0?

спасибо

Ответы [ 5 ]

9 голосов
/ 21 марта 2011

Вы можете разделить все баллы с максимальным баллом, чтобы получить баллы от 0 до 1.

Однако учтите, что нормализованные баллы следует использовать для сравнения результатов только одного запроса.Неправильно сравнивать результаты (нормализованные или нет) результатов по двум различным запросам.

5 голосов
/ 21 марта 2011

Не существует хорошего стандартного способа нормализации показателей с помощью люцена.Прочитайте это: ScoresAsPercentages и это объяснение

В вашем случае самый высокий балл - это балл первого результата, если результаты отсортированы по баллам.Но эта оценка будет отличаться для каждого другого запроса.

См. Также how-do-i-normalize-a-solr-lucene-score

1 голос
/ 02 апреля 2013

В Solr нет максимального значения, оно зависит от слишком большого количества переменных, поэтому его нельзя предсказать.

Но вы можете реализовать то, что называется нормализованным счетом ( Scores As Percentions ), что не рекомендуется.

См. Связанные ссылки для более подробной информации:

Возможно ли установить порог оценки Solr «разумно», независимо от полученных результатов? (То есть стандартизирован ли Solr Scoring в любом случае)

как мне нормализовать балл solr / lucene?

Удалить результаты ниже определенного порогового значения в Solr / Lucene?

0 голосов
/ 11 августа 2016

Если вы хотите сравнить два или более запросов, я нашел обходной путь.Вы можете сравнить ваш документ с наибольшим количеством баллов с вашим запросом, используя класс LevenstheinDistance или LuceneLevenstheinDistance (Damerau) , чтобы получить расстояние между вашим запросом и вашим результатом.Результатом является сходство между ними.Делайте это для каждого запроса, с которым вы хотите сравнить.Теперь у вас есть инструмент для сравнения ваших запросов, используя сходство вашего запроса и ваш самый высокий результат.Теперь вы можете выбрать запрос с наибольшей оценкой сходства и использовать его для следующих правильных действий.

    //Damerau LevenstheinDistance
    LuceneLevenshteinDistance d = new LuceneLevenshteinDistance();

    similiarity = d.getDistance(queryterm, yourResult );
0 голосов
/ 27 октября 2015

Регулярная нормализация поможет вам только сравнить распределение оценок между запросами (и их полученными списками). Вы не можете просто нормализовать счет, чтобы сравнить производительность между запросами. Подумайте о запросе, в котором все извлеченные документы имеют высокую степень актуальности и получили одинаковый (высокий балл), а о другом запросе, что извлеченный список содержит релевантный документ ячменя (опять же, с одинаковым баллом) - теперь, независимо от нормализации для запроса Вы делаете - нормализованный счет будет таким же.

Вам необходимо продумать фактор перекрестных запросов, который может привести все оценки к одному и тому же уровню.

Например - возможно, вычислить сходство между запросом и целым индексом и использовать этот показатель как-то вместе с документом-счетом

...