(十三)RASA 訓(xùn)練數(shù)據(jù)
作者簡(jiǎn)介
作者:孟繁中
原文:https://zhuanlan.zhihu.com/p/334635257
轉(zhuǎn)載者:楊夕
面筋地址:https://github.com/km1994/NLP-Interview-Notes
個(gè)人筆記:https://github.com/km1994/nlp_paper_study

假如一個(gè)機(jī)器人可以和人對(duì)話,機(jī)器人說什么是最簡(jiǎn)單的,頂多人工編寫幾種回答模板即可(NLG除外)。但是要讓機(jī)器人理解人的意圖,卻是非常困難,因?yàn)槿说恼Z言有各種各樣,多義詞,雙關(guān),長句短句等,因此需要些特別多的數(shù)據(jù),也就是模擬人的問法,這部分內(nèi)容在Rasa里面稱為訓(xùn)練數(shù)據(jù)。放在nlu中。從用戶問,關(guān)聯(lián)到機(jī)器人答的這個(gè)流程控制,rasa中有stories和rules兩個(gè)配置來完成。
Rasa使用YAML作為一種統(tǒng)一和可擴(kuò)展的方式來管理所有的訓(xùn)練數(shù)據(jù),包括NLU數(shù)據(jù)、故事和規(guī)則。可以將訓(xùn)練數(shù)據(jù)拆分為任意數(shù)量的YAML文件,每個(gè)文件可以包含NLU數(shù)據(jù)、故事和規(guī)則的任意組合。訓(xùn)練數(shù)據(jù)解析器使用最上層的key確定訓(xùn)練數(shù)據(jù)類型。
High-level結(jié)構(gòu)
每個(gè)文件可以包含一個(gè)或多個(gè)key以及相應(yīng)的訓(xùn)練數(shù)據(jù)。一個(gè)文件可以包含多個(gè)key,但每個(gè)key在一個(gè)文件中只能出現(xiàn)一次。可用key包括:
版本
nlu
故事
規(guī)則
您應(yīng)該在所有YAML培訓(xùn)數(shù)據(jù)文件中指定版本key。如果未在培訓(xùn)數(shù)據(jù)文件中指定版本key,Rasa將假定您使用的是已安裝的Rasa開源版本支持的最新培訓(xùn)數(shù)據(jù)格式規(guī)范。將跳過Rasa開放源代碼版本高于您在計(jì)算機(jī)上安裝的版本的培訓(xùn)數(shù)據(jù)文件。目前,rasa2.x的最新培訓(xùn)數(shù)據(jù)格式規(guī)范是2.0。
下面是一個(gè)范例
version: "2.0"
nlu:
- intent: greet
examples: |
- Hey
- Hi
- hey there [Sara](name)
- intent: faq/language
examples: |
- What language do you speak?
- Do you only handle english?
stories:
- story: greet and faq
steps:
- intent: greet
- action: utter_greet
- intent: faq
- action: utter_faq
rules:
- rule: Greet user
steps:
- intent: greet
- action: utter_greet
要指定測(cè)試故事,需要將它們放入一個(gè)單獨(dú)的文件中,并使用前綴test_:
tests/test_stories.yml
stories:
- story: greet and ask language
- steps:
- user: |
hey
intent: greet
- action: utter_greet
- user: |
what language do you speak
intent: faq/language
- action: utter_faqNLU訓(xùn)練數(shù)據(jù)格式
NLU訓(xùn)練數(shù)據(jù)由按意圖分類的示例用戶對(duì)話組成。培訓(xùn)示例還可以包括實(shí)體。您還可以向訓(xùn)練數(shù)據(jù)中添加額外的信息,如正則表達(dá)式和查找表,以幫助模型正確識(shí)別意圖和實(shí)體。NLU訓(xùn)練數(shù)據(jù)在NLU鍵下定義??梢栽诖隧?xiàng)下添加的項(xiàng)包括:
按用戶意圖分組的培訓(xùn)示例
例如可選地使用帶注釋的實(shí)體
nlu:
- intent: check_balance
examples: |
- What's my [credit](account) balance?
- What's the balance on my [credit card account]{"entity":"account","value":"credit"}實(shí)體格式是這樣的
[<entity-text>]{"entity": "<entity name>", "role": "<role name>",
"group": "<group name>", "value": "<entity synonym>"}關(guān)鍵字role、group和value在此表示法中是可選的。role和group字段是為實(shí)體增加屬性,用于區(qū)分同類實(shí)體,例如出發(fā)地和目的地2個(gè)地名等。值字段引用同義詞。
role和group可以影響對(duì)話流程,例如,如果用戶剛從倫敦來,你可能想問一下倫敦之行怎么樣。但是如果用戶在去馬德里的路上,您可能會(huì)希望用戶在這里過得愉快。您可以通過以下兩個(gè)故事來實(shí)現(xiàn):
stories:
- story: The user just arrived from another city.
steps:
- intent: greet
- action: utter_greet
- intent: inform_location
entities:
- city: London
role: from
- action: utter_ask_about_trip
- story: The user is going to another city.
steps:
- intent: greet
- action: utter_greet
- intent: inform_location
entities:
- city: Madrid
role: to
- action: utter_wish_pleasant_stay2、同義詞
同義詞將提取的實(shí)體映射到提取的文本之外的值。當(dāng)用戶有多種方式引用同一事物時(shí),可以使用同義詞??紤]提取實(shí)體的最終目標(biāo),并從中找出哪些值應(yīng)該被視為等價(jià)的。假設(shè)您有一個(gè)實(shí)體帳戶,您使用它來查找用戶的余額。其中一種可能的賬戶類型是“信用”。您的用戶還將他們的“信用”帳戶稱為“信用帳戶”和“信用卡帳戶”。在這種情況下,您可以將“信用卡賬戶”和“信用賬戶”定義為“信用”的同義詞。
nlu:
- synonym: credit
examples: |
- credit card account
- credit account3、正則表達(dá)式
當(dāng)使用regexfeatureizer時(shí),regex不作為意向分類的規(guī)則。它只為意圖分類器提供一個(gè)Feature,目前,所有意向分類器都使用可以用regex提供的feature。
account_number是一個(gè)可讀的描述。它可以幫助您記住regex的用途,它不必匹配任何意圖或?qū)嶓w名稱。
nlu:
- regex: account_number
examples: |
- \d{10,12}當(dāng)使用RegexEntityExtractor時(shí),正則表達(dá)式的名稱應(yīng)與要提取的實(shí)體的名稱匹配。例如,您可以通過在培訓(xùn)數(shù)據(jù)中包含此正則表達(dá)式和至少兩個(gè)帶注釋的示例來提取10-12位數(shù)的帳號(hào):
nlu:
- regex: account_number
examples: |
- \d{10,12}
- intent: inform
examples: |
- my account number is [1234567891](account_number)
- This is my account number [1234567891](account_number)每當(dāng)用戶消息包含10-12位數(shù)字的序列時(shí),它將被提取為帳號(hào)實(shí)體。RegexEntityExtractor不需要訓(xùn)練示例來學(xué)習(xí)如何提取實(shí)體,但是至少需要兩個(gè)實(shí)體的注釋示例,這樣NLU模型就可以在訓(xùn)練時(shí)將其注冊(cè)為實(shí)體。
4、查找表
查找表用于生成不區(qū)分大小寫的正則表達(dá)式列表。它們可以與使用正則表達(dá)式的方式相同,與管道中的regexfeatureizer和RegexEntityExtractor組件結(jié)合使用。可以使用查找表來幫助提取具有已知可能值集的實(shí)體。保持你的查找表盡可能具體。例如,要提取國家名稱,可以添加世界上所有國家的查找表。
nlu:
- lookup: banks
examples: |
- JPMC
- Comerica
- Bank of America