基於圖深度學習的自然語言處理方法和應用

DataFunTalk發表於2022-05-01

file


導讀: 本次分享的內容為圖深度學習在自然語言處理領域的方法與應用,主要內容和素材都來自於我們Graph4NLP團隊的一篇調研文章:Graph Neural Networks for Natural Language Processing:A Survery,以及我們團隊所開發的Graph4NLP的python開源庫和教程。主要包括以下幾大方面內容:

  • DLG4NLP背景與發展
  • DLG4NLP方法和模型
  • DLG4NLP典型的應用
  • DLG4NLP Python開源庫

--

01 DLG4NLP背景與發展

我將首先闡述一下為什麼需要圖結構來處理NLP任務,然後介紹一下傳統的圖方法在NLP裡面的應用,最後引出圖神經網路並且簡單介紹圖深度學習的基礎理論。

1. 為什麼需要圖來處理NLP任務

file

我們知道圖結構資料是由節點和邊組成的資料型別,在生活的方方面面都可以看到,尤其在大資料時代,比如網際網路、社交網路、金融的交易網。還有可以表示成圖結構的蛋白質等化學物質。我們也可以用圖結構來表示邏輯關係的程式指令碼。從影像領域來看,有表示影像裡物體間相互互動關係的圖結構。

file

同樣在NLP的領域裡,我們也會發現很多很多可以表示為圖結構的資料。比如針對一個句子,如果我們想表示這個句子裡的句法資訊的話,可以建立一個dependency graph或者constituency graph;如果我們想捕捉句子的語義資訊的話,可以建立一個AMR graph或者IE graph;如果我們把程式語言也看作一種自然語言的話,我們可以構建出捕捉程式邏輯關係的SQL graph。

2. 傳統圖方法在NLP任務的應用

file

傳統NLP領域的表徵方法一般分為3種:

第一種採用詞袋來表徵文字,該方法依靠統計每個詞在句子或文件裡的頻率,但是這種方式無法捕捉詞語之間順序或者無法捕捉詞語之間的語義資訊。

第二種把文字表示成序列,相對於詞袋會捕捉更多的序列資訊,並且會包含詞對之間的前後關係,典型方法有Word2vec和Glove。

第三種把文字表示成圖,比較常見的有dependency graph和constituency graph等。當我們把一個文字表示成圖後,就不再侷限於前後位置的序列關係,我們可以捕捉到任意兩個位置之間的關係,除了位置關係、語法關係,我們還可以捕捉語義關係。所以當我們對句子的文字表示越徹底越全面時,對錶徵學習任務幫助越大。

file

現在把自然語言表示成圖結構已經不是一件新鮮事情,早在深度學習之前就有演算法去這麼做。例如採用Random Walk演算法和Graph Matching演算法計算文字之間的相似性。雖然傳統方法表徵成了圖結構,但是對語言的處理具有比較大的侷限性。

其一是沒有後續特徵的提取環節,其二解決的任務比較有限,比如句子生成,詞與句子分類,尤其對於預處理模型同時求多個任務時,需要應用圖深度學習來解決圖特徵提取環節。

3. 圖深度學習基礎理論

file

圖神經網路的核心思想是依靠鄰居節點的表徵向量對目標節點的影響,不斷地更新和學習每個節點的隱式表徵。不同的圖神經網路之間的差異在於所定義的鄰居節點對目標節點的影響方式和資訊傳遞的方式不同。圖神經網路既可以計算節點的表徵向量node embedding,也可以計算整個圖的表徵向量graph-level embedding。通過圖卷積方式計算節點的表徵向量的不同,圖卷積有四個比較典型的代表:Spectral-based,Spatial-based,Attention-based,Recurrent-based。該四個型別並不相互排斥,一種圖卷積方法既可以是Spatial-based也可以是Attention-based。

file

我們介紹下基本的圖卷積操作。

第一個公式為圖卷積運算,它的輸入為A鄰接矩陣和H node embedding(節點表徵);對於節點分類和鄰接預測的任務,得到節點的表徵向量即可。對於圖分類和圖的生成任務,需要採用pooling(池化操作)對整個圖做表徵向量,常見的方法有Flat Graph Pooling(求平均、最大、最小值pooling方式);另外一種是Hierarchical Graph Pooling(Diff pool方式),根據圖結構把整個node embedding聚合到一起組成一個graph embedding network。

file

