Estrai informazioni dalla frase


11

Sto creando un semplice chatbot. Voglio ottenere le informazioni dalla risposta dell'utente. Uno scenario di esempio:

Bot : Hi, what is your name?
User: My name is Edwin.

Vorrei estrarre il nome Edwin dalla frase. Tuttavia, l'utente può rispondere in diversi modi come

User: Edwin is my name.
User: I am Edwin.
User: Edwin. 

Sto provando a fare affidamento sulle relazioni di dipendenza tra le parole ma il risultato non va bene.

Qualche idea su quale tecnica potrei usare per affrontare questo problema?

[AGGIORNATO]

Ho provato con il riconoscimento dell'entità denominata insieme a parte del tagger vocale e del parser. Ho scoperto che la maggior parte dei modelli è addestrata in modo che il primo carattere dell'entità per il nome della persona o il nome proprio debba essere in maiuscolo. Questo può essere vero per il normale documento, ma è irrilevante per un chatbot. Per esempio

User: my name is edwin.

La maggior parte dei NER non ha riconosciuto questo.


Questo spiega come sono costruiti i moderni robot di chat, ma non lo definirei semplice. Puoi saperne di più cercando "risposta alle domande".
Emre,

Mi piace così come le persone che fanno domande e ricevono risposte contrassegnano una risposta accettabile: P
chewpakabra

Risposte:


7

Puoi eventualmente usare una combinazione di Named Entity Recognition e Sintattical Analysis - mentre la parola Edwin sta sicuramente propugnando, immagina una situazione in cui il nome è Edward Philip Martel . Il NER rileva ogni parola come entità separate (quindi 3 entità diverse), quindi dovrai comunque metterle insieme in base a una logica. Inoltre, nel caso in cui siano presenti più nomi, può essere più difficile disambiguare (ad esempio John e Ramsey hanno cenato a Winterfell ).

È qui che sarebbe utile anche l'analisi della sintassi della frase (supponendo che l'utente finale inserisca una frase relativamente coerente e corretta - se si usano slang e forme brevi di testo, anche la PNL di Stanford può aiutare solo fino a un certo punto).

Un modo di sfruttare l'analisi della sintassi / analisi e NER è nei seguenti esempi:

 1. User: Edwin is my name.
 2. User: I am Edwin.
 3. User: My name is Edwin.

In ognuno dei casi (come anche nel caso generale), il Nome entità (nome proprio / nome) è associato nelle immediate vicinanze di un verbo. Quindi, se prima analizzi la frase per determinare i verbi e poi applichi NER alle parole circostanti (+/- 1 o 2), potresti avere un modo relativamente decente per risolvere il problema. Questa soluzione dipende principalmente dalle regole di sintassi create per identificare i NER e dalla finestra attorno ai verbi.


2
Probabilmente implementerai un "automi finito non deterministico", in cui ogni frase è una risposta che un modello accetta. Alcune grammatiche sono implementate su qualcosa del genere. (NLP / Grammatica). Se hai bisogno di come fare, guarda il framework stanfordnlp.github.io/CoreNLP
Intruso


4

Questo può essere fatto facilmente con i CRF . Puoi usare la codifica BIO per taggare la tua frase. Quindi passalo ai CRF. Devi solo creare alcune frasi taggate a scopo di formazione come segue,

 I am Edwin.
 O O  B-NAME

 You can call me Alfred
 O   O    O    O B-NAME

 My name is  Edwin   thomas
 O  O     O  B-NAME  I-NAME

CRFsuite e CRF ++ sono alcune delle buone implementazioni. CRFsuite ha un wrapper Python chiamato pycrfsuite , che è abbastanza facile da implementare. Controlla questo notebook ipython o questo frammento di codice su github per l'implementazione end-to-end di NER.

controlla questo progetto di bot chat Open source su github con NER e classificazione di intenti scritti in Python. Hanno un'interfaccia utente di addestramento facile da usare in cui puoi addestrare il tuo bot per estrarre informazioni dalle frasi.


0

Per eseguire tali compiti con elevata precisione, ti suggerisco di costruire un modello LSTM con incorporamenti di parole con l'aiuto di word2vec. Gli LSTM possono aiutare a recuperare informazioni dalla frase, nonché a prevedere il carattere o la parola successiva dato che un insieme di parole è già presente nella frase.

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.