優必選服務機器人自然語言處理技術

語言: CN / TW / HK

本文從自然語言處理技術的研究出發,對優必選的自然語言處理在機器人中的應用,如場景互動中的多輪對話問題,以及AI寫作創作等方面進行全面解析,並對優必選自然語言處理在機器人上的應用案例進行解析。內容分為以下5個部分:

1、服務機器人語音互動技術概述

2、自然語言處理技術概述與發展

3、優必選自然語言處理技術的研究與開發

4、優必選自然語言處理技術在服務機器人上的應用

5、優必選自然語言處理技術未來研究方向

服務機器人語音互動技術概述

如上圖所示,人的語音通過ASR(語音識別)把音訊變成文字,文字經過NLU(語義理解)、DM(對話管理)以及NLG(語言生成),生成的語言在通過TTS(語音合成),最後機器人完成對話。

自然語言處理技術概述與發展

首先來幾個段子,相信大家在網上經常看到類似的段子,比如“貨拉拉拉不拉拉布拉多”,這個是一個典型的中文分詞問題,生活中給大家帶來不少的麻煩。另外我相信大家都在拼音輸入法上翻過車,“答辯”打成“大便”,這是一個典型的語言模型問題,後面會介紹語言相關的模型。還有在前段時間比較火的滿分作文生成器,可以用它來生成類似的滿分作文,後邊也有文字生成的演算法介紹。

自然語言處理技術可以分為基礎技術和核心應用。其中,基礎技術包括自動分詞、詞性標註、命名實體識別以及句法分析。

自動分詞是自然語言處理領域最基礎的工作,以前主要基於規則和概率統計,現在已經發展到基於深度學習。比如“武漢市長 江大橋”還是“武漢市 長江大橋”等都是通過統計模型可以把詞分配好。

詞性標註就是在分完詞後,利用演算法把每個詞的詞性標註上。通常詞性標註的粒度可以很細,比如可以標註動詞、副動詞、趨向動詞、不及物動詞等。

命名體識別是指識別具有特定意義的實體,比如人名、地名、機構名、專有名詞等。

句法分析主要是指分析句中的主謂賓、定狀補的句法關係。它的應用非常廣泛,情感、資訊、問答、機器翻譯、自動文摘、閱讀理解以及文字分類等。

上圖是自然語言處理的四個階段,第一階段:在2000年之前,主要是基於規則和基於概率統計的方法。在50年代提出了圖靈測試的概念來判斷機器是否會思考,到目前為止,還沒有出現大家一致認可的對話系統通過圖靈測試。第二階段:在2013年,隨著神經網路的興起,極大的提升了NLP的各項能力。第三階段:基於seq2seq模型的NLP和注意力機制,在文字生成和機器翻譯方面獲得了比較大的進展。第四階段是2018年以來,大型預訓練模型的發展,也是我們現在所處的階段。

優必選自然語言處理技術的研究與開發

目前,優必選的研究方向分為以下幾種:

1、任務型對話,主要是把意圖詞槽以及上下文的一些資訊給抽取出來,在日常生活和服務機器人上用的比較多。

2、開放式閒聊,主要基於多輪的語料,做了一些開放式的閒聊。

3、文字生成,主要是一些創作類的文字生成,開放式閒聊也用到了一些文字生成的技術。

4、知識圖譜,為了提升互動體驗以及賦予對話更多的知識,我們也在做這方面的嘗試。

5、相似問法生成,主要是為了平臺的語料能夠很好的自動擴充套件,提升泛化能力。

下面介紹下任務型對話的技術概述,如上圖所示,任務型對話主要分為使用者自定義技能以及內建技能。自定義技能是提供一個平臺可以讓使用者錄入語料,一鍵訓練後就會生效。內建技能則提供了20餘個技能讓使用者可以勾選,比如天氣、鬧鐘。

接下來看下上圖右邊的流程圖,對話開始,然後採用使用者自定義的模型去預測,如果有結果,則進入會話管理模組檢查下詞槽的完整性,如果完整,會進入內容的搜尋,並儲存歷史會話資訊;如果不完整,會引導補充詞槽話術,然後儲存歷史會話資訊,返回引導話術。如果對話開始,使用者自定義模型預測是沒有結果的,它會採用內建技能的模型去預測,看否有內建技能的結果,如果有結果,跟重複上面是一樣的會話管理、完整性檢查、歷史會話儲存等流程,直到對話結束。