根據不同的圖卷積方式和pooling(池化)層,我們可以得到不同的圖神經網路模型,比如GCN,GAT等。

--

02 DLG4NLP方法和模型

下面我們進入第二部分,即如何用圖神經網路去解決自然語言處理的任務。這一環節我會從三個方面進行介紹,首先是如何去構造自然語言任務裡的圖結構,其次是如何在圖結構基礎上進行表徵學習,最後講兩個比較典型的圖神經網路構架。

1. 如何構造NLP的圖結構

file

自然語言裡對文字的圖構造可以分為兩類:

  • 靜態圖構造
  • 動態圖構造

file

靜態圖構造的輸入可以為原始的句子、段落或者文件,輸出是我們針對輸入所構造出的圖結構。靜態圖可以在預處理階段完成,但是它需要有一些對句子或文件文字的領域資訊,比如一些語法資訊、語義資訊、邏輯資訊和主題資訊,根據領域資訊對句子或者文字構造一個圖。

file

根據不同的資訊或者文字,靜態圖可以進一步細分。

首先是Dependence Graph,該圖結構依賴於dependence parsing,可以用來捕捉句子的句法資訊,它更注重兩個詞之間的句法關係,所以該圖結構是一個比較簡潔的構圖表示。如果我們想用圖表示整個文件的話,我們可以結合連續邊的資訊來表示文件中句子之間的前後關係。

file

相對Dependence Graph,Constituency Graph展現的是句子的句法資訊,更注重整個句子的結構,而不是侷限於句子中兩個詞之間的句法關係。所以它更全面地展示了整個句子的結構性。

file

file

其次介紹AMR Graph和IE Graph,它們都是用來捕捉句子的語義資訊,更注重兩個詞之間語義關係。比如IE Graph例子裡面Paul是個人名,然後Seattle是個地名,所以我們首先需要表示它們倆屬於實體,同時也需要知道兩個實體之間的關係是一種grew up in的語義關係。根據實體關係,可以構造出IE Graph作為最終的構圖。

file

除了之前幾種構造圖外,還有Co-occurrence Graph,它是通過統計兩個詞同時出現的次數,得到Co-occurrence矩陣,然後將矩陣作為構圖的鄰接矩陣。

file

總結以上例子,靜態圖構建是需要額外的領域資訊來增強句子本身的資訊組成的圖結構。常用的資訊有句法資訊、語義資訊、主題邏輯資訊、co-occurrence資訊,甚至基於應用的資訊。所以根據不同的領域資訊,可以構造出不同的靜態圖結構。

file

下面介紹另外一種構圖方式即動態構圖,動態圖構造不需要有額外的領域知識去指導如何構圖。該方法直接把文字丟給機器,讓機器自己去學習圖結構。

例如有若干個表示為word或者句子的未知關係節點,首先通過圖相似矩陣學習的方式去構造一個全連線圖,然後對其做稀疏化操作得到稀疏圖,然後進行圖表徵學習。

file

動態圖構建中最重要的一個步驟是相似矩陣學習,其核心是計算任意兩個節點特徵向量相似度。首先需要設定一個相似的kernel去定義這兩個embedding的相似度。兩種典型的做法:一個是Node Embedding Based方法,第二個是Structure-aware方法,下面分別介紹這兩種方法。

file

Node Embedding Based方法依靠兩個節點的表徵向量(embedding)。先計算兩個節點embedding的相似度,然後把相似度作為加權的鄰接矩陣裡面的值。特徵向量計算相似度的方式也分兩種,一個是attention based,一個是cosine based。

file

Attention-based的方式在計算相似度時,會有可學習的引數來幫助計算每對節點對之間的attention,它其實有兩種方式來計算attention:

第一種是假設對所有的節點都共享可學習的引數,可學習引數是一個向量。

第二種方式是每一對節點都有自己的可學習的引數,這裡可學習的引數是一個矩陣了,矩陣裡面N代表節點的數量。

file

Cosine-based方法是先把節點的表徵向量都乘以一個可學習的引數矩陣,相當於將其投影到另一個新的空間,再計算新空間下兩個表徵向量之間的cosine值。如果想讓函式更加具有張力,可以借鑑多頭機制(multi-head)設定多個投影空間,即學多個引數。對於每一個頭引數都會有一個cosine值,然後把所有的cosine求平均,即為最終的cosine值。

file

