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.0Defaults: 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