Как обрабатывать два метода извлечения сущностей в НЛП

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

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

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

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

Собака

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

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

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


person adama    schedule 05.03.2019    source источник


Ответы (1)


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

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

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

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

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

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

person mvs    schedule 06.03.2019