Использование Regex с Rasa (Как распознать сущности, которых нет в учебных примерах) - PullRequest
1 голос
/ 04 марта 2020

Я работаю над чат-клиентом по связям с клиентами. Пользователь может ввести приветствие, имя пользователя, номер телефона и т. Д. c.,

. Я создал несколько обучающих примеров (более 50 имен), чтобы помочь чат-боту в файле nlu.md. Но проблема в том, что чатбот не может распознать имя пользователя как сущность, если оно не указано в файле обучающих данных (nlu.md).

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

Я использую rasa 1.0.7 и у меня есть трубопровод: supervised_embeddings

например

nlu.md file:

##regex.names
- [a-zA-Z\s]+$


##intent:inform
- John
- Roshan
- Sanvi
–> have few more

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

Ваш ввод -> Джон
Правильно ли задано значение «информировать» для [Джон] (имя), и все ли объекты помечены правильно? (Да / Нет)
Ваш ввод -> adrena
Ваша модель NLU классифицирована как "adrena" с намерением "информировать", и нет сущностей, это правильно? (Да / Нет)

Что я должен сделать, чтобы бот понял, когда указано имя пользователя? Я видел где-то, что таблицы поиска могут быть использованы. Но когда я попытался использовать справочные таблицы, он все равно не распознал имя_пользователя, не входящее в обучающие примеры.

Приведенные ниже ссылки.
https://forum.rasa.com/t/regex-entity-names/11739/10
Как rasa_nlu использует lookup_tables для извлечения сущности?
но не повезло с моей проблемой. У меня тоже все в порядке.

Спасибо.

1 Ответ

1 голос
/ 04 марта 2020

Вы можете использовать SpaCyEntityExtractor с измерением PERSON вместо CRFEntityExtractor для этой конкретной c сущности. Для распознавания личных имен это почти всегда даст вам лучшие результаты, так как существует очень много возможностей для имен. AFAIK модель PERSON SpaCy сама чувствительна к регистру. Вы все еще можете извлечь другие пользовательские объекты с помощью CRFEntityExtractor. В вашем конвейере это будет выглядеть так:

language: "en"

pipeline:
- name: "WhitespaceTokenizer"
- name: "RegexFeaturizer"
- name: "CRFEntityExtractor"
- name: "EntitySynonymMapper"
- name: "CountVectorsFeaturizer"
- name: "EmbeddingIntentClassifier"
- name: "SpacyNLP"
  model: "en_core_web_md"
- name: "SpacyEntityExtractor"
  dimensions: ["PERSON"]

...