如果內建的技能也沒有,最後將走到閒聊模組。右邊舉了一個詳細的例子,“今天天氣怎麼樣”,演算法會識別到領域意圖、天氣以及時間,然後識別到當前語句的語義之後,會進入會話管理模組,看下是否有一些缺少的詞槽。比如天氣缺少城市,它會觸發“你想了解哪座城市的天氣”。然後,使用者問的下一輪,演算法會根據上下文資訊去預測該問題是哪個領域。例如“深圳的”上文可能是天氣、交通或其他的一些領域。在此處根據上下文資訊,可以預測到“深圳的”是屬於是天氣領域的。

優必選服務機器人NLP技術最新研究進展【影片回放】

具體實現可以看下上面的Demo,在上面的平臺中提供給使用者自己去配語料,然後一鍵觸發訓練並生效。平臺需要新增詞典,詞典用於詞槽抽取。平臺也需要新增意圖以及語料。同時平臺還需要配置上下文資訊,用於上下文預測演算法以及會話管理。此外平臺也可以配置必須填的詞槽等。

為什麼要做這樣的平臺?主要原因有三個:

第一是NLP場景特別多,機場、政府、商場的對話是完全不一樣的,通過這個平臺,公司的產品可以為每一臺服務機器人定製特定的語料,減輕了演算法工程師的工作量。

第二是迭代快,我們的平臺自上線以來已經為咖啡機、防疫機器人等提供問答服務。尤其是防疫機器人在緊急情況下不到兩週就完成了迭代。

第三是成本低,極大的降低了人力成本。

對話的核心是在多輪對話語境中的有效識別,那怎樣在多輪對話語境中能夠表現很好呢?我們需要一個好的主演算法,如上圖所示,先介紹下主演算法的優點,它之所以適用於各種複雜的多輪對話語境中,是因為該演算法基於預訓練的BERT模型,泛化能力好。同時,由於在神經網路結構中有用到歷史會話的上下文資訊,所以該演算法可以提升上下文的理解能力。此外,該演算法在一個神經網路中能夠同時識別意圖、詞槽。最後,通過資料增強等策略提升模型對低資源應用場景的適用性。

接著看上圖左邊,介紹深度演算法的流程,u(t)表示使用者當前的提問,s(t-1)表示機器人上一輪的回覆,然後通過BERT提取特徵,再進入到雙向的GRU裡,因為當前的語句只在後半部分u這邊,該部分通過BERT的輸出可以再輸入到一個雙向LSTM中,接著再輸入到CRF裡進行詞槽的抽取。同時該GRU的左右雙向的輸出結果可以拼接在一起,通過線性的轉換,然後通過sigmoid函式,進行動作的預測。該GRU用來做詞槽抽取的特徵也會輸入到另外一個線性轉換中,然後每一個分別輸出一個key和value,再一一對應,輸入到一個attention layer,進入線性的轉換,最後進行意圖的預測。

意圖的數量是隨著使用者配置的意圖數量而定,比如一個咖啡機可能配了10個意圖。同時,該演算法也是一個多分類的任務,因為這些意圖之間存在一定的附屬關係。舉個例子,比如“今天天氣怎麼樣”,這可能是“查天氣”主意圖,但說“明天呢”,可能是“天氣查時間”子意圖。因此融合上下文的資訊,可以對意圖進行比較好的預判。

下面重點講下上下文的網路結構,上下文的輸入u表示使用者提問,s表示的機器人回覆,可以通過BERT提取特徵,進入雙向的 GRU裡,然後把該時刻的資訊作為時間序列的一部分。這些資訊根據時間序列輸入到一個 GRU網路結構中。最後的輸出將作為雙向初始特徵,用於輸入意圖、詞槽的雙向GRU網路中。

接下來介紹下平臺訓練的流程:匯入詞典、編輯意圖、回覆邏輯,然後再匯入問法擴充模板,並匯入一些實際的語料。在訓練時,先載入語料,這時我們會通過聚類的分析去篩選驗證集,因為我們想要驗證集的分佈與訓練集是一致的。這裡很重要,因為在自然語言處理中,每一個意圖,比如查天氣與查鬧鐘,它們的語料數量可能是不在一個數量級的。有可能查天氣有1萬條語料,而查鬧鐘只有區區幾百條語料,這樣造成了語料的不均衡。如果不用聚類演算法把驗證集的分佈與訓練集做的相似,取樣時可能會漏掉一些語料少的意圖。做完驗證集的篩選後,我們會生成一批多輪對話語料去進行訓練。為什麼每次要生成語料,因為輸入會涉及到歷史的會話資訊,所以在多輪的條件下,每次是不一樣的。因此,每次生成一批語料,然後看模型是否收斂,收斂則釋出模型,不收斂就重複該流程,直到達到限制條件。模型訓練完釋出後,進入使用階段,在這個階段使用者輸入對話,對它進行意圖的識別,詞槽的抽取,再經過一些會話管理的模組,最後結束。

深度學習的優點是對上下文的理解會非常精準,對平臺的精準度提升非常有效,但是它的網路比較複雜,所以需要比較好的裝置,那有沒有比較節省成本的一些演算法呢?我們還有一個快速演算法,快速演算法的特點是有以下三個:

1、只對語料模板進行訓練,可以千百倍的減少訓練時間;

2、模型體積較小,需要的硬體成本也較低;

3、在特定的場景下準確率也比較高。

那什麼是快速演算法?比如一句話“我想從北京去成都”,它拆成問法,就是“我想從{city1}去{city2}”。如果訓練模型只對模板進行訓練會很快,但也存在一個問題。比方說,句子中“我想從北京去成都”去預測時,需要把它還原成模板。然而,像“成都”這種詞,可能既是歌名又是城市名,這時它會產生相當多的排列組合。因此,需要準確的挑出來,“我想從{city1}去{city2}”,“我想從{city}去{song}”則是錯誤的模板。

在訓練時有大量的模板,有正例也有負例,因此有了第一個損失函式,令其中的正例模板為1,其他都是0。同時,還需要判斷該問題的意圖,即要知道這句話的意圖是交通,所以,需要設計一個意圖預測的損失函式。因此在訓練時,讓兩個損失函式都收斂就得到一個快速模型。為什麼要用RNN和CNN的演算法呢?答案是因為速度比較快。以上就是訓練的過程。

在預測時,需要先對句子進行詞槽的提取。由於最初是不知道意圖的,所以只能把它在相應的詞典裡的資訊都提取出來,通過排列組合的方式,會得到一組模板的候選集(“我想從{city1}去{city2}”,“我想從{city}去{song}”),把它們輸入到訓練好的模型中,就可以預測出來。

下面介紹下優必選的閒聊技術,閒聊分為匹配式閒聊與生成式閒聊。匹配式閒聊是有一個Q&A庫,Q&A庫如果夠大,可以達到一個比較好的閒聊效果。生成式閒聊不需要匹配,根據問題生成答案。他們各有優缺點,匹配式閒聊是可控的,可以通過語料的編撰,增加、刪除等方式,包括一些敏感詞可以在建立語料庫把它給刪除。生成式閒聊的對話時的變化會大一些,但是有一定的不可控性,有時語料不乾淨,會生成一些不太健康的內容,同時還會存在一定的語義、語法的問題。

優必選的閒聊如上圖所示,首先進入匹配式閒聊,看庫裡有沒有結果,如果有,儲存歷史多種資訊並返回。如果沒有,通過知識圖譜問答,看知識圖譜裡是否能收到相應的知識,有結果,儲存歷史資訊返回。如果知識圖譜還沒有,我們將進入生成式閒聊,然後儲存歷史對話資訊、反饋結果。

那麼歷史多輪資訊有什麼用呢?歷史多輪資訊會用於生成式閒聊,不管是匹配式閒聊的答案,還是知識圖譜答案,它的歷史資訊都將成為生成式閒聊的輸入。

閒聊是NLP一個永恆的難題,主要是知識如汪洋之大海,永遠缺乏高質量的對話;那演算法求的只是一個概率,缺乏現實的邏輯推理;最後機器是不冷暖的,所以單憑文字不一定能夠捕獲到豐富的情感。這需要藉助視覺,包括語音識別,各種聲紋資訊等。

接著介紹下生成式閒聊,目前生成式閒聊主要基於GPT的模型,它本質上是語言模型,GPT是基於Transformer 的Decoder 部分。那語言模型是什麼?語言模型是根據一個句子的已知序列資訊去預測該句子的下一個字。那具體怎麼操作?我們把使用者的多輪閒聊作為語言模型的輸入,然後訓練模型,這是訓練部分。對於預測,相對於訓練多了一個環節,先根據歷史的多輪閒聊序列通過gpt生成一個字,生成該字時會生成多個候選的字。可以通過一些top-k、beam search等演算法,以及一些引數的調節,來挑選候選字中最合適的那個。接著,該字加入序列,重複使用此方法生成下一個字,直到生成結束符。

通常不會只生成一個答案,會生成多個候選答案,那麼生成了多個候選答案,該如何挑選一個更加合適的答案呢?可以訓練一個通過答案預測問題的模型,也就是最大互資訊的評分。上圖左邊是回答生成的訓練過程,右邊的思路與左邊的思路是反向的,是由答案生成問題。實際運用時,採用正確的時序生成多個候選答案。再把生成的候選集輸入到訓練好的最大互資訊模型裡,看預測到原始問題時,哪個候選答案的損失值最低,這種方法可作為候選答案的挑選。

