Vorrei memorizzare un vettore di caratteristiche n-dimensionali, ad es. <1.00, 0.34, 0.22, ..., 0>
, con ciascun documento, quindi fornire un altro vettore di funzionalità come query, con i risultati ordinati in ordine di somiglianza del coseno. Questo è possibile con la ricerca elastica?È possibile interrogare la ricerca elastica con un vettore funzione?
risposta
Non ho una risposta particolare alla ricerca elastica perché non l'ho mai usata (io uso Lucene su cui è costruita la ricerca elastica). Tuttavia, sto cercando di dare una risposta generica alla tua domanda. Esistono due metodi standard per ottenere i vettori più vicini in base a un vettore di query, descritto come segue.
K-d albero
Il primo approccio è quello di memorizzare i vettori nella memoria con l'aiuto di una struttura dati che supporta le query vicini più vicini, per esempio alberi k-d. A k-d tree è una generalizzazione dell'albero di ricerca binario nel senso che ogni livello dell'albero di ricerca binario divide una delle dimensioni k in due parti. Se si dispone di spazio sufficiente per caricare tutti i punti in memoria, è possibile applicare nearest neighbour search algorithm su alberi k-d per ottenere un elenco di vettori recuperati ordinati in base ai valori di similarità del coseno. L'ovvio svantaggio di questo metodo è che non si adatta a enormi serie di punti, come spesso si incontrano nel recupero delle informazioni.
inversi quantizzati Vettori
Il secondo approccio consiste nell'utilizzare invertiti vettori quantizzati. Una semplice quantizzazione basata su intervallo assegna pseudo-termini o etichette ai numeri reali di un vettore in modo che questi possano essere successivamente indicizzati da Lucene (o, per tale motivo, ricerca elastica).
Ad esempio, si può assegnare l'etichetta A alla gamma [0, 0,1), B alla gamma [0.1, 0.2) e così via ... Il vettore campione in la domanda viene quindi codificata come (J, D, C, .. A). (poiché [.9,1] è J, [0.3.0.4) è D e così via).
Di conseguenza, un vettore di numeri reali viene così trasformato in una stringa (che può essere trattata come un documento) e quindi indicizzata con uno strumento di recupero di informazioni standard (IR). Un vettore di query viene anche trasformato in un sacchetto di pseudo-termini e quindi si può calcolare un insieme di altri vettori simili nella raccolta più simile (in termini di somiglianza del coseno o altra misura) a quella corrente.
Il vantaggio principale di questo metodo è che si adatta bene alla raccolta massiva di vettori numerati reali. Lo svantaggio principale è che i valori di similarità calcolati sono semplici approssimazioni alle somiglianze del vero coseno (a causa della perdita incontrata nella quantizzazione). Un intervallo di quantizzazione più piccolo ottiene prestazioni migliori al costo di una maggiore dimensione dell'indice.
Vale la pena notare che la tua affermazione che i valori trovati con i vettori quantizzati sono approssimazioni alle somiglianze del coseno è ampiamente troppo ottimistica. Nello specifico, in questa "approssimazione" 0.11 è compreso tra 0.1 e 0.1 tra 0.99. Non è possibile dire che "a" è più vicino a "b" che "b" è a "z". Questa approssimazione è molto peggio di niente se non c'è modo di correggerlo. Distruggerà attivamente qualsiasi informazione sulla distanza che possiedi. Per favore, per favore, per favore nessuno lo implementa, distruggerete la vostra domanda. –
Vale anche la pena notare che i "vettori quantizzati invertiti" non sono una cosa. Letteralmente l'unico posto che questo termine mostra su internet. La quantizzazione vettoriale è una cosa, ma non è assolutamente ciò che viene menzionato in questa risposta. –
La quantizzazione ti aiuterà a localizzare i vettori per ciascun componente, cioè identificheresti che 0.11 apparterrebbe alla cella [0.1, 0.2) ... assumendo che tu stia usando una dimensione di intervallo di 0.1. Ma è possibile memorizzare i componenti dei vettori stessi. Dato un punto interrogativo, è quindi possibile calcolare le distanze esatte. Anche se si quantizzano i vettori, l'errore di quantizzazione sostenuto nel calcolo della distanza non sarebbe significativo se gli intervalli fossero abbastanza piccoli ... – Debasis