AI是如何回答你提出的問題的?揭祕智能問答系統背後的深度學習網絡

摘要:隨着人工智能和物聯網技術的飛速發展和相互融合,愈來愈多的設備將會被植入問答AI,將來問答將會成爲人機交互的重要入口,AI問答將會無處不在。那麼AI是如何回答你所提出的問題的?本文就爲你揭祕智能問題系統背後的深度學習網絡架構設計以及原理。算法

本文內容由演講嘉賓視頻分享以及PPT整理而成。網絡

本節視頻地址:http://click.aliyun.com/m/45433/
PDF下載:http://click.aliyun.com/m/45434/架構

演講嘉賓簡介

金華興(花名:會當),阿里巴巴算法專家。在人工智能領域擁有十幾年的經驗,在阿里曾負責搜索排序/機器學習/大數據基礎算法/深度學習/機器閱讀等算法領域。主導研發了阿里多語言混合搜索排序算法系統,融合深度學習/遷移學習/排序算法,解決多語種標註數據不足問題,首次將深度學習應用於搜索業務。主導研發了阿里第一代不依賴於一行開源代碼的分佈式深度學習算法平臺---ODPS深度學習算法平臺。主導研發了阿里第一個基於深度強化學習的資訊推薦算法。得到阿里2010年集團內部算法大賽冠軍。藉助於阿里平臺,研發的算法影響着全球十多億人。機器學習

問答AI將會無處不在

本文將爲你們分享問答系統背後的原理以及深度學習在問答系統中的應用。本文中所謂的「問答」就是「一問一答」,也就是用戶提出問題,AI系統給出回答。隨着人工智能和物聯網技術的飛速發展以及二者之間的相互融合和落地,愈來愈多的設備將會被植入問答AI,好比隨身會攜帶的耳機、手錶、戒指,家裏的音響、檯燈等,汽車和機器人等,最終AI將會無處不在。將來,你們能夠隨時隨地與AI進行交互,提出問題並得到答案,或者經過AI來操控物理世界。問答AI將會成爲一個很是重要的入口,其地位就至關於如今的搜索引擎。
clipboard.png分佈式

人類如何回答問題

在考慮設計一個AI問答系統以前,不妨先來考慮一下人類是如何回答問題的。好比提出一個問題,「現任美國總統是誰?」你們可能瞬間就可以給出答案,由於像這樣的簡單問題在大腦裏已經有了記憶,人類能夠根據記憶瞬間地給出回答。還有一些問題則須要垂直領域的知識,通過科學的計算和縝密的推理才能給出答案,好比數學或者物理相關的問題。此外,還有一些問題須要多個領域進行綜合分析才能給出回答,好比在回答「肺炎的患者吃什麼食物比較合適?」這個問題時,不只須要知道醫學領域中對於肺炎的病理,還須要知道食物和養分學等相關知識,只有結合以上這幾個領域的知識才可以給出比較合理的答案。而面對更加複雜的問題,僅憑藉人類大腦裏面的知識儲備可能還不夠,還須要藉助外部工具蒐集一些數據和資料才能進行回答。ide

AI問答系統架構

人類回答問題的基本邏輯就是對複雜的問題進行分解,分而治之。AI問答系統也借鑑了這樣的邏輯,把整個系統進行分解,而後將不一樣的問題放入到不一樣的垂直問答領域中作回答。固然,還會有一個很是通用的通用問答。在通用問答裏面主要包含了3大部分,即問題理解,證據檢索以及答案推理。AI收到問題後,先對問題進行各類各樣的分析、處理和理解;接着基於分析結果從不一樣的數據源檢索出相關的證據,也就是檢索可能包含答案的數據;而後,進行綜合地閱讀理解和推理而且給出答案。問答AI的各個子系統均可以用深度學習實現。
clipboard.png函數

問題分類網絡

接下來爲你們分享通用問答這條流水線上面的各個子系統背後的深度學習模型。首先爲你們分享問題分類網絡,問題其實就是一段話,也就是一個符號序列。若是想用神經網絡處理一個符號序列,則首先須要將其embedding到向量空間中去,由於這個符號序列是具備上下文的語義上的相關性的,因此須要藉助LSTM來進行處理,將上下文的語義信息可以融合到詞的向量中去。由於序列是變長的,因此爲了便於後續的處理須要將整個序列轉化成一個固定維度的向量,轉化方法比較多,簡單粗暴的方法就是將序列裏面的全部的向量加起來再取平均;稍微複雜一些的方法則能夠考慮使用多個卷積層和pooling層,逐步將長序列轉化成爲固定長度的向量;semi-self-attention是簡單而高效的方法,把序列的最後一個狀態做爲key,和序列本身作一個attention pooling。以後再作一些非線性的變化,最終使用Softmax來輸出類別。以下圖所示的就是一個問題分類網絡。
clipboard.png工具

