rasa框架學習一(domain.yml、nlu.md、stories.md)


 

可以跟進:rasa框架學習二(slots,entities,actions,component)

 

一、什么是rasa

       Rasa是一個用於自動文本和基於語音的對話的開源機器學習框架。了解消息,保持對話以及連接到消息傳遞通道和API

  Rasa分為Rasa core和 Rasa nlu兩部分:

  Rasa core用於指導會話流,而Rasa nlu用於理解和處理文本以提取信息(實體)

  Rasa了解用戶想說的內容(Rasa NLU - 實體和意圖提取),然后根據上下文信息對其進行適當的操作談話(Rasa Core)

 

  官方推薦安裝方式(安裝rasa和easa X):

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

    如果您不想使用Rasa X,請改為運行

pip install rasa

注意:

如果你想確保為你可能需要的任何組件安裝了依賴項,並且你不介意附加的依賴項,你可以使用以下代碼安裝一切

pip install -r alt_requirements/requirements_full.txt

二、創建一個新項目

1. 創建rasa項目

rasa init --no-prompt

該命令創建Rasa項目所需的所有文件。

會創建以下文件:

__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/<timestamp>.tar.gz    你的初始模型

要檢查是否已創建所有文件,請運行:

ls -l

2. 定義一個域

domain.yml文件

domain可以理解為機器的知識庫,其中定義了意圖,動作,以及對應動作所反饋的內容

intents     你期望用戶說的東西。
entities    您想要從消息中提取的信息片段。
actions     你的機器人可以做和說的東西
slots       在會話期間跟蹤的信息(例如用戶年齡)
templates   你的機器人可以說的東西的模板字符串
intents:
  - greet
  - goodbye
  - mood_affirm
  - mood_deny
  - mood_great
  - mood_unhappy

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

templates:
  utter_greet:
  - text: "Hey! How are you?"
    buttons:
    - title: "great"
      payload: "great"
    - title: "super sad"
      payload: "super sad"

  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"

Rasa Core取intent,entities以及內部的對話狀態,並且選擇的所述一個actions應該下一個執行。如果該動作只是向用戶說明,Rasa將在域中查找匹配模板(動作名稱等於完全模板, utter_greet如上例所示),填寫所有變量並進行響應。對於不僅僅發送消息的操作,您可以將它們定義為python類,並通過它們的模塊路徑在域中引用它們。

 

3. 定義一個解釋器

解釋器負責解析消息。目前我們的機器人已經可以通過輸入意圖來獲取答案了,但是怎么讓機器理解真正的語言呢,這個時候就需要用到NLU模塊了,NLU的任務是解析消息,它能把自然語言解釋成我們需要的結構化的數據

 

在Rasa NLU中,我們需要定義我們的機器人應該能夠以Rasa NLU訓練數據格式處理的用戶消息。我們將使用Markdown格式來獲取NLU訓練數據。我們來創建一些意圖示例data/nlu.md:

## intent:greet
- hey
- hello
- hi
- hello there
- good morning
- good evening
- moin
- hey there
- let's go
- hey dude
- goodmorning
- goodevening
- good afternoon

## intent:goodbye
- cu
- good by
- cee you later
- good night
- good afternoon
- bye
- goodbye
- have a nice day
- see you around
- bye bye
- see you later

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

## intent:mood_deny
- no
- never
- I don't think so
- don't like that
- no way

## intent:mood_great
- perfect
- very good
- great
- amazing
- feeling like a king
- wonderful
- I am feeling very good
- I am great
- I am amazing
- I am going to save the world
- super
- extremely good
- so so perfect
- so good
- so perfect

## intent:mood_unhappy
- my day was horrible
- I am sad
- I don't feel very well
- I am disappointed
- super sad
- I'm so sad
- sad
- very sad
- unhappy
- not so good
- not very good
- extremly sad
- so saad
- so sad

