分享嘉賓 | 劉昇平(雲知聲 AI Labs 資深技術專家)算法
來源 | AI 科技大本營在線公開課數據庫
人機對話系統,或者會話交互,有望成爲物聯網時代的主要交互方式。而語言的理解與表達和知識是密切聯繫的,知識圖譜做爲一種大規模知識的表示形式,在人機對話系統中各模塊都有重要的應用。而知性對話,則是基於知識圖譜的人機會話交互服務。安全
AI 科技大本營邀請到了雲知聲 AI Labs 資深專家劉昇平針對「基於知識圖譜的人機對話系統方法與實踐」作系統的講解和梳理。微信
本次公開課介紹了知性會話的架構和關鍵技術,並結合工業級的人機對話系統實踐經驗,闡述了知識圖譜在人機對話系統的核心模塊上面的應用等等。網絡
劉昇平:雲知聲 AI Labs 資深技術專家/高級研發總監。前 IBM 研究院資深研究員,中文信息學會語言與知識計算專委會委員。2005 年得到北京大學數學學院博士,國內語義網研究的開創者之一,是 2010 年和 2011 年國際語義網大會的程序委員會委員。曾在語義網,機器學習、信息檢索,醫學信息學等領域發表過 20 多篇論文。在 IBM 工做期間,兩次得到 IBM 研究成就獎。2012 年末,劉博士加入雲知聲 AI Labs,領導 NLP 團隊,全面負責天然語言理解和生成、人機對話系統、聊天機器人、知識圖譜、智慧醫療等方面的研發及管理工做。session
在本次公開課上,他全面而具體地講述了知識圖譜在人機對話系統中的發展與應用,主要分爲如下四部分:架構
語言知識、對話系統綜述機器學習
知性會話的基本概念及案例分析工具
知性會話的關鍵技術:知識圖譜的構建,實體發現與連接性能
知性會話的關鍵技術:話語理解及天然應答生成
▌1、語言、知識與人機對話系統綜述
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. 人機對話系統的交互形式和應用場景
就像人和人說話有多種目的和形式同樣,人機對話系統也包含不少種交互形式:
一、聊天。典型表明是小冰,它包括問候和寒暄,其特色是沒有明確目的,並且不必定回答用戶的問題。聊天在現有的人機對話系統中主要是起到情感陪伴的做用。
二、問答。它要對用戶的問答給出精準的答案。這些問題能夠是事實性的問題,如「姚明有多高」,也多是其餘定義類,描述類或者比較類的問題。問答系統能夠根據問答的數據來源分爲基於常見問題-答案列表的FAQ問答,基於問答社區數據的CQA問答,基於知識庫的KBQA問答。
三、操控,只是解析出它的語義,來供第三方執行,最典型的操控是打開空調、打開臺燈,或者播放某一首歌。
四、任務式對話。它是一個目的性很強的對話,目標是收集信息,以完成某個填表單式的任務,最多見的像訂外賣、訂酒店、訂機票,這種方式經過對話來作。
五、主動對話。讓機器主動發起話題,不一樣的是,前面的交互都是讓人來主動發起這個交互。
目前人機對話系統的應用場景有不少,像音箱、電視、空調等等,其顯著特色是它不是人能夠直接觸摸到的,能夠將語音交互當作遙控器的一種替代品,有遙控器的地方就能夠用語音來交互。
另一個應用場景是在車載方面,由於在開車時,你的眼睛和手腳都被佔用着,因此這時經過語音來接聽電話、導航甚至收發微信,是很是方便的,也比較安全。車載是剛需場景,因此目前出貨量最可能是在這塊。像咱們是從 2014 年開始作車載語音交互方案,到如今有 1500 多萬的出貨量。
另一個應用領域是兒童教育機器人,右下角這些各類形狀的兒童機器人,實際上能夠當作兒童版的音箱,它的內容是面向兒童的,可是交互形式也是人機對話的方式。
4. 人機對話技術架構
人機對話系統從學術界來說,它的研究歷史很是悠久,可能 AI 提出之後,在七八十年代就開始研究。它的技術分爲五大部分:
一、語音識別:主要解決複雜真實場景噪聲、用戶口音多樣的狀況下,把人說的話轉成文字,即作到「聽得清」。
二、語義理解:主要是把用戶說的話轉成機器能理解執行的指令或查詢,即作到「聽得懂」。
三、對話管理:維護對話狀態和目標,決定系統應該怎麼說、怎麼問下一句話,也就是生成一個應答的意圖。
四、天然語言生成:就是根據系統應答的意圖,用天然語言把這個應答意圖表達出來。
五、語音合成: 用機器合成的語音把這句話播報出來。
這樣造成一個完整人機對話的閉環。
5. 語音識別場景演進
由於人機對話系統是以語音做爲入口,因此須要講講語音技術這塊的進展。強調一點的是,若是想真正作好人機對話系統,除了對天然語言處理技術瞭解以外,對語音技術也必須有所瞭解。
最先像 Siri 這樣的場景是近講模式,它最主要解決的問題是口音問題,目前這方面的識別準確率很是高,已經能作到 97% 左右,你們平時用的手機語音輸入法就是這種模式,通常建議離麥克風的距離是30cm左右。
Amazon Echo 則是遠講模式,你能夠離麥克風 3 米甚至 5 米這麼遠。它要解決的問題不少,由於你離它遠了之後更容易受周邊噪音的影響,還有一個更致命的影響是聲音反射引發的混響問題,特別是在玻璃房裏,聲音不斷在反射,麥克風收到的聲音就是不少聲音混雜在一塊兒。還有一個很不同的地方,就是咱們用微信語音的時候能夠按下說,或者按着一直說,但當你面對一個音箱時,由於你離它有 3-5 米遠,不可能按着說話的,這時就有新的技術,叫「語音喚醒」,就像咱們跟人說話時叫人的名字同樣,像「Hi,Google」,先喚醒機器,再同它對話。
目前語音識別最難的場景是人人對話,在人和人對話的時候,先對它作錄音,並且要把它轉成文字,這個最多見的場景像開會,自動把不一樣的人說話轉錄下來,甚至自動造成會議紀要。還有像司法的庭審,只要是和人說話的場景下均可以用到。這裏面最難的問題是雞尾酒會問題,不少人在一塊兒,環境很嘈雜,你們都在說話,人能夠聽到只關注的人的說話,即便很嘈雜,但兩我的同樣能夠聊天對話,但這對機器來講很難。
6. 人機對話系統中的機器角色演進
在人機對話裏面機器的角色有個演進的過程:最先人機對話很簡單,能夠當作是個遙控器的替代品,用戶經過固定句式或者單句指令來控制這個系統。
Siri、Amazon Echo 是一種助手的形態,也就是說,你能夠經過天然語言交互,且對話是多輪的,甚至可讓機器有些情感。
可是下一個階段是它會變成專家的角色,特別是面向行業或者特定領域時,當咱們跟音箱對話時,但願這個音箱同時也是一個音樂專家,它能夠跟你聊音樂的問題,能夠跟你聊古典音樂,甚至教你一些音樂知識。咱們跟兒童教育機器人對話時,但願這個機器人是一個兒童教育專家,咱們跟空調對話時但願後面是個空調專家。這時它的特色是須要有這個領域的知識,並且可以幫你作推薦、作決策。
▌2、知性會話基本概念及示例分析
咱們作對話必須理解這幾個概念——語義、語境、語用。特別是語境,它就是在對話時纔有含義,語境就是指人和人發生對話時的一個具體環境,這個環境又包括言語語境,就是咱們所說的上下文,還有不少非言語語境,如說話的時間、地點、天氣都是非言語語境,還有說話人的信息等等,咱們今天強調的知識也是一種重要的非言語語境。
假如用戶說「太冷了」這三個字,語義是溫度有點低,但若是考慮語用,這句話在特定語境下面傳遞的會話意義、真實含義: 若是在車裏面開着空調,理解這句話的意思是把空調溫度調高一點;若是是冬天沒有開空調,這句話的意思多是把車的暖氣打開,或者把車的窗戶關上;如今立刻到秋天了,若是一個女孩子對你說「太冷了」,她的含義多是想讓你給她一個擁抱之類的。因此語境和語用是很是重要的概念,若是作人機對話系統,都會接觸到這兩個概念。
1. 人機(設備)對話系統下的語境
剛纔是說人和人對話時,語境很關鍵,如今咱們作人機對話系統,人和設備對話的時候有哪些語境呢?
一、物理語境。也就是你說話當時現場的信息,包括(1)時間、地點、場所,這個場所是指在車裏或在家裏等等。(2)天氣。(3)情緒和情感。(4)設備上面顯示的內容。(5)設備能感知到的信息,好比咱們和空調對話,空調可以感知到室內外的溫度、溼度。這個語境的生命週期是請求級的。
二、言語語境。(1)上下文,設備上和設備上面反饋的信息也是一種上下文,這個生命週期能夠當作是會話級的。
三、知識語境。包括:
(1)人類的常識和領域知識。舉個簡單的例子,之前咱們一句話叫「中國乒乓球隊誰也贏不了」,還有「中國足球隊也是誰也贏不了」,這兩句話看起來字面是同樣的,但人可以理解這兩句話的差異,由於咱們有常識是:中國足球隊很弱,中國乒乓球隊很強。因此知識對這句話的理解相當重要。
(2)用戶畫像,包括用戶的一些基本信息,用戶的性別、年齡、文化水平、愛好等等。(3)Agent 畫像,就是這個機器人定義的信息,像小冰把它的 Agent 畫像定義爲一個 18 歲的鄰家小妹。(4)設備信息庫,若是把音箱做爲中控的話,中控鏈接的設備信息、設備狀態等都是語境。若是在家裏對中控說「我回家了」這句話究竟是什麼含義?中控可能會根據你的設備狀態、根據當前的環境狀況,給你決定是開燈仍是關燈,是給你開窗戶仍是拉窗簾等等。
2. 不要神話知識圖譜
知識圖譜的歷史和概念你們已經比較理解了,我這裏主要強調幾個基本概念:最重要的知識圖譜概念就是「Things,Not Strings」,知識圖譜裏面的東西都是一個個實體而不是字符串。
另外,咱們也不要神化知識圖譜,它其實只是一種知識的組織形式而已。由於無論作什麼應用,在各類場景下都有知識,之前可能用其餘方式來表示這個知識。在概念層,咱們之前也接觸過相似的東西,就像咱們作關於數據庫建模時用 ER 模型,它也是一種概念模型。咱們寫程序,作面向對象設計時會畫些類圖,這些都是概念模型,這些模型均可以很方便的轉成知識圖譜來表示。我認爲知識圖譜首先是知識的一種組織形式。在數據層,知識圖譜是一種圖模型,它是用節點、邊來表達實體、值、關係和屬性等。
3. 什麼是知性會話?
什麼叫知性會話?我這裏舉個例子,用戶可能跟音箱聊天:「你喜歡謝霆鋒?」「喜歡,他很酷」「你知道他女友是誰嗎?」「王菲」「來一首她的《傳奇》」這是一種操控,機器就會給你播放王菲的傳奇,播放以後系統還能夠接着問說「你還想聽李鍵的原唱嗎?」這是一種主動對話,用戶說「好的」,系統能夠播放李鍵的《傳奇》,用戶還能夠問「他的音樂風格是什麼樣的?」系統說「李健的風格,有民謠的簡潔,但比民謠華麗得多。」
你看這個例子的話,它涉及不少跟音樂相關的知識,還包括一些歌星的人物相關的知識。交互形式有聊天、問答、操控、主動對話,是經過知識把它們關聯在一塊兒,你會感受整個對話是個很流暢的對話。
總結下來,知性會話的意思是:它以知識圖譜爲中心,經過實體發現與連接技術把各類各樣能夠用來做爲對話的數據源融合在一塊兒,實現跨領域、跨交互形式的多輪對話。
知性會話的主要特色有:一是跨領域,跨交互形式共享上下文,你能夠看它的聊天和問答能夠銜接在之前;二是它體現了領域專家的機器人定位,它對這些領域的知識很是瞭解,能夠在聊天或者問答中體現出它掌握的領域知識。它有這方面的知識後,也能夠主動發起一些對話。
知性會話的核心技術有:
離線處理,首先要有知識圖譜,因此有一個知識圖譜構建的問題。另外,咱們要把各類跟對話相關的數據經過實體發現與連接技術跟知識圖譜關聯起來。
在線處理。基於知識作話語理解,怎麼在聊天裏把知識融合進去,還有基於知識圖譜的問答,基於知識圖譜的主動對話等。
▌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 音箱是沒有界面的,這就意味着你沒法知道這個音箱到底支持哪些功能。當你面對音箱的時候,你怎麼知道它的功能,到底哪些話能說,哪些話不能說,或者它有什麼東西?這時候很須要機器人主動的對話,能引導用戶用它,知道它的功能。
再舉個例子,若是一個用戶說「來首《傳奇》」,機器能夠主動問他說「播放之後還想聽聽李健原唱嗎?」其實它的思想很簡單,就是根據咱們的知識圖譜裏面,看看相同實體下面有沒有其餘關係或者屬性,或者推薦一個相同關係下面其餘的實體。
這裏一篇百度的文章思想也是相似的,若是以爲聊天聊不下去了,會先在上下文裏去作實體分析和實體連接,找到做爲聊天主題的實體以後再根據知識圖譜找相關的實體,根據相關的實體產生話題。
▌4、總結
前面把聊天、問答、對話、語義解析怎麼跟知識結合起來作了簡單的介紹。接下來作個總結:
第一,爲何人機對話系統很重要?
一、它有可能成爲物聯網時代的最主要交互形式,相似於 OS。
二、知性會話的核心是知識圖譜。它最重要的是作兩件事情:一是線下要作基於知識圖譜作多源數據的融合,二是在服務時要作基於知識圖譜聊天、問答、對話、操控一體化。
三、從技術上來說,深度學習和知識圖譜技術的結合是目前最重要的一個趨勢。我我的比較看好 Sequence-to-Sequence 模型,由於它的表達能力很是豐富,並且應用場景很是多,基本上天然語言處理裏面大部分的問題均可以建模成一個 Sequence-to-Sequence。包括咱們的翻譯是一個語言到另一個語言,還有聊天問答甚至拼音輸入法,就是把拼音序列轉成文字序列等等,還有作分詞、詞性識別、命名實體識別等等都是 Sequence-to-Sequence,這種模型分爲 encoder 和 decoder 兩個階段,它在不一樣的階段均可以把一些知識融合進去。
第二,在人機對話系統裏的技術演進是怎樣的?
一、在對話裏不能只看語義,還要看語用,語用就是「語義+語境」。
二、咱們不能只作閒聊式的機器人,並且是但願咱們機器人是掌握領域知識,它是有文化的,並且文化水平還很高,是個領域專家,是知性會話。
三、流式對話。咱們目前跟音箱的交互都是先喚醒,說「小愛同窗,給我點首歌」,又說「小愛同窗,播放下一首」。很是麻煩,但人和人對話是不會總頻繁叫人的名字的,這時候就須要流式對話,這塊的技術難點是怎麼判斷一我的說話是否是說完了,你是否能夠打斷,這是目前技術上最難的一點。還有一個是怎麼去拒絕噪音,由於如今對話是沒有喚醒詞的,這時候旁邊人的說話甚至電視裏面說的話頗有可能被誤識別,機器也會對它作響應。
▌5、答聽衆問
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是最拿手的。
此外,把知識或規則均可以做爲特徵,從這個角度融合在一塊兒。另外,深度學習裏的解碼器也能夠把知識融合進來,因此這塊的方法是不少的。