問題理解網絡

其實上面所提到的問題分類也能夠認爲是一種問題理解的方式,由於問題理解自己沒有明確的定義,只要是有助於回答後面問題的處理就均可以加入進來。通常而言,問題理解中的處理大體有這樣幾個:問題分詞、實體識別、意圖識別以及問題分類。其中的意圖識別也是分類問題,而分詞和實體識別都是序列標註問題。接下來以實體識別爲例分享序列標註問題。
clipboard.png
實體識別的目標是識別問題中哪些詞屬於實體,而且屬於什麼實體,好比「成龍的老婆是誰?」這個問題就包含了一我的名實體,固然其餘的場景下面可能還有地名、機構名稱以及道路名稱等,這些都是實體。實體的標誌方法通常是用B、I、O這種符號表示,其中B,也就是Beginning表明着實體詞的開始;I表明Inside也就說這個詞仍是在這個實體裏面;O表明Outside也就是說這個詞已經不屬於這個實體了。在前面的這個問題中「成龍」這個詞就構成了實體。序列標註模型通常會在下面使用深度學習,上面則使用CRF類來作解碼。學習

深度學習的網絡與前面所提到的問題識別實際上是大同小異的,最下面兩層也負責將序列轉化成爲空間中的序列,而且儘量多地將語義的信息包含在其中。在問題理解網絡模型中間會加一個Self-attention層,雖然LSTM可以捕獲上下文的一些信息,可是在實際中,其對於較長句子的分析能力仍是不足的,而且也不能很好地捕獲一些比較低頻的問題的語義。而Self-attention層可以將序列中的任意兩個詞都進行關聯並捕獲他們之間語義的關係,這樣就不會受限於長度,能夠在任意遠的兩個詞之間捕獲語義的相關性。因此其對於語義的處理,特別是標註都是頗有幫助的。上圖所展示的就是一個問題理解中的深度學習網絡。測試

知識圖譜

clipboard.png
完成了以上的步驟後就須要去考慮檢索證據。證據的來源比較多,一個重要的來源就是知識圖譜。在過去二三十年的互聯網化以及信息化進程中,各行各業都沉澱了不少的知識,這些知識每每都是以知識圖譜的形式保存下來的。知識圖譜是典型的圖結構,節點就表示實體,邊則表示實體之間的關係。若是想要在知識圖譜上使用深度學習方法作檢索,首先須要考慮的就是將知識圖譜embedding到一個向量空間裏面去,再在向量空間中進行語義檢索。咱們面臨的第一個問題,是如何將一個複雜的知識圖譜embedding到一個向量空間中去?你們不妨思考一下知識圖譜具備什麼樣的特色,其所具有的一個很是重要的特色就是它由三元組組成,而三元組具備很是強烈的約束,使用符號的形式進行表達是很容易理解的,好比經過<阿里,收購,優酷土豆>這個三元組就能瞭解這樣的一種關係。可是將知識圖譜中的三元組embedding到向量空間中去以後,應該如何去描述這種關係呢?這是一個很是關鍵的問題。

知識圖譜Embedding網絡

有一句話叫作「簡單的就是美的」,實體能夠變成向量,而向量之間最簡單的代數計算就是相加或者相減,因此能夠考慮讓三元組中的前兩個向量相加,等於第三個向量,經過簡單的相加關係來表達知識圖譜中符號上的邏輯關係。在以下圖所示的例子中,阿里+收購=優酷土豆。
clipboard.png
一個知識圖譜每每是很是龐大的,不少時候就會有幾百萬個實體,以及幾十億個關係,因此須要設計一個損失函數來儘可能多地知足等式關係,最終驅動實體和邊embedding到向量空間的比較好的點上面去。由於如今知識圖譜裏面除了實體的信息以外還可能有其餘的信息,好比對實體以及關係的描述,這種的描述每每是天然語言的形式,好比句子、段落甚至是一篇文章。像這些信息也是能夠用序列embedding的方式先將其轉化成爲一個向量,在向量空間裏也強迫其知足等式關係,將有助於實現整個知識圖譜的embedding,有助於後續語義上的處理。

知識圖譜檢索網絡