我們現在可以使用我們的示例來訓練NLU模型(確保首先 安裝Rasa NLU 以及 spaCy)

4. 定義故事

到目前為止,我們已經有了一個NLU模型,一個定義我們的機器人可以采取的動作的域以及它應該處理的輸入(意圖和實體)。我們仍然錯過了中心部分,故事告訴我們的機器人在對話的哪一點做什么

一個故事是,對話系統訓練數據樣本。有兩種不同的方式來創建故事(你可以混合它們):

  • 手動創建故事,直接將它們寫入文件
  • 使用交互式學習創建故事。

我們將通過直接寫入故事來創建故事stories.md。故事以##一個字符串作為標識符開始。用戶操作以星號開頭,機器人操作由以短划線開頭的行指定。故事的結尾用換行符表示。

## happy path               <!-- name of the story - just for debugging -->
* greet              
  - utter_greet
* mood_great               <!-- user utterance, in format _intent[entities] -->
  - utter_happy

## sad path 1               <!-- this is already the start of the next story -->
* greet
  - utter_greet             <!-- action of the bot to execute -->
* mood_unhappy
  - utter_cheer_up
  - utter_did_that_help
* mood_affirm
  - utter_happy

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

## say goodbye
* goodbye
  - utter_goodbye

請注意,雖然直接用手寫故事比使用交互式學習要快得多,但在使用插槽時需要特別小心,因為它們需要在故事中正確設置

5. 命令

rasa init     使用示例訓練數據,操作和配置文件創建新項目。
rasa train    使用您的NLU數據和故事訓練模型,
rasa interactive    啟動交互式學習會話,通過聊天創建新的培訓數據。
rasa shell    加載訓練有素的模型,並讓您在命令行上與助手交談。
rasa run      使用訓練有素的模型啟動Rasa服務器。有關詳細信息,請參閱運行服務器文檔。
rasa run actions    使用Rasa SDK啟動操作服務器。
rasa visualize      可視化故事。
rasa test     使用您的測試NLU數據和故事測試訓練有素的Rasa模型。
rasa data split nlu      根據指定的百分比執行NLU數據的拆分。
rasa data convert nlu    在不同格式之間轉換NLU訓練數據。
rasa -h       顯示所有可用命令。

 

 舉個實例吧 

建一個新文件夾:rasa_study ,

進入文件夾:cd rasa_study

創建rasa項目:rasa init --no-prompt

項目目錄:

1. 定義一個域(domain.yml)

intents:
  - greet
  - mood_happy
  - mood_unhappy

actions:
- utter_greet
- utter_happy
- utter_unhappy

templates:
  utter_greet:
  - text: "你好,你今天過的怎么樣啊"

  utter_happy:
  - text: "那很棒棒哦"

  utter_unhappy:
  - text: "咋了,可以告訴我嗎"

2. 定義模型(nlu.md)

## intent:greet
- 你好
- 上午好
- 下午好
- 早上好
- 晚上好

## intent:mood_happy
- 很好
- 我很好

## intent:mood_unhappy
- 我很難受
- 我心情很差

因為用到了中文所以在config.yml里設置一下中文把en改成zh即可

 

3.  定義一個故事(stories.md)

*greet就是intent, - utter_greet是action

## story_happy
*greet   
  - utter_greet  
* mood_happy
  - utter_happy

## story_unhappy
* greet
  - utter_greet
*  mood_unhappy
  - utter_unhapp

然后先要訓練,在命令行里輸入 rasa train注意:對上面的三個文件進行修改后都要先進行訓練,再進行對話,否則對話的內容是未修改前的內容

 

D:\myproject\rasa_study>rasa train

2019-06-05 16:28:19 INFO     rasa.model  - Data (stories) for Core model changed.

Training Core model...

 

Processed Story Blocks: 100%|███████████████████████████████████████████████████

 

訓練完后,就可以對話了。在cmd輸入 rasa shell 進行對話

 

我理解的對話流程圖,不知道對不對

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM