追一科技首席科學(xué)家楊振宇
相比于語音和圖像,自然語言是一個有「更多需求」和「更少標(biāo)準(zhǔn)答案」的領(lǐng)域。扎根自然語言的公司通常也不是從技術(shù)和方法出發(fā),而是選擇一個具體的需求,然后用所有可能的方法解決它。追一就是這樣的一家公司,它瞄準(zhǔn)的是「對話機(jī)器人」這個領(lǐng)域,把問題分類、分解、逐個建立準(zhǔn)確高效的機(jī)器人,再有序集成起來。三月,機(jī)器之心有幸在深圳追一科技總部對首席科學(xué)家楊振宇進(jìn)行了采訪,我們仔細(xì)聊了聊「對話機(jī)器人是怎樣煉成的」,以及在他眼里,深度學(xué)習(xí)與自然語言最好的結(jié)合方式是怎樣的。
對話機(jī)器人需要解決的問題是如何分類的?
對話機(jī)器人是一個相對比較復(fù)雜的系統(tǒng),由許多個模塊組成。其中最核心的模塊就是語義理解,理解用戶想要表達(dá)什么意思。而在利用深度學(xué)習(xí)處理商業(yè)對話機(jī)器人的語義理解問題方面,追一是國內(nèi)最早的一家。
根據(jù)服務(wù)類型,對話機(jī)器人可以分為FAQ咨詢、資料查詢、任務(wù)型和閑聊四種,涉及的自然語言處理問題也各不相同。
對于 FAQ 咨詢來說,模塊的輸出對應(yīng)知識庫里的一個知識點(diǎn)。解決問答就像解決一個大型分類問題,機(jī)器人要將用戶的需求對應(yīng)到知識庫里的某一個答案。
知識庫里的知識點(diǎn)數(shù)量少則幾百個,多則上萬個。而根據(jù)知識庫大小不同,適用的模型結(jié)構(gòu)也會有所不同。例如,銀行類客戶通常有多個復(fù)雜的業(yè)務(wù)線,知識庫規(guī)模也是數(shù)以萬計,直接對幾萬個知識點(diǎn)進(jìn)行分類是難以取得高準(zhǔn)確率的,因此,機(jī)器人會采用分層處理的方法,先判定問題與哪一個大領(lǐng)域相關(guān),再進(jìn)行詳細(xì)的知識點(diǎn)分類。
資料查詢類對話需要從客戶的輸入里判定兩件事:意圖和實體。比如「A 公司的市盈率是多少?」這個問句里,就包含了意圖「市盈率」和實體「A 公司」。成功獲得這兩個信息后,機(jī)器人會去一個結(jié)構(gòu)化的數(shù)據(jù)庫里做查詢。得到答案后,按照一個預(yù)定義的格式化模板填充后返回給客戶。
資料查詢的一個難點(diǎn)是,用戶在連續(xù)發(fā)問時,不會每次都重復(fù)自己的意圖和實體,比如用戶會在詢問「A 公司的市盈率是多少?」之后,追問說,「那 B 公司的呢?」或者「那市凈率呢?」。這時,系統(tǒng)就需要通過上下文管理,對意圖和實體這些要素進(jìn)行繼承或切換。用戶的提問到來之后,首先進(jìn)行判斷:用戶在這一句中是否提供了某一要素?如果沒有,則嘗試從前文追溯繼承;如果有,再判斷用戶是否進(jìn)行了意圖(實體)轉(zhuǎn)移,如果是,則需要進(jìn)行對應(yīng)更新。
另一個難點(diǎn)是,用戶可能不會直接說出實體全稱,無法進(jìn)行精準(zhǔn)的、基于規(guī)則的匹配。因此,機(jī)器人需要結(jié)合特定用戶的歷史記錄和用戶群體的統(tǒng)計信息,通過學(xué)習(xí)的方法計算詞與詞之間轉(zhuǎn)移的概率,然后進(jìn)行模糊匹配。
任務(wù)型對話是當(dāng)下比較流行的一種交互形式,機(jī)器人試圖以對話的形式來執(zhí)行訂機(jī)票、查賬單、買理財?shù)热蝿?wù)。任務(wù)型和資料查詢類對話有相似之處:它們同樣要從用戶處獲得兩類信息:意圖和「元素」。區(qū)別在于,確定意圖后,任務(wù)型機(jī)器人需要主導(dǎo)對話:它要理清進(jìn)行特定任務(wù)所必要的元素有哪些,并以對話的形式確保用戶提供了所有元素。以訂機(jī)票舉例,用戶說「幫我訂明天北京到上海的機(jī)票」,那么機(jī)器人在明確了任務(wù)是「訂機(jī)票」之后,就要理清,用戶已經(jīng)提供的元素有時間、出發(fā)地、到達(dá)地,尚未提供的元素有艙位偏好、時間偏好、特定機(jī)場偏好等。只有獲得了全部所需元素,機(jī)器人才能「執(zhí)行任務(wù)」。
最后一類是閑聊,與陪護(hù)機(jī)器人的閑聊功能不同,穿插在查詢、咨詢問答或任務(wù)交互之間的閑聊,需要結(jié)合上下文一起識別。有時,一句話單獨(dú)看是閑聊的意圖,但結(jié)合上下文一起看則屬于查詢、咨詢問答或任務(wù)交互的一部分。這種場景下的閑聊不僅要識別準(zhǔn),而且要保證上下文對話的流暢性,也非常有挑戰(zhàn)。
一個對話機(jī)器人系統(tǒng)通常由哪些模塊組成?
如前所述,系統(tǒng)是由FAQ咨詢、資料查詢、任務(wù)型和閑聊等不同類型的機(jī)器人組成的。除此之外,還有一個中控模塊,是系統(tǒng)的管理控制中樞。
中控負(fù)責(zé)依據(jù)用戶當(dāng)前問句和歷史會話記錄,初步判斷當(dāng)前問題應(yīng)該由哪個機(jī)器人來回答,然后下發(fā)給一個或多個下游機(jī)器人。下游機(jī)器人處理后,將答案以及對應(yīng)的置信度返回給中控,中控根據(jù)下游返回的信息進(jìn)行決策后,將最合適的響應(yīng)返回給用戶。
對話機(jī)器人上線后效果如何持續(xù)運(yùn)營優(yōu)化?
對話機(jī)器人可能發(fā)生的誤判有兩種不同形式。
一種是「系統(tǒng)知道自己可能犯錯」:某一請求雖然分配給了特定機(jī)器人,但是機(jī)器人給出的最佳回答的置信度仍然很低,換言之,該回答能夠滿足用戶請求的可能性很小。此時,中控會進(jìn)行重新判斷:其他機(jī)器人是否有置信度更高的回答?如果仍然無法找到置信度足夠高的答案,系統(tǒng)會啟動拒絕識別機(jī)制,即,系統(tǒng)判斷自己無法回答這一問題,返回給用戶一個通用話術(shù),如「十分抱歉,您的問題我暫時回答不了」,然后記錄下問題,定期推送給機(jī)器人運(yùn)營人員通過數(shù)據(jù)標(biāo)注、知識庫擴(kuò)充等手段進(jìn)行迭代優(yōu)化。
另一種則是「系統(tǒng)很自信,但還是回答錯了」。這類錯誤要通過分析用戶的反饋來發(fā)現(xiàn),比如用戶選擇點(diǎn)「踩」或者繼續(xù)提問,都意味著他們的需求可能沒有得到滿足。系統(tǒng)會結(jié)合分析結(jié)果把這種疑似錯誤的回答挑出來,形成一個叫做「質(zhì)檢」的任務(wù),交給客戶的質(zhì)檢人員判斷并標(biāo)注,補(bǔ)充進(jìn)訓(xùn)練集進(jìn)行迭代優(yōu)化。與此同時,客戶也擁有能夠進(jìn)行即時調(diào)整的人工干預(yù)工具:如果客戶需要立刻對某個錯誤答案進(jìn)行調(diào)整時,可以利用這個工具找到導(dǎo)致錯誤答案的影響因素,通過對這些影響因素的調(diào)整來達(dá)到即時生效的干預(yù)效果。
對于機(jī)器人的優(yōu)化來說,極其重要的一點(diǎn)是在系統(tǒng)層面有完整的反饋學(xué)習(xí)機(jī)制,能夠讓機(jī)器人收集可能的錯誤情景,以及特定場景下的正確回答信號,然后利用這些數(shù)據(jù)和信號建立正反饋機(jī)制。
總體來說,通過初始化教育和持續(xù)運(yùn)營優(yōu)化,機(jī)器人一般能夠達(dá)到綜合準(zhǔn)確率 95% 的效果,這樣就會獲得比較好的對話體驗了。
自然語言處理的業(yè)界與學(xué)界:鴻溝與啟發(fā)
對于學(xué)界而言,最好的研究是用新方法解決新問題,其次是用新方法解決老問題,最次是用老方法解決老問題。而工業(yè)界的衡量標(biāo)準(zhǔn)則截然不同,工業(yè)界的出發(fā)點(diǎn)是以需求為核心,無論什么方法,能落地提供極致體驗的就是好方法。
舉個例子,業(yè)界的系統(tǒng)是需要給客戶提供快速干預(yù)工具的:一個無法調(diào)整的、干預(yù)不了的系統(tǒng)是不合格的。出于對企業(yè)形象的重視,客戶需要能夠監(jiān)控機(jī)器的效果、需要在發(fā)現(xiàn)問題之后能夠?qū)崟r干預(yù)、需要定期檢查用戶反饋,讓反饋數(shù)據(jù)作為新的監(jiān)督信號進(jìn)一步優(yōu)化模型。業(yè)界搭建的優(yōu)秀系統(tǒng)要有自適應(yīng)的閉環(huán)和流動性,這是學(xué)界很少會考慮的事情。
另外,業(yè)界也需要更多地考慮系統(tǒng)上線時的資源限制問題。比如在自然語言領(lǐng)域里一個典型的測試環(huán)境,斯坦福的 SQuAD 數(shù)據(jù)集上,現(xiàn)在學(xué)界里效果最好的做法是把數(shù)十個不同的模型集成在一起,然而這種做法是很難在工業(yè)界大規(guī)模應(yīng)用的。工業(yè)界要考慮成本、客戶在云端的算力、用戶從提問到得到反饋的時間等種種限制,集成少數(shù)幾個模型也許是可行的,但是集成幾十個高代價的模型是不切實際的。
當(dāng)然,業(yè)界也在持續(xù)關(guān)注學(xué)界的新方法,希望得到方法論上的啟示。
例如,深度強(qiáng)化學(xué)習(xí)的飛速發(fā)展也會讓我們關(guān)注:能否依靠數(shù)據(jù)驅(qū)動,端到端地訓(xùn)練具有工業(yè)應(yīng)用價值的任務(wù)型機(jī)器人?能否在有了足夠多數(shù)據(jù)之后,把對話信息看做狀態(tài),用深度強(qiáng)化學(xué)習(xí)的方法學(xué)習(xí)一個對話策略出來呢?
另外,閱讀理解領(lǐng)域的發(fā)展也讓我們看到了不是基于「知識庫」而是基于「文檔庫」進(jìn)行回答的可能性。例如,一個特定問題的答案可能在某個文檔里,如何構(gòu)建一個深度學(xué)習(xí)系統(tǒng),根據(jù)某一問題,定位到特定的文檔,再從文檔中把信息提煉出來用以回答這個問題?
元啟發(fā)式優(yōu)化算法是否能與深度學(xué)習(xí)模型結(jié)合?
我個人的研究背景是計算智能(Computational Intelligence),在2015年之前的近10年里,主要關(guān)注如何應(yīng)用計算智能中的元啟發(fā)式優(yōu)化算法求解大規(guī)模復(fù)雜優(yōu)化問題。這是一類基礎(chǔ)性的研究難題,長期受到關(guān)注,比如我大約10年前的一個關(guān)于演化優(yōu)化算法的工作,到現(xiàn)在已經(jīng)被引用500多次了,而且現(xiàn)在還在逐漸增加,偶爾還會收到同行提出算法代碼需求的郵件。隨著算力的持續(xù)提升,也許元啟發(fā)式算法在不久的將來會成為人工智能領(lǐng)域新的寵兒,我個人也非常關(guān)注它與深度學(xué)習(xí)結(jié)合的可能。
元啟發(fā)式算法的最大的優(yōu)點(diǎn)在于不要求目標(biāo)函數(shù)可導(dǎo),通用性強(qiáng)?,F(xiàn)在,為了求解方便,建模時往往會對實際應(yīng)用的真實目標(biāo)做一些簡化,使得該目標(biāo)函數(shù)可導(dǎo),以便可以用現(xiàn)成的梯度下降算法求解。然而這往往不是最優(yōu)方案:一方面建模的簡化一般會引入求解效果上限的損失;另一方面梯度下降算法不能保證獲得全局最優(yōu)解,往往只會收斂到一個極值。
元啟發(fā)式優(yōu)化算法是一個啟發(fā)式框架,一般是設(shè)計一些通用的、對問題的依賴沒有那么強(qiáng)的啟發(fā)式策略,使算法更容易收斂到全局最優(yōu)解。元啟發(fā)式優(yōu)化算法的缺點(diǎn)在于算法對計算能力的要求比較高。這主要是因為梯度下降算法有明確方向,只要朝著這一個方向下降就可以了,而元啟發(fā)式算法,如其中的「主流分支演化算法」,用的方法則是試錯法(trial-and-error),需要在空間里進(jìn)行大量的采樣、評估,再決策接下來去何處繼續(xù)采樣更有獲得全局最優(yōu)解的潛力。這個過程是非常消耗算力的。
現(xiàn)在,學(xué)界的關(guān)注重點(diǎn)是能否用局部優(yōu)化的思想減少采樣點(diǎn)的數(shù)量,以及能否提高采樣、評估的并行化執(zhí)行能力。
此外,元啟發(fā)式算法還有一個梯度下降無論如何也做不到的優(yōu)勢,就是有希望進(jìn)行結(jié)構(gòu)的優(yōu)化。如今神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)是全部由人來設(shè)計的,未必或者極有可能不是最優(yōu)的。利用元啟發(fā)式算法能夠讓機(jī)器在卷積層、循環(huán)層、全連接層等不同開放組合結(jié)構(gòu)構(gòu)成的空間中進(jìn)行搜索,組裝出一個針對特定問題效果最好的結(jié)構(gòu)。這個方向一般叫做Neuroevolution,正逐漸引起越來越多的學(xué)界和業(yè)界的關(guān)注。
應(yīng)用深度學(xué)習(xí)帶來了哪些不同?
在中控的排序模型里,深度學(xué)習(xí)模型能夠提供含有大量信息的強(qiáng)特征,讓體量更小、更簡單的模型就能獲得同等,甚至更優(yōu)的效果。
在前深度學(xué)習(xí)時代,傳統(tǒng)的搜索推薦經(jīng)常需要上千萬、上億的特征,這是因為,在沒有強(qiáng)大的特征的情況下,只能把各種組合人為構(gòu)造出來,然后用一個淺層的大模型去學(xué)習(xí)。然而深度學(xué)習(xí)模型學(xué)習(xí)出的特征本身已經(jīng)包含了巨大的信息量,因此繁瑣的人工特征工程變得沒那么重要了,這對技術(shù)的商業(yè)化非常有利。
這種信息量是通過深度學(xué)習(xí)在面對大規(guī)模原始數(shù)據(jù)的抽象、非線性學(xué)習(xí)能力而獲得的。例如,通過抓取大量金融行業(yè)的相關(guān)文本,,進(jìn)行統(tǒng)一的文本語義相似度學(xué)習(xí)建模和訓(xùn)練,就能得到一個強(qiáng)大的文本特征提取模型。這個模型可以用于證券領(lǐng)域、基金領(lǐng)域、銀行服務(wù)領(lǐng)域等等各個行業(yè)系統(tǒng)中。
此外,深度學(xué)習(xí)也可以通過「多任務(wù)學(xué)習(xí)」(multi-task learning)的方式整合不同類型的問答數(shù)據(jù),極大簡化了啟動階段客戶標(biāo)注數(shù)據(jù)的工作。
知識點(diǎn)的構(gòu)建階段需要客戶提供有標(biāo)注的訓(xùn)練數(shù)據(jù):每一個知識點(diǎn)(標(biāo)準(zhǔn)答案),都需要客戶「手寫」用戶標(biāo)準(zhǔn)提問范式和可能的變體。構(gòu)建這樣的標(biāo)準(zhǔn)問答集是極其耗費(fèi)時間的,說服客戶進(jìn)行標(biāo)注也是有一定難度的,然而如果客戶之前采用過人工客服,有人工客服日志,我們就可以大量削減需要人工完成的標(biāo)注數(shù)據(jù)集創(chuàng)建工作。
追一一直偏重實用、偏重落地,我們不僅僅鉆研最前沿的技術(shù),也致力于優(yōu)化落地效果,把自適應(yīng)、有閉環(huán)正反饋的系統(tǒng)交付給用戶。令人自豪的是,我們有一批能夠把問題想清楚的人,正在用系統(tǒng)工程的思維為客戶構(gòu)建具有極致體驗的對話機(jī)器人服務(wù)。
我們的對話機(jī)器人,不追求「一個 AI 模型端到端解決全部問題」,而是在一個完整系統(tǒng)的每個模塊里、各個維度里,都用 AI 技術(shù)幫助提升效率、優(yōu)化體驗。這種優(yōu)化可能幫助主系統(tǒng)提取了更強(qiáng)的特征,可能在冷啟動階段幫助客戶簡化了痛苦的數(shù)據(jù)標(biāo)注過程,可能在運(yùn)轉(zhuǎn)過程里幫助分析輿情、找到客戶產(chǎn)品設(shè)計的不合理之處。它們并不顯山露水,卻無處不在。
這也是追一希望向用戶傳達(dá)的理念:真正有「AI 意味」的系統(tǒng),是「草色遙看近卻無」的整體系統(tǒng),而 AI 的角色,是「潤物細(xì)無聲」地、持續(xù)地優(yōu)化其中的每一個細(xì)節(jié)。
申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!