摘要:人類如何回答問題在考慮設計一個問答系統之前,不妨先來考慮一下人類是如何回答問題的。問答的各個子系統都可以用深度學習實現。
摘要:隨著人工智能和物聯網技術的飛速發展和相互融合,越來越多的設備將會被植入問答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將會成為一個非常重要的入口,其地位就相當于現在的搜索引擎。
在考慮設計一個AI問答系統之前,不妨先來考慮一下人類是如何回答問題的。比如提出一個問題,“現任美國總統是誰?”大家可能瞬間就能夠給出答案,因為像這樣的簡單問題在大腦里已經有了記憶,人類可以根據記憶瞬間地給出回答。還有一些問題則需要垂直領域的知識,經過科學的計算和縝密的推理才能給出答案,比如數學或者物理相關的問題。此外,還有一些問題需要多個領域進行綜合分析才能給出回答,比如在回答“肺炎的患者吃什么食物比較合適?”這個問題時,不僅需要知道醫學領域中對于肺炎的病理,還需要知道食物和營養學等相關知識,只有結合以上這幾個領域的知識才能夠給出比較合理的答案。而面對更加復雜的問題,僅憑借人類大腦里面的知識儲備可能還不夠,還需要借助外部工具搜集一些數據和資料才能進行回答。
AI問答系統架構人類回答問題的基本邏輯就是對復雜的問題進行分解,分而治之。AI問答系統也借鑒了這樣的邏輯,把整個系統進行分解,然后將不同的問題放入到不同的垂直問答領域中做回答。當然,還會有一個非常通用的通用問答。在通用問答里面主要包含了3大部分,即問題理解,證據檢索以及答案推理。AI收到問題后,先對問題進行各種各樣的分析、處理和理解;接著基于分析結果從不同的數據源檢索出相關的證據,也就是檢索可能包含答案的數據;然后,進行綜合地閱讀理解和推理并且給出答案。問答AI的各個子系統都可以用深度學習實現。
接下來為大家分享通用問答這條流水線上面的各個子系統背后的深度學習模型。首先為大家分享問題分類網絡,問題其實就是一段話,也就是一個符號序列。如果想用神經網絡處理一個符號序列,則首先需要將其embedding到向量空間中去,因為這個符號序列是具有上下文的語義上的相關性的,所以需要借助LSTM來進行處理,將上下文的語義信息能夠融合到詞的向量中去。因為序列是變長的,所以為了便于后續的處理需要將整個序列轉化成一個固定維度的向量,轉化方法比較多,簡單粗暴的方法就是將序列里面的所有的向量加起來再取平均;稍微復雜一些的方法則可以考慮使用多個卷積層和pooling層,逐步將長序列轉化成為固定長度的向量;semi-self-attention是簡單而高效的方法,把序列的最后一個狀態作為key,和序列自己做一個attention pooling。之后再做一些非線性的變化,最終使用Softmax來輸出類別。如下圖所示的就是一個問題分類網絡。
其實上面所提到的問題分類也可以認為是一種問題理解的方式,因為問題理解本身沒有明確的定義,只要是有助于回答后面問題的處理就都可以加入進來。一般而言,問題理解中的處理大致有這樣幾個:問題分詞、實體識別、意圖識別以及問題分類。其中的意圖識別也是分類問題,而分詞和實體識別都是序列標注問題。接下來以實體識別為例分享序列標注問題。
實體識別的目標是識別問題中哪些詞屬于實體,并且屬于什么實體,比如“成龍的老婆是誰?”這個問題就包含了一個人名實體,當然其他的場景下面可能還有地名、機構名稱以及道路名稱等,這些都是實體。實體的標志方法一般是用B、I、O這種符號表示,其中B,也就是Beginning代表著實體詞的開始;I代表Inside也就說這個詞還是在這個實體里面;O代表Outside也就是說這個詞已經不屬于這個實體了。在前面的這個問題中“成龍”這個詞就構成了實體。序列標注模型一般會在下面使用深度學習,上面則使用CRF類來做解碼。
深度學習的網絡與前面所提到的問題識別其實是大同小異的,最下面兩層也負責將序列轉化成為空間中的序列,并且盡可能多地將語義的信息包含在其中。在問題理解網絡模型中間會加一個Self-attention層,雖然LSTM能夠捕獲上下文的一些信息,但是在實際中,其對于較長句子的分析能力還是不足的,并且也不能很好地捕獲一些比較低頻的問題的語義。而Self-attention層能夠將序列中的任意兩個詞都進行關聯并捕獲他們之間語義的關系,這樣就不會受限于長度,可以在任意遠的兩個詞之間捕獲語義的相關性。所以其對于語義的處理,特別是標注都是很有幫助的。上圖所展現的就是一個問題理解中的深度學習網絡。
知識圖譜
完成了以上的步驟后就需要去考慮檢索證據。證據的來源比較多,一個重要的來源就是知識圖譜。在過去二三十年的互聯網化以及信息化進程中,各行各業都沉淀了很多的知識,這些知識往往都是以知識圖譜的形式保存下來的。知識圖譜是典型的圖結構,節點就表示實體,邊則表示實體之間的關系。如果想要在知識圖譜上使用深度學習方法做檢索,首先需要考慮的就是將知識圖譜embedding到一個向量空間里面去,再在向量空間中進行語義檢索。我們面臨的第一個問題,是如何將一個復雜的知識圖譜embedding到一個向量空間中去?大家不妨思考一下知識圖譜具有什么樣的特點,其所具備的一個非常重要的特點就是它由三元組組成,而三元組具有非常強烈的約束,使用符號的形式進行表達是很容易理解的,比如通過<阿里,收購,優酷土豆>這個三元組就能了解這樣的一種關系。但是將知識圖譜中的三元組embedding到向量空間中去之后,應該如何去描述這種關系呢?這是一個非常關鍵的問題。
有一句話叫做“簡單的就是美的”,實體可以變成向量,而向量之間最簡單的代數計算就是相加或者相減,所以可以考慮讓三元組中的前兩個向量相加,等于第三個向量,通過簡單的相加關系來表達知識圖譜中符號上的邏輯關系。在如下圖所示的例子中,阿里+收購=優酷土豆。
一個知識圖譜往往是非常龐大的,很多時候就會有幾百萬個實體,以及幾十億個關系,所以需要設計一個損失函數來盡量多地滿足等式關系,最終驅動實體和邊embedding到向量空間的比較好的點上面去。因為現在知識圖譜里面除了實體的信息之外還可能有其他的信息,比如對實體以及關系的描述,這種的描述往往是自然語言的形式,比如句子、段落甚至是一篇文章。像這些信息也是可以用序列embedding的方式先將其轉化成為一個向量,在向量空間里也強迫其滿足等式關系,將有助于實現整個知識圖譜的embedding,有助于后續語義上的處理。
當知道了如何embedding之后,接下來需要考慮如何檢索知識圖譜。此時,知識圖譜里面的實體已經變成向量了,而問題也可以表達成向量,自然就可以使用問題向量在知識圖譜中尋找接近的向量,這樣所找出來的向量很可能與問題是語義相關的,甚至很有可能就包含了答案。但是在實際中這種做法可能會存在問題,因為問題表達學習與知識圖譜的embedding是兩個獨立的任務,學習出來的向量空間實際上存在于不同的坐標系里面,在不同的坐標系里面,即便坐標相同,所表示的內容也可能是不相同的。所以需要將其做進一步的對齊,只有在坐標對齊之后才能判斷兩個坐標系中的點是否接近,從而判斷是否是真正地語義上的相近。對齊兩個坐標系可以用Attention機制來實現,當然需要標注數據,設計新的Task來驅動Attention里面的參數收斂,使得兩坐標系內的向量是可比較的。如果標注的數據量夠多,也可以對問題向量學習里面的網絡參數同時做fine tune,并且能夠起到更好的效果提升。在對齊之后就可以將問題向量丟到知識圖譜的向量空間中去了,將最相關或者最近的實體和關系找出來,這樣就能夠獲得最優的證據。
除了知識圖譜是一個重要的證據來源之外,其實還有一個更大的證據來源在于互聯網。在互聯網中找證據就是一個經典的搜索Ranking的問題,其核心就是衡量問題與網頁之間的語義相關性,找出與問題最為相關的網頁。用神經網絡解決這個問題,需要把網頁文本和問題embedding到向量空間中,還需要設計一個相似性函數,一般而言可以使用COS相似性,用COS值來衡量語義,經過不斷的學習之后使得學習出來的向量的COS值能夠代表語義上的相近性,最終就可以用COS值來找尋與問題最為相關的網頁。
接下來分享當將證據檢索完之后接下來該如何做。前面提到知識圖譜和網頁中的數據形式是具有一定差異的,還有一些證據會來自其他數據源比如百科、論壇以及圖片視頻等,而這些不同形態的數據連起來就會非常復雜。如何去進行綜合閱讀和推理是一個非常復雜的問題,也是強AI的問題,當解決了這個問題也就能跨越到強AI的階段。
而到目前為止,這個問題還沒有一個非常好的解決方案,所以在該問題上的研究和討論也非常火爆。最近也有很多公司和研究機構發布了許多簡化的開放的數據集供大家測試和研發算法,比如Standford的SQuAD數據集,這個數據集里面有500多個文章以及10萬多個問題,而去年百度、谷歌以及微軟也都發布了一些數據集,這些數據集也更大并且更加復雜,像百度和微軟所發布的數據集中段落的數目有100多萬,問題也有20多萬,并且這些數據集也更加接近于真實的場景。
當面對復雜的閱讀理解問題時,該如何設計深度學習模型來解決這個問題呢?其實這里還不能稱之為“解決”只能是“探索性解決”,因為現在還沒有一個特別好的解決方案。這里為大家分享一個目前在SQuAD數據集上表現比較好的網絡結構。
在這個網絡結構里輸入是一個問題和多個段落,目標是在多個段落里面找出答案片段,當然也可能有多個答案片段。自然也需要先對這些問題和段落進行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還會生成一些非關鍵詞,起到順滑和鏈接的作用。
本文為大家分享了AI問答系統的架構以及通用問答各個環節的深度學習網絡結構以及其背后原理。
閱讀原文
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/19726.html
閱讀 2971·2021-11-22 15:25
閱讀 2253·2021-11-18 10:07
閱讀 1058·2019-08-29 15:29
閱讀 484·2019-08-29 13:25
閱讀 1519·2019-08-29 12:58
閱讀 3212·2019-08-29 12:55
閱讀 2925·2019-08-29 12:28
閱讀 518·2019-08-29 12:16