Как работать с двумя методами извлечения сущностей в НЛП - PullRequest
1 голос
/ 05 марта 2019

Я использую два разных метода извлечения сущностей (https://rasa.com/docs/nlu/entities/) при построении моей модели NLP в среде RASA для создания чат-бота. Бот должен обрабатывать различные вопросы, которые имеют пользовательские объекты, а также некоторые общие вопросы, такие как местоположение или организация. Поэтому я использую оба компонента ner_spacy и ner_crf для создания модели. После этого я создаю небольшой вспомогательный скрипт на python для оценки производительности модели. Там я заметил, что модель изо всех сил пытается выбрать правильную сущность.

Например, для слова «X» он выбрал предварительно определенный объект «ORG» из SpaCy, но его следует признать пользовательским объектом, который я определил в данных обучения.

Если я просто использую экстрактор ner_crf, я сталкиваюсь с огромными проблемами в определении объектов местоположения, таких как столицы. Также одна из моих самых больших проблем - единый ответ.

В: «Какое ваше любимое животное?»

A: Собака

Моя модель не может извлечь это единственное "животное" для этого единственного ответа. Если я отвечу на этот вопрос двумя словами, такими как «Собака», у модели не возникнет проблем с извлечением животного объекта со значением «Собака».

Итак, мой вопрос: разумно ли использовать два разных компонента для извлечения сущностей? Один для пользовательских объектов, а другой для предварительно определенных объектов. Если я использую два метода, каков механизм в модели, какой экстрактор используется?

Кстати, в настоящее время я просто проверяю что-то, поэтому мои тренировочные образцы не такие большие, как должно быть (менее 100 примеров). Может ли проблема быть решена, если у меня будет гораздо больше обучающих примеров?

1 Ответ

2 голосов
/ 06 марта 2019

Вы столкнулись с 2 проблемами здесь. Я предлагаю несколько способов, которые я нашел полезным.

1. Распознавание пользовательских объектов: Чтобы решить эту проблему, вам нужно добавить больше обучающих предложений со всеми возможными длинами сущностей. ner_crf будет лучше предсказывать, когда вокруг сущностей есть идентифицируемые маркеры (например, предлоги)

2. Извлечение сущностей из одного слова ответа: В качестве обходного пути, я предлагаю вам сделать ниже манипуляции на стороне клиента.

Когда вы отправляете вопрос типа What´s your favorite animal?, добавьте маркер к вопросу, чтобы указать клиенту, что ожидается один ответ. например Вы можете отправить ##SINGLE## What´s your favorite animal? клиенту.

Клиент может удалить ##SINGLE## из вопроса и показать его пользователю. Но когда клиент отправляет ответ пользователя на сервер, он не отправляет Dog, он отправляет что-то вроде User responded with single answer as Dog

Вы можете обучить вашу модель извлекать сущности из такого ответа.

...