我們的閒聊在內部做了一個評測,從它的通順性、連貫性、資訊性、趣味性以及憑感覺等方面打分。關於效果方面,通順性和連貫性還不錯,趣味性跟憑感覺方面,大家覺得還有優化的空間。除了上面提到的演算法,還有其他一些比較優秀的演算法,比如plato-2、blender等,但這兩個演算法推理比較慢,所以我們沒有采用上面的演算法。

接下來是文字生成技術,比如古詩生成,輸入“我是隻小豬歡樂多”。生成的結果可以看下左上角的圖,生成的古詩是押韻的,那怎麼做的呢?同樣還是採用GPT模型。首先要定義它的格式,比如五言絕句、七言絕句、詞牌等,然後用分隔符分開,接下來把詩詞給到模型,並且要帶標點符號,然後通過語言模型訓練,他具備這樣的生成能力。

生成完後,就涉及到一些押韻的處理。具體首先需要進行預處理,並定義詩詞的型別。然後,與詩詞的內容並拼接起來。接著文字向量化輸入到GPT裡。接著也是一個字、一個字生成答案。當生成到有句尾標點符號時,要看最後一兩個詞與前一句是否押韻。如果不押韻,要重新生成一句話,以此來保證可以都押韻。但不一定保證所有情況都押運,可能預測很久都沒有押韻,這時候,我們會設一個超時,超時後直接生成一個不押韻的句子。

古詩詞生成存在一些問題,首先是押韻問題,語言模型學習到的韻律資訊比較有限;其次是意境問題,語言模型只是學習到了古詩詞遣詞造句的概率模型,即文章套路,對比較有套路的文章,可以生成的比較好。於是乎,但是詞(宋詞)的效果比不上詩,因為詞的套路很多,還有各類詞牌,每句話字數也不一致,所以對詞的效果會差很多。

在知識圖譜方面,它的主要組成分三塊:節點、屬性、關係。在該圖中,節點表示每個人,比如周杰倫;屬性是他的出生、成就、身高等;連線節點之間的叫關係,比如周杰倫通過妻子的關係可以連結到昆凌。以關係相連各個節點,會組成一個龐大的知識網路,關係是具有方向性:單向或雙向的,單向的比如昆凌是周杰倫的妻子;至於雙向,比如同學關係,甲是乙的同學,乙是甲的同學。

知識圖譜技術目前只是用來做知識問答,用來豐富閒聊的互動體驗。它的一個問答涉及到預處理、實體識別、實體連結、關係抽取、手寫識別,主謂賓、施受關係檢測,答案的生成以及排序,敏感詞過濾等。

知識圖譜存在很大的挑戰,首先在問答挑戰方面知識是無法窮盡的,知識的收集、梳理以及抽取是非常大的工作量,其次問法也是無窮無盡的,所以非常難理解到各種各樣的問法。

知識圖譜的應用主要是探索知識圖譜與開放式對話等方面的融合技術,我們的目的是為了優化互動體驗,提高對話系統的多樣性、邏輯性、可解釋性等。

優必選自然語言處理技術在服務機器人上的應用

NLP在服務機器人上有哪些應用呢?首先是機器人問答,還有無人輪值客服、機場與車站、無人販售等。具體應用案例包括無人咖啡館、防疫機器人問答和uCode等。

無人咖啡館

上面是我們咖啡機器人,它可以實現結合上下文語境,精準理解使用者點單,避免人員直接接觸。

防疫機器人問答

疫情期間,通過服務機器人的智慧防疫問答,減少人員的聚集,為疫情的紓解提供有力保障。

uCode

uCode是優必選面向程式設計教育領域開發的一款軟硬體結合的程式設計客戶端,學生可以不使用鍵盤去敲程式碼,可以通過拖拽積木的方式程式設計。

具體可以看到上圖,涉及到語音識別以及文字匹配,使用者可以輸入“聽到走幾步”時,他做什麼樣的動作,可以通過語音識別把它變成文字,再進行動作匹配。涉及到語音識別時,由於環境中的噪音,可能會出現多一個字、少一個字。同時,程式設計為“走幾步”時,使用者在實際使用的時候也有可能說成“走幾步吧”或“請走幾步”類似的。有了NLP的文字模糊匹配功能,就解決了。其他的諸如於古詩詞生成等,都可以加入到uCode程式設計中,提升uCode的教學能力。

優必選NLP未來的研究方向

接下來的方向一個是提升互動體驗,要緊跟前沿走,探索互動體驗;同時,還需要提升平臺的能力,目前平臺的能力是比較基礎的,未來可能會增加語料自動擴充套件的功能;此外,系統還要增長知識,在智慧對話中,知識是比較欠缺的。因此,我們正在做知識圖譜這塊,並在探索它跟對話的融合技術,為機器人的對話增智。

「其他文章」