2013-05-28 3 views
5

Я немного запутался в стратегии оценки lucene. Я знаю, что скоринг формула Lucene является как:Lucene scoring: в каком контексте используется queryNorm?

score(q,d) = coord(q,d) x queryNorm(q) X SUM <t_in_q> (tf(t_in_d) x idf(t)^2 x t.getBoost() x norm(t,d)) 

Я понимаю, каждый компонент в этой формуле, кроме queryNorm (д). По словам официальной документации,

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

Почему мне нужно сравнивать баллы между различными запросами? В другом слове вы могли бы привести пример , чтобы показать, в каком контексте queryNorm (q) полезен?

ответ

5

Хороший вопрос, я сам это задался. Согласно this ScoresAsPercentages argument, попытка сравнить различные запросы или индексы или оценки по одному и тому же запросу и индексу в разное время - плохая идея, и я согласен.

Я понимаю, что, хотя queryNorm действительно не делает их строго сопоставимыми, это действительно помогает. Они ближе к сопоставимому с Default queryNorm, чем без.

Я полагаю, что это также может позволить людям писать собственное сходство и использовать этот вызов для создания нормализованных сопоставимых оценок с использованием алгоритмов, которые работают в их конкретном случае.

Было discussion on dropping it, которое может показаться вам интересным.

+0

Это интересный ключ. Я все еще на лодке, где предоставление общим пользователям большего контроля над queryNorm не вредит поисковому запросу. Однако, поскольку он вычисляется по весу, о нем мало затрат на вычисление. – Denzel

+0

Так что, вернувшись к моему вопросу, сравнение баллов по запросам больше проявляется в персонале машинного обучения, таком как кластеризация документов, и редко встречается в обычной поисковой работе, верно? – Denzel

+0

Существуют стратегии, позволяющие сопоставлять запросы, не обязательно отправляясь на машинное обучение (см. [Косинус сходство] (например, http://en.wikipedia.org/wiki/Cosine_similarity)). В Lucene его избегают. Решение для сравнения оценок между различными запросами - это переосмыслить ваши требования. – femtoRgon

0

Я знаю, что вопрос старый, но у меня была аналогичная проблема. Причина, по которой queryNorm не была одинаковой во всех результатах поиска, заключается в том, что документы могут быть в разных осколках, а queryNorm является постоянным только в пределах одного осколка.

В моем понимании эта проблема может быть решена в 2 способами:

  • естественно, когда есть много данных

  • устанавливающих количество черепков 1. Каус это иметь последствия на выступлениях.

    { "Настройки": { "number_of_shards": 1}}

См http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/relevance-is-broken.html

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