Разработка и использование платформы чат-ботов Rasa

NLP

1. Раса

Rasa— это среда машинного обучения с открытым исходным кодом для создания контекстных помощников искусственного интеллекта и чат-ботов. Раса имеет два основных модуля:

  • Rasa NLU: для понимания пользовательских сообщений, включая распознавание намерений и распознавание объектов, он преобразует пользовательский ввод в структурированные данные.
  • Rasa Core: это платформа для управления беседами, позволяющая вести беседы и решать, что делать дальше.

Rasa X— это инструмент, который помогает создавать, улучшать и развертывать помощников ИИ на базе платформы Rasa. Rasa X включает в себя пользовательский интерфейс и REST API.

在这里插入图片描述

Официальная документация Раса:Build contextual chatbots and AI assistants with Rasa

гитхаб-адрес:RasaHQ/rasa

пип установить

pip install rasa_nlu
pip install rasa_core[tensorflow]

На этой диаграмме показаны основные этапы реакции помощника, созданного с помощью Rasa, на сообщение:

在这里插入图片描述

срок

  • intents:намерение
  • pipeline:
  • story: Модель Core учится на реальных данных сеанса в виде обучающих «историй». Истории — это настоящие разговоры между пользователями и помощниками.
  • domain: определяет вселенную, в которой живет помощник: какой пользовательский ввод он должен получать, какие действия должен предсказывать, как реагировать и какую информацию хранить.
    在这里插入图片描述

2. Раса_НЛУ

Раньше Rasa NLU была отдельной библиотекой, но теперь она является частью инфраструктуры Rasa.

Rasa_NLU — это инструмент с открытым исходным кодом, локально развертываемый и поддерживающий инструмент аннотирования корпуса.RASA NLU Trainer. Он сам может поддерживать любой язык, а китайскому языку необходимо добавить определенный язык из-за его специфики.tokenizerкак часть общего процесса.

Rasa NLUиспользуется в чат-ботахРаспознавание намеренийиизвлечение объекта. Например, следующее предложение:

"I am looking for a Mexican restaurant in the center of town"

Возврат структурированных данных:

{
  "intent": "search_restaurant",
  "entities": {
    "cuisine" : "Mexican",
    "location" : "center"
  }
}

Rasa_NLU_Chiв видеRasa_NLU 的一个 fork 版本, присоединилсяjiebaВ качестве китайского токенизатора реализована поддержка китайского языка.

В этом разделе кратко представленыRasa_NLU_ChiПроцесс создания локальной доменной системы китайского языка NLU.

Цель

  • Вход: тестовый текст на китайском языке.
  • Выход: структурированные данные, идентифицирующие соответствующие намерения и сущности в тексте.

1. Pipeline

rasa nlu поддерживает различные конвейеры, а его внутренняя реализация может поддерживатьspaCy、MITIE、MITIE + sklearn 以及 tensorflow, среди которых официально рекомендуется spaCy, и стоит отметить, что MITIE включен в список Deprecated начиная с версии 0.12.

используется в этом примереpipelineзаMITIE+Jieba+sklearn, раса нлуконфигурационный файлзаconfig_jieba_mitie_sklearn.ymlследующее:

language: "zh"

pipeline:
- name: "nlp_mitie"
  model: "data/total_word_feature_extractor_zh.dat"  // 加载 mitie 模型
- name: "tokenizer_jieba"   // 使用 jieba 进行分词
- name: "ner_mitie"   // mitie 的命名实体识别
- name: "ner_synonyms"
- name: "intent_entity_featurizer_regex"
- name: "intent_featurizer_mitie"  // 特征提取
- name: "intent_classifier_sklearn" // sklearn 的意图分类模型

2. Подготовка: обучите файл модели MITIE

Как используется в конвейереMITIE, поэтому необходима обученная модель MITIE (сначала выполняется сегментация китайских слов). Модель MITIEобучение без присмотраполучается, аналогично тому, что в word2vecword embedding, требует большого объема китайского корпуса, а обучение модели требует большого объема памяти и занимает очень много времени.. Непосредственно используются файлы моделей, созданные китайской Википедией и корпусами Baidu Baike, которыми пользуются пользователи сети.

