Витягніть інформацію з речення


11

Я створюю простий чат. Я хочу отримати інформацію з відповіді користувача. Приклад сценарію:

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

Я хочу витягти ім’я Едвін із речення. Однак користувач може реагувати різними способами, такими як

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

Я намагаюся покладатися на залежність залежностей між словами, але результат не дуже корисний.

Будь-яка ідея про те, яку техніку я міг би використати для вирішення цієї проблеми?

[ОНОВЛЕНО]

Я перевірив розпізнавання названої сутності разом із частиною тегу та мовлення аналізатора. Я з'ясував, що більшість моделей навчаються таким чином, що перший символ сутності для імені людини або власного іменника повинен бути великим регістром. Це може бути справедливо для звичайного документа, але це не має значення для чат-бота. Напр

User: my name is edwin.

Більшість NER не змогли цього визнати.


Це пояснює, як будуються сучасні чати-боти, але я б не назвав це простим. Ви можете дізнатися більше, шукаючи "відповіді на питання".
Емре

Мені так подобається, як люди, які задають питання та отримують відповіді, відзначають відповідь прийнятною: P
chewpakabra

Відповіді:


7

Можливо, ви можете використовувати комбінацію розпізнавання названих сутностей та синтаксичного аналізу - хоча слово Едвін , безумовно, з'являється, уявіть ситуацію, коли ім'я - Едвард Філіп Мартел . NER визначає кожне слово як окрему сутність (отже, 3 різних сутності) - таким чином, вам доведеться все одно зв'язати їх на основі певної логіки. Крім того, у випадку наявності декількох імен, це може бути важче роз'єднати (наприклад, Джон та Рамзі, що вечеряли в Вінтерфелі ).

Тут також допоможе аналіз синтаксису речень (якщо припустити, що кінцевий користувач вводить відносно зв’язне і правильне речення - якщо використовуються сленг і короткі форми тексту, навіть Стенфордський НЛП може допомогти лише до певної міри).

Один із способів використання синтаксичного аналізу / розбору та NER полягає в наступних прикладах -

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

У кожному з випадків (як це в цілому так і є) ім'я сутності (власне іменник / іменник) асоціюється в безпосередній близькості до дієслова. Отже, якщо спершу розібрати речення, щоб визначити дієслова, а потім застосувати NER до оточуючих (+/- 1 або 2) слів, у вас може бути відносно пристойний спосіб вирішення проблеми. Це рішення залежатиме передусім від синтаксичних правил, які ви створюєте для ідентифікації NER, а також вікна навколо дієслів.


2
Ви, можливо, реалізуєте "недетерміновані кінцеві автомати", де кожне речення є відповіддю, яке приймає шаблон. Деякі граматики реалізовані на чомусь подібному. (НЛП / Граматика). Якщо вам потрібно, як це зробити, подивіться на основу stanfordnlp.github.io/CoreNLP
Intruso

5

Вам слід скористатися іменованим розпізнаванням сутності, наприклад з NLTK, http://www.nltk.org/book/ch07.html <- ви можете знайти приклад використання там. Це було б добре для вашого описаного випадку.


4

Це легко зробити за допомогою CRF s. Ви можете використовувати кодування BIO для тегування свого речення. Потім передайте його до CRF. Вам просто потрібно створити кілька тегів речень для тренувальної мети так,

 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 і CRF ++ - деякі з хороших реалізацій. CRFsuite має питонну обгортку під назвою pycrfsuite , яку досить просто здійснити. Перевірте цей ноутбук ipython або цей фрагмент коду на github для того, щоб впровадити NER в кінці.

перевірте цей проект з відкритим вихідним кодом чату на github з NER та намірною класифікацією, написаними в python. Вони мають простий у користуванні навчальний інтерфейс, де ви можете навчити бота отримувати інформацію з пропозицій.


0

Для того, щоб виконувати такі завдання з високою точністю, пропоную вам побудувати модель LSTM із вбудованими словами за допомогою word2vec. LSTM можуть допомогти отримати інформацію з речення, а також передбачити наступний символ або слово, що надає набір слів, вже присутній у реченні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.