安裝
Rasa 的推薦安裝方式是透過pip
:
pip install rasa-x --extra-index-url https://pypi.rasa.com/simple
這將同時安裝Rasa和Rasa X。如果你不想使用Rasa X,只需要執行pip install Rasa
除非你已經安裝了numpy和scipy,否則我們強烈建議你安裝並使用Anaconda。
如果你想使用Rasa的開發版本,你可以從GitHub上獲得:
git clone https://github.com/RasaHQ/rasa.git
cd rasa
pip install -r requirements.txt
pip install -e .
Windows系統下的環境要求
確保安裝了Microsoft vc++編譯器,這樣python就可以編譯任何依賴項。你可以從Visual Studio獲得編譯器。下載安裝程式並在列表中選擇vc++構建工具。
NLU 管道依賴項
Rasa NLU有用於識別意圖和實體的不同元件,其中大多數都有一些額外的依賴項。
當你訓練NLU模型時,Rasa將檢查是否安裝了所有必需的依賴項,並告訴你缺少哪一個依賴項。[選擇管道]()的頁面將幫助你選擇要使用的管道。
注意:
如果你想確保為你可能需要的任何元件安裝了依賴項,並且不介意有其他依賴項存在,那麼你可以使用
pip install -r alt_requirements/requirements_full.txt
安裝所有依賴項。
一個很好的開始:spaCy提供的pretrained embeddings
pretrained_embeddings_spacy
管道組合了幾個不同的庫,是一個流行的選項。更多資訊請檢視spaCy文件。
你可以用以下命令安裝:
pip install rasa[spacy]
python -m spacy download en_core_web_md
python -m spacy link en_core_web_md en
這將安裝Rasa NLU、spacy及其英語語言模型。我們建議至少使用“中型”模型(_md
),而不是spacy預設的小型en_core_web_sm
模型。小模型執行需要更少的記憶體,但會在一定程度上降低意圖分類(intent classification )效能。
第一選擇:Tensorflow
要使用 supervised_embeddings
管道,你需要安裝Tensorflow,並安裝sklearn-crfsuite庫來進行實體識別。要做到這一點,只需執行以下命令:
pip install rasa
第二個選擇:MITIE
MITIE後端對於小型資料集執行得很好,但是如果你有數百個示例,那麼訓練可能會花費很長時間。我們可能會在未來棄用MITIE後端。
首先,執行:
pip install git+https://github.com/mit-nlp/MITIE.git
pip install rasa[mitie]
然後下載MITIE模型。你所需要的檔案是total_word_feature_extract .dat
。可以將其保在任何地方。如果你想使用MITIE,你需要告訴它在哪裡可以找到這個檔案(在本例中,它儲存在專案目錄的data資料夾中)。
language: "en"
pipeline:
- name: "MitieNLP"
model: "data/total_word_feature_extractor.dat"
- name: "MitieTokenizer"
- name: "MitieEntityExtractor"
- name: "EntitySynonymMapper"
- name: "RegexFeaturizer"
- name: "MitieFeaturizer"
- name: "SklearnIntentClassifier"
單獨使用MITIE進行訓練可能非常慢,但是你可以使用這種配置:
language: "en"
pipeline:
- name: "MitieNLP"
model: "data/total_word_feature_extractor.dat"
- name: "MitieTokenizer"
- name: "MitieEntityExtractor"
- name: "EntitySynonymMapper"
- name: "RegexFeaturizer"
- name: "MitieIntentClassifier"
基本原理介紹
第一步是建立一個新的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
language
和pipeline
鍵指定應該如何構建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]()