Bot對(duì)話設(shè)計(jì)之奧卡姆剃刀原則
“奧卡姆剃刀原則”體現(xiàn)在Bot設(shè)計(jì)上,是同一個(gè)功能,從三個(gè)維度都可以去完成,甚至不同維度也有不同的子方式,但哪種方式最為簡潔,這才是真正尤為重要的一點(diǎn),而不是僅僅局限于完成這個(gè)功能本身。
一、Bot框架本質(zhì)
搭建NLU語義解析框架,在上篇文章中我我已經(jīng)提到,它作為最開始頂層設(shè)計(jì)的基本解析框架,是整個(gè)Bot產(chǎn)品的基石。
在系統(tǒng)上,會(huì)影響到整個(gè)框架的是否足夠簡潔,意圖內(nèi)的多輪或跨意圖多輪的可實(shí)現(xiàn)與否,場景中每個(gè)意圖觸發(fā)的邊界(拋開模型泛化的意圖句式不談)等等。
我之前將這個(gè)搭建NLU語義解析框架的本質(zhì),定義為從“用戶語音需求”、“服務(wù)”和“NLU語義技術(shù)”三個(gè)維度,去尋找“最優(yōu)解”集合的問題。但這這個(gè)感覺是從上帝視角,對(duì)他們結(jié)構(gòu)性的一種描述。
但具體在去做每個(gè)Domain的時(shí)候作為Bot的產(chǎn)品,定位就不在是一種俯瞰的上帝視角,而是作為“NLU語義”這個(gè)圈本身定位這個(gè)感覺。
從這個(gè)角度出發(fā),Bot產(chǎn)品在實(shí)際工作中,起到的更像是一種“連接”的作用,將用戶的語音中的要素識(shí)別并抽取出來,通過Bot產(chǎn)品,精準(zhǔn)連接到對(duì)應(yīng)的服務(wù)細(xì)節(jié),然后再返回給用戶結(jié)果,完成這個(gè)從語音輸入到語音輸出的產(chǎn)品閉環(huán)設(shè)計(jì)。
二、Bot框架初步探究
接下來結(jié)合我最近的思考和實(shí)踐,在Bot基本框架上,我嘗試去回答下面這三個(gè)問題:
- 對(duì)每個(gè)Bot場景的框架來說,一個(gè)極為重要的評(píng)價(jià)標(biāo)準(zhǔn)
- 什么因素,是我們在最初設(shè)計(jì)Bot解析框架時(shí),所不需要考慮。(注意,這里是不需要考慮的)
- 簡化框架,采取怎樣的操作方式更加合理
先附上一個(gè)基本框架形式,方便之后的論述:
還有必要聲明一點(diǎn):下面的所有思考,都將暫時(shí)拋去模型訓(xùn)練對(duì)意圖語料的影響。并不是因?yàn)樗鼘?duì)于語音交互來說不重要,相反基于算法的語料訓(xùn)練的越好,每個(gè)場景不同意圖的句式的精準(zhǔn)性和泛化性會(huì)同步提高。
只不過Bot產(chǎn)品設(shè)計(jì)在這個(gè)層面上,起到的作用不會(huì)很大,這部分的工作都是“模型訓(xùn)練師”(算法工程師)去通過線上大量Query數(shù)據(jù)和標(biāo)注語料去訓(xùn)練,實(shí)現(xiàn)意圖句式的泛化。
產(chǎn)品在設(shè)計(jì)Bot框架時(shí),意圖句式的泛化應(yīng)該是在整個(gè)框架搭建好,邏輯走通以后的最后一步,對(duì)于產(chǎn)品設(shè)計(jì)來說并非最重要的影響要素。
2.1框架的簡潔性
我個(gè)人評(píng)價(jià)一個(gè)Bot框架的標(biāo)準(zhǔn),是在可以滿足該場景所有功能情況下,它的簡潔性。以最常見的“查天氣”這個(gè)場景為例,要實(shí)現(xiàn)它很容易,可以通過多種框架形式去實(shí)現(xiàn)。
比如可以有三個(gè)意圖“search_weather”(普通天氣查詢)、“search_tem”(普通溫度查詢)和“search_con”(查詢天氣指數(shù))去搭建Bot框架,這也是亞馬遜這個(gè)Domain的做法,通過這三個(gè)意圖實(shí)現(xiàn)天氣功能。
但如果是涉及到更多服務(wù)參數(shù)的場景,比如車載場景,服務(wù)參數(shù)并不會(huì)像天氣那么少,那么意圖可能就會(huì)隨著增加,而意圖的增加,對(duì)于整個(gè)框架來講,它的簡潔性必然是下降的。
與此同時(shí)會(huì)帶來另外一個(gè)在現(xiàn)象上更嚴(yán)重的問題:在“多輪對(duì)話”模塊,過多的意圖會(huì)導(dǎo)致多輪配置的復(fù)雜度大幅提升,搞起來非常痛苦,同時(shí)后期Bot框架的維護(hù)成本非常高。這無論對(duì)于產(chǎn)品還是技術(shù)來講,都會(huì)影響該場景下的可拓展性。
所以,我將在滿足功能下一個(gè)Bot框架的簡潔性視為評(píng)價(jià)一個(gè)框架,最為重要的指標(biāo)。當(dāng)然它有一個(gè)前提假設(shè),就是能夠?qū)崿F(xiàn)該場景下所有的意圖和功能,不能陷入單純?yōu)榱诵问缴系暮喕喕?/p>
2.2探究一個(gè)功能的三個(gè)路徑
接下來我會(huì)通過實(shí)驗(yàn),去驗(yàn)證并嘗試回答第二個(gè)問題:即什么因素,在進(jìn)行Bot框架頂層設(shè)計(jì)的時(shí)候,不需要考慮的因素(至于為什么是不需要考慮的,最后會(huì)提及到)。在此提出三個(gè)假設(shè),稍后會(huì)進(jìn)行驗(yàn)證:
- 用戶在現(xiàn)象層面的“意圖”,對(duì)單間搭建Bot框架的影響
- 用戶同一個(gè)“現(xiàn)象意圖”的不同類型表達(dá)句式對(duì)Bot框架的影響
- 整個(gè)場景內(nèi),服務(wù)參數(shù)的多少對(duì)Bot框架的影響
下面以天氣場景為例,如果要實(shí)現(xiàn)“查詢溫度”和“查詢空氣質(zhì)量”這兩個(gè)功能,基于當(dāng)前的Bot框架實(shí)現(xiàn)方式,在邏輯上有以下三種:
- 通過兩個(gè)Intent進(jìn)行劃分,即“查詢溫度”意圖和“查詢空氣質(zhì)量”意圖
- 通過兩個(gè)slots進(jìn)行劃分,即“溫度”槽位和“空氣質(zhì)量”槽位
- 通過同一個(gè)slots中,兩個(gè)Value進(jìn)行劃分,進(jìn)“溫度”值和“空氣質(zhì)量”值
2.2.1 Intent維度
如果在Intent層面去劃分,那么整個(gè)框架已經(jīng)明顯:兩個(gè)意圖(溫度、空氣質(zhì)量),兩個(gè)槽位(城市、日期),其中的典型句式,舉個(gè)例子如下:
- Intent(溫度):{city}{date}溫度【是多少】
- Intent(空氣質(zhì)量):{city}{date}空氣【好不好】
這樣的兩個(gè)句式,是可以觸發(fā)對(duì)應(yīng)的意圖,沒錯(cuò)吧。注意【】括起來的詞,表示屬于“意圖非必要要素”,而中間的“溫度”和“空氣”則為“意圖必要要素”(你起碼得有溫度這倆字的,沒毛病),也符合我之前對(duì)一個(gè)句子四種要素的基本構(gòu)成。
那么這樣的操作方式,是可以明確觸發(fā)“查詢溫度”和“查詢空氣質(zhì)量”這兩個(gè)用戶意圖,同時(shí)通過后續(xù)配置槽位策略去請求到對(duì)應(yīng)的服務(wù)。
好,這個(gè)操作是可以滿足功能的,我們先放在這里不管他了。
2.2.2 slots維度
如果選擇在slots這個(gè)維度去劃分映射關(guān)系的話,那先假設(shè)溫度為{tem},空氣質(zhì)量為{AQI}兩個(gè)槽位,其中的典型句式,會(huì)是這樣的:
Intent:
- {city}{date}{tem}【是多少】
- {city}{date}{AQI}【好不好】
這樣配置好的兩個(gè)句式,用戶在發(fā)出Query之后,觸發(fā)的是同一個(gè)意圖,但因?yàn)椴畚坏男再|(zhì)不同,所以可以抽取出不同的實(shí)體,去進(jìn)行后續(xù)的服務(wù)請求和回復(fù)話術(shù)配置,到這里好像沒毛病。這樣的句式可以觸發(fā)意圖,觸發(fā)意圖后也能請求到對(duì)應(yīng)的服務(wù)。
(1)一個(gè)槽位一個(gè)值?
But,這樣的方式可能會(huì)產(chǎn)生一個(gè)疑問:像{city}或{date}這樣的槽位,他們內(nèi)部都是包含大量信息的,而這樣的處理方式,每個(gè)槽里面只包含一個(gè)信息,即“溫度”或“空氣質(zhì)量”(頂多再會(huì)加上一些同義詞),直覺上會(huì)很奇怪,它好像并不符合我們對(duì)“槽位”這個(gè)概念的基本認(rèn)知。
這恰恰是需要警惕的一點(diǎn):如果糾結(jié)于“槽位”本身,并且是通過觀察當(dāng)前普遍認(rèn)同的槽位設(shè)定,比如常見的“地點(diǎn)”、“時(shí)間”、“歌手”、“出發(fā)地”等,這也是當(dāng)前幾乎所有能找到得科普文章或網(wǎng)站上的介紹形式。
會(huì)非常容易陷入一個(gè)誤區(qū),你得到的槽位的基本認(rèn)知,是通過現(xiàn)象層面已經(jīng)被解決問題的歸納而得出的,那么結(jié)論也僅僅是停留在現(xiàn)象層面的認(rèn)知和結(jié)論。你應(yīng)該思考的是去溯源,思考為什么會(huì)有“槽位”這個(gè)東西存在,它對(duì)于整個(gè)Bot產(chǎn)品來說,定位在哪里,槽位在本質(zhì)上是為了解決一個(gè)什么的問題而誕生,而這個(gè)問題又為什么存在。
我想強(qiáng)調(diào)得是“槽位”只是基于以上思考,在最后一步推導(dǎo)出的一個(gè)現(xiàn)象層面上“解”的自然表現(xiàn),而表現(xiàn)是可以浮動(dòng)的,卻非本質(zhì)上的“不動(dòng)因”。
這個(gè)問題在這里就不展開了,可能需要單獨(dú)講,先拋出一個(gè)結(jié)論性的觀點(diǎn):槽位是可以只包含一個(gè)信息點(diǎn)的,并且在某些情況下,也只能通過這樣的存在形式,才可以完成某些場景的意圖上的功能。
(2)系統(tǒng)影響
真正的影響,是要從系統(tǒng)思維的角度出發(fā),看看這樣的方式,對(duì)整個(gè)Bot后續(xù)其他模塊的影響是怎樣的。
在多輪上的問題,上文已經(jīng)說了多輪分為意圖內(nèi)和跨意圖。意圖內(nèi)的多輪,其本質(zhì)就是該意圖內(nèi)槽位的“改變”(增、換、否的)。試想一下這樣的槽位處理方式,如果用戶第一輪Query“北京今天溫度”,第二句“那空氣質(zhì)量呢”。
首先,這個(gè)功能從Bot多輪的角度來講,是必須要支持的,用戶第二句的意圖非常明顯是“北京今天空氣質(zhì)量”。那么此時(shí)DST在追蹤到上一輪的Query意圖的輸出語境,并且本輪Query句式所觸發(fā)的意圖,對(duì)應(yīng)的輸入上文語境剛好一致的時(shí)候(其實(shí)是同一個(gè)意圖,簡單理解,就是它自個(gè)),它會(huì)把{city}{date}{tem}全部繼承下來,又因?yàn)閧AQI}在上一輪沒有,屬于新增槽位要加上,這時(shí)候組合成的第二輪意圖:{city}{date}{tem}{AQI}
到此,就會(huì)出現(xiàn)問題,你到底是要干嘛?是要查溫度,還是要查空氣質(zhì)量。如果在天氣這個(gè)場景,“查溫度”與“查空氣質(zhì)量”是分開的話,那么到這里,系統(tǒng)就不知道要請求什么了。
所以在每個(gè)場景框架的建立之初,一定要時(shí)刻保持對(duì)整個(gè)Bot系統(tǒng)思維的意識(shí)。
因?yàn)楹芏喾N方式和路徑,都能完成同樣的功能,但不同方式對(duì)整個(gè)系統(tǒng)和其他模塊帶來的影響是不一樣的,如果在頂層設(shè)計(jì)的時(shí)候不考慮清楚,就會(huì)帶來后續(xù)的某些功能不能實(shí)現(xiàn),或是實(shí)現(xiàn)的方式更加復(fù)雜。
2.2.3value維度劃分
Value維度進(jìn)行劃分,有兩種形式:
- 一種是僅僅把“溫度”和“空氣質(zhì)量/空氣”作為固定的Value值,就好像“北京/北京市”作為{city}槽位里的一個(gè)固定值一樣。這樣操作的本質(zhì)是,將該句式“意圖必要要素”作為槽位中的一個(gè)值;
- 第二種方式,則是將整個(gè)“意圖要素”(必要與非必要全部包含),都作為Value值做歸一化的處理,同時(shí)他們共屬于一個(gè)槽位,我假定這個(gè)槽位為{condition},那么將會(huì)出現(xiàn)下面的兩種不同配置方式
第一種配置方式(句式、槽位詞表圖):
第二種配置方式(句式、槽位詞表圖):
(1)第一種Value化缺陷
先來看第一種方式,可以看到它為了滿足用戶后綴里“是多少”和“好不好”這兩種問法,就必須要有兩種句式去配置(這并不是大問題)。
但是由于“溫度”和“空氣質(zhì)量”屬于同一個(gè)槽位的兩個(gè)值,也就是{condition}中出現(xiàn)任意一個(gè),這兩個(gè)句式都能觸發(fā)該Intent,這就會(huì)導(dǎo)致一個(gè)現(xiàn)象層面的問題:即Query為“北京今天溫度好不好”和“北京今天空氣是多少”也能觸發(fā)該意圖,雖然這可能不會(huì)造成多大負(fù)面影響,但它還是破壞了意圖句式的準(zhǔn)確度。
但為什么會(huì)導(dǎo)致這樣的現(xiàn)象呢?可以通過意圖要素去解釋?!皽囟仁嵌嗌佟边@句Query屬于溫度意圖要素,“空氣好不好”屬于空氣質(zhì)量意圖要素,本來他們的邊界是完全不在一起的(如下圖)。
但我們基于簡化框架的目的,把這兩個(gè)要素中的“意圖必要要素”分別抽取出來,作為同一個(gè)槽位中的值,但同時(shí)為了要滿足用戶更多Query的問法,就要在句式中增添“非必要意圖信息”(即上文的“好不好”和“是多少”),這樣的做法最終導(dǎo)致兩個(gè)意圖的邊界出現(xiàn)了混亂。所以這樣的Value化操作方式,本質(zhì)上是在“精簡框架”和“Cover用戶更多句式”之間去做出取舍。
不過綜上來看,它的效果并好,這還僅僅是最為簡單場景的兩類Query而已,如果是更復(fù)雜的場景,用戶的表達(dá)句式更加復(fù)雜,那這樣的做法所暴露的缺陷是極為明顯的
(2)第一種Value化優(yōu)勢
對(duì)比上面,在觀察第二種Value化的操作方式,可以看到的優(yōu)勢就很明顯:
- 簡潔
- 所有“意圖要素”在槽位詞表的層面采用相同方式處理,而不是在句式層面。本質(zhì)上不會(huì)導(dǎo)致“意圖要素”發(fā)生邊界混亂,也就不會(huì)出現(xiàn)說“溫度好不好”這樣奇怪的Query,卻仍能觸發(fā)意圖的的問題。
- 后續(xù)的可拓展性、維護(hù)成本低。在此基礎(chǔ)上優(yōu)化迭代新的功能,或是發(fā)生一些比較緊急的Case,只需要在整個(gè)框架中處于在外一層的“槽位詞表”維度去修改,而不用涉及到框架性、意圖層面的改變。
3.反過來想,影響簡潔性的不是什么因素
通過上面的實(shí)驗(yàn),我想第二個(gè)問題中的三個(gè)假設(shè),應(yīng)該可以得到自然的驗(yàn)證。
第一個(gè)假設(shè):用戶的“現(xiàn)象意圖”,是否要能成為影響B(tài)ot框架核心因素?
答案是:“否”。
用戶在現(xiàn)象層面的意圖,并不能作為你構(gòu)建Bot框架時(shí)的核心思考因素。通過上面天氣場景的例子已經(jīng)證明,用戶在現(xiàn)象層面上的兩個(gè)意圖,在Bot框架中,可以在邏輯上從intent/slots/value三個(gè)維度轉(zhuǎn)化。用戶意圖,不能代表Bot意圖。
第二個(gè)假設(shè):用戶同一個(gè)“現(xiàn)象意圖”的不同類型表達(dá)句式,是否能成為影響B(tài)ot框架核心因素?
答案是:“否”。
如果連“用戶意圖”本身都不能作為核心因素,那么它更上一層的句式層面的泛化說法,又怎么可能成為核心因素;從技術(shù)上講,這也只是用戶說法通過模型泛化的問題。
第三個(gè)假設(shè):整個(gè)場景內(nèi)的“服務(wù)參數(shù)”多少,是否作能成為影響B(tài)ot框架核心因素?
答案還是不能。
因?yàn)榧磿r(shí)要服務(wù)的參數(shù)再多,在Bot中也可以在Value層面去處理。這個(gè)在Bot中最極端的體現(xiàn),就是“槽位值”這個(gè)概念,歌手足夠多吧,但一個(gè){singer}詞典,就全部解決啦。
那么在請求類的服務(wù)中,邏輯也是一致的,即使要請求的服務(wù)參數(shù)再多(任何服務(wù)場景),也是同樣的思路去解決,所以“服務(wù)參數(shù)”數(shù)量,也不能成為影響B(tài)ot框架核心因素。
4.奧卡姆剃刀原則
上面的簡單實(shí)驗(yàn),回答了最開始提出的三個(gè)問題,同時(shí)加上自己最近的一些實(shí)踐。目前至少找到在做Bot設(shè)計(jì)時(shí)非常重要的原則,奧卡姆剃刀原則:
如無必要,勿增實(shí)體。
這個(gè)原則的思想是同樣可以做好的事情,用較少的東西去做,切勿浪費(fèi)較多東西去做,也被稱為“簡單有效原理”。
體現(xiàn)在Bot設(shè)計(jì)上,同一個(gè)功能,從三個(gè)維度都可以去完成,甚至不同維度也有不同的子方式,但哪種方式最為簡潔,這才是真正尤為重要的一點(diǎn),而不是僅僅局限于完成這個(gè)功能本身,“兩點(diǎn)之間線段最短”,這是公理。
如果這個(gè)場景比較簡單,涉及到功能不多,可能哪種采取方式并不會(huì)有太大影響??杉僭O(shè)要做的東西比較重度,或者說在初版之后要進(jìn)行更豐富的拓展,那么在設(shè)計(jì)之初,讓整個(gè)框架保持最大程度可能性的簡潔,是十分必要的一點(diǎn)。
“奧卡姆剃刀原則”,也成為我在Bot產(chǎn)品設(shè)計(jì)時(shí)核心思想,最近在實(shí)踐中重構(gòu)天氣場景,也嘗試完成了只用兩個(gè)意圖(不包含用于承接多輪的重名意圖),去Cover住天氣場景的所有功能,算是理論結(jié)合實(shí)際,完成了一小步。
5.Bot產(chǎn)品感受
在文章的最后,更想談一些自己的感受,我想表達(dá)的是上面所有的論述都是極其膚淺和缺乏根基的。它有兩個(gè)非常嚴(yán)重的缺陷,這個(gè)缺陷倒不是說這個(gè)上面的內(nèi)容或觀點(diǎn)存在過大偏差(當(dāng)然也是存在的),而是我的這些思考以及得出結(jié)論本身的思考方式本身存在缺陷。
- 其一,本質(zhì)上只是通過自己在實(shí)踐中的經(jīng)驗(yàn),用歸納法去從現(xiàn)象層面得出一些因果關(guān)系上的東西,然后得出一些原則或思想,雖然并不能說他們不對(duì),但這樣的方式缺乏更為底層的“根基”(不知道能不能感受到我所說的這個(gè)味道)。
- 其二,過于片面,這是我自己都能明顯感受到的,做過這些東西歸納出這一方面的思考,做過那些東西就得出另外一些方面的思考。這樣下去整個(gè)體系會(huì)變得越來越復(fù)雜,但也越來越容易流與現(xiàn)象的流變,而很難縱向深挖出更為底層和基礎(chǔ)的東西。
所以最近也開始在思考尋找Bot框架設(shè)計(jì)中的第一性原理,從那個(gè)最底層的“第一因”出發(fā),這個(gè)“第一因”一定是抽象的,且可能跟Bot本身無關(guān),然后用演繹法去推導(dǎo)Bot框架設(shè)計(jì)的理論,將底層邏輯導(dǎo)通。
我的第二個(gè)感受是:就“現(xiàn)象問題”去解決“現(xiàn)象問題”一定是做Bot產(chǎn)品(或者說任何產(chǎn)品都是如此吧)的大坑,但Bot對(duì)話產(chǎn)品表現(xiàn)的更為明顯,畢竟人的對(duì)話場景或人的Query形式有點(diǎn)不可窮盡的意思哦。
場景會(huì)越來越多,每種場景所表現(xiàn)出來的形式也不盡相同,也就是說現(xiàn)象層面上的東西永遠(yuǎn)是流變的。同時(shí)技術(shù)也在不斷向前演化,說不定哪天有了新的技術(shù)突破,做Bot的方式方法就會(huì)發(fā)生改變。
但一定也會(huì)有那個(gè)最為本質(zhì)和底層的點(diǎn),是所有Bot產(chǎn)品共有的底層的“第一因”(第一性原理)。只要NLU底層語義技術(shù),不突破目前基于統(tǒng)計(jì)模型理論的機(jī)器/深度學(xué)習(xí)方式;只要人的說話方式和習(xí)慣不改變,它也一定不會(huì)改變的那個(gè)基石元素找到,才可以。
本文由 @free 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Unsplash ,基于 CC0 協(xié)議
你寫的8篇文章我都看了,真的受益匪淺。請問一下,你還在更新作品嗎?有g(shù)zh嗎?想一同交流。
What meaning Bot?