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