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
иdatatime
,иmatches
Он используется для хранения результата последнего запроса. Пример выглядит следующим образом:
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_greet
Action, 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