Ссылка на сайт:Disk.Baidu.com/Yes/1Kai NE NV старый HL…Пароль: p4vx

3. корпус rasa_nlu

После получения векторной модели слов MITIE вы можете использовать помеченный корпус для обучения модели Rasa NLU. Раса обеспечиваетПлатформа маркировки данных: rasa-nlu-trainer

Как выглядят размеченные данные?

Аннотированный корпус хранится вjsonВ файле конкретный формат выглядит следующим образом, включаяtext,intent,entities, в сущностиstartиendсущность, соответствующаяtextначать и закончить вindex.

отdata/examples/rasa/demo-rasa_zh.jsonНапример:

{
  "rasa_nlu_data": {
    "common_examples": [
      {
        "text": "你好",
        "intent": "greet",
        "entities": []
      },
      {
        "text": "我想找地方吃饭",
        "intent": "restaurant_search",
        "entities": []
      },
      {
        "text": "我想吃火锅啊",
        "intent": "restaurant_search",
        "entities": [
          {
            "start": 2,
            "end": 5,
            "value": "火锅",
            "entity": "food"
          }
        ]
      }
    ]
  }
} 

4. Обучите модель

На данный момент получен размеченный корпус, необходимый для обучения, и MITIE-файл векторной модели слов. Далее вы можете обучить модель Rasa_NLU.

Вставьте предложение для установки:

  • Исходная установка
    $ git clone https://github.com/crownpku/Rasa_NLU_Chi.git // clone 源码
    
    $ cd Rasa_NLU_Chi
    
    $ python setup.py install  // 安装依赖
    

команда обучения модели

python -m rasa_nlu.train -c sample_configs/config_jieba_mitie_sklearn.yml --data data/examples/rasa/demo-rasa_zh.json --path models --project nlu

Требуемые параметры:

  • Файл конфигурации обучения:-c
  • Учебный корпус:--data
  • Путь сохранения модели:--path
  • название проекта:--project

После того, как обучение модели будет завершено,--pathСохраните файл обученной модели по указанному пути.Если имя модели (например, --project) указано во время обучения, модель будет сохранена вmodels/project_name/model_**каталог, напримерmodels/chat_nlu_test/model_20190821-160150Структура выглядит следующим образом:

在这里插入图片描述

5. Тестовая проверка

  • запустить службу
    python -m rasa_nlu.server -c sample_configs/config_jieba_mitie_sklearn.yml --path models
    
  • Протестируйте службу (откройте новый терминал и используйте команду curl, чтобы получить результаты)
    curl -XPOST localhost:5000/parse -d '{"q":"明天天气预报", "project":"nlu", "model":"model_20190821-160150"}'
    

Результат выглядит следующим образом:

在这里插入图片描述

3. Ядро Расы

Rasa Core — это диалоговый движок для создания помощников ИИ, который является частью платформы Rasa с открытым исходным кодом.

Процесс обработки сообщений Rasa CoreИз модуля управления диалогами, описанного выше, он должен отвечать за координацию различных модулей чат-бота и поддержание структуры и статуса диалога человек-машина. Ключевые технологии, задействованные в модуле управления диалогом, включают распознавание поведения в диалоге, распознавание состояния диалога, изучение стратегии диалога, прогнозирование поведения, вознаграждение за диалог и так далее. Ниже приведен поток обработки сообщений Rasa Core:

在这里插入图片描述

  • Сначала передайте сообщение, введенное пользователем, вInterpreter(модуль NLU), отвечающий за идентификацию «намерения» в Сообщении и извлечение всех данных «сущности»;
  • Во-вторых, Rasa Core передаст намерение и распознавание, извлеченные интерпретатором, вTrackerобъект, основная роль которого — отслеживать состояние разговора;
  • В-третьих, используйтеpolicyзаписыватьTrackerтекущее состояние объекта и выбрать выполнение соответствующегоaction, где это действие записывается в объект Track;
  • Наконец, выведите результат, возвращаемый выполнением действия для завершения взаимодействия человека с компьютером.

