如何搭建一個(gè)智能客服(三):NLP 里實(shí)體信息的抓取與應(yīng)用
前面兩篇說(shuō)了用戶意圖拆分與識(shí)別,和基于此設(shè)計(jì)的多輪對(duì)話流程。這一篇接下去講自然語(yǔ)言處理(NLP)中實(shí)體信息的抓取和在產(chǎn)品中的應(yīng)用,也是如何搭建一個(gè)智能客服系列的第三篇。
你或許思考過(guò),AI是怎么聽(tīng)懂人說(shuō)話的呢?——當(dāng)我在商場(chǎng),跟商場(chǎng)的機(jī)器人說(shuō)我要去三樓,它是怎樣聽(tīng)懂我的意思的呢?當(dāng)我說(shuō)去NARS,它怎么知道NARS是什么,是在哪里?
想知道以上問(wèn)題的答案,那么就要說(shuō)叨說(shuō)叨實(shí)體(entity)了。
首先,實(shí)體信息是什么意思呢?
它表示關(guān)鍵性的信息,通??梢苑譃閮煞N,一是與業(yè)務(wù)基本無(wú)關(guān)的,可以算作通識(shí)的信息,比如手機(jī)號(hào)、郵箱、日期、時(shí)間;二是與業(yè)務(wù)相關(guān)的,根據(jù)實(shí)際場(chǎng)景定制的。
怎么理解呢?接下來(lái)我將舉例說(shuō)明。
01 與業(yè)務(wù)基本無(wú)關(guān)的
舉個(gè)栗子,第一個(gè)場(chǎng)景,當(dāng)你需要預(yù)訂一張機(jī)票,假設(shè)你會(huì)這樣說(shuō):
幫我訂張明天的機(jī)票,從北京去上海,下午起飛的那種,我電話13344445555,行程單發(fā)我郵箱yuanquaner@woshipm.com
好的,已為您找到如下符合條件的航班……
在這個(gè)場(chǎng)景中,‘明天’和‘下午’就是時(shí)間信息,‘北京’和‘上?!堑攸c(diǎn)信息,‘13344445555’是手機(jī)號(hào)。因?yàn)檫@些信息可以說(shuō)是通識(shí),不隨業(yè)務(wù)而改變,所以一般會(huì)內(nèi)置到算法中去,識(shí)別并做對(duì)應(yīng)的轉(zhuǎn)換。
在上面的場(chǎng)景中,AI端會(huì)先識(shí)別出日期和時(shí)間,然后把‘明天’轉(zhuǎn)換為‘2020年3月27日’,‘下午’轉(zhuǎn)換為‘14:00-18:00’,再與其他信息合并,由數(shù)據(jù)端向航空公司發(fā)起請(qǐng)求,再告訴你返回的結(jié)果,即符合條件的航班列表。
這個(gè)識(shí)別環(huán)節(jié)聽(tīng)起來(lái)是簡(jiǎn)單的,因?yàn)槿祟愒谡Z(yǔ)言學(xué)習(xí)的過(guò)程中已經(jīng)能夠條件反射出什么是日期、什么是手機(jī)號(hào)、什么是地點(diǎn)。
但是對(duì)AI而言,起初這些東西都是一樣的字而已,需要大量的算法來(lái)區(qū)分與提取到這些信息。這里的識(shí)別率與算法設(shè)計(jì)時(shí)對(duì)語(yǔ)言理解的豐富度息息相關(guān)。
比如說(shuō),一開(kāi)始是對(duì)‘明天’‘昨天’做了識(shí)別,而忽略了‘前一天’‘后一天’的表達(dá);或者一開(kāi)始做了‘2020年2月2日’,而忽略了‘2020年二月二日’的表達(dá),就會(huì)直接拉低識(shí)別率,具體的表現(xiàn)就是……智障率升高。
轉(zhuǎn)換這一步中,有個(gè)很有意思的點(diǎn):
人們用自然語(yǔ)言表達(dá)日期時(shí)間等信息時(shí),其實(shí)是不完全符合標(biāo)準(zhǔn)邏輯的。
比如說(shuō),當(dāng)你在晚上00:10分跟智能助手說(shuō),“訂個(gè)明天的鬧鐘”,這里的“明天”大概率已經(jīng)是算“今天”了。
當(dāng)你在2020年1月里,跟智能助手說(shuō),“查查12月的賬單”,你其實(shí)是在講2019年的12月。這些語(yǔ)言表達(dá)習(xí)慣都應(yīng)該考慮進(jìn)去,才能讓智能助手“感覺(jué)像個(gè)人”。
Siri在這里做的很好,訂鬧鐘的場(chǎng)景,它會(huì)再確認(rèn)一句“請(qǐng)問(wèn)你是說(shuō)訂今天早上8點(diǎn)的鬧鐘嗎?”
02 與業(yè)務(wù)相關(guān)的
收回來(lái)說(shuō)第二個(gè)場(chǎng)景,結(jié)合業(yè)務(wù)出現(xiàn)的實(shí)體。
繼續(xù)舉栗子,當(dāng)你要買一杯奶茶,你通過(guò)智能助理完成這個(gè)操作,那么對(duì)話應(yīng)該是這樣的:
我要一杯奶茶,一點(diǎn)點(diǎn)的,大杯四季奶青,全糖,加一份紅豆,不加冰。
好的,已下單。
這里面,‘一點(diǎn)點(diǎn)’是奶茶品牌,‘四季奶青’是奶茶商品名,‘大杯’是份量,‘全糖’是糖度……
由于它們是完全依托于業(yè)務(wù)的表達(dá),離開(kāi)這個(gè)場(chǎng)景則這些詞不再有意義。
比如你在跟別人聊天氣的時(shí)候突然說(shuō)一句“一點(diǎn)點(diǎn)哦”,對(duì)方是聽(tīng)不懂的。它不像“北京”這種詞,北京永遠(yuǎn)是北京。
所以這種信息就是我說(shuō)的,要根據(jù)實(shí)際場(chǎng)景定制的,也就是說(shuō),我需要告訴AI,什么是奶茶品牌、什么是奶茶商品名、什么是份量……
怎么告訴它呢?
一般有三種途徑:字符串匹配,正則表達(dá)式,標(biāo)注。
1.?字符串匹配
字符串匹配,即定義一個(gè)實(shí)體信息的合集,適用于固定出現(xiàn)的字段。說(shuō)起來(lái)比較晦澀,我用偽代碼(因?yàn)椴粫?huì)寫真代碼)形式寫一下就清楚了。在買奶茶的場(chǎng)景中,對(duì)奶茶品牌和商品名等實(shí)體信息的定義可以這樣寫:
“奶茶品牌” = [ ‘一點(diǎn)點(diǎn)’, ‘喜茶’, ‘樂(lè)樂(lè)茶’, ‘奈雪的茶’ ]
“份量” = [ ‘大杯’, ‘中杯’, ‘小杯’ ]
“商品名” = [ ‘四季奶青’, ‘紅茶瑪奇朵’, ‘芝士芭蕾’ ]
這樣,當(dāng)用戶說(shuō)到了其中一個(gè)項(xiàng),AI就可以知道對(duì)方在講什么了。
2.?正則表達(dá)式
正則表達(dá)式,即定義一個(gè)實(shí)體信息出現(xiàn)的規(guī)則,適用于有規(guī)律出現(xiàn)的信息。以車牌號(hào)為例,常見(jiàn)的形式為省份縮寫(一個(gè)漢字)+一位字母+五位數(shù)字,依然用偽代碼的形式表達(dá),如下:
“車牌號(hào)” = [京滬魯浙……津豫贛]{1}[A-Z]{1}[0-9]{5}
#意思是從省份縮寫中的一個(gè)字+一個(gè)大寫字母+5個(gè)阿拉伯?dāng)?shù)字
同理地,我們可以用這種方式定義其他有規(guī)律的詞匯,像設(shè)備批號(hào),身份證號(hào),手機(jī)號(hào),訂單號(hào),諸如此類。
講到這里,你可能想說(shuō),這兩種辦法一點(diǎn)都不AI嘛。那么……朋友你說(shuō)的沒(méi)錯(cuò)我也這么認(rèn)為!不過(guò)途徑只是途徑,AI也不是目的,而是為了實(shí)現(xiàn)最終與人對(duì)話的效果。所以來(lái)看很AI的第三種吧。
3. 標(biāo)注
標(biāo)注,即對(duì)表達(dá)某一個(gè)意思的語(yǔ)句進(jìn)行標(biāo)注,從而讓機(jī)器學(xué)習(xí)到某一個(gè)意思,適用于不固定也不規(guī)律的表達(dá)。
以筆者工作里的一個(gè)場(chǎng)景來(lái)說(shuō),有車貸或房貸的用戶,經(jīng)常會(huì)來(lái)咨詢,自己還完了多少錢,自己還剩多少錢要還。那么我稍微整理了一些出現(xiàn)過(guò)的表達(dá)方式,如下:
我還了多少錢了?
我已經(jīng)付掉多少貸款了?
我還完了多少貸款?
有多少貸款是還上了的?
我已經(jīng)還了多少款?
我的貸款還清了多少了呢
我還有多少錢要還???
還剩多少貸款要付?
還有多少貸款得付?
我還要付多少錢呀
很明顯地,這些表達(dá)即不會(huì)用固定的名詞,也沒(méi)有可以寫成正則表達(dá)式的清晰規(guī)律。但是可以用語(yǔ)義上清楚地看出來(lái)用戶在問(wèn)什么,所以這里采用標(biāo)注的形式把意思標(biāo)出來(lái)。
我們定義還完了多少錢的概念為=”已還”,還剩多少錢要還的概念為=”剩余”,括號(hào)起來(lái)的為標(biāo)注的位置:
我[還了多少錢]了?——“實(shí)體”=“已還”
我已經(jīng)[付掉多少貸款]了?——“實(shí)體”=“已還”
我[還完了多少]貸款?——“實(shí)體”=“已還”
有[多少貸款是還上了]的?——“實(shí)體”=“已還”
我已經(jīng)[還了多少款]?——“實(shí)體”=“已還”
我的貸款[還清了多少]了呢——“實(shí)體”=“已還”
我[還有多少錢要還]啊?——“實(shí)體”=“剩余”
還[剩多少貸款要付]?——“實(shí)體”=“剩余”
還[有多少貸款得付]?——“實(shí)體”=“剩余”
我[還要付多少]錢呀——“實(shí)體”=“剩余”
在完成了大量以上類型的標(biāo)注后,當(dāng)用戶再問(wèn)到相同的問(wèn)題,AI大概率上就能識(shí)別到對(duì)應(yīng)的實(shí)體信息,那么就可以繼續(xù)“像個(gè)人一樣”地進(jìn)行對(duì)話了。
在實(shí)際的落地場(chǎng)景中,提取的途徑并不是唯一的,也不一定是固定的。具體采用哪種方式來(lái)實(shí)現(xiàn)需求,是基于PM對(duì)技術(shù)方法的了解和對(duì)業(yè)務(wù)背景的熟悉而做判斷。究其根本,一切都還是為了用戶需求而服務(wù)。
好了今天的內(nèi)容就到這里~下一篇主題是怎樣讓AI更像人——偽裝的智能感。感謝觀看!
本文由 @一個(gè)圓圈兒 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來(lái)自Unsplash,基于CC0協(xié)議
你好,正在找你這樣的產(chǎn)品人,希望能建立個(gè)聯(lián)系WX:zp96029985
你是訊飛的?
特別想了解一下,作為AI產(chǎn)品經(jīng)理在落地一個(gè)需求的時(shí)候,需要出具的相關(guān)文檔有哪些?長(zhǎng)什么樣子?
嗯嗯!
第3點(diǎn)標(biāo)注相關(guān)的,這個(gè)并不是實(shí)體抽取,最后應(yīng)該也不會(huì)把相應(yīng)信息抽取出來(lái),應(yīng)該是為了計(jì)算相似度做分類
我們這里的邏輯是根據(jù)標(biāo)注出的實(shí)體去設(shè)置不同的回復(fù)
第三點(diǎn)我也沒(méi)看懂,不是應(yīng)該先把這些回復(fù)做意圖分類,然后將相關(guān)數(shù)據(jù)作為語(yǔ)料訓(xùn)練意圖分類模型,對(duì)話中遇到相應(yīng)的內(nèi)容進(jìn)行意圖識(shí)別嗎?
意圖識(shí)別在前面的篇幅里說(shuō)過(guò)了