Rasa 聊天機械人專欄(一):基本原理介紹

  • 2019 年 12 月 10 日
  • 筆記

作者 | VK

編輯 | 奇予紀

出品 | 磐創AI團隊出品

本頁面解釋了用Rasa構建助手的基本原理,並展示了Rasa項目的結構。你可以在這裡測試它,而不需要安裝任何東西。你也可以安裝Rasa並在命令行中執行。

在本教程中,你將構建一個簡單、友好的助手,它將詢問你的近況,並在你難過時發送一張有趣的照片給你,讓你振作起來。

mark

1.創建新的項目

第一步是創建一個新的Rasa項目。要做到這一點,運行下面的代碼:

rasa init --no-prompt  

rasa init命令創建rasa項目所需的所有文件,並根據一些示例數據訓練一個簡單的機械人。如果你省略了——no-prompt參數,將會詢問你一些關於項目設置的問題。

這將創建以下文件:

文件名稱

作用說明

init.py

幫助python查找操作的空文件

actions.py

為你的自定義操作編寫代碼

config.yml 『*』

配置NLU和Core模型

credentials.yml

連接到其他服務的詳細信息

data/nlu.md 『*』

你的NLU訓練數據

data/stories.md 『*』

你的故事

domain.yml 『*』

你的助手的域

endpoints.yml

接到fb messenger等通道的詳細信息

models/.tar.gz

你的初始模型

最重要的文件用「*」標記。你將在本教程中了解所有這些文件。

2.查看你的NLU訓練數據

Rasa助手的第一個部分是NLU模型。NLU代表自然語言理解,這意味着將用戶消息轉換為結構化數據。要使用Rasa做到這一點,你需要提供一些訓練示例,展示Rasa應該如何理解用戶消息,然後通過展示的這些示例來訓練模型。

運行下面的代碼,查看由rasa init命令創建的NLU訓練數據:

cat data/nlu.md  

##開始的行定義意圖的名稱,這些名稱是具有相同含義的消息組。Rasa的工作是預測用戶向助手發送新消息時的正確意圖。你可以在[訓練數據格式]()中找到數據格式的所有細節。

3. 定義你的模型配置

配置文件定義了模型將使用的NLU和Core組件。在本例中,你的NLU模型將使用supervised_embeddings管道。你可以在[這裡]()了解不同的NLU管道。

讓我們看一下你的模型配置文件。

cat config.yml  

languagepipeline鍵指定應該如何構建NLU模型。policies鍵定義Core模型將使用的策略。

4. 寫下你的第一個故事

在這個階段,你將教會你的助手如何回復你的信息。這稱為對話管理(dialogue management),由你的Core模型來處理。

Core模型以訓練「故事」的形式從真實的會話數據中學習。故事是用戶和助手之間的真實對話。帶有意圖和實體的行反映了用戶的輸入和操作名稱,操作名稱展示了助手應該如何響應。

下面是一個簡單對話的例子。用戶說你好,助手也說你好。故事是這樣的:

## story1  * greet     - utter_greet  

你可以在[故事]()中看到完整的細節。

-開頭的行是助手所採取的操作。在本教程中,我們所有的操作都是發送回用戶的消息,比如utter_greet,但是一般來說,一個操作可以做任何事情,包括調用API和與外部世界交互。

運行下面的命令查看文件data/stories.md中的示例故事:

cat data/stories.md  

5.定義域

接下來我們需要做的是定義一個域。域定義了助手所處的環境:它應該期望得到什麼用戶輸入、它應該能夠預測什麼操作、如何響應以及存儲什麼信息。我們助手的域名保存在一個名為domain.yml的文件中:

cat domain.yml  

那麼各個部分是什麼意思呢?

解釋說明

intents

你希望用戶說的話

actions

你的助手能做的和能說的

templates

你的助手可以說的東西的模板字符串

這些如何配合呢?Rasa Core的工作是在對話的每個步驟中選擇正確的操作來執行。在本例中,我們的操作只是向用戶發送一條消息。這些簡單的話語操作是從域中以utter_開頭的操作。助手將根據templates部分中的模板返回一條消息。請參閱[自定義操作](),以構建不僅僅用於發送消息的操作。

6.訓練模型

每當我們添加新的NLU或Core數據,或更新域或配置時,我們都需要根據示例故事和NLU數據重新訓練一個神經網絡。為此,運行下面的命令。該命令將調用Rasa Core和NLU訓練函數,並將訓練後的模型存儲到models/目錄中。該命令只會在數據或配置發生更改時自動對不同的模型部件進行重新訓練。

rasa train  echo "Finished training."  

rasa train命令將同時查找NLU和Core數據,並訓練一個組合模型。

7. 和你的助手談談

恭喜你! ? 你剛剛建立了一個完全由機器學習驅動的助手。 下一步就是嘗試一下!如果你正在本地機器上學習本教程,請運行以下命令與助手對話:

rasa shell  

你也可以用Rasa X來收集更多的對話以提高你的助手: 嘗試[Rasa X]()