Rasa Core состоит из двух вещей:storiesиdomain.

  • domain.yml: включая применимый домен диалоговой системы, включая набор намерений, набор сущностей и соответствующий набор
  • story.md: Набор обучающих данных, сопоставление исходного диалога в предметной области.

1. Stories

Истории можно понимать как поток сцен диалога, нам нужно сообщить машине, на что похожа наша многораундовая сцена. Образец данных Story – это образец, который будет обучаться диалоговой системой Rasa Core. Он описывает возможные сюжетные линии в процессе диалога человека с компьютером. Модель диалога, необходимая для диалоговой системы человек-компьютер, получается путем обучения образца Stories и домен.

Истории хранятся в файлах md. Символы для историй объясняются следующим образом:

символ инструкция
## название рассказа
* Намерение и заполненный слот
- действие

Пример:

## simple_story_with_multiple_turns
* affirm OR thank_you
    - utter_default
* goodbye
    - utter_goodbye
> check_goodbye

## story_04649138
* greet
 - utter_ask_howcanhelp
* inform{"location": "london", "people": "two", "price": "moderate"}
 - utter_on_it
 - utter_ask_cuisine
* inform{"cuisine": "spanish"}
 - utter_ask_moreupdates
* inform{"cuisine": "british"}
 - utter_ask_moreupdates
* deny
 - utter_ack_dosearch
 - action_search_restaurants
 - action_suggest
* affirm
 - utter_ack_makereservation
* thankyou
 - utter_goodbye

Как показано выше, следует отметить несколько моментов:

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

истории визуализации

Доступно в Rasa Corerasa_core.visualizeМодуль визуализирует историю, что способствует освоению процесса создания истории дизайна.

Заказ:

python -m rasa_core.visualize -d domain.yml -s data/sotries.md -o graph.html -c config.yml

параметр:

  • -m: указать работающий модуль
  • -d: укажите путь к файлу domain.yml
  • -s: укажите путь к истории
  • -o: укажите имя выходного файла
  • -c: укажите файл конфигурации политики.

Наконец, в корневом каталоге проекта, чтобы получитьgraph.html, который можно открыть в браузере.

Для конкретной реализации, пожалуйста, обратитесь к исходному кодуrasa/core/visualize.py.

2. Domain

domain.yml определяет всю информацию, которую должен знать диалоговый робот, эквивалентную структуре мозга, определяющую намерениеintents, организацияentities, слотslotsи действиеactions. его виды,intentsиentitiesСоответствует помеченным в обучающих выборках модели Rasa NLU.slotс отмеченнымentitiesпоследовательный,actionsДействия диалоговых ботов в ответ на запросы пользователей. Кроме того, в domain.ymltemplatesчастьutter_типactionШаблоны сообщений определены для облегчения автоматических ответов диалоговых ботов на соответствующие действия.

пункт инструкция
intents намерение
entities информация о сущности
slots Слот Word, информация, которую вы хотите отслеживать в разговоре
actions Действия робота
templates Заявление шаблона ответа

намерения

использовать-Символы для каждого намерения

intents:
  - greet
  - goodbye
  - search_weather

сущность сущности

Сущность, то есть все сущности, отмеченные в выборке

entities:
  - city

слот

Слоты — это память робота. Они действуют как хранилища ключей и значений, которые можно использовать для хранения предоставленной пользователем информации (например, их родной город), а также информации, собранной о внешнем мире (например, результатов запросов к базе данных). Взяв в качестве примера запрос погоды, диалоговый робот должен знать местоположение и дату, прежде чем он сможет запросить, поэтому в domain.yml необходимо определить два слота в разделе слотов, а именноcityиdatatimematchesОн используется для хранения результата последнего запроса. Пример выглядит следующим образом:

slots:
  city:
	type: text
	initial_value:"北京"
  datatime:
	type:text
	initial_value:"明天"
  matches:
	type:unfeaturized
	initial_value:"none"

