分享嘉賓 | 劉昇平(雲知聲 AI Labs 資深技術專家)
來源 | AI 科技大本營線上公開課
人機對話系統,或者會話互動,有望成為物聯網時代的主要互動方式。而語言的理解與表達和知識是密切聯絡的,知識圖譜作為一種大規模知識的表示形式,在人機對話系統中各模組都有重要的應用。而知性對話,則是基於知識圖譜的人機會話互動服務。
AI 科技大本營邀請到了雲知聲 AI Labs 資深專家劉昇平針對「基於知識圖譜的人機對話系統方法與實踐」做系統的講解和梳理。
本次公開課介紹了知性會話的架構和關鍵技術,並結合工業級的人機對話系統實踐經驗,闡述了知識圖譜在人機對話系統的核心模組上面的應用等等。
劉昇平:雲知聲 AI Labs 資深技術專家/高階研發總監。前 IBM 研究院資深研究員,中文資訊學會語言與知識計算專委會委員。2005 年獲得北京大學數學學院博士,國內語義網研究的開創者之一,是 2010 年和 2011 年國際語義網大會的程式委員會委員。曾在語義網,機器學習、資訊檢索,醫學資訊學等領域發表過 20 多篇論文。在 IBM 工作期間,兩次獲得 IBM 研究成就獎。2012 年底,劉博士加入雲知聲 AI Labs,領導 NLP 團隊,全面負責自然語言理解和生成、人機對話系統、聊天機器人、知識圖譜、智慧醫療等方面的研發及管理工作。
在本次公開課上,他全面而具體地講述了知識圖譜在人機對話系統中的發展與應用,主要分為以下四部分:
語言知識、對話系統綜述
知性會話的基本概念及案例分析
知性會話的關鍵技術:知識圖譜的構建,實體發現與連結
知性會話的關鍵技術:話語理解及自然應答生成
▌一、語言、知識與人機對話系統綜述
1. 語言和知識
語言和知識是密切相關的。這張冰山圖很形象地解釋了語言和知識的關係,我們看到的語言只是冰山上的一小角,就是我們說的話。但是你如果想理解這句話,跟這句話相關的背景知識就像冰山下面這一大塊。
所以,這也是自然語言跟語音、影象很不一樣的地方,我們聽語音或看一個圖片,它的所有資訊都在語音訊號或者影象畫素裡,但是語言的話就完全不是這樣,這也是自然語言理解遠遠比語音識別或者影象識別更難的一個地方。
這次的報告內容綜合了我最近三年在CCKS會議上做的三個報告。
2. 人機對話系統
人機對話系統最早在工業界引起比較大的轟動是 Apple Siri,它當時還是 iPhone 上的一個 APP,2010 年被蘋果收購了。Siri 的創新在於,我們傳統的手機 GUI 介面上加了一個語音 Voice-UI。
真正引發人機對話系統革命性創新的是於 2014 年推出的 Amazon Echo,它是一個完全基於語音互動的硬體,其語音技術比 Siri 前進了一大截,因為它支援遠講。
2017 年亞馬遜又推出了一個帶螢幕的音響 Amazon Echo Show,大家覺得這是不是又回到 Siri,還是基於 GUI 呢?這裡要注意區別, Amazon Echo 是 VUI+GUI,也就是說它是以 VUI 優先的,因為語音的優勢是輸入很便捷,你說幾個字就能代表一段指令,可以代替操作很多介面。但缺點是輸出很低效,如果在螢幕上顯示很多內容,但是你要用語音說出來,可能得花好幾分鐘。所以 VUI+GUI 的結合是把兩者優勢做了整合,VUI 用來做輸入,GUI 用來做輸出。
更高階的形態是現在很多電影都能看到的像Eva、《鋼鐵俠》或者《西部世界》裡面這種人形的機器人,完全可以跟人自由對話,它的互動是 VUI++,真正模擬人的多模態的互動形態,這個時間點也許在 2045 年會出現。
為什麼人機對話系統目前在工業界這麼熱門?它最重要的一個意義是有望取代目前在手機上的 APP,成為 IoT 時代的一個最重要的人機互動形式,這是它的最主要意義所在。
3. 人機對話系統的互動形式和應用場景
就像人和人說話有多種目的和形式一樣,人機對話系統也包含很多種互動形式:
1、聊天。典型代表是小冰,它包括問候和寒暄,其特點是沒有明確目的,而且不一定回答使用者的問題。聊天在現有的人機對話系統中主要是起到情感陪伴的作用。
2、問答。它要對使用者的問答給出精準的答案。這些問題可以是事實性的問題,如“姚明有多高”,也可能是其他定義類,描述類或者比較類的問題。問答系統可以根據問答的資料來源分為基於常見問題-答案列表的FAQ問答,基於問答社群資料的CQA問答,基於知識庫的KBQA問答。
3、操控,只是解析出它的語義,來供第三方執行,最典型的操控是開啟空調、開啟臺燈,或者播放某一首歌。
4、任務式對話。它是一個目的性很強的對話,目標是收集資訊,以完成某個填表單式的任務,最常見的像訂外賣、訂酒店、訂機票,這種方式通過對話來做。
5、主動對話。讓機器主動發起話題,不同的是,前面的互動都是讓人來主動發起這個互動。
目前人機對話系統的應用場景有很多,像音響、電視、空調等等,其顯著特點是它不是人可以直接觸控到的,可以將語音互動看成遙控器的一種替代品,有遙控器的地方就可以用語音來互動。
另外一個應用場景是在車載方面,因為在開車時,你的眼睛和手腳都被佔用著,所以這時通過語音來接聽電話、導航甚至收發微信,是非常方便的,也比較安全。車載是剛需場景,所以目前出貨量最多是在這塊。像我們是從 2014 年開始做車載語音互動方案,到現在有 1500 多萬的出貨量。
另外一個應用領域是兒童教育機器人,右下角這些各種形狀的兒童機器人,實際上可以看成兒童版的音響,它的內容是面向兒童的,但是互動形式也是人機對話的方式。
4. 人機對話技術架構
人機對話系統從學術界來講,它的研究歷史非常悠久,可能 AI 提出以後,在七八十年代就開始研究。它的技術分為五大部分:
1、語音識別:主要解決複雜真實場景噪聲、使用者口音多樣的情況下,把人說的話轉成文字,即做到“聽得清”。
2、語義理解:主要是把使用者說的話轉成機器能理解執行的指令或查詢,即做到“聽得懂”。
3、對話管理:維護對話狀態和目標,決定系統應該怎麼說、怎麼問下一句話,也就是生成一個應答的意圖。
4、自然語言生成:就是根據系統應答的意圖,用自然語言把這個應答意圖表達出來。
5、語音合成: 用機器合成的語音把這句話播報出來。
這樣形成一個完整人機對話的閉環。
5. 語音識別場景演進
因為人機對話系統是以語音作為入口,所以需要講講語音技術這塊的進展。強調一點的是,如果想真正做好人機對話系統,除了對自然語言處理技術瞭解之外,對語音技術也必須有所瞭解。
最早像 Siri 這樣的場景是近講模式,它最主要解決的問題是口音問題,目前這方面的識別準確率非常高,已經能做到 97% 左右,大家平時用的手機語音輸入法就是這種模式,一般建議離麥克風的距離是30cm左右。
Amazon Echo 則是遠講模式,你可以離麥克風 3 米甚至 5 米這麼遠。它要解決的問題很多,因為你離它遠了以後更容易受周邊噪音的影響,還有一個更致命的影響是聲音反射引起的混響問題,特別是在玻璃房裡,聲音不斷在反射,麥克風收到的聲音就是很多聲音混雜在一起。還有一個很不一樣的地方,就是我們用微信語音的時候可以按下說,或者按著一直說,但當你面對一個音響時,因為你離它有 3-5 米遠,不可能按著說話的,這時就有新的技術,叫“語音喚醒”,就像我們跟人說話時叫人的名字一樣,像“Hi,Google”,先喚醒機器,再同它對話。
目前語音識別最難的場景是人人對話,在人和人對話的時候,先對它做錄音,而且要把它轉成文字,這個最常見的場景像開會,自動把不同的人說話轉錄下來,甚至自動形成會議紀要。還有像司法的庭審,只要是和人說話的場景下都可以用到。這裡面最難的問題是雞尾酒會問題,很多人在一起,環境很嘈雜,大家都在說話,人可以聽到只關注的人的說話,即使很嘈雜,但兩個人一樣可以聊天對話,但這對機器來說很難。
6. 人機對話系統中的機器角色演進
在人機對話裡面機器的角色有個演進的過程:最早人機對話很簡單,可以看成是個遙控器的替代品,使用者通過固定句式或者單句指令來控制這個系統。
Siri、Amazon Echo 是一種助手的形態,也就是說,你可以通過自然語言互動,且對話是多輪的,甚至可以讓機器有些情感。
但是下一個階段是它會變成專家的角色,特別是面向行業或者特定領域時,當我們跟音響對話時,希望這個音響同時也是一個音樂專家,它可以跟你聊音樂的問題,可以跟你聊古典音樂,甚至教你一些音樂知識。我們跟兒童教育機器人對話時,希望這個機器人是一個兒童教育專家,我們跟空調對話時希望後面是個空調專家。這時它的特點是需要有這個領域的知識,而且能夠幫你做推薦、做決策。
▌二、知性會話基本概念及示例分析
我們做對話必須理解這幾個概念——語義、語境、語用。特別是語境,它就是在對話時才有含義,語境就是指人和人發生對話時的一個具體環境,這個環境又包括言語語境,就是我們所說的上下文,還有很多非言語語境,如說話的時間、地點、天氣都是非言語語境,還有說話人的資訊等等,我們今天強調的知識也是一種重要的非言語語境。
假如使用者說「太冷了」這三個字,語義是溫度有點低,但如果考慮語用,這句話在特定語境下面傳遞的會話意義、真實含義: 如果在車裡面開著空調,理解這句話的意思是把空調溫度調高一點;如果是冬天沒有開空調,這句話的意思可能是把車的暖氣開啟,或者把車的窗戶關上;現在馬上到秋天了,如果一個女孩子對你說「太冷了」,她的含義可能是想讓你給她一個擁抱之類的。所以語境和語用是非常重要的概念,如果做人機對話系統,都會接觸到這兩個概念。
1. 人機(裝置)對話系統下的語境
剛才是說人和人對話時,語境很關鍵,現在我們做人機對話系統,人和裝置對話的時候有哪些語境呢?
1、物理語境。也就是你說話當時現場的資訊,包括(1)時間、地點、場所,這個場所是指在車裡或在家裡等等。(2)天氣。(3)情緒和情感。(4)裝置上面顯示的內容。(5)裝置能感知到的資訊,比如我們和空調對話,空調能夠感知到室內外的溫度、溼度。這個語境的生命週期是請求級的。
2、言語語境。(1)上下文,裝置上和裝置上面反饋的資訊也是一種上下文,這個生命週期可以看成是會話級的。
3、知識語境。包括:
(1)人類的常識和領域知識。舉個簡單的例子,以前我們一句話叫「中國乒乓球隊誰也贏不了」,還有「中國足球隊也是誰也贏不了」,這兩句話看起來字面是一樣的,但人能夠理解這兩句話的差別,因為我們有常識是:中國足球隊很弱,中國乒乓球隊很強。所以知識對這句話的理解至關重要。
(2)使用者畫像,包括使用者的一些基本資訊,使用者的性別、年齡、文化水平、愛好等等。(3)Agent 畫像,就是這個機器人定義的資訊,像小冰把它的 Agent 畫像定義為一個 18 歲的鄰家小妹。(4)裝置資訊庫,如果把音響作為中控的話,中控連線的裝置資訊、裝置狀態等都是語境。如果在家裡對中控說「我回家了」這句話到底是什麼含義?中控可能會根據你的裝置狀態、根據當前的環境情況,給你決定是開燈還是關燈,是給你開窗戶還是拉窗簾等等。
2. 不要神話知識圖譜
知識圖譜的歷史和概念大家已經比較理解了,我這裡主要強調幾個基本概念:最重要的知識圖譜概念就是「Things,Not Strings」,知識圖譜裡面的東西都是一個個實體而不是字串。
另外,我們也不要神化知識圖譜,它其實只是一種知識的組織形式而已。因為不管做什麼應用,在各種場景下都有知識,以前可能用其他方式來表示這個知識。在概念層,我們以前也接觸過類似的東西,就像我們做關於資料庫建模時用 ER 模型,它也是一種概念模型。我們寫程式,做物件導向設計時會畫些類圖,這些都是概念模型,這些模型都可以很方便的轉成知識圖譜來表示。我認為知識圖譜首先是知識的一種組織形式。在資料層,知識圖譜是一種圖模型,它是用節點、邊來表達實體、值、關係和屬性等。
3. 什麼是知性會話?
什麼叫知性會話?我這裡舉個例子,使用者可能跟音響聊天:「你喜歡謝霆鋒?」「喜歡,他很酷」「你知道他女朋友是誰嗎?」「王菲」「來一首她的《傳奇》」這是一種操控,機器就會給你播放王菲的傳奇,播放之後系統還可以接著問說「你還想聽李鍵的原唱嗎?」這是一種主動對話,使用者說「好的」,系統可以播放李鍵的《傳奇》,使用者還可以問「他的音樂風格是什麼樣的?」系統說「李健的風格,有民謠的簡潔,但比民謠華麗得多。」
你看這個例子的話,它涉及很多跟音樂相關的知識,還包括一些歌星的人物相關的知識。互動形式有聊天、問答、操控、主動對話,是通過知識把它們關聯在一起,你會感覺整個對話是個很流暢的對話。
總結下來,知性會話的意思是:它以知識圖譜為中心,通過實體發現與連結技術把各種各樣可以用來作為對話的資料來源融合在一起,實現跨領域、跨互動形式的多輪對話。
知性會話的主要特點有:一是跨領域,跨互動形式共享上下文,你可以看它的聊天和問答可以銜接在以前;二是它體現了領域專家的機器人定位,它對這些領域的知識非常瞭解,可以在聊天或者問答中體現出它掌握的領域知識。它有這方面的知識後,也可以主動發起一些對話。
知性會話的核心技術有:
離線處理,首先要有知識圖譜,所以有一個知識圖譜構建的問題。另外,我們要把各種跟對話相關的資料通過實體發現與連結技術跟知識圖譜關聯起來。
線上處理。基於知識做話語理解,怎麼在聊天裡把知識融合進去,還有基於知識圖譜的問答,基於知識圖譜的主動對話等。
▌三、知性會話關鍵技術
(一)知識圖譜構建
1. 知識圖譜的構建方法
這裡我引用復旦肖老師總結的知識圖譜構建方法,第一步是做模式設計,我們要定義有哪些類或概念、哪些屬性或關係。
第二步確定我們的知識從哪來,所謂的資料來源,這裡可以通過對一些結構化的資料、非結構化的資料做轉換、對非結構化的資料,即文字,從裡面去資訊抽取。
第三步,知識圖譜裡最重要的是詞彙的挖掘,各種同義詞、縮略詞、短語等等。
第四步,有詞彙不夠,我們要把同義詞聚集為一個概念,也就是所謂的實體發現,包括實體實現、實體歸類、實體連結等等。
第五步,除了實體之外,知識圖譜裡還有邊,也就是關係,我們要做關係的抽取。
第六步,因為我們的知識圖譜可能來源於不同的資料來源,所以我們要做知識的融合,主要是實體對齊、屬性融合、值的規範化。
最後,對知識圖譜的質量做檢查控制,包括知識的補全,有錯的話要糾錯,還有知識更新,最後形成一個領域的知識圖譜。
2. 知識圖譜的評估方法
如果你不知道怎麼評價知識圖譜的話,就根本不知道你的知識圖譜建得好還是壞、有用還是沒用。評估的方法基本可以分為四大類別:最重要的類別是第二類基於應用,把知識圖譜在應用裡看效果怎樣,通過應用效果來間接評估知識本體。我們不要先找幾十個人花一兩年建知識圖譜然後再去找應用,而是知識圖譜必須是應用驅動的,根據應用效果來評價知識圖譜,這是推薦的一個方法。
還有基於黃金標準評估,也就是說如果我們有些好的知識圖譜,或者我們可以建一個小的知識圖譜,根據這個標準知識圖譜去評估我們建的知識圖譜的情況。我們可以看看計算概念和關係的覆蓋率,即有多少出現在標準知識圖譜中的概念和關係被包含了,這可以評價我們的建的知識圖譜是否完整。
另外,簡單的評估方式基於指標。可以定一些統計指標,比如這個知識圖譜裡有多少概念、多少關係、關係屬性,然後我們還可以對它進行抽查,看它的準確率、一致性等指標。
3. 敏捷構建
我們現在做應用很多情況都是做敏捷開發,也就是說可能半個月或者一個月就會發一次版本,這時候我們知識圖譜也要跟著應用快速迭代,這時候是需要對知識圖譜敏捷構建的過程。這裡強調我們要對知識圖譜做自動化的測試,測試完之後要判斷它是否能夠發版,發版之後要繼續分析它目前的問題。可以把知識圖譜看成一個軟體,它是不是有哪些 bug 或者需要哪些新功能,根據這些制定下一個版本的發版計劃。核心想法就是把知識圖譜也看成是一個軟體,也要有版本管理,也要有敏捷的開發。
(二)實體發現與連結
需要解決的問題:如果我們這時候已經有知識圖譜了,現在還依賴於實體發現與連結技術。這個技術解決剛才那個問題,「Thinks,not Strings」,它最重要的問題是把字串和知識圖譜的實體關聯起來。它要解決兩個問題,一個是我們同一個意義可能有表達不同的形式,像「科比」、「黑曼巴」、「科神」很多是指的科比這個人。還有一個是自然語言或者字串本身有歧義性,就像「蘋果」可能是指蘋果電腦、蘋果手機,也可能是一個水果。
解決方法:所以它的做法是分兩步,實體發現和實體連結,實體發現是發現文字中的 mention,就是字串,像「這個蘋果很貴」的「蘋果」是 mention。實體連結是把這個 Mention 和知識圖譜裡的實體關聯起來,知識圖譜裡的實體關於「蘋果」可能有多個實體,有蘋果公司,還有蘋果這個品牌,還可能是蘋果手機、蘋果電腦,還有水果叫蘋果等等,這裡的「蘋果」到底指哪個呢?可能要靠上下文的判斷。
1. 基於實體的多源資料融合
我這裡舉個很簡單的知識圖譜,謝霆鋒的女友是王菲,王菲唱了《傳奇》這首歌,《傳奇》這首歌的原唱是李健。
我們在對話這塊的資料來源有幾個:一個是聊天庫,像「你喜歡歌手謝霆鋒嗎」「喜歡,他很酷。」,還有 FAQ 庫,我們可能從百度知道或者很多地方可以找到社群問答的資料,就像這裡說「誰能說說李健的音樂風格?」「李健的風格,有民謠的簡潔,但比民謠華麗得多。」
我們也會從網上找到很多文件,包括百科的文件或者網頁性的文件,我們對這些文件、聊天庫、FAQ 庫、文件庫,我們都要去做實體連結,把這裡面出現的歌手和我們知識圖譜的歌手關聯起來。
2. 如何進行實體發現與連結?
第一步預處理,首先建立一個 mention 到 entity(實體)的關係,這也是目前這個演算法的侷限性,我們事先要知道一個 mention 可能對應到哪些實體。然後抽取實體相關特徵:
一是實體的先驗概率。就像蘋果可能是水果的先驗概率為 40%,是蘋果手機的先驗概率為 60%,如果我們說葡萄呢?可能葡萄是水果的先驗概率有 90%,10% 是其他東西。二是實體上下文的詞分佈,我們看這些實體周邊到底是什麼詞,或者它篇章的主題詞,就像蘋果手機出現在文章裡都是科技類的主題詞。三是實體之間的語義關聯度,因為知識圖譜是一個圖的結構,所以每個實體環繞它周邊都有些其他的實體,這些實體都是相關的特徵。
第二步,這時實體連結就變成一個排序問題,找到 mention 之後,我們可以根據前面 mention 關係表找到它的候選實體,現在保持只需要對候選實體排序,返回一個最可能的實體。
第三步,對候選實體進行排序,可以用最基本的方法。這個有兩大類:一個是實體本身的資訊,還有一個是可以利用實體和實體之間的協同關係做排序。如果是蘋果旁邊的實體都是偏電腦類的,那這個蘋果可能就指蘋果電腦。
(三)融合知識的話語理解
做完實體連結處理以後可以做真正的對話系統這一塊,對話系統裡最基本的是對使用者話語的理解,我們怎麼去理解使用者說的一句話。
第一步要做實體的發現與連結,像剛才那個例子,「你喜歡謝霆鋒嗎」,我們要把謝霆鋒跟知識圖譜的實體關聯起來。
第二步做指代發現,比如「你知道他女朋友是誰」,那這個「他」到底是指誰,我們首先要發現他是一個指代詞,然後再根據上下文去判斷「他」在這個例子裡面是謝霆鋒這個實體。
另外,我們做語義理解還有一種情況是結合知識做消歧義。比如使用者說「周巧文的生日」,因為《生日》是一首歌的名字,周巧文是這個歌的歌手,這時候我們理解它是個音樂,因為本來就在音響下面,這時我們可以直接播放周巧文的《生日》這首歌。但是如果系統又問一下「劉德華的生日」,這時候雖然我們的命名實體識別很有可能把「生日」也可能打成歌名的標籤,劉德華打成歌手的標籤,歌手的歌名,很容易以為是播放音樂,但是我們通過知識的驗證知道劉德華並沒有唱過這首歌,這時候要轉成問答,這不是一個操控性的指令。直接返回他的生日,說「劉德華的生日是 1961 年 9 月 27 日」。
這幾個例子是我們通過知識幫助去理解使用者的指令。我下面再講一下怎麼把知識和聊天結合起來。
(四)融合知識的聊天
1. 上下文
現在學術界都用深度學習模型,所以我會簡單講一下深度學習的方法,把它的基本思想講一下。我們現在一般在學界把聊天變成一個 Sequence-to-Sequence 的模型,就是有一個 encoder對輸入進行編碼為向量, 通過 decoder 把應答生成出來。這時核心問題變成怎麼把上下文加進去,最基本的方法是把上下文的文字跟當前文字的向量合在一起作為 encoder 的輸入;另外我們可以把上下文作為向量,在 decoder 階段輸入;或者用主題模型對這個 session 去建模,把這個 session 主題模型也作為 decoder 的輸入,這樣就可以實現一併上下文的效果。
2. 一致性
聊天還有一個很重要的問題是一致性。我們剛才說語境裡面有一個agent畫像,跟我聊天的物件雖然是機器人,但是它有統一的人格,它的性別、年齡、籍貫、愛好應該是一致的,這是目前聊天機器人裡面最難的一點。你對機器人問它「多大了?」它可能說「18 歲」,如果你再去問一下「你今年高壽」,它很有可能回答「我今年 88 歲」,或者問你「芳齡幾許」,它很有可能回答「小女子今年芳齡二八等等」。
為什麼會出現這種情況?因為目前聊天的機器人都是靠從各個來源去收集各種語料堆在一起的,對這種語料並沒有做歸一化處理,因為有的語料說「我今年 88 歲」,有的語料裡面可能說「我今年 18 歲」等等,這時候換個方式問它可能會出現問答不一致的地方。更復雜的例子,你問它「你出生地在哪裡?」它說「我在北京」,然後問它「你是中國人嗎?」它可能就回答不了,雖然人類常識知道北京屬於中國等等。
在深度學習裡如果想把這些所謂的機器人的資訊,進行建模或向量化處理匯入到 decoder 模型裡去,這時候它會優先從身份資訊的詞向量去生成應答,這樣也能達到一定一致性的效果。
3. 融合知識
另外,做問答的時候,像我們這個例子問「姚明有多高」,我們生成比較自然的問答,說「他是兩米二六,他是唯一一個可以從太空看到的人類。」當然,這是開玩笑的。這種聊天就融合了知識,它知道姚明的身高。這時候通過深度學習模型做 decode 時,除了生成常規的應答之外,有部分的應答還要從知識庫裡去檢索,然後再把這個應答跟文字的應答拼在一起。
更多的類似工作可以看看獲得今年IJCAI傑出論文獎的黃民烈老師的工作。
(四)基於知識的問答
知識問答主要有兩種方法:一種是基於 Semantic Parsing 的傳統方法,它是把一個問題解析成一個形式化的查詢語言,再把查詢語言知識庫裡面做查詢。這個方法的最大難點是把自然語言的問題轉成這樣一個形式化的查詢語言。同樣也有很多方法,最簡單的基於規則、基於模板,複雜點的基於翻譯模型、基於深度學習模型等。
目前學術界比較多的是基於機器學習的知識庫的問答方法,這裡面它的基本思想是把問題建模成一個 embedding,然後對知識圖譜也做 embedding,變成一個個向量,這個問答就轉換成了一個相似度匹配的問題,把知識庫裡的子圖的向量跟問題對應子圖進行相似度匹配。
還有很多其他方法,目前比較多的是基於網路的方法,基於帶注意力機制的迴圈神經網路的方法。這塊我給一個參考,大家可以看一下《揭開知識庫問答 KB-QA 的面紗》這篇文章,講得非常詳盡、非常好。我個人的觀點是現在基於深度學習的知識庫問答目前在工業界這塊不是很成熟,它的效果不太可控,我們在系統裡還是用基於傳統的 Semantic Parsing 問答。
在 CQA 上也有很多把知識結合進去的方法。CQA 最核心的問題是我們要算使用者的問題和在我們問答庫裡問題的語義相似度,這裡的核心問題是怎麼能把知識放到對句子的向量表示裡。最近的 SIGIR2018 中提到,把知識和注意力的神經網路結合在一起的方法。現在這種論文基本都是一個網路圖。另外一篇文章也是類似的,總體是在文字做排序時把知識向量化。
(五)基於知識的主動會話
這個實際上是非常關鍵的。在我們人機對話系統,特別是在 VUI 互動下, VUI 音響是沒有介面的,這就意味著你無法知道這個音響到底支援哪些功能。當你面對音響的時候,你怎麼知道它的功能,到底哪些話能說,哪些話不能說,或者它有什麼東西?這時候很需要機器人主動的對話,能引導使用者用它,知道它的功能。
再舉個例子,如果一個使用者說「來首《傳奇》」,機器可以主動問他說「播放以後還想聽聽李健原唱嗎?」其實它的思想很簡單,就是根據我們的知識圖譜裡面,看看相同實體下面有沒有其他關係或者屬性,或者推薦一個相同關係下面其他的實體。
這裡一篇百度的文章思想也是類似的,如果覺得聊天聊不下去了,會先在上下文裡去做實體分析和實體連結,找到作為聊天主題的實體之後再根據知識圖譜找相關的實體,根據相關的實體產生話題。
▌四、總結
前面把聊天、問答、對話、語義解析怎麼跟知識結合起來做了簡單的介紹。接下來做個總結:
第一,為什麼人機對話系統很重要?
1、它有可能成為物聯網時代的最主要互動形式,類似於 OS。
2、知性會話的核心是知識圖譜。它最重要的是做兩件事情:一是線下要做基於知識圖譜做多源資料的融合,二是在服務時要做基於知識圖譜聊天、問答、對話、操控一體化。
3、從技術上來講,深度學習和知識圖譜技術的結合是目前最重要的一個趨勢。我個人比較看好 Sequence-to-Sequence 模型,因為它的表達能力非常豐富,而且應用場景非常多,基本上自然語言處理裡面大部分的問題都可以建模成一個 Sequence-to-Sequence。包括我們的翻譯是一個語言到另外一個語言,還有聊天問答甚至拼音輸入法,就是把拼音序列轉成文字序列等等,還有做分詞、詞性識別、命名實體識別等等都是 Sequence-to-Sequence,這種模型分為 encoder 和 decoder 兩個階段,它在不同的階段都可以把一些知識融合進去。
第二,在人機對話系統裡的技術演進是怎樣的?
1、在對話裡不能只看語義,還要看語用,語用就是「語義+語境」。
2、我們不能只做閒聊式的機器人,而且是希望我們機器人是掌握領域知識,它是有文化的,而且文化水平還很高,是個領域專家,是知性會話。
3、流式對話。我們目前跟音響的互動都是先喚醒,說「小愛同學,給我點首歌」,又說「小愛同學,播放下一首」。非常麻煩,但人和人對話是不會總頻繁叫人的名字的,這時候就需要流式對話,這塊的技術難點是怎麼判斷一個人說話是不是說完了,你是否可以打斷,這是目前技術上最難的一點。還有一個是怎麼去拒絕噪音,因為現在對話是沒有喚醒詞的,這時候旁邊人的說話甚至電視裡面說的話很有可能被誤識別,機器也會對它做響應。
▌五、答聽眾問
Q:我們公司在構建電商的知識圖譜,但是電商的資料是每天都會更新的,有什麼好的辦法對知識圖譜進行更新嗎?而且基於 neo4j 的圖譜如何做知識推理?
A:這是個好問題。我們剛才強調知識圖譜要敏捷構建,敏捷構建就意味著你可以頻繁的發版本,這時候就有版本合併的問題,其實也是更新的問題。更新這塊主要的技術是知識本體的融合或者知識實體的匹配、實體的對齊。如果更新的資料量不是很大的話,我建議的方法是先通過實體對齊的技術,把更新的資料自動新增到知識圖譜裡去,如果量不大的話還需要做人工的 review,看更新的資料是否 OK。這個我認為也沒有什麼特別好的辦法,因為更新本來就是知識圖譜裡最難的問題。
neo4j 的圖譜如何做知識推理?首先,我個人認為它不太適合儲存海量的知識圖譜,電商的數量應該很大的,這時候用 neo4j 合適不合適還有待商榷。如何做知識推理?我們一般認為知識圖譜最主要的是知識,儘量少去做推理,因為推理是挺難的一個東西,而且也沒有特別工業化成熟度很高的工具。第二,如果非要做推理的話,我們一般做線下的推理,就是預先把推理做好,把它能展開的資料全展開,也叫「知識補全」,就像簡單的傳遞性的關係或者預先把它都展開,相當於儲存空間換時間,這是一個比較常用的方法。我們現在不太建議線上服務時做實時推理,因為那個效能一般很難達到要求。
Q:本體構建的大致方法能簡單介紹一下嗎?
A:本體構建的方法從大的面來講有兩種,一種是傳統基於專家的方法,就是請一般專家全手工構建,他們對每個詞、每個實體、詞之間的關係都開會討論,最後決定應該這樣、應該那樣,這是專家驅動的方法。但這種方法已經不太可行,而且這種方法也會成為我們做知識圖譜的瓶頸,因為我們期望知識圖譜是一個敏捷構建的。
目前大部分是資料驅動的方法,就是我們通過資料探勘去自動構建知識圖譜,適當地基於人工的 review。我傾向於極端的方法,我推薦的方式是知識圖譜的構建整個是全自動,但是也需要專家的參與,但是專家參與不是做 review、不是做構建,而是做評測。整個知識圖譜的效果根據應用的效果說話,這個應用不能假設整個知識圖譜是完全正確的、完整的的。我們可以通過快速迭代,不斷的對知識圖譜去做更新,然後根據自動化的測試或者根據人工的抽樣檢查和應用的效果去看知識圖譜的質量。只要我們知識圖譜的質量能夠滿足應用的需求就 OK。
Q:實體抽取有一個大致的最佳實踐嗎?
A:最佳實踐是這樣的,如果從工業界角度看的話,實體抽取肯定是多個方法的融合,基於詞典、基於規則、基於統計學習方法、基於深度學習方法,沒有一個方法就能搞定所有的問題。雖然詞典挖掘這個東西沒有技術含量,但是實踐中基於詞典的方法是非常有效的方法,特別是在垂直領域裡面,像醫療這種領域,當然,在有些領域可能這個方法不靠譜,比如在音樂領域,音樂裡面有歌名,任何一個詞都可能是歌名。
但基於詞典方法還有一個重要考慮,一定要考慮這個詞典的這個詞有沒有歧義,或者一個詞的先驗概率。比如「我愛你」也是一首歌名,但是它是歌名的概率可能不是特別大,但「忘情水」是歌名的概率就很大,所以詞典不是簡單的詞條列表,而是要帶先驗概率的資訊。
Q:知識圖譜還需要語義網的知識嗎?構建 OWL 可還需要很強的領域知識?
A:我們剛才說到知識圖譜的前身是語義網,所以如果想更加深刻理解知識圖譜,還是要了解一下語義網的知識,特別像 RDF OWL 的規範是要了解一下的。
OWL 的這個本體語言還是有點偏複雜,目前基本上不太推薦知識圖譜搞得那麼複雜,基本對應到 RDF 那種形態就差不多了。我們希望知識圖譜可以構建儘量大,但是它從邏輯上來講儘量簡單,不要用 OWL 裡面複雜的東西。一點點語義可以走得很遠,沒必要把模型搞得太複雜,因為把模型搞得太複雜的一個最重要難點是當你把實體放進去時你很難判斷這個實體屬於哪個概念。
Q:心理學出身的研究者在 NLP 學術領域是否有競爭力?對於心理學研究者轉向 NLP 學術圈有哪些建議?
A:這個問題挺有意思的。我們組裡有一個主力骨幹就是學心理學出身的,但他當時學的心理學是偏統計方面的心理學,也就是計量心理學這方面的,所以他相對有一定的統計基礎。這時候由統計基礎轉向到 NLP,因為有數學基礎,是比較容易一點的。另外一點,心理學比較有意義的是認知這一塊,因為神經網路這些原理跟認知心理學有一定的關係,所以心理學知識對轉到 NLP 挺有幫助的。
關於具體的建議,不管哪個專業轉到 NLP,最重要的是學好數學和機器學習最基礎的東西,這個基礎打好了,轉向 NLP 就比較簡單了。
Q:基於知識的方法和統計類的方法需要共融互補,老師有沒有典型的合作思路,充分利用基於知識規則方法的穩定可控的同時,又能利用統計從有監督的大資料自動抽取模式?是否可以講講兩者一起 NLP 的經驗?
A:現在人工智慧主要是三大學派——知識圖譜派、統計學習派、深度學習派,從工業界角度來看,在解決具體問題時各有所長,所以需要把這三者融合在一起,真實的線上系統不會只有一個方法。所以知識方法是一個很重要的方法,而且它跟深度學習是有比較好的互補性,特別是可以提供深度學習方法裡面沒有的可解釋性這一塊。
具體怎麼融合,最簡單的融合方法就是做模型Ensemble,把幾個分類器組裝在一起,這個可以看周志華老師那本「西瓜書」,因為周老師做模型的 Ensemble是最拿手的。
此外,把知識或規則都可以作為特徵,從這個角度融合在一起。另外,深度學習裡的解碼器也可以把知識融合進來,所以這塊的方法是很多的。