NLP - Query che utilizzano caratteri jolly semantici nella ricerca a testo integrale, forse con Lucene?

3

Diciamo che ho un corpus grande (per esempio in inglese o una lingua arbitraria), e voglio fare qualche ricerca semantica su di esso. Ad esempio, ho la query:

"Fai attenzione: [art] l'armada di [sg] sta arrivando a [do sg]!"

E il corpus contiene la seguente frase:

"Fai attenzione: un'armata di navi aliene sta arrivando per distruggere il nostro pianeta!"

Si può vedere che la mia stringa di query potrebbe contenere "segnaposti semantici", come ad esempio:

[arte] - qualche segnaposto per articoli (ad esempio a / an in inglese) [sg], [do sg] - alcuni segnaposto per NP e VP (soggetti e predicati) Mi piacerebbe sviluppare una libreria che sarebbe in grado di gestire queste query in modo efficiente. Sospetto che per l'analisi del testo sia necessaria una sorta di codifica dei POS, ma poiché non voglio reimplementare completamente un motore di ricerca full-text già esistente per farlo funzionare, sto considerando che come potrei integrare questo comportamento in un motore di ricerca come Lucene?

So che ci sono SpanQueries che potrebbero comportarsi allo stesso modo in alcuni casi, ma come posso vedere, Lucene non fa nulla di semantico con i testi memorizzati.

È possibile implementare un comportamento come questo? O devo scrivere un proprio motore di ricerca?

    
posta Zsolt 26.11.2012 - 00:56
fonte

3 risposte

2

Prenderò in considerazione l'utilizzo di una ricerca di parole chiave standard con i nomi e i verbi della query come metodo per generare una shortlist di possibili risultati e quindi utilizzare un parser PNL (ad esempio Stanford Core NLP) per preformare un'analisi più dettagliata su ciascun concorrente per filtrarli in modo da ottenere solo corrispondenze esatte. Supponendo una dimensione del corpus ragionevole e che le query utilizzino parole che non generano un numero elevato di corrispondenze, questo dovrebbe essere adeguato.

    
risposta data 03.12.2014 - 10:46
fonte
1

Mentre usi i termini NP e VP, penso che tu stia parlando di sintattico, non di semantico. Ci sono differenze tra i due. Puoi controllare la grammatica delle dipendenze per vedere come è diversa dalla grammatica sintattica di CFG.

Penso che se usi i caratteri jolly per la ricerca semantica, le persone considererebbero un 'trucco'.

Questo sarà ciò che farei:

Per eseguire correttamente la ricerca semantica, è necessario prima di tutto un analizzatore semantico (per Lucence, se vedi in termini di Lucene). Un analizzatore semantico richiederà ovviamente un parser semantico. E questa è la parte in cui hai problemi perché i parser semantici in questo momento non sono abbastanza buoni.

Supponiamo che tu possa avere un buon parser semantico, la parte successiva sarebbe usare il grafico semantico e memorizzare questo grafico nel motore di ricerca. Ci possono essere molti modi per farlo. La soluzione più ovvia sarebbe semplificare il grafico e utilizzare ogni spigolo come predicato, archiviare i predicati e effettuare la ricerca su ciascun predicato in modo RDF. Altro su RDF: link

Nel tuo esempio (rimuovi l'articolo uno, perché è sintattico, non semantico), la query di ricerca sarebbe: [X of Y] dove X = amarda [X coming to do Z]

    
risposta data 06.06.2014 - 07:34
fonte
0

Non un esperto di Lucene ma:

Potresti creare i tuoi tokenizer che indicizzano, ad es. [ART] come token. In questo modo potresti essere in grado di eseguire ricerche a frase come nell'esempio sopra. Questo non funzionerà se "armada" è a volte un [SG] o qualche altro token. Avresti bisogno di una ricerca con caratteri jolly specializzati, se così fosse.

Forse una ricerca tradizionale con caratteri jolly tramite Lucene ti consentirà di raccogliere almeno un buon set di risultati per iniziare. Con una seconda passata puoi analizzare le qualificazioni [ART] e simili per arrivare a un set di risultati finali.

    
risposta data 12.12.2012 - 18:54
fonte