在計算相似度時有時不僅要考慮node embedding,還要考慮圖本身的結構。可以用structure-aware相似矩陣來學習本身的初始結構,但該結構不確定對下游任務的影響,但是可以先用起來,然後去算structure-aware相似度。

file

structure-aware相似矩陣計算其相似度也有兩種方式,計算相似度時都將邊界的embedding算進去。

file

下面對動態圖和靜態圖的構造做一個總結:

a) 靜態圖的優點可以依靠認為構造去捕捉一些先驗目標知識,其缺點是人為構造會產生噪聲。同時無法確定構建的圖結構對下游任務是否有所幫助。當我們確定所掌握的領域知識是跟下游任務是匹配時,可以應用靜態圖結構。

b) 動態圖的優點是比較簡便,不需要額外的領域知識直接讓機器去學最優的圖結構,其圖結構和圖表徵的學習過程可以相互促進。缺點是圖結構的可解釋性幾乎為零,不太能解釋兩個節點之間的關係和代表的含義,第二個缺點是由於是全連線的圖導致穩定性很差。當缺少一些領域知識或者不確定用什麼圖去解決下游任務時,可以選擇動態圖構建來幫我們去學最優的圖結構。下面介紹如何做表徵學習。

2. 如何做NLP的圖表徵學習

file

圖表徵學習分為三種,為Homogeneous Graph、Multi-relational Graph和Heterogenous graph。Homogeneous Graph只有一種節點型別以及一種邊型別。Multi-relational Graph是一種節點型別以及多種邊型別。Heterogenousgraph則是多種節點型別和多種邊型別。

下面分別介紹這三種不同的圖表徵學習。

file

Homogeneous Graph的神經網路比較簡單,構建來源有兩種,一種是本身圖結構就是homogeneous,第二種是通過轉換操作,把non-homogeneous graph轉化成一個homogeneous graph。

file

接下來舉例子介紹,如何把不適合的non-homogeneous graph轉化成homogeneous graph。左邊圖結構是一個AMR graph,有多種不同的關係,把每個關係的ARG值當成一個節點,這樣就可以把它轉化成了只有一種ARG值的graph,如果將節點看作同等對,其就是一個homogeneous graph。

file

還有一個比較關鍵的問題,在構圖中會經常遇到連線的邊具有方向性。邊的方向性在表示兩個節點關係上是非常重要的。比如說在處理序列時,BiLSTM結構之所以效果很好,其實也是考慮到這種方向性,所以在圖結構上也要考慮這個方向性。目前處理方向有三個選擇:

第一個是在資訊傳遞時,只讓資訊沿著方向傳播,例如a中的紅色節點跟四個節點連線,但是因為讓資訊只沿著節點的箭頭方向傳播,所以它只受三個鄰居節點的影響。

第二個是把edge的兩個方向當成兩個edge種類,產生一個多關係的graph。

第三個是設計Bidirectional GNNs,直接用這種特殊的圖神經網路去解決問題。

file

下面詳細介紹特殊的Bidirectional GNNs,該圖神經網路分兩個型別:

第一種型別是對每一個方向都會搭建兩個獨立的卷積網路,分別學習embedding,到最後一層時,再把兩個方向得到的節點表徵連線到一起得到最終的表徵。

另外一種型別不同之處在於,雖然有兩個不同方向的卷積網路,但在每一層卷積之後都會把學到的節點表徵合到一起,把新的節點表徵去分別送到下一層兩個方向的卷積。

file

接下來介紹Multi-relation GNNs,其方法分為三類:

第一種是引入不同的與type相關的可訓練卷積引數。

第二種直接引入edge embeddings,來表示不同的關係。

第三種利用專門的Multi-Relation Graph Transformer。

file

下面是處理Multi-relation的方法。

第一種方法是對每一個關係學一個卷積核,相比於傳統的GNN,R-GGN有一個引數θ,對每個type都會學一個θ,每一個關係都會得到節點表徵,然後把得到的節點表徵做一個加和。

file

第二種直接引入邊的表徵向量,其核心是在做message傳播時,把邊的表徵向量加進來可以捕捉不同邊的種類。引入邊表徵向量有兩種方式,一種是邊表徵向量從頭到尾是固定不變的,另外一種是邊的表徵向量像節點一樣,在傳播中不斷地更新迭代。

file