Типы слотов:

  • Text Slot:текст
  • Boolean Slot: логическое значение
  • Categorical Slot: принимает значения, перечисленные в перечислении
    slots:
       risk_level:
          type: categorical
          values:
          - low
          - medium
          - high
    
  • Float Slot: плавать
    slots:
       temperature:
          type: float
          min_value: -100.0
          max_value:  100.0
    
    Defaults: max_value=1.0, min_value=0.0После установки max_value и min_value значения больше max_value и меньше min_value устанавливаются в max_value и min_value.
  • List Slot: список данных, и длина не влияет на диалог
  • Unfeaturized Slot: Хранит данные, которые не влияют на ход сеанса.

Если важно само значение, используйтеcategoricalилиboolканавка. иfloatиlist slots. Если вы просто хотите сохранить некоторые данные, но не хотите, чтобы они влияли на поток сеанса, используйтеunfeaturizedслот.typeУказывает тип данных, хранящихся в слоте,initial_valueЭто начальное значение слота, которое является необязательным (не имеет смысла).

slots:
  name:
    type: text
    initial_value: "human"
  matches:
    type:unfeaturized

actions

Когда Rasa NLU распознает намерение пользователя ввести информацию, модуль управления диалогами Rasa Core отреагирует на это, и операция ответа будет действием. Rasa Core поддерживает три действия:

  • default actions: набор действий по умолчанию, не требующий определения, может использоваться напрямую.
    • action_listen: слушать действие
    • action_restart: состояние сброса
    • action_default_fallback: это действие выполняется по умолчанию, когда уровень достоверности, полученный Rasa Core, ниже установленного порога.
  • utter actions:отutter_Для начала отправьте сообщение пользователю только в качестве действия обратной связи. Определение очень простое, просто в файле domain.ymlactions:Определение поля начинается сutter_Начать. Конкретное содержание ответа будет определено вtemplatesчасть. если нетutter_этот префикс, то действия будут распознаны как настраиваемые действия.
    actions:
      - utter_greet
      - utter_cheer_up
    
  • custom actions: Пользовательские действия, которые позволяют разработчикам выполнять любые действия и давать обратную связь пользователям, являются ключом к множеству раундов действий. нуждаться вdomain.ymlв файлеactionsчасть определяется сначала, а затем в указанномwebserverреализовать это. Среди них веб-серверurlадрес вendpoint.ymlуказано в файле. Официальный предоставляет небольшой пакет SDK для Python, чтобы облегчить пользователям написание пользовательских действий, сначала необходимо установить соответствующийrasa_core_sdk. Подробнее об этом позже. .
    actions:
      - action_search_weather
    

templates

Это время определяетutter actionsконкретное содержание ответа, и каждыйutter actionsты сможешьопределить несколькоответное сообщение. Запускается, когда пользователь инициирует намерение, например «Привет!»utter_greetAction, Rasa Core автоматически выберет в результате одну из данных из шаблона действия и вернет ее пользователю.

templates:
  utter_greet:
    - text: "您好!请问我可以帮到您吗?"
    - text: "您好!请说出您要查询的具体业务,比如跟我说'查询身份证号码'"
    - text: "您好!"

utter_defaultиспользуется по умолчанию для Rasa Coreaction_default_fallback, когда Rasa NLU распознает намерение и его достоверность ниже установленного порога, он по умолчанию выполнит шаблон в utter_default.

Помимо ответа на простое текстовое сообщение, Rasa Core также поддерживает добавление текстовых сообщений послеКнопки и картинки,а такжезначение доступа в слоте(Если значение слота заполнено, в противном случае возвращается None). Например:

  utter_introduce_self:
    - text: "您好!我是您的AI机器人呀~"
      image: "https://i.imgur.com/sayhello.jpg"
  utter_introduce_selfcando:
    - text: "我能帮你查询天气信息"
      buttons:
    	- title: "好的"
          payload: "ok"
   	- title: "不了"
          payload: "no"
  utter_ask_city:
    - text: "请问您要查询{ datetime }哪里的天气?"  
  utter_ask_datetime:
    - text: "请问您要查询{ city }哪天的天气"

Пример:

intents:
  - greet
  - goodbye
  - affirm
  - deny
  - search_weather
 
slots:
  city:
	type: text
  matches:
	type: unfeaturized