當知道了如何embedding以後,接下來須要考慮如何檢索知識圖譜。此時,知識圖譜裏面的實體已經變成向量了,而問題也能夠表達成向量,天然就可使用問題向量在知識圖譜中尋找接近的向量,這樣所找出來的向量極可能與問題是語義相關的,甚至頗有可能就包含了答案。可是在實際中這種作法可能會存在問題,由於問題表達學習與知識圖譜的embedding是兩個獨立的任務,學習出來的向量空間實際上存在於不一樣的座標系裏面,在不一樣的座標系裏面,即使座標相同,所表示的內容也多是不相同的。因此須要將其作進一步的對齊,只有在座標對齊以後才能判斷兩個座標系中的點是否接近,從而判斷是不是真正地語義上的相近。對齊兩個座標系能夠用Attention機制來實現,固然須要標註數據,設計新的Task來驅動Attention裏面的參數收斂,使得兩座標系內的向量是可比較的。若是標註的數據量夠多,也能夠對問題向量學習裏面的網絡參數同時作fine tune,而且可以起到更好的效果提高。在對齊以後就能夠將問題向量丟到知識圖譜的向量空間中去了,將最相關或者最近的實體和關係找出來,這樣就可以得到最優的證據。
clipboard.png

網頁證據檢索網絡

除了知識圖譜是一個重要的證據來源以外,其實還有一個更大的證據來源在於互聯網。在互聯網中找證據就是一個經典的搜索Ranking的問題,其核心就是衡量問題與網頁之間的語義相關性,找出與問題最爲相關的網頁。用神經網絡解決這個問題,須要把網頁文本和問題embedding到向量空間中,還須要設計一個類似性函數,通常而言可使用COS類似性,用COS值來衡量語義,通過不斷的學習以後使得學習出來的向量的COS值可以表明語義上的相近性,最終就能夠用COS值來找尋與問題最爲相關的網頁。
clipboard.png

從相關證據中推理答案--閱讀理解

接下來分享當將證據檢索完以後接下來該如何作。前面提到知識圖譜和網頁中的數據形式是具備必定差別的,還有一些證據會來自其餘數據源好比百科、論壇以及圖片視頻等,而這些不一樣形態的數據連起來就會很是複雜。如何去進行綜合閱讀和推理是一個很是複雜的問題,也是強AI的問題,當解決了這個問題也就能跨越到強AI的階段。
clipboard.png
而到目前爲止,這個問題尚未一個很是好的解決方案,因此在該問題上的研究和討論也很是火爆。最近也有不少公司和研究機構發佈了許多簡化的開放的數據集供你們測試和研發算法,好比Standford的SQuAD數據集,這個數據集裏面有500多個文章以及10萬多個問題,而去年百度、谷歌以及微軟也都發布了一些數據集,這些數據集也更大而且更加複雜,像百度和微軟所發佈的數據集中段落的數目有100多萬,問題也有20多萬,而且這些數據集也更加接近於真實的場景。
clipboard.png

閱讀理解網絡---找出答案片斷

當面對複雜的閱讀理解問題時,該如何設計深度學習模型來解決這個問題呢?其實這裏還不能稱之爲「解決」只能是「探索性解決」,由於如今尚未一個特別好的解決方案。這裏爲你們分享一個目前在SQuAD數據集上表現比較好的網絡結構。
clipboard.png
在這個網絡結構裏輸入是一個問題和多個段落,目標是在多個段落裏面找出答案片斷,固然也可能有多個答案片斷。天然也須要先對這些問題和段落進行embedding,在此基礎之上再進行進一步地處理。中間層的處理方式與前面所提到的問題分類以及序列標註都有所不一樣,在中間層的PQ attention是將段落和問題進行關聯,讓段落的表達可以蘊含問題的語義,具體的作法就是讓段落中的每個詞都單獨地對整個問題進行attention,這樣作完以後就可以使得每一個段落中的每一個詞都可以包含問題,也就是必定程度上將問題是什麼以及段落中的詞與問題的關聯強度如何展示出來。由於段落每每比較長,會有不少雜音,因此上面再加一個Gate層,對無關的詞起到過濾抑制的做用。在此之上再加一層Fusion進行聚合,其功能就是將Gate層銳化的信息再作一個平滑,同時把先後的信息在此進行融合,使其可以捕獲答案與段落關聯的更多信息。在最上面是Pointer層,這裏就是找答案片斷的層,在其下的那些層裏面是將不一樣的段落單獨處理的,而在Pointer層中則是將全部的段落串起來做爲一個段落看待,在裏面尋找最佳答案;Pointer層是一個RNN,初始狀態是用問題向量,輸出是兩個Softmax層,一個表示答案的開始,另外一個表示答案的結束。

