1. 程式人生 > 其它 >對話系統rasa學習及使用

對話系統rasa學習及使用

最近要做一個簡單金融場景的對話問答系統,由於一開始沒有業務資料,首先想到的就是話術模版問答,在調研了一些技術文章和系統後,發現比較常用的就是rasa,比較適合單一業務場景的對話,大廠的開放式問答可能是很多人自主研發的一套框架,對於很多中小廠則主流使用的是rasa,可以減少一部分基建的時間。

一個完整的對話系統流程圖如下所示:

Rasa的框架涵蓋了上圖右邊虛線框的部分。

rasa簡介

網上資料很多,直接貼github上的描述:Rasa is an open source machine learning framework to automate text-and voice-based conversations.

主要意思就是它是一個機器學習的框架,能夠自動進行文字和語音的對話。

Rasa的核心模組是NLU和對話管理

NLU:利用規則、機器學習,統計學習,深度學習等方法,對一條人類語言進行文字分析,分析得到的主要結果為意圖intent以及實體entity資訊。其中,意圖對應task-orient對話系統中的intent。而實體資訊則用於對話系統中的槽填充。

對話管理:在rasa中,對話管理的主要職責是通過NLU的分析得到的意圖和實體資訊,進行槽位填充,然後結合前幾輪對話的狀態,根據某種策略(策略可以是人工規則,或者機器學習,深度學習,強化學習訓練得到的策略模型),決定應當如何對當前使用者的對話進行迴應。因此rasa的對話管理是包括槽填充的。

除了上述兩個核心內容外,rasa當然還提供其他功能,如response生成,與其他對話系統前端平臺對接的介面,以及不同型別的對話模擬介面(包括shell命令列模式,restful api呼叫模式等),對於從頭開發一個對話系統來說,這個框架還是省去了不少基建的工作。

rasa使用

根據github的安裝步驟,用pip命令安裝rasa和rasa-sdk這兩個包。安裝完之後,使用命令列進行使用。

首先使用rasa init命令,它會生成一個最原始的資料夾,包含了基礎的配置檔案以及簡單的example。

然後開始根據自己業務場景修改程式碼和配置檔案,主要流程如下:

1. 編寫配置domain.yml檔案,配置內容包括:設計的槽位,NLU需要識別的實體列表、意圖列表,bot回覆使用者的模板,配置可在story中直接引用的action,配置自定義的form。

2. 編寫配置config.yml檔案,配置內容包括:使用的NLU模組類(實體抽取、意圖識別等),使用的策略列表。

3. 編寫stories.md檔案,設計話術流程模板。

4. 開發自定義的NLU模組,根據實際需要新增所需的模組。一般來說需要加入extractor和classifier模組,分別對應實體抽取和意圖識別兩個模組,可以結合人工規則和機器學習模型。也可以直接配置nlu.md模組,使用規則進行意圖匹配。

5. 開發自定的form action模組,在validate中定義自己的處理邏輯。當然也可以重寫action的run方法,在其中新增自己的邏輯。根據文件指導如何在action中新增一些函式。

6. 配置endpoints.yml檔案,這個檔案是用於配置action服務地址的。因為之前說過action是一個獨立於主流程的服務,因此需要配置其服務介面。

7. 配置credentials.yml檔案,rasa支援將對話系統封裝成一個restful_api服務。另外提一句,rasa使用的是sanic的非同步web框架。因為對話系統是一個多使用者的非同步服務,所以需要支援多個使用者的同時使用。在文件的描述中restful介面不需要修改任何引數,只需要執行rasa run命令,然後用post命令,並且url字尾要加上/webhooks/rest/webhook

一些需要注意的地方:

我主要關注的模組是form action這個動作,但是在文件中的描述沒有提到要繼承FormAction這個父類,我直接繼承了action這個父類,導致一直報錯,進入不了form流程中。

formaction也是custom action的一種,所以在除錯的時候需要啟動action服務,否則會報錯。

各個種類的action命名規則需要按文件來,formaction命名比較特殊,按form的規則命名。

比較好用的方法:

在測試的時候用rasa run —debug 和rasa run actions —debug可以比較方便的定位問題的產生原因。

在測試自定義邏輯時可以使用rasa shell —debug進行邏輯調整和測試。

參考文獻:

  1. https://legacy-docs-v1.rasa.com/1.10.18/core
  2. https://zhuanlan.zhihu.com/p/75517803
  3. https://www.jianshu.com/p/4ecd09be4419
  4. https://github.com/charlesXu86/Chatbot_RASA