Я создаю простой чат-бот. Я хочу получить информацию из ответа пользователя. Пример сценария:
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 не смогли распознать это.
Ответы:
Возможно, вы можете использовать комбинацию распознавания именованных объектов и синтаксического анализа - хотя слово Эдвин , безусловно, встречается, представьте себе ситуацию, когда имя - Эдвард Филип Мартел . NER обнаруживает каждое слово как отдельные объекты (следовательно, 3 различных объекта) - таким образом, вам в любом случае придется связать их вместе, основываясь на некоторой логике. Кроме того, в случае присутствия нескольких имен может быть сложнее устранить неоднозначность (например, Джон и Рэмси обедали в Винтерфелле ).
Здесь также поможет анализ синтаксиса предложения (при условии, что конечный пользователь вводит относительно связное и правильное предложение - если используется сленг и короткие формы текста, даже Stanford NLP может помочь только в определенной степени).
Один из способов использовать синтаксический анализ / анализ и NER в следующих примерах -
В каждом из случаев (как и в общем случае) имя сущности (собственное существительное / существительное) ассоциируется в непосредственной близости от глагола. Следовательно, если вы сначала проанализируете предложение, чтобы определить глаголы, а затем примените NER к окружающим (+/- 1 или 2) словам, у вас может быть относительно приличный способ решения проблемы. Это решение будет зависеть в первую очередь от правил синтаксиса, которые вы создаете для идентификации NER, а также от окна вокруг глаголов.
источник
Вы должны использовать распознавание именованных объектов, например, из NLTK, http://www.nltk.org/book/ch07.html <- вы можете найти пример использования там. Это будет работать для вашего описанного случая довольно хорошо.
источник
Это можно легко сделать с CRF s. Вы можете использовать BIO кодировку помечать предложение. Затем передать его в ИРК. Вам просто нужно создать несколько предложений с тегами для целей обучения следующим образом:
CRFsuite и CRF ++ некоторые из реализаций хорошо. CRFsuite имеет питона обертку под названием pycrfsuite , который довольно легко реализовать. Проверьте это IPython ноутбук или этот фрагмент кода на GitHub для реализации конца в конец НЭК.
проверить это с открытым исходным кодом чат бота проекта на GitHub с НЭК и Намерение классификации , написанной в питона. Они имеют простой в использовании обучающий интерфейс, где вы можете обучить своего бота извлекать информацию из предложений.
источник
Чтобы выполнять такие задачи с высокой точностью, я предлагаю вам построить модель LSTM с встраиванием слов с помощью word2vec. LSTM могут помочь извлечь информацию из предложения, а также предсказать следующий символ или слово, учитывая, что набор слов уже присутствует в предложении.
источник