entities:
  - city

actions:
  - utter_greet
  - utter_cheer_up
  - utter_did_that_help
  - utter_happy
  - utter_goodbye

templates:
  utter_greet:
  - text: "Hey! How are you?"

  utter_cheer_up:
  - text: "Here is something to cheer you up:"
    image: "https://i.imgur.com/nGF1K8f.jpg"

  utter_did_that_help:
  - text: "Did that help you?"

  utter_happy:
  - text: "Great carry on!"

  utter_goodbye:
  - text: "Bye"
  
  utter_default:
    - text: "小x还在学习中,请换种说法吧~"
    - text: "小x正在学习中,等我升级了您再试试吧~"
    - text: "对不起,主人,您要查询的功能小x还没学会呢~"

3. Обучите диалоговую модель

После подготовки данных domain.yml и sotries.md можно обучить модель. Входные данные модели — это историческая запись разговора, а метка — это следующее действие по принятию решения. Модель по существу представляет собой мультиклассовую классификацию категорий num_actions.

Тренировочная команда выглядит следующим образом:

python -m rasa_core.train -d domain.yml -s stories.md -o models/chat1

Объяснение параметра:

  • -d或--domain:Ссылаться нафайл domain.ymlмаршрут
  • -s或--stories: уточнитьфайл story.mdдорожка. Вы можете сохранить историю в одном файле md или в нескольких файлах md (хранящихся в каталоге).
  • -o或--out: относится к диалогувыходной путь модели, сохраните файл обученной модели
  • -c或--c: уточнитьФайл спецификации политики

Пример данных, необходимых для обучения:

  • файл domain.yml:
    intent:
      - greet
      - goodbye
      - search_weather
    entities:
      - city
    actions:
      - utter_greet
      - utter_goodbye
      - utter_ask_city
    templates:
      utter_greet:
      - text: "你好啊"
      - text: "又见面了"
    
      utter_goodbye:
      - text: "再见"
      - text: "下次再见啊"
    
      utter_ask_city:
      - text: "请问您要查询哪里的天气?"
    
  • файл story.md:
    ## search weather
    * greet
      - utter_greet
    * search_weather{ "datatime" : "明天"}
      - utter_ask_city
    * goodbye
      - utter_goodbye
    

Обучите структуру сети:

在这里插入图片描述
Создание файлов моделиследующее:
在这里插入图片描述

Протестируйте диалоговую модель

После обучения мы получили модель диалога, теперь давайте ее протестируем.

Тестовая команда выглядит следующим образом:

python -m rasa_core.run -d models/chat1

параметр-d: укажите путь к модели

Примечание. В настоящее время тестируется модель диалога rasa_core, а модель core_nlu не добавляется, поэтому распознавание намерений еще не может быть выполнено и может возвращать только конкретный ответ на основе известного намерения (вводное намерение). Поэтому, когда мы тестируем, нам нужно вручную ввести намерение, определенное в domain.yml, ввести намерение как/начинается символ. Например, ввод приветственного намерения:/greet

在这里插入图片描述

4. Протестируйте чат-бот

На предыдущих этапах были обучены модель распознавания намерений Rasa_nlu и модель диалога Rasa_Core. Далее проводится общий тест обоих.

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

тестовая команда python -m rasa_core.run -d models/chat1 -u models/nlu/model_20190820-105546

объяснение параметра;

  • -d:modeldir указывает путь модели диалога (то есть путь модели, обученный Rasa_core)
  • -u: Образец пути для обучения Rasa NLU
  • --port: указывает номер порта, на котором работает веб-приложение Rasa Core.
  • --credentials: указывает свойство канала (входные каналы).
  • endpoints: используется для указания URL-адреса, по которому Rasa Core подключается к другим веб-серверам, таким как nlu web.
  • -o: укажите путь к выходному файлу журнала журнала.
  • --debug: распечатать отладочную информацию

在这里插入图片描述

Справочная запись в блоге:

Rasa_NLU_Chi Китайская практика обработки Spring Boot

Руководство по разработке Rasa Core

Руководство пользователя Rasa 01 - Блог u012526436 - Блог CSDN