私藏UNIT學(xué)習(xí)筆記—輕松入門(mén)對(duì)話系統(tǒng)搭建
搭建對(duì)話系統(tǒng)是一個(gè)相對(duì)專業(yè)而復(fù)雜的過(guò)程,通常分三個(gè)主要的階段。首先是需求分析,然后是使用平臺(tái)搭建技能,***是持續(xù)優(yōu)化。
需求分析
***階段需求分析,這個(gè)階段應(yīng)該有產(chǎn)品經(jīng)理或需求分析師這樣的角色參與。
- 首先要分析業(yè)務(wù)場(chǎng)景;
- 然后進(jìn)行對(duì)話機(jī)器人的功能定義;
- 接著要梳理業(yè)務(wù)場(chǎng)景里的對(duì)話邏輯;
- ***要收集場(chǎng)景里的對(duì)話數(shù)據(jù)。
下面以訂火車(chē)票的場(chǎng)景來(lái)講解整個(gè)流程要做哪些工作。
業(yè)務(wù)場(chǎng)景分析:確定邊界,明確目標(biāo)
首先進(jìn)行業(yè)務(wù)場(chǎng)景的分析,確定一個(gè)場(chǎng)景下機(jī)器人應(yīng)該做什么,不應(yīng)該做什么。
火車(chē)票場(chǎng)景中,應(yīng)該做訂票、退票、改簽、查詢以及一些火車(chē)票相關(guān)的規(guī)章制度等常見(jiàn)問(wèn)題解答。而毫無(wú)目標(biāo)的閑聊是不應(yīng)該做的。
功能定義:確定優(yōu)先級(jí)及關(guān)鍵信息要素
在確定邊界和目標(biāo)后,就可以對(duì)火車(chē)票對(duì)話機(jī)器人的功能進(jìn)行定義了。
在功能定義的階段,要先確定各功能的優(yōu)先級(jí),并確定每個(gè)功能對(duì)應(yīng)的實(shí)體要素。顯而易見(jiàn)的,火車(chē)票這個(gè)場(chǎng)景,訂票、退票、改簽、查詢都是***優(yōu)的功能。
完成功能的定義后,接下來(lái)還需要對(duì)業(yè)務(wù)場(chǎng)景下的對(duì)話邏輯進(jìn)行梳理,包括正常的對(duì)話邏輯和異常的對(duì)話邏輯。另外,關(guān)于問(wèn)答型對(duì)話,其實(shí)都是用戶對(duì)一些規(guī)則、規(guī)則制度的提問(wèn),這些問(wèn)題都是標(biāo)準(zhǔn)、固定答案的。這類(lèi)型的對(duì)話邏輯梳理其實(shí)就是要對(duì)問(wèn)題進(jìn)行分類(lèi),或者叫知識(shí)分類(lèi)。
場(chǎng)景數(shù)據(jù)收集:在真實(shí)場(chǎng)景下用戶會(huì)怎么問(wèn)?
完成對(duì)話的邏輯梳理后,還要進(jìn)行需求分析***一個(gè)環(huán)節(jié)的工作,即數(shù)據(jù)收集。
針對(duì)任務(wù)型的對(duì)話,要收集真實(shí)場(chǎng)景下用戶買(mǎi)票的各種問(wèn)法,越多越好。而對(duì)問(wèn)答型的對(duì)話,要根據(jù)前面的知識(shí)分類(lèi)去收集每個(gè)分類(lèi)下的問(wèn)題與答案,即問(wèn)答對(duì)。
在這個(gè)階段收集的數(shù)據(jù)將在后面技能搭建的第二個(gè)階段使用。
搭建技能
注冊(cè)百度賬號(hào),打開(kāi)(http://unit.baidu.com),進(jìn)入 UNIT:
1. 新建 技能
在 UNIT 平臺(tái)搭建對(duì)話技能的***步是創(chuàng)建技能。
2. 定義自定義技能:新建對(duì)話 / 問(wèn)答意圖
創(chuàng)建完后就進(jìn)入技能定義的階段,技能又分自定義技能和預(yù)置技能
每個(gè)技能都是由多個(gè)相關(guān)的意圖組成,這個(gè)階段的新建意圖就對(duì)應(yīng)需求分析階段的功能定義。比如訂票功能就可以轉(zhuǎn)化為訂票意圖 BOOK_TICKET,訂票的關(guān)鍵信息可以定義為實(shí)現(xiàn)訂票意圖的詞槽,這里簡(jiǎn)單一些,僅定義出發(fā)時(shí)間、出發(fā)站點(diǎn)、到達(dá)站點(diǎn)、車(chē)次四個(gè)詞槽;分別命名為user_time、user_from、user_to、trainnumber。
具體操作步驟如下:
2.1 新建對(duì)話意圖
點(diǎn)擊【火車(chē)票】技能,進(jìn)入技能模塊,在自定義技能中【新建對(duì)話意圖】:
2.2 添加詞槽
***步是選擇【添加方式】,選 「新建自定義詞槽」,并設(shè)置詞槽名(user_time)和詞槽別名 (出發(fā)時(shí)間),
第二步先打開(kāi)【系統(tǒng)詞槽詞典】的開(kāi)關(guān),然后選擇系統(tǒng)詞典 sys_time(時(shí)間)
- UNIT 平臺(tái)中詞槽的識(shí)別依賴詞槽對(duì)應(yīng)的詞典。支持自定義詞典,也可以選擇系統(tǒng)預(yù)置詞典,建議在能選擇系統(tǒng)詞典的情況下盡量選擇使用系統(tǒng)詞典,當(dāng)系統(tǒng)詞典里沒(méi)有你需要的類(lèi)型時(shí)可以添加自定義詞典。
第三步設(shè)置詞槽與意圖關(guān)聯(lián)屬性,這里火車(chē)票的出發(fā)時(shí)間是訂票里必須的關(guān)鍵信息,所以選擇必填。澄清話術(shù)就是當(dāng)用戶表達(dá)訂票需求的語(yǔ)句里缺少出發(fā)時(shí)間時(shí) 對(duì)話技能主動(dòng)讓用戶澄清的話術(shù)。還可以設(shè)置讓用戶澄清多少輪后放棄要求澄清,默認(rèn)是 3 次。
添加完所有詞槽后如下圖:
在詞槽列表中可以調(diào)整詞槽澄清的順序。
2.3 設(shè)置答復(fù)
技能回應(yīng)就是當(dāng)技能識(shí)別出用戶的意圖和所有必填詞槽值時(shí)給用戶的反饋。
有三種回應(yīng)方式:【答復(fù)】、【引導(dǎo)至對(duì)話意圖】、【引導(dǎo)值問(wèn)答意圖】
2.4 新建問(wèn)答意圖
3. 添加訓(xùn)練數(shù)據(jù)
完成技能定義后,進(jìn)入第二個(gè)環(huán)節(jié),給技能添加訓(xùn)練數(shù)據(jù),讓模型能理解用戶query的意圖。
3.1 配置對(duì)話模板
首先是配置對(duì)話模板,對(duì)話模板是對(duì)用戶需求表達(dá)的一種規(guī)則抽象,可以通過(guò)對(duì)模板片段的必填選填,前后順序,閾值大小的配置,使其快速具備一定的泛化能力。
當(dāng)我們有多個(gè)對(duì)話模板時(shí),它們之間是有優(yōu)先級(jí)的,在列表的位置越靠前,優(yōu)先級(jí)越高,可以選中一條對(duì)話模板,然后執(zhí)行上移、下移的操作來(lái)調(diào)整優(yōu)先級(jí)。
3.2 標(biāo)注對(duì)話樣本
這部分要把需求分析***一個(gè)階段收集到的對(duì)話數(shù)據(jù)添加到 UNIT 平臺(tái),然后給他們逐條標(biāo)注意圖、詞槽。經(jīng)過(guò)深度學(xué)習(xí)的策略訓(xùn)練后,讓對(duì)話模型獲得更好的對(duì)話理解能力,而且數(shù)據(jù)越豐富,模型的泛化效果越好。
然后在對(duì)話樣本集中新建 『買(mǎi)火車(chē)票』樣本集,將數(shù)據(jù)添加進(jìn)去:
機(jī)器學(xué)習(xí)會(huì)隨著數(shù)據(jù)的不斷豐富,擁有越來(lái)越強(qiáng)的泛化能力,而當(dāng)你很難收集到大量的對(duì)話樣本時(shí)怎么辦?UNIT 平臺(tái)提供了推薦對(duì)話樣本的工具,只需要你收集 50 條真實(shí)場(chǎng)景的對(duì)話樣本后就可以用它作為種子樣本來(lái)推薦類(lèi)似的樣本,種子樣本質(zhì)量越高,推薦的樣本質(zhì)量越好。
3.3 添加問(wèn)答對(duì)
在需求分析階段就收集整理的問(wèn)答對(duì)數(shù)據(jù)在問(wèn)答集中導(dǎo)入即可
并不是每個(gè)場(chǎng)景都必須添加上面的三種訓(xùn)練數(shù)據(jù)才可以進(jìn)行對(duì)話,這要根據(jù)您自己場(chǎng)景中的對(duì)話類(lèi)型和數(shù)據(jù)收集情況來(lái)定。
- 假如你的場(chǎng)景是任務(wù)型的又缺少對(duì)話樣本,這時(shí)你就可以先去配置對(duì)話模板,快速達(dá)到一定效果后再?gòu)娜罩局泻Y選更多的對(duì)話樣本;
- 假如你一開(kāi)始就有對(duì)話樣本,這時(shí)你可以對(duì)話模板、對(duì)話樣本一起上,這樣可以快速達(dá)到一個(gè)更好的效果;
- 而如果你還有問(wèn)答行的對(duì)話時(shí),只要添加問(wèn)答對(duì)就可以了,這個(gè)最簡(jiǎn)單。
3.4 訓(xùn)練模型
訓(xùn)練技能有兩種方式,一種是指訓(xùn)練上面配置的對(duì)話模板,另外一種是訓(xùn)練對(duì)話樣本同時(shí)訓(xùn)練對(duì)話模板。
系統(tǒng)默認(rèn)必須訓(xùn)練對(duì)話模板,不論你有沒(méi)有標(biāo)注對(duì)話模板。選擇快速生效策略,訓(xùn)練模型并生效到沙盒,會(huì)需要 15~30 秒的時(shí)間。
也可以選擇對(duì)話樣本集,并使用深度訓(xùn)練策略,則對(duì)應(yīng)后端的訓(xùn)練將采用深度學(xué)習(xí)的策略進(jìn)行模型訓(xùn)練,這時(shí)訓(xùn)練的速度會(huì)與標(biāo)注的對(duì)話樣本量成正比。這里建議選擇系統(tǒng)自帶的「閑聊負(fù)例樣本」,這樣可以降低技能的誤召回情況,就是告訴技能哪些 query 是閑聊而不是買(mǎi)票。
4. 測(cè)試體驗(yàn)
完成模型的訓(xùn)練后,就可以在測(cè)試窗口跟技能聊一聊,看看最終的效果了:
UNIT 使用技巧與持續(xù)優(yōu)化
準(zhǔn)確理解領(lǐng)域問(wèn)題
- 任務(wù)型場(chǎng)景,該場(chǎng)景特點(diǎn)是有任務(wù)目標(biāo),需要把請(qǐng)求參數(shù)化,并且在多輪對(duì)話之間,參數(shù)還可以繼承。
- 問(wèn)答型場(chǎng)景,該場(chǎng)景特點(diǎn)是有任務(wù)目標(biāo),不需要把請(qǐng)求參數(shù)化
- 聊天型場(chǎng)景,該場(chǎng)景特點(diǎn)是沒(méi)有任務(wù)目標(biāo)
高效建設(shè)領(lǐng)域資源
高效建設(shè)詞槽
首先看內(nèi)置詞槽與自定義詞典、規(guī)則的關(guān)系
- 自定義詞典、規(guī)則的優(yōu)先級(jí)高于系統(tǒng)內(nèi)置,但是系統(tǒng)詞槽如果包含了自定義詞,會(huì)按系統(tǒng)詞槽識(shí)別。
- 自定義此點(diǎn)之間優(yōu)先級(jí)相等,如果一個(gè)詞屬于多個(gè)詞典,會(huì)相應(yīng)的識(shí)別出多個(gè)詞槽候選。因此,不必?fù)?dān)心自定義詞典之間的沖突與歧義,一切都有模板兜底。
- 規(guī)則的形式是正則表達(dá)式,要注意控制通配的范圍,善用捕捉功能加以限制。不加約束的通配,是 badcase 的重要來(lái)源。
那么該如何定義詞槽以及如何高效地?cái)U(kuò)充系統(tǒng)內(nèi)沒(méi)有包含的詞槽呢?
擴(kuò)展法:針對(duì)每個(gè)詞槽 / 特征詞至少產(chǎn)出 3-5 個(gè)實(shí)例,可進(jìn)行基于資源的擴(kuò)展(樹(shù)形結(jié)構(gòu)、結(jié)構(gòu)化信息、開(kāi)放分類(lèi)),基于相關(guān)度的擴(kuò)展(上下文相似度、Word embedding),基于語(yǔ)料的擴(kuò)展(Set expansion 算法)。
挖掘法:可在垂直網(wǎng)站爬取詞槽,或者在離線知識(shí)庫(kù) Dump。
當(dāng)然,也可采取挖掘 + 擴(kuò)展的方法,先挖掘出詞槽,隨后再進(jìn)行擴(kuò)展。另外,質(zhì)檢工作很重要,當(dāng)挖掘的量很大時(shí),可以選擇使用眾包。
自然語(yǔ)言理解配置對(duì)話模板配置技巧
- 關(guān)鍵詞可以抽象上下文的表達(dá)方式
- 基于模板的意圖推到,有隊(duì)詞槽進(jìn)行消歧的能力
- 善用模板片段,增強(qiáng)模板泛化能力
- 模板的定義順序決定了意圖的解析順序
對(duì)話樣本配置技巧
- 關(guān)于數(shù)據(jù)量:100 可訓(xùn);1000 可用
- 所有已標(biāo)注樣本都會(huì)進(jìn)入 K-V 字典,K-V 字典保證樣本一定會(huì)按標(biāo)注的方式解析,當(dāng)詞槽識(shí)別出現(xiàn)不穩(wěn)定時(shí),注意看看樣本
定期評(píng)估與優(yōu)化
定期評(píng)估指定期隨機(jī)業(yè)務(wù)日志,人工評(píng)估效果,其重點(diǎn)關(guān)注情況為以下幾點(diǎn):
- 意圖解析失敗 / 錯(cuò)誤、詞槽缺失
- 可能的原因:出現(xiàn)了之前沒(méi)見(jiàn)過(guò)的說(shuō)法,出現(xiàn)了當(dāng)前不覆蓋的詞槽
- 應(yīng)對(duì)方案:新增模板,標(biāo)注樣本,擴(kuò)展詞槽
- 詞槽解析錯(cuò)誤、歸一化錯(cuò)誤
- 可能的原因:系統(tǒng)詞槽 badcase,用戶詞槽出現(xiàn)了歧義,用戶詞典覆蓋了系統(tǒng)詞槽
- 應(yīng)對(duì)方案:向 UNIT 吐槽,調(diào)整詞典 / 模板,少量 case 可以直接通過(guò)標(biāo)注樣本強(qiáng)制解決
- 存在新需求不能滿足
- 應(yīng)對(duì)方案:分析是否需要支持——是:新增技能;否:引導(dǎo)用戶的功能預(yù)期。










































