In che modo l'apprendimento automatico è incorporato nella progettazione dei motori di ricerca?


15

Attualmente sto costruendo un piccolo motore di ricerca interno basato su Apache Lucene. Il suo scopo è semplice: basato su alcune parole chiave, suggerirà alcuni articoli scritti internamente all'interno della nostra azienda. Sto usando un punteggio TF-IDF abbastanza standard come metrica di base e ho costruito il mio meccanismo di punteggio su di esso. Tutti questi sembrano funzionare in modo eccellente ad eccezione di alcuni casi angolari in cui la classifica sembra incasinata.

Quindi quello che sto pensando di fare è aggiungere un piccolo link Rilevante / Non pertinente alla pagina dei risultati della ricerca in modo che gli utenti possano fare clic su uno di quelli a seconda della loro percezione del fatto che quel risultato debba essere incluso in primo luogo.

La mia idea

  1. Tratta questi Rilevanti / Non Rilevanti come etichette e crea un dato di formazione.
  2. Usa questi dati per addestrare un classificatore (come SVM)
  3. Incorporare questo modello nel motore di ricerca, ovvero ogni nuovo risultato passerà attraverso il classificatore e gli verrà assegnata un'etichetta sulla pertinenza o meno.

Questo approccio mi sembra intuitivo, ma non sono sicuro che funzionerà in pratica. Ho due domande specifiche:

  1. Quali funzioni devo estrarre?
  2. Esiste un modo migliore per integrare il componente di apprendimento automatico nel motore di ricerca? Il mio obiettivo finale è "apprendere" la funzione di classifica basata sia sulla logica aziendale sia sul feedback degli utenti.

4
Ho fatto una cosa del genere una volta e gli utenti lo odiavano, quindi l'ho spento. Il problema era il comportamento dell'utente. Gli utenti si sono adattati alle debolezze nei risultati di ricerca modificando i termini e quindi continueranno a riutilizzare tali termini. Il sistema ha risposto adeguando la classifica degli articoli e quei termini favoriti hanno iniziato a produrre risultati diversi. Questo ha lasciato fuori gli utenti. Imparare non significa che sia più intelligente;)
Reactgular

Ecco un'implementazione che utilizza elasticsearch e angularjs - contiene anche le spiegazioni di cui hai bisogno - machinelearningblogs.com/2016/12/12/…
Vivek Kalyanarangan

Risposte:


15

(1) Quali funzioni devo estrarre?

Innanzitutto, renditi conto che non stai classificando i documenti. Stai classificando coppie (documenti, query), quindi dovresti estrarre funzionalità che esprimano la loro corrispondenza.

L'approccio standard nell'apprendimento del posizionamento è quello di eseguire la query su varie configurazioni dei motori di ricerca (ad es. Tf-idf, BM-25, ecc.) E quindi formare un modello sui punteggi di somiglianza, ma per un piccolo SE specifico del dominio, potresti avere funzionalità come

  • Per ogni termine, un valore booleano che indica se il termine è presente sia nella query che nel documento. O forse non un valore booleano, ma i pesi tf-idf di quei termini di query che si verificano effettivamente nel documento.
  • Varie metriche di sovrapposizione come Jaccard o Tanimoto.

(2) Esiste un modo migliore per integrare il componente di apprendimento automatico nel motore di ricerca? Il mio obiettivo finale è "apprendere" la funzione di classifica basata sia sulla logica aziendale sia sul feedback degli utenti.

Questa è una domanda molto ampia e la risposta dipende da quanti sforzi vuoi fare. Il primo miglioramento che ti viene in mente è che non dovresti usare i giudizi di rilevanza binaria del classificatore, ma la sua funzione di decisione con valore reale, in modo che tu possa effettivamente fare una classifica invece di filtrare. Per un SVM, la funzione decisionale è la distanza firmata dall'iperpiano. Buoni pacchetti di apprendimento automatico hanno un'interfaccia per ottenerne il valore.

Oltre a ciò, guarda l'apprendimento a coppie e listwise per classificare; quello che stai suggerendo è il cosiddetto approccio pointwise. IIRC, a coppie funziona molto meglio nella pratica. Il motivo è che con una classificazione a coppie, hai bisogno di molti meno clic: invece di avere gli utenti che etichettano i documenti come pertinenti / irrilevanti, dai loro solo il pulsante "rilevante". Quindi impari un classificatore binario su triple (document1, document2, query) che dice se document1 è più rilevante per la query rispetto a document2 o viceversa. Quando un utente etichetta, per esempio, il documento 4 nella classifica come pertinente, che ti dà sei esempi da cui imparare:

  • document4> document3
  • document4> document2
  • document4> document1
  • document1 <document4
  • document2 <document4
  • document3 <document4

così ottieni i negativi gratuitamente.

(Questi sono solo suggerimenti, non ho provato nulla di tutto questo. Mi è capitato di aver lavorato in un gruppo di ricerca in cui le persone hanno studiato l'apprendimento per classificare. Ho fatto una presentazione del documento di qualcun altro per un gruppo di lettura una volta, forse il le diapositive possono essere di aiuto.)


+1 Grazie. Questa è la seconda volta che mi hai aiutato! Lasciami prendere un paio d'ore per digerire questo. :)
Legenda,

4
È una risposta eccellente, vorrei solo suggerire una piccola modifica. Dal punto di vista ux, è molto più probabile che gli utenti segnino un risultato utilizzando un pulsante "irrilevante" rispetto a un pulsante "pertinente". Chi rimane per segnare un risultato quando ha trovato quello che sta cercando? Sono molto più propensi a premere un pulsante che assomiglia a una "opportunità di lamentarsi" quando non hanno trovato quello che volevano, perché il miglioramento del sistema a quel punto è effettivamente allineato al loro obiettivo attuale.
Racheet,

4
tl; dr Se hai intenzione di utilizzare solo un input, rendilo "irrilevante", è più probabile che le persone facciano clic su di esso quando sono frustrati.
Racheet,

Quale sarebbe l'approccio "listwise"? Inoltre, intendevi 3 o 6 esempi gratis? (Gli ultimi 3 sembrano essere solo una ripetizione dei primi 3?)
max
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.