2013-05-28 19 views
5

Sono un po 'confuso dalla strategia di punteggio lucene. So che la formula di punteggio di Lucene è come:Punteggio Lucene: in quale contesto viene utilizzato 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)) 

capisco tutti i componenti in questa formula, tranne queryNorm (q). Come spiegato dalla documentazione ufficiale,

queryNorm (q) è un fattore di normalizzazione utilizzato per rendere confrontabili i punteggi tra . Questo fattore non ha alcun effetto sul ranking del documento (poiché tutti i documenti classificati vengono moltiplicati per lo stesso fattore), ma lo si limita a tentare di ottenere punteggi da query diverse (o anche da indici diversi) diversi.

Perché devo confrontare i punteggi tra diverse query? In altre parole, potresti fornire un esempio per mostrare in quale contesto è utile queryNorm (q)?

risposta

5

Buona domanda, me lo sono chiesto io stesso. Secondo this ScoresAsPercentages argument, il tentativo di confrontare diversi punteggi di query o indici, o anche punteggi sulla stessa query e indice in momenti diversi, è una cattiva idea e sono d'accordo.

La mia comprensione è che, mentre queryNorm in realtà non li rende strettamente confrontabili, aiuta. Sono più vicini a quelli di queryNorm predefiniti che senza.

Suppongo che potrebbe anche consentire alle persone di scrivere la propria somiglianza e utilizzare questa chiamata per creare punteggi normalizzati e comparabili, utilizzando algoritmi che funzionano nel loro caso particolare.

Ci sono stati alcuni discussion on dropping it, che potresti trovare interessanti.

+0

Questo è un indizio interessante. Sono ancora sulla barca dove dare agli utenti comuni un maggiore controllo su queryNorm non nuoce al lavoro di ricerca. Tuttavia, poiché è calcolato in termini di peso, c'è un piccolo costo computazionale di cui preoccuparsi. – Denzel

+0

Quindi, tornando alla mia domanda, confrontando i punteggi tra le query appare più nel personale di machine learning come il clustering dei documenti, e appare raramente in un lavoro di ricerca comune, giusto? – Denzel

+0

Esistono strategie per rendere le query comparabili, senza necessariamente andare all'apprendimento automatico (si veda [Similarità Coseno] (http://en.wikipedia.org/wiki/Cosine_similarity), ad esempio). In Lucene, è evitato. La soluzione per confrontare i punteggi tra diverse query è ripensare le tue esigenze. – femtoRgon

0

So che la domanda è vecchia ma ho avuto un problema simile. Il motivo per cui queryNorm non era lo stesso su tutti i risultati di ricerca è che i documenti possono essere in diversi frammenti e il queryNorm è costante solo all'interno dello stesso frammento.

Dalla mia comprensione di questo problema può essere risolto in 2 modi:

  • naturalmente, quando c'è un sacco di dati

  • l'impostazione del numero di frammenti a 1. Di couse questo ha conseguenze sulle prestazioni.

    { "Impostazioni": { "number_of_shards": 1}}

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

Problemi correlati