Извлечь информацию из предложения

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 различных объекта) - таким образом, вам в любом случае придется связать их вместе, основываясь на некоторой логике. Кроме того, в случае присутствия нескольких имен может быть сложнее устранить неоднозначность (например, Джон и Рэмси обедали в Винтерфелле ).

Здесь также поможет анализ синтаксиса предложения (при условии, что конечный пользователь вводит относительно связное и правильное предложение - если используется сленг и короткие формы текста, даже Stanford NLP может помочь только в определенной степени).

Один из способов использовать синтаксический анализ / анализ и NER в следующих примерах -

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

В каждом из случаев (как и в общем случае) имя сущности (собственное существительное / существительное) ассоциируется в непосредственной близости от глагола. Следовательно, если вы сначала проанализируете предложение, чтобы определить глаголы, а затем примените NER к окружающим (+/- 1 или 2) словам, у вас может быть относительно приличный способ решения проблемы. Это решение будет зависеть в первую очередь от правил синтаксиса, которые вы создаете для идентификации NER, а также от окна вокруг глаголов.

vsdaking
источник
2
Вы , возможно , будете реализовать «не детерминированный конечные автоматы», где каждое предложение является ответ , что образец принимает. Некоторые грамматики реализованы на что - то вроде этого. (НЛП / Грамматик). Если вам нужно , как это сделать, посмотрите на рамочном stanfordnlp.github.io/CoreNLP
Intruso
5

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

chewpakabra
источник
4

Это можно легко сделать с CRF s. Вы можете использовать BIO кодировку помечать предложение. Затем передать его в ИРК. Вам просто нужно создать несколько предложений с тегами для целей обучения следующим образом:

 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 для реализации конца в конец НЭК.

проверить это с открытым исходным кодом чат бота проекта на GitHub с НЭК и Намерение классификации , написанной в питона. Они имеют простой в использовании обучающий интерфейс, где вы можете обучить своего бота извлекать информацию из предложений.

Альфред Фрэнсис
источник
0

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

enterML
источник