Rasa教程系列-0-Rasa安裝和項目創建

0. 背景

事先說明:本系列Rasa教程基於Rasa 1.6.1版本。
Rasa是一個開源機器學習框架,可用於構建具有上下文理解能力的AI助手(assistant)。
Rasa有兩個主要模塊:

  • Rasa NLU :用於理解用戶消息,包括意圖識別和實體識別,把用戶的輸入語句轉換爲結構化的數據。
  • Rasa Core:是一個對話管理平臺,用於決定對話和下一步做什麼。
  • Channels 和 integrations:將assistant連接到用戶和後端系統。

Rasa X 是一個用以改進Rasa構建的上下文助理的工具,包括用戶界面和 REST API。

1. 安裝

rasa 安裝:

pip install rasa

如果想要同時安裝rasa 和 rasa x:

pip install rasa-x --extra-index-url https://pypi.rasa.com/simple

2. 創建新項目

在當前目錄創建Rasa project:

rasa init

如果使用如下命令:

rasa init --no-prompt

該命令創建Rasa項目需要的文件,以及訓練一個簡單對話機器人需要的數據。如果命令不使用--no-prompt標識,那麼在創建過程中需要回答幾個關於項目創建的問題。
在這裏插入圖片描述

使用rasa init --no-prompt創建項目後目錄下的文件:
在這裏插入圖片描述

創建的文件如下,其中*標記的爲最重要的部分:

  • _init_.py,用來幫助Python找到action的空文件
  • actions.py,用來自定義actions的文件
  • config.yml *,NLU和Core模型的配置文件
  • credentials.yml,用來連接到其他服務(services)
  • data/nlu.md *,用於NLU訓練的數據
  • data/stories.md *,用於訓練Core模型的故事數據集
  • domain.yml *,assistant的領域(assistant’s domain)配置文件
  • endpoints.yml,連接到類似於Facebook的messenger的詳細配置(即可以配置到其他類似Facebook的平臺)
  • models/.tar.gz,初始化模型

3. 查看NLU訓練數據集

Rasa的NLU(即自然語言理解)模塊,用來將用戶消息轉換成結構數據。在Rasa中,可以通過提供訓練示例,告訴Rasa如何理解用戶消息,然後訓練獲得模型。可以看一下上述初始化的項目下的nlu.md文件內容:

## intent:greet
- hey
- hello
- hi
- good morning
- good evening
- hey there

## intent:goodbye
- bye
- goodbye
- see you around
- see you later

## intent:affirm
- yes
- indeed
- of course
- that sounds good
- correct

## intent:deny
- no
- never
- I don't think so
- don't like that
- no way
- not really

## intent:mood_great
- perfect
- very good
- great
- amazing
- wonderful
- I am feeling very good
- I am great
- I'm good

## intent:mood_unhappy
- sad
- very sad
- unhappy
- bad
- very bad
- awful
- terrible
- not very good
- extremely sad
- so sad

## intent:bot_challenge
- are you a bot?
- are you a human?
- am I talking to a bot?
- am I talking to a human?

其中以**##**開始的行定義了意圖(intents),是具有相同含義消息的集合。Rasa中NLU模塊的任務是,預測用戶輸入的消息的正確意圖。具體數據格式可以參見NLU Training Data Format

4. 定義模型的配置

config.yml配置文件將會在NLU和Core中用到。上述項目中的config.ml文件的內容爲:

# Configuration for Rasa NLU.
# https://rasa.com/docs/rasa/nlu/components/
language: en
pipeline: supervised_embeddings

# Configuration for Rasa Core.
# https://rasa.com/docs/rasa/core/policies/
policies:
  - name: MemoizationPolicy
  - name: KerasPolicy
  - name: MappingPolicy

在上述例子中,NLU模型會使用supervised_embeddings流水線。不同NUL模型的流水線可以在這裏查看
其中languagepipeline這兩個關鍵詞,用來定義NLU模型應該如何構建。policies關鍵詞定義核心模型中使用到的policies,更多關於policies的可以查看這裏

5. 書寫自己的Stories

在這個階段,通過Stories將教Rasa assistant 如何響應用戶的消息,這個叫做對話管理,由於Core model所決定。

Core model以訓練"stories"的形式從真實對話中進行學習。一個story是用戶和assistant之間的真實的一次對話。帶有意圖和實體的行反應了用戶的輸入和assistant將響應的action名。上述項目的stories.md內容如下:

## happy path
* greet
  - utter_greet
* mood_great
  - utter_happy

## sad path 1
* greet
  - utter_greet
* mood_unhappy
  - utter_cheer_up
  - utter_did_that_help
* affirm
  - utter_happy

## sad path 2
* greet
  - utter_greet
* mood_unhappy
  - utter_cheer_up
  - utter_did_that_help
* deny
  - utter_goodbye

## say goodbye
* goodbye
  - utter_goodbye

## bot challenge
* bot_challenge
  - utter_iamabot

用戶說hello 時候,意圖分類爲greet,assistant 根據utter_greet進行回覆。以-爲起始的句子表示 assistant 所做出的 action。本系列教程中所有的actions都是發送給用戶的,比如utter_greet。需要注意的是,一個action是可以做任務事情的,包括調用 API 或者與外部世界進行交互。更多關於Stories的具體格式可以參考這裏

6. 定義 Domain

下一個事情需要處理的是定義一個領域(Domain)。Domain定義了 assistant 所處的世界:期望從用戶那邊獲取什麼輸入,assistant 能夠預測什麼行爲,如何做出響應,存儲什麼消息。domain 相關的內容存儲在domain.yml文件中。上述上面的domain.yml內容如下:

intents:
  - greet
  - goodbye
  - affirm
  - deny
  - mood_great
  - mood_unhappy
  - bot_challenge

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

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_iamabot:
  - text: "I am a bot, powered by Rasa."

session_config:
  session_expiration_time: 60
  carry_over_slots_to_new_session: true

其中intents:定義了期望用戶的輸入,即意圖分類的詳情;
actions:定義了 assistant 能夠說什麼和做什麼;
templates:定義了 assistant 相應的消息模板。

這些是如何一起協調工作的呢?Rasa核心的任務是針對每個對話選擇合正確的響應。在這個例子中,我們的響應是簡單的發送消息給用戶,這裏面的響應都用utter_開頭。assistant 根據模板進行響應。可以參見 Custom Actions 創建更復雜的響應。

7. 訓練模型

一旦添加了新的NLU或Core數據,或更新 domain 或配置文件的時候,就需要重新訓練模型。執行下面的命令rasa train。這個命令會調用Rasa Core 和NLU的訓練函數,並將訓練得到的模型存儲到models/目錄下面。這個命令會自動重新訓練更新的部分。

8. 與助手進行對話

到目前爲止就建立了一個基於機器學習的對話助手。下一步通過執行下面的命令和assistant進行對話:

rasa shell

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章