Wyodrębnij informacje ze zdania


11

Tworzę prosty chatbot. Chcę uzyskać informacje z odpowiedzi użytkownika. Przykładowy scenariusz:

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

Chciałbym wydobyć imię Edwin ze zdania. Użytkownik może jednak reagować na różne sposoby, np

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

Próbuję polegać na zależnościach między słowami, ale wynik nie działa dobrze.

Masz pomysł, jakiej techniki mógłbym użyć, aby rozwiązać ten problem?

[AKTUALIZACJA]

Testowałem z rozpoznawaniem nazwanych jednostek wraz z częścią taggera mowy i parsera. Dowiedziałem się, że większość modeli jest trenowana w taki sposób, że pierwszy znak bytu nazwy osoby lub właściwego rzeczownika musi być pisany wielkimi literami. Może tak być w przypadku zwykłego dokumentu, ale nie ma to znaczenia dla chatbota. Na przykład

User: my name is edwin.

Większość NER nie rozpoznała tego.


To wyjaśnia, jak zbudowane są nowoczesne boty czatu, ale nie nazwałbym tego prostym. Możesz dowiedzieć się więcej, wyszukując „odpowiadanie na pytania”.
— Emre

Podoba mi się, jak ludzie zadający pytania i otrzymujący odpowiedzi oznaczają odpowiedź jako akceptowalną: P
— chewpakabra

Odpowiedzi:


7

Możesz użyć kombinacji rozpoznawania nazwanego podmiotu i analizy składniowej - podczas gdy słowo Edwin z pewnością się podpiera, wyobraź sobie sytuację, w której nazywa się Edward Philip Martel . NER wykrywa każde słowo jako osobne byty (a więc 3 różne byty) - w ten sposób i tak będziesz musiał połączyć je razem w oparciu o pewną logikę. Ponadto, w przypadku obecności wielu nazw, trudniej jest jednoznacznie określić (np. John i Ramsey jedli obiad w Winterfell ).

W tym przypadku pomocna byłaby również analiza składni zdania (przy założeniu, że użytkownik końcowy wprowadzi względnie spójne i prawidłowe zdanie - jeśli używane są slang i krótkie formy tekstu, nawet NLP Stanford może pomóc tylko do pewnego stopnia).

Jednym ze sposobów wykorzystania analizy składniowej / analizy składniowej i NER są następujące przykłady:

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

W każdym z przypadków (jak również w ogólnym przypadku) nazwa jednostki (nazwa własna / rzeczownik) jest powiązana w pobliżu czasownika. Dlatego jeśli najpierw przeanalizujesz zdanie, aby określić czasowniki, a następnie zastosujesz NER do otaczających (+/- 1 lub 2) słów, możesz mieć względnie przyzwoity sposób rozwiązania problemu. To rozwiązanie zależy przede wszystkim od reguł składni, które tworzysz w celu identyfikacji NER, a także od okna wokół czasowników.


2
Być może zaimplementujesz „niedeterministyczne skończone automaty”, w których każde zdanie jest odpowiedzią akceptowaną przez wzorzec. Niektóre gramatyki są implementowane na czymś takim. (NLP / Gramatyka). Jeśli potrzebujesz, jak to zrobić, spójrz na ramy stanfordnlp.github.io/CoreNLP
— Intruso


4

Można to łatwo zrobić za pomocą CRF . Możesz użyć kodowania BIO, aby oznaczyć zdanie. Następnie przekaż go do CRF. Musisz tylko utworzyć kilka oznaczonych zdań do celów szkoleniowych w następujący sposób,

 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 i CRF ++ to tylko niektóre z dobrych implementacji. CRFsuite ma otoki Pythona o nazwie pycrfsuite , które jest dość łatwe do wdrożenia. Sprawdź ten notatnik ipython lub ten fragment kodu na github, aby uzyskać kompleksową implementację NER.

sprawdź ten projekt botów typu open source na githubie z NER i klasyfikacją zamiarów napisaną w pythonie. Mają łatwy w użyciu interfejs szkoleniowy, w którym możesz przeszkolić swojego bota, aby wyciągał informacje ze zdań.


0

Aby wykonać takie zadania z dużą dokładnością, sugeruję zbudowanie modelu LSTM z osadzaniem słów za pomocą word2vec. LSTM mogą pomóc w uzyskaniu informacji z zdania, a także przewidzieć następny znak lub słowo, jeśli zestaw słów jest już obecny w zdaniu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.