eterogeneousGraph在NLP領域裡面更多用的是基於meta-path的GNNs。詳細介紹可以看ACL2020的文章。

3. NLP任務重的圖編碼解碼模型

file

在經典的NLP任務裡面,seq2seq的架構相對比較流行,比如自然語言翻譯這種實際問題,但是這種結構只能處理序列轉換,無法解決圖結構,所以為了把圖結構引入整個NLP任務,需要採用Graph2Seq的結構。

file

目前有兩個比較主流的結構,第一個是由encoder-decoder組成,其encoder是基於GNN神經網路組成,將圖作為輸入圖的embedding,然後decoder選擇為NLP裡針對不同下游任務所使用的語言生成器。

file

第二種結構是graph-to-Tree Model,輸出不只是需要sequence,我們還需要更詳細的圖結構文字。比如程式語言的生成,需要把它表示成為tree的結構模型來解決任務。

--

03 DLG4NLP典型的應用

接下來介紹Graph NLP裡面主要模型和方法的兩個典型應用。

file

一種廣泛的應用是文字問題生成,即根據輸入的答案,生成對應的問題。該應用可以看成一個生成問題,目的是希望decoder學到一個基於條件的分佈。

file

在ICLR220的這篇文章中,它是利用Graph2Seq的結構去解決生成問題,把輸入表示成一個圖結構,用BiGGNN去學習節點表徵,再配上RNN decoder做最後的問題生成。

file

另外一篇文章是總結概要的應用,它的目的就是把整個比較大的文章輸入進去,得到一個短摘要。該文章收錄在ICLR2021的summary session中。

--

04 DLG4NLP Python開源庫

最後介紹一下我們團隊開發的開源python庫Graph4NLP。

file

首先我們開源庫基於pytorch、DGL和CoreNLP開發,並且提供了Huggingface介面,進而可以使用bert之類的模型。

file

下面是對開源庫功能函式的概覽,其核心的module包含了Graph Construction即靜態圖構建和動態圖構建。還有其下游的任務,比如分類任務和生成任務。另外還包括一些比較典型的圖神經網路GCN和GraphSAGE等。我們還用python庫去實現了一些比較經典文章裡的一些模型,並且取得了不錯的效果。

file

接下來展示下python庫如何做完成NLP任務。

流程為首先做一個圖構建,將圖結構輸進去,用python庫的Graph Data產生Data資料型別,然後用GNN圖學習模組優化該圖,或者進行圖的表徵學習,最後可以根據具體的任務去選擇下游的模組,或者做分類、生成任務等。

file

這個表格展示了python庫在不同NLP任務上取得的不錯結果。如果大家想探索圖深度學習在NLP應用的話,請關注和嘗試該library,歡迎大家多提寶貴的意見,因為我們還在不斷的去更新我們的開源庫。今天就是我分享的全部內容,謝謝大家的關注。

--

05 精彩問答

Q1:現在像知識圖譜的圖表示學習的演算法多嗎?

A:目前邊的網路更多的是生成homogeneous graph, Heterogeneous graph也有一兩篇文章。

Q2:Bert加圖學習訓練不起來怎麼辦?

A:有可能是構建圖結構有問題,或者調參沒調好,可以試下上面講的開源python庫。先去做一個嘗試,然後對照排查問題。

Q3:最近transformer相對比較火,在用於NLP文字建模時用全連線的圖來進行建模,如果找一些比較稀疏的有語義的圖,也可以取得非常好的結果。您覺得有沒有可能把這兩種方法結合起來,同時利用全連線的圖和語義的圖?

A:我覺得transformer本身就是一種GNN形式,只不過它學的是個全連線圖,它有點類似於我剛才講的動態圖構建,因為動態圖的構建本身也是學一個全連線圖,如果你本身有原始的圖,可以借用原始的圖把它放到動態圖,然後兩兩去結合促進後面的圖學習。

Q4:將圖神經網路用於NLP,重點是在於圖的構建還是在於新的模型?

A:目前圖學習的效果已經不錯了,但基於不同應用,我覺得圖的構建是比較關鍵的一件事情,尤其是如果你做靜態圖構建的時候,你的資訊選取不對或者新增的圖資訊不對的話,你有可能會引入一些bias或一些noise,然後導致學不到你想要的一個資訊,或者得到了更多noise。


今天的分享就到這裡,謝謝大家。

本文首發於微信公眾號“DataFunTalk”

相關文章