語(yǔ)音交互:如何設(shè)計(jì)一個(gè)語(yǔ)音技能?
編輯導(dǎo)語(yǔ):隨著科技的快速發(fā)展,如今我們的生活越來(lái)越便捷,很多時(shí)候通過(guò)說(shuō)話便有機(jī)器代替我們?nèi)ネ瓿梢恍┦虑?,這便是語(yǔ)音技能帶給我們的好處。日常生活中,語(yǔ)音技能仿佛無(wú)處不在,小到手機(jī)、智能音箱,大到機(jī)器人,那么,語(yǔ)音已經(jīng)應(yīng)該如何設(shè)計(jì)出來(lái)呢?
隨著語(yǔ)音交互的普及,我們首先用到的最多的就是語(yǔ)音技能,比如:我們讓智能音箱唱歌、查天氣、講笑話等,這些都是語(yǔ)音技能。今天,我們就來(lái)聊聊如何從零到一的設(shè)計(jì)一個(gè)語(yǔ)音技能。
1. 基礎(chǔ)信息介紹
在設(shè)計(jì)語(yǔ)音技能之前,我們首先要掌握技能用到的一些基礎(chǔ)定義,每家公司可能叫法上面會(huì)有區(qū)別,但是都大同小異。
1.1 基礎(chǔ)定義
我們?cè)诹牧恼Z(yǔ)音技能常見(jiàn)的一些名詞和定義,主要有領(lǐng)域(domain)、意圖(intent)和槽位(slot),這些都是語(yǔ)音技能必不可少的一些參數(shù)內(nèi)容。
1.1.1 領(lǐng)域
聽(tīng)到這個(gè)詞,我們就感覺(jué)到了約束性,其實(shí)領(lǐng)域這個(gè)詞就是約束語(yǔ)音技能范圍的意思。一般一個(gè)語(yǔ)音技能,會(huì)有一個(gè)明確的領(lǐng)域,剩下的內(nèi)容都在這個(gè)領(lǐng)域里面做處理。
1.1.2 意圖
顧名思義就是判斷用戶具體要做什么的意思,領(lǐng)域可以是一個(gè)大范圍的事情,而意圖是領(lǐng)域中的一個(gè)小分類。
比如:讓機(jī)器人跳舞是一個(gè)領(lǐng)域的事情,那么“開(kāi)始跳舞”和“停止跳舞”就是領(lǐng)域下的意圖的事情。意圖一般會(huì)非常明確,會(huì)有明確的邊界,在自然語(yǔ)言處理中屬于封閉域的問(wèn)題。
1.1.3 槽位
根據(jù)槽位的有無(wú),語(yǔ)音技能可以分為有槽位的和沒(méi)有槽位的。槽位一般就是指我們前面說(shuō)到的實(shí)體詞,用來(lái)做信息抽取用的,補(bǔ)全和完善用戶的意圖。
比如:“唱首歌”就是沒(méi)有槽位的語(yǔ)音技能,只需要知道是唱歌的意圖就可以;而查天氣是常用的有槽位的語(yǔ)音技能,除了識(shí)別出這是一個(gè)查天氣的意圖之外,機(jī)器人還要知道要查什么時(shí)間、什么地點(diǎn)的天氣,時(shí)間和地點(diǎn)在這里就是槽位信息。
有槽位信息的一般還會(huì)有默認(rèn)槽位,就是沒(méi)有槽位信息的時(shí)候,直接使用默認(rèn)的槽位信息,從而保證語(yǔ)音技能的正常。常見(jiàn)的就是“天氣預(yù)報(bào)”,默認(rèn)的就是當(dāng)?shù)禺?dāng)天的天氣。
1.2 底層邏輯
再聊聊一下目前語(yǔ)音技能的底層邏輯,基于什么能力實(shí)現(xiàn)的。
目前大部分做語(yǔ)音技能的公司,都是用正則表達(dá)式來(lái)寫(xiě)的,就是基于一些文本規(guī)則,作為約束條件,篩選出來(lái)明確的意圖。抽取的槽位也是基于規(guī)則,或者窮舉的方式。
這樣做的好處是改動(dòng)方便,以及改動(dòng)后的影響好評(píng)估,而且冷啟動(dòng)非常方便,甚至可以做到每天迭代;缺點(diǎn)也同樣明確,泛化能力弱,沒(méi)有學(xué)習(xí)能力。
也有一小部分公司已經(jīng)開(kāi)始使用算法做語(yǔ)音技能了。
語(yǔ)音技能本質(zhì)是一個(gè)意圖識(shí)別的事情,而意圖識(shí)別實(shí)際上又是一個(gè)分類問(wèn)題,有基于傳統(tǒng)機(jī)器學(xué)習(xí)的SVM,基于深度學(xué)習(xí)的CNN、LSTM、RCNN、C-LSTM等。
槽位識(shí)別實(shí)際上是一種序列標(biāo)記的任務(wù),有基于傳統(tǒng)機(jī)器學(xué)習(xí)的DBN、SVM,也有基于深度學(xué)習(xí)的LSTM、Bi-RNN等。用算法做的優(yōu)點(diǎn)就是泛化能力強(qiáng),有一定的學(xué)習(xí)能力;缺點(diǎn)就是成本高,適合復(fù)雜技能后期迭代的方向。
2. 語(yǔ)音技能的定義
在開(kāi)始動(dòng)手做語(yǔ)音技能的之前,要先對(duì)語(yǔ)音技能進(jìn)行定義,知道技能的邊界,要有明確的反饋邏輯在里面。我們這里用“查天氣”這個(gè)爛大街,也是最典型的技能來(lái)舉例子。
2.1 定義技能
我們要明白為什么做“查天氣”這個(gè)技能,以及要做到多細(xì)。
原因可能是我們就覺(jué)得這個(gè)技能很基礎(chǔ),用戶都被教育過(guò)了,必須要有;也可能是我們看用戶的交互日志,發(fā)現(xiàn)每天都有很多人有這個(gè)意圖,現(xiàn)在是未滿足狀態(tài),值得單拿出來(lái)作為一個(gè)技能。
還可能是老板覺(jué)得競(jìng)爭(zhēng)對(duì)手有了,我們也要做。
假設(shè)我們是覺(jué)得是技能很基礎(chǔ),必須要做。接下來(lái)我們就要考慮怎么定義這個(gè)技能,需要注意以下幾點(diǎn):
2.1.1 要明確技能的邊界,就是那些query是該技能要識(shí)別的,需要有一個(gè)明確的定義
這個(gè)看起來(lái)很容易,其實(shí)執(zhí)行起來(lái)會(huì)很糾結(jié),因?yàn)樽匀徽Z(yǔ)言本身就有一定的歧異性。
就拿“查天氣”舉例子,比如:“今天該穿什么?”、“明天能不能出去玩”算不算查天氣的意圖,都是要明確的。其實(shí)最讓你糾結(jié)的往往是模糊的語(yǔ)義,算作技能也不為錯(cuò),不算吧,又覺(jué)得用戶可能有這個(gè)意思。
所以明確的邊界的時(shí)候,有三種處理邏輯:
2.1.1.1 只處理特別明確的意圖,不care模糊的語(yǔ)義
比如:只處理“明天天氣”、“查一下天氣”等這樣的
2.1.1.2 模糊的意圖也一起處理,都?xì)w為該技能
比如:“明天該穿秋褲嗎?”也屬于該意圖,和“明天天氣”一起處理
2.1.1.3 還有一種精細(xì)化的處理,把明確的意圖和模糊的意圖分開(kāi)處理
比如:可以讓明確意圖直接執(zhí)行,模糊意圖選擇反問(wèn),用戶確認(rèn)后執(zhí)行。用戶一旦確認(rèn)后,以后這句話就歸位了明確意圖。
比如:用戶問(wèn)“今天穿什么出去好呢?”,計(jì)算機(jī)回答“您是不是想查詢今天的天氣?”,用戶回答“是的”,計(jì)算機(jī)回答“今天北京氣溫20度,適合……”;然后下次用戶問(wèn)“今天穿什么出去好呢”,計(jì)算機(jī)就可以回答“今天北京氣溫20度,適合……”,反之亦然。
當(dāng)然如果模糊問(wèn)的問(wèn)法比較多,可以專門做意圖優(yōu)化。
2.1.2 明確技能的領(lǐng)域、意圖和槽位的信息
就拿“查天氣”這個(gè)技能為例,領(lǐng)域我們一般設(shè)置為“weather”,但是意圖定義就會(huì)有兩種方案:
一種是簡(jiǎn)單的,只有一個(gè)意圖,比如意圖也是“weather”;還有一種是精細(xì)化的處理,有若干餓意圖,比如“北京空氣質(zhì)量?”算是“get_haze”,“今天會(huì)下雨嗎?”算是“get_rain”等,就是每個(gè)不一樣的問(wèn)法,對(duì)應(yīng)不同的意圖。
本質(zhì)上越精細(xì)化的技能,給用戶的體驗(yàn)會(huì)越好。
2.1.3 考慮技能內(nèi)多輪的支持,以及支持的效果
由于自然語(yǔ)言先天是具有多輪屬性的,很多時(shí)候需要借助上輪的信息,才能理解這句話,在做語(yǔ)音技能的時(shí)候,也要考慮到這方面的可能。
比如:用戶先說(shuō)“明天天氣”,緊接著,用戶又說(shuō)“后天呢?”,這個(gè)時(shí)候是否考慮支持,都需要在定義技能的時(shí)候明確。像用戶隔多久的多輪需要支持,支持的邏輯,我們這里就不展開(kāi)了。
定義好了技能,就知道了這個(gè)技能能干什么,方便后面的測(cè)試同學(xué)測(cè)試,也知道未來(lái)要迭代的方向。一般如果沒(méi)有數(shù)據(jù)支撐的話,建議先做最基礎(chǔ)的就可以,邊界越小越好。
2.2 觸發(fā)技能反饋
反饋這塊一方面依賴于產(chǎn)品底層的設(shè)計(jì);另一方面依賴于產(chǎn)品形態(tài),按照有無(wú)屏幕,可以簡(jiǎn)單的分為兩種產(chǎn)品形態(tài):有屏幕和沒(méi)有屏幕。這兩方面結(jié)合,才能設(shè)計(jì)出一個(gè)人性化的體驗(yàn)。
產(chǎn)品的底層設(shè)計(jì)要考慮意圖要不要細(xì)化,比如:“今天有霧霾嗎?”和“今天天氣怎么樣?”這兩種問(wèn)法有沒(méi)有必要分開(kāi)處理,設(shè)置不一樣的回復(fù)內(nèi)容。
還要考慮如果槽位超出技能的邊界怎么處理,比如:“三年后的天氣預(yù)報(bào)”,這個(gè)時(shí)候我們需要怎么反饋,都是需要在語(yǔ)音技能定義的時(shí)候?qū)懬宄?/p>
具體怎么展示以及怎么回復(fù),就要依賴于產(chǎn)品形態(tài)考慮。
有屏幕的可能更多的信息會(huì)通過(guò)屏幕展示,語(yǔ)音只是做到一個(gè)提醒的效果,有些場(chǎng)景甚至都不需要語(yǔ)音,而沒(méi)有屏幕的就要考慮語(yǔ)音播報(bào)的表達(dá)方式,要注意文字的長(zhǎng)度,都播報(bào)那些內(nèi)容,播報(bào)的先后順序,甚至播報(bào)的句式的豐富度都要考慮。
技能的反饋,是用戶直接能夠感受到的,其重要心怎么強(qiáng)調(diào)都不為過(guò),這塊可以參考語(yǔ)音交互的設(shè)計(jì)規(guī)則。
3. 數(shù)據(jù)的準(zhǔn)備
前面說(shuō)到的都是產(chǎn)品設(shè)計(jì)的時(shí)候要考慮到的問(wèn)題,如果你把技能已經(jīng)設(shè)計(jì)的差不多的時(shí)候,就可以準(zhǔn)備這個(gè)意圖的訓(xùn)練和測(cè)試數(shù)據(jù),因?yàn)槲覀冏罱K語(yǔ)音技能的開(kāi)發(fā)是基于數(shù)據(jù)的,數(shù)據(jù)覆蓋的越全面,技能的效果越好。
無(wú)論訓(xùn)練數(shù)據(jù)還是測(cè)試數(shù)據(jù),簡(jiǎn)單可以把數(shù)據(jù)分為兩部分,正例和反例。
3.1 正例數(shù)據(jù)
正例數(shù)據(jù)指的是正常的觸發(fā)文本,就是你設(shè)計(jì)的觸發(fā)query,像“明天天氣怎么樣”、“天氣預(yù)報(bào)”、“查詢天氣預(yù)報(bào)”等,這些都是我們定義的“查天氣”的意圖。
一般在準(zhǔn)備正例的數(shù)據(jù)時(shí),最關(guān)心的是數(shù)據(jù)的來(lái)源,還有數(shù)據(jù)的豐富性。
如果是冷啟動(dòng)的話,建議團(tuán)隊(duì)內(nèi)部,或者有專門的數(shù)據(jù)部門,進(jìn)行人肉泛化,就是每個(gè)人自己寫(xiě)幾條符合意圖的觸發(fā)query。
這里亞馬遜在做智能音箱的時(shí)候有一個(gè)要求,就是每個(gè)意圖的正例訓(xùn)練集的數(shù)據(jù),不能少于30條(測(cè)試數(shù)據(jù)也一樣)。數(shù)據(jù)來(lái)源就是公司員工制造,數(shù)據(jù)豐富性就是依靠數(shù)據(jù)量標(biāo)準(zhǔn)約束。
如果是語(yǔ)音能力已經(jīng)有了,每天都有大量的交互數(shù)據(jù),我們就可以從真實(shí)的交互中拿數(shù)據(jù)。導(dǎo)出交互日志需要逐一標(biāo)注,從中找到屬于該意圖的數(shù)據(jù)。
這些數(shù)據(jù)的好處就是更加貼近用戶真實(shí)的情況,缺點(diǎn)就是成本會(huì)比較高,但一般都是可控的。
基于現(xiàn)有的交互數(shù)據(jù)標(biāo)注,可以輕輕松松準(zhǔn)備30該意圖的數(shù)據(jù),建議越多越好,100條以上為最佳。數(shù)據(jù)來(lái)源就是用戶的交互,數(shù)據(jù)豐富性是依靠用戶的。
3.2 反例數(shù)據(jù)
反例數(shù)據(jù)指的是非該意圖的數(shù)據(jù),就是除了正例數(shù)據(jù),理論上所有的數(shù)據(jù)都是反例數(shù)據(jù)。像“明天要是不下雨就好了”、“我知道現(xiàn)在在下雨”、“我不想查天氣預(yù)報(bào)”等,這些都不是我們定義的“查天氣”的意圖。
很多時(shí)候,我們做語(yǔ)音技能的時(shí)候,是很容易忽略反例數(shù)據(jù)的。
反例數(shù)據(jù)最好是能夠有意圖相關(guān)的關(guān)鍵詞,數(shù)據(jù)量最好可以和正例數(shù)據(jù)一樣多。在準(zhǔn)備反例數(shù)據(jù)的時(shí)候,要注意一些意圖相反的操作,比如:“我不想查天氣預(yù)報(bào)”,這是比較典型的反例數(shù)據(jù)。
往往反例數(shù)據(jù)比正例數(shù)據(jù)要難收集,尤其是高質(zhì)量的反例數(shù)據(jù),一般交互日志是最好的資源。
正例數(shù)據(jù)可以保證準(zhǔn)確率,而反例數(shù)據(jù)可以減少誤召回,提高召回率。
4. 語(yǔ)音技能的實(shí)現(xiàn)
訓(xùn)練數(shù)據(jù)準(zhǔn)備好之后,就是技能的實(shí)現(xiàn)了,這塊需要工程師的支持。有些公司是工程師直接寫(xiě)語(yǔ)音技能的邏輯,有些公司是會(huì)提供一個(gè)平臺(tái),通過(guò)培訓(xùn),讓產(chǎn)品經(jīng)理和運(yùn)營(yíng)同學(xué)也可以寫(xiě)。
這里就會(huì)用到一些基礎(chǔ)能力,當(dāng)一句query傳過(guò)來(lái),首先會(huì)使用中文分詞對(duì)這句話進(jìn)行分詞。
比如:“北京明天天氣怎么樣”,會(huì)被分為“北京”、“明天”、“天氣”、“怎么樣”,然后就是命名實(shí)體識(shí)別;比如:“北京”就是地點(diǎn)實(shí)體,“明天”就是時(shí)間實(shí)體,對(duì)應(yīng)的就是語(yǔ)音技能的槽位。
最后就是匹配我們寫(xiě)的正則表達(dá)式,這里就不過(guò)多贅述,感興趣的同學(xué)可以搜搜看。
中文分詞:為什么叫中文分詞呢?因?yàn)橛⑽氖且栽~為單位的,詞和詞之間是依靠空格和標(biāo)點(diǎn)隔開(kāi)的,而中文是以字為單位的,一句話的所有字是連在一起的。
所以就需要算法把一句話切分成有意義的詞,這就是中文分詞,也叫切詞,主要為了NLU后面處理做準(zhǔn)備。了解錘子手機(jī)的人可能知道上面有一個(gè)叫做“大爆炸”的功能,就是基于該算法的。
這是NLU最底層的能力,一般都是用的開(kāi)源的算法,大家能力相差不大,基本可以保證準(zhǔn)確率在90%以上。
命名實(shí)體識(shí)別:詞性標(biāo)注是把每個(gè)詞的詞性標(biāo)注出來(lái),而命名實(shí)體識(shí)別是指識(shí)別文本中具有特定意義的實(shí)體,包括人名、地名、時(shí)間等。
一般來(lái)說(shuō),命名實(shí)體識(shí)別的任務(wù)就是識(shí)別出待處理文本中三大類(實(shí)體類、時(shí)間類和數(shù)字類)、七小類(人名、機(jī)構(gòu)名、地名、時(shí)間、日期、貨幣和百分比)命名實(shí)體。
這個(gè)一般會(huì)根據(jù)本身業(yè)務(wù)的需求進(jìn)行調(diào)整,不做明確的限制。
還有比較簡(jiǎn)單的實(shí)現(xiàn)方式,就是通過(guò)窮舉實(shí)體+寫(xiě)正則的方式,而不需要用到模型去做處理。
比如:“查天氣”這個(gè)技能,我們通過(guò)窮舉的方式,把表達(dá)地點(diǎn)和時(shí)間的詞語(yǔ)都窮舉出來(lái),然后分別存到詞典里面。最后使用這兩個(gè)詞典寫(xiě)一些正則表達(dá)式,用來(lái)覆蓋我們準(zhǔn)備的訓(xùn)練集。
這樣做的的前提需要是實(shí)體詞是可以窮舉的,否者就會(huì)遇到召回率很低的問(wèn)題。除了實(shí)現(xiàn)方法,我們還要考慮實(shí)現(xiàn)過(guò)程的效率,以及實(shí)現(xiàn)效果怎么樣。
5. 測(cè)試驗(yàn)收效果
一般的語(yǔ)音技能開(kāi)發(fā)會(huì)比較快,開(kāi)發(fā)完成之后就是驗(yàn)收了,驗(yàn)收最關(guān)心的指標(biāo)是精準(zhǔn)率和召回率。
5.1 驗(yàn)收指標(biāo)介紹
本質(zhì)上就是計(jì)算機(jī)判斷了一次,然后人工判斷了一次,默認(rèn)以人工判斷的為真實(shí)標(biāo)簽,計(jì)算機(jī)判斷的為預(yù)測(cè)標(biāo)簽,如下表:
5.1.1 精準(zhǔn)率(Precision)
計(jì)算機(jī)認(rèn)為對(duì)的數(shù)據(jù)中,有多少判斷對(duì)了。
精準(zhǔn)率表示的是預(yù)測(cè)正例的樣本中有多少是真正類,預(yù)測(cè)為正例有兩種可能,一種就是真正類(TP),另一種就是假正類(FP),公式表示如下:
5.1.2 召回率(Recall)
的樣本中,有多少被計(jì)算機(jī)找出來(lái)了。
召回率表示的是樣本中的正例有多少被預(yù)測(cè)正確了。也只有兩種可能:一種是真正類(TP),另一種就是假反類(FN),公式表示如下:
其實(shí)就是分母不同,一個(gè)分母是預(yù)測(cè)標(biāo)簽的正例數(shù),另一個(gè)真實(shí)標(biāo)簽的正例數(shù)。一般情況這兩個(gè)指標(biāo)都會(huì)在0-1之間,越趨近于1,語(yǔ)音技能的效果越好。
5.2 驗(yàn)收步驟
驗(yàn)收這里分為兩個(gè)步驟:一個(gè)NLU批量驗(yàn)證;一個(gè)是端到端驗(yàn)證,都可以用測(cè)試集來(lái)驗(yàn)證。
NLU批量驗(yàn)證就是把測(cè)試集的query,全部通過(guò)語(yǔ)音技能的邏輯跑一邊,一般用來(lái)驗(yàn)證技能在NLU上面的效果。通常這一步只會(huì)測(cè)試新增的技能,單獨(dú)測(cè)試這個(gè)技能的效果,主要關(guān)心的是精準(zhǔn)率和召回率,這一步理論上來(lái)說(shuō),必須這兩個(gè)指標(biāo)都要達(dá)到95以上。
端到端驗(yàn)證是模擬用戶正常使用,需要把技能放在整個(gè)語(yǔ)音鏈路上面,來(lái)觀察語(yǔ)音技能在實(shí)際情況中的表現(xiàn)。
通常這一步才會(huì)發(fā)現(xiàn)一些問(wèn)題,比如:語(yǔ)音技能之間的沖突,甚至?xí)l(fā)現(xiàn)ASR識(shí)別不對(duì)的情況。這一步主要關(guān)心響應(yīng)時(shí)間、語(yǔ)音技能是否正常等情況。
測(cè)試一定要把好最后一道關(guān)卡,保證語(yǔ)音技能的精準(zhǔn)率和召回率,同時(shí)也要測(cè)試技能之間優(yōu)先級(jí)的關(guān)系,是否技能之間會(huì)出現(xiàn)優(yōu)先級(jí)的問(wèn)題。如果有多輪的語(yǔ)音技能,也要測(cè)試多輪的效果。
6. 總結(jié)
做一個(gè)語(yǔ)音技能,產(chǎn)品首先要有一個(gè)明確的定義,其次就是基于產(chǎn)品定義準(zhǔn)備訓(xùn)練集和測(cè)試集,然后基于訓(xùn)練集完成技能的開(kāi)發(fā),最后使用測(cè)試集進(jìn)行驗(yàn)證。
本文由 @我叫人人 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來(lái)自Unsplash,基于CC0協(xié)議。
人人兄,有空接著更,超級(jí)贊哦!!!
最近單位有項(xiàng)目是語(yǔ)音交互領(lǐng)域,自己之前沒(méi)有做過(guò),有沒(méi)有書(shū)籍課程推薦一下哦 謝謝啦
正在做這方面,哇
在BAT做類似領(lǐng)域的 希望有機(jī)會(huì)交流下,作者是不是騰訊滴?嘻嘻
你是那家單位的?訊飛,百度,or其他?
其他,哈哈哈
點(diǎn)贊?。?!
謝謝