2012-01-07 10 views
41

sto sperimentando con elasticsearch come un server di ricerca e il mio compito è quello di costruire una funzionalità di ricerca "semantico". Da una breve frase di testo come "I have a burst pipe" il sistema dovrebbe dedurre che l'utente sta cercando un idraulico e restituisce tutti gli idraulici indicizzati in elasticsearch.di ricerca semantica con la PNL e elasticsearch

Può essere fatto direttamente in un server di ricerca come elasticsearch o devo utilizzare uno strumento di elaborazione del linguaggio naturale (NLP) come ad es. Indicatore di Maui. Qual è la terminologia esatta per il mio compito, la classificazione del testo? Anche se il testo dato è molto breve in quanto è una frase di ricerca.

risposta

57

Possono esserci diversi approcci con diversa complessità di implementazione.

Il più semplice è quello di creare elenco di argomenti (come l'impianto idraulico), collegare sacco di parole (come "pipe"), identificare richiesta di ricerca a maggioranza di parole chiave e cercare solo nella argomento specificato (è possibile aggiungere campo topic per i documenti di ricerca elastica e impostarlo come obbligatorio con + durante la ricerca).

Naturalmente, se avete un sacco di documenti, creazione manuale di elenco di argomenti e la borsa di parole è molto tempo costoso. È possibile utilizzare l'apprendimento automatico per automatizzare alcune delle attività. Fondamentalmente, è sufficiente avere una misura della distanza tra parole e/o documenti per scoprire automaticamente gli argomenti (ad esempio tramite clustering di dati) e classificare la query su uno di questi argomenti. La combinazione di queste tecniche può anche essere una buona scelta (ad esempio, è possibile creare manualmente argomenti e assegnare loro i documenti iniziali, ma utilizzare la classificazione per l'assegnazione della query). Dai uno sguardo all'articolo di Wikipedia su latent semantic analysis per capire meglio l'idea. Prestare attenzione anche ai 2 articoli collegati su data clustering e document classification. E sì, Maui Indexer può diventare in questo modo un valido strumento di supporto.

Infine, puoi provare a creare un motore che "capisca" il significato della frase (non solo usa termini frequenza) e cerca argomenti appropriati. Molto probabilmente, ciò comporterà l'elaborazione di linguaggio naturale e knowledge base basata su ontologia. Ma in realtà, questo campo è ancora in ricerca attiva e senza esperienza precedente sarà molto difficile per te implementare qualcosa di simile.

2

Si consiglia di esplorare https://blog.conceptnet.io/2016/11/03/conceptnet-5-5-and-conceptnet-io/.

Combina semantic networks e distributional semantics.

Quando la maggior parte gli sviluppatori hanno bisogno incastri di parole, il primo e forse unico posto si guardano è word2vec, un algoritmo di rete neurale di Google che calcola incastri di parole da semantica distributive. Cioè, impara a prevedere le parole in una frase dalle altre parole intorno a loro, e gli embeddings sono la rappresentazione di parole che fanno le migliori previsioni. Ma anche dopo terabyte di testo, ci sono aspetti dei significati delle parole che non imparerai solo dalla semantica distributiva.

Alcuni risultati

Gli incastri parola ConceptNet Numberbatch, integrato in ConceptNet 5.5, risolvere questi SAT analogie meglio di qualsiasi sistema precedente. Rende corretto il 56,4% delle domande. Il miglior sistema comparabile precedente, Turney's SuperSim (2013), ha ottenuto il 54,8%.E ci stiamo avvicinando sempre di più alle prestazioni "a livello umano" delle analogie SAT - mentre gli umani particolarmente intelligenti possono ovviamente ottenere molte più domande, il richiedente medio del college ottiene il 57,0%.

Problemi correlati