答案生成網絡---天然語句生成

當將段落中的答案找出來以後,還須要造成一個通順的語句並反饋給用戶,而有時候答案片斷可能有多個,更須要將其串接起來造成天然語句。生成天然語句是一個序列的generation問題,與機器翻譯或者圖像caption問題是相似的。 網絡結構包含兩大部分:encoder和decoder, 在Decoder部分,能夠認爲和上述問題都是同樣的,可是在Encoder部分就會有很大的區別,由於其數據來源和結構徹底不一樣。在機器翻譯裏面,Encoder所處理的就是一個序列,而在閱讀理解裏面,Encoder所處理的數據就既有問題也有段落,還會包含了已經找出來的答案信息。

在Encoder中最下面的兩層Embedding和Encode中能夠徹底共享尋找答案網絡最下面的兩層參數,這裏的Start和End就是閱讀理解中的Poiner層輸出的結果,將其構成二值化序列放進來。固然除此以外,若是還有其餘的特徵也能夠放入到Encoder裏面來。Encoder的信息會輸出給Decoder,Decoder中有一個很是關鍵的層就是Attention,Attention可以準確地從問題或者段落裏面找一些關鍵詞出來,使得必要的詞可以被輸出到最終的答案語句中去。Decoder還會生成一些非關鍵詞,起到順滑和連接的做用。在這個網絡結構裏輸入是一個問題和多個段落,目標是在多個段落裏面找出答案片斷,固然也可能有多個答案片斷。天然也須要先對這些問題和段落進行embedding,在此基礎之上再進行進一步地處理。中間層的處理方式與前面所提到的問題分類以及序列標註都有所不一樣,在中間層的PQ attention是將段落和問題進行關聯,讓段落的表達可以蘊含問題的語義,具體的作法就是讓段落中的每個詞都單獨地對整個問題進行attention,這樣作完以後就可以使得每一個段落中的每一個詞都可以包含問題,也就是必定程度上將問題是什麼以及段落中的詞與問題的關聯強度如何展示出來。由於段落每每比較長,會有不少雜音,因此上面再加一個Gate層,對無關的詞起到過濾抑制的做用。在此之上再加一層Fusion進行聚合,其功能就是將Gate層銳化的信息再作一個平滑,同時把先後的信息在此進行融合,使其可以捕獲答案與段落關聯的更多信息。在最上面是Pointer層,這裏就是找答案片斷的層,在其下的那些層裏面是將不一樣的段落單獨處理的,而在Pointer層中則是將全部的段落串起來做爲一個段落看待,在裏面尋找最佳答案;Pointer層是一個RNN,初始狀態是用問題向量,輸出是兩個Softmax層,一個表示答案的開始,另外一個表示答案的結束。

答案生成網絡---天然語句生成

當將段落中的答案找出來以後,還須要造成一個通順的語句並反饋給用戶,而有時候答案片斷可能有多個,更須要將其串接起來造成天然語句。生成天然語句是一個序列的generation問題,與機器翻譯或者圖像caption問題是相似的。 網絡結構包含兩大部分:encoder和decoder, 在Decoder部分,能夠認爲和上述問題都是同樣的,可是在Encoder部分就會有很大的區別,由於其數據來源和結構徹底不一樣。在機器翻譯裏面,Encoder所處理的就是一個序列,而在閱讀理解裏面,Encoder所處理的數據就既有問題也有段落,還會包含了已經找出來的答案信息。

在Encoder中最下面的兩層Embedding和Encode中能夠徹底共享尋找答案網絡最下面的兩層參數,這裏的Start和End就是閱讀理解中的Poiner層輸出的結果,將其構成二值化序列放進來。固然除此以外,若是還有其餘的特徵也能夠放入到Encoder裏面來。Encoder的信息會輸出給Decoder,Decoder中有一個很是關鍵的層就是Attention,Attention可以準確地從問題或者段落裏面找一些關鍵詞出來,使得必要的詞可以被輸出到最終的答案語句中去。Decoder還會生成一些非關鍵詞,起到順滑和連接的做用。
clipboard.png

本文爲你們分享了AI問答系統的架構以及通用問答各個環節的深度學習網絡結構以及其背後原理。

閱讀原文

相關文章
相關標籤/搜索