傅 健
(復(fù)旦大學(xué)計算機(jī)學(xué)院 上海 200433)
語義匹配是自然語言處理中非常重要的一個任務(wù)。它旨在將多個句子進(jìn)行建模并計算它們的相似性或相關(guān)度,是許多具體應(yīng)用中非常中心的環(huán)節(jié),包括自動問答[1]、答案句子選擇[2]、信息檢索、釋義識別和文本蘊(yùn)涵[3-4]等。
在自動問答(Question Answering)任務(wù)中,對自然語句的建模和理解是非常基本和重要的,其難點通常在于自然語句由于時序和層次關(guān)系所帶來的復(fù)雜結(jié)構(gòu)。在許多神經(jīng)網(wǎng)絡(luò)模型中,我們可以用長短時記憶網(wǎng)絡(luò)LSTM[5](Long Short-Term Memory),一種循環(huán)神經(jīng)網(wǎng)絡(luò)RNN的改進(jìn)版本,亦或者是本文使用的卷積神經(jīng)網(wǎng)絡(luò)CNN[6](Convolutional Neural Network),去對句子和句對作建模。此外,通常也會使用雙向LSTM[7]。CNN對局部的計算選擇(local selecting)能力[8],使得它擁有提取輸入的有效特征和抽象特征。同時考慮到其便于修改的優(yōu)點[9-10],所以本文選擇使用CNN去做句子建模。
一個好的句子匹配算法,除了需要對自然語句的內(nèi)部結(jié)構(gòu)進(jìn)行建模之外,還需要考慮它們之間的交互。我們可以利用這些句對之間豐富的匹配模式信息,來獲得更好的匹配得分。所以,在基本的如ARC-I[11]這樣的句子匹配模型的基礎(chǔ)上,提出一種將兩個句子進(jìn)行詞和詞的對齊的方法(如ARC-II[11])。除了對齊和共同使用這些句對之外,我們還可以通過相似度匹配[12]達(dá)到這樣的目的。具體地,我們計算出一個相似度單元,并代入到后續(xù)的計算中去。這里需要補(bǔ)充說明的是,對于相似度的計算,可以放在神經(jīng)網(wǎng)絡(luò)的上游,也可以放在下游,亦或者上下游同時計算[13]。
在上述基礎(chǔ)上,我們也可以增加一些無需使用外部知識的特征,從而配合神經(jīng)網(wǎng)絡(luò),進(jìn)一步提高任務(wù)的表現(xiàn)(見實驗),例如TF-IDF、重疊詞指示器[2]、帶逆文本頻率指數(shù)加權(quán)(IDF-weighted)的重疊詞特征等。
綜上所述,我們提出應(yīng)用了基于卷積深度神經(jīng)網(wǎng)絡(luò)的語義匹配模型,不僅通過多層的卷積和池化,利用了句子各自內(nèi)部獨立的結(jié)構(gòu)信息,而且能夠捕捉每一對問題和答案之間豐富的模式信息。本文還將神經(jīng)網(wǎng)絡(luò)模型應(yīng)用在了基于文檔的中文自動問答任務(wù)(NLPCC DBQA Task)上,取得了不錯的效果,并且能夠配合額外的詞重疊等構(gòu)建的無外部知識特征進(jìn)一步提升效果。
受許多卷積網(wǎng)絡(luò)模型的啟發(fā)[9],本文基于卷積的句子模型ConvNet如圖1所示,其目的是對每一對問題query和文檔document都能學(xué)習(xí)出有效的中間特征表示,并用于后續(xù)的語義匹配。模型將輸入的句子序列,在詞嵌入處理之后,再用多層(或一層)卷積層和最大池化層進(jìn)行信息提取,最終得到一個定長的向量表示,并以此作為特征表示。需要額外說明的是,卷積時可以使用多個過濾器,其數(shù)量作為超參進(jìn)行調(diào)節(jié)。
圖1 基于卷積的句子模型結(jié)構(gòu),將輸入句子映射為 中間的特征表示
我們的句子模型按順序由詞嵌入層、卷積層、非線性層和最大池化層組成,以下將依次對這4個神經(jīng)網(wǎng)絡(luò)層作詳細(xì)介紹。
詞嵌入層的目的是將原先輸入的字或詞(可以分詞的話)映射到一定維度的表示空間中,從而賦予字或詞更豐富的上下文信息或同級信息。常用的詞嵌入方法主要為兩種,一是word2vec[14],基于字或詞和上下文周邊文本的相互預(yù)測;二是GloVe,基于字或詞在所有文本中前后出現(xiàn)次數(shù)。總而言之,詞嵌入都利用的是字或詞在上下文文本中豐富的統(tǒng)計信息。具體地,在本文的自動問答任務(wù)中,我們首先對問題和答案這兩個輸入序列先作中文分詞之后(利用分詞工具,如jieba等),再用word2vec對序列中的每個詞作分布式表示,詳細(xì)步驟如下:
首先,整個神經(jīng)網(wǎng)絡(luò)的輸入看作一串詞的序列:[w1,w2,…,wl],且每個詞均來自詞表V。每個詞會依據(jù)預(yù)先訓(xùn)練好的word2vec詞嵌入,從已有的嵌入矩陣W∈R|v|×d中獲得對應(yīng)的分布式向量w∈Rd。
除了詞嵌入表示之外,我們還對句子中的每一個詞增加了重疊指示器特征,表示當(dāng)前詞是否在另一個句子中出現(xiàn)。這將作為額外的輸入,并參與后續(xù)匹配打分的計算(見圖1模型結(jié)構(gòu))。最終,我們對問題和文檔,都將分別得到句子矩陣S∈RL×(d+1)。
卷積層即對當(dāng)前的輸入以卷積作為基本操作,進(jìn)行進(jìn)一步處理。與全連接(fully connected)網(wǎng)絡(luò)相比,它們的計算方式相同,只不過卷積的輸入為其中的一段定長的窗口大小。通常卷積神經(jīng)網(wǎng)絡(luò)的輸入為圖片,具體地,圖片輸入可看作是長度、寬度、深度(depth或channel)的三圍張量,卷積時則用一個或多個擁有長度、寬度的filter在圖片的每個channel上計算。那么應(yīng)用到自然語言處理任務(wù)時,我們可以把輸入的channel看作1,而卷積時filter的size設(shè)定為詞的embedding。前面介紹過,卷積的作用可以有效提取局部特征,進(jìn)一步地,我們可以設(shè)置多個卷積窗口大小,從而在局部特征外,得到盡可能更好的全局特征。下面進(jìn)行詳細(xì)步驟介紹。
卷積層的目標(biāo)是提取特征或模式信息,具體地,在給定輸入(詞級別)序列qemb=rw1,rw2,…,rwl之后,我們定義矩陣Zq=[z1,z2,…,zl],每一列包含一個向量zi∈Rdws,代表序列中ws的詞的嵌入表示。在我們對問題q,用c個(窗口大小不同的)filter進(jìn)行卷積操作后,得到:
Q=WZq+b
(1)
式中:Q∈Rl×c中的每一行m包含了以q中的第m個詞為中心的文本窗口提取出來的特征,W和b為神經(jīng)網(wǎng)絡(luò)訓(xùn)練中待學(xué)習(xí)的參數(shù)。需要說明的是,卷積過濾器的數(shù)量為c,以及詞級別文本窗口大小ws均為超參,需要進(jìn)行手動選擇。
接著,我們用相同的方式計算出答案a的輸出矩陣A。在這里,神經(jīng)網(wǎng)絡(luò)可以選擇共享參數(shù)或相互獨立。
為了使得神經(jīng)網(wǎng)絡(luò)能夠?qū)W習(xí)到非線性決策邊際,從而更好地提取出特征的表示,我們需要在線性的卷積層之后增加一層非線性激活函數(shù)α()。需要說明的是,這將會應(yīng)用在之前卷積處理之后結(jié)果的每一位元素上。通常,非線性激活函數(shù)有多種選擇,如relu(常見于圖像任務(wù)重)、sigmoid、tanh等。在本文中,非線性激活函數(shù)默認(rèn)使用的是雙曲正切函數(shù)tanh,它會將原先的輸出重新映射到[-1,1]之間。
在過了卷積層與非線性函數(shù)計算之后,我們還需要池化層來將信息進(jìn)行融合,并且同時將表示進(jìn)行壓縮。在卷積中提取特征時,通常采用最大池化或者平均池化。在本文中,我們選擇使用最大池化,即在每一個filter中都選取最大值作為輸出,以便為后續(xù)的語義匹配提供有效信息。
整個句對匹配模型的結(jié)構(gòu)如圖2所示。我們基于卷積的句子模型(前面所述),能夠?qū)W習(xí)將輸入的句對各自表示為中間向量表示,進(jìn)而我們可以繼續(xù)利用它們?nèi)ビ嬎阆嗨贫取Ec傳統(tǒng)做法類似[8,15]:在我們獲得兩個句子的矩陣表示之后,將其作為一個多層感知器[16](multi-layer perceptron,MLP)的輸入,并得到(分類或分?jǐn)?shù))輸出。
圖2 整體卷積深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖,用以語義匹配任務(wù)
但是,這里與之前工作不同的是,我們還可以進(jìn)一步地提高兩個句子之間的交互性,例如計算額外的問題q與文檔d的相似度得分、用attention方法對原來的結(jié)果進(jìn)行重新權(quán)重上的表示等。
接下來,我們將描述如何使用之前得到的中間特征表示,計算出相似度得分(或稱為相似度單元),以及介紹其余的神經(jīng)網(wǎng)絡(luò)層。
在得到輸入句對各自的中間向量表示之后,最常見的做法是將其進(jìn)行拼接操作后作為輸入一起帶到后續(xù)的網(wǎng)絡(luò)層(如多層感知器)中計算。但這種做法的一個弊端在于沒有充分地提取出它們作為匹配的豐富模式信息,故需要加上交互層,用以將句對間的匹配信息表示出來。具體地,我們可以選擇將句對作為輸入,額外計算一些表征相似度的中間結(jié)果,并一同帶入后續(xù)網(wǎng)絡(luò)層。下面進(jìn)行詳細(xì)的步驟介紹。
在我們用基于卷積的神經(jīng)網(wǎng)絡(luò)句子模型分別對問題query和文檔document進(jìn)行計算后,得到了中間向量的特征表示xq和xd。通常xq和xd均為二維張量,第二維維度d相同(也可以不同,不同時需改變后面的參數(shù)矩陣大小)。據(jù)此,我們可以進(jìn)一步計算句對的相似度得分(或稱為相似度單元)。借鑒已有的方法[17],我們可以通過如下方式計算出相似度單元:
式中:M∈Rd×d是一個相似度矩陣,作為參數(shù),隨著訓(xùn)練進(jìn)行優(yōu)化、更新。需要說明的是,在這里可以選擇同時計算一個或多個這樣的相似度單元(相應(yīng)地,會用到一個或多個參數(shù)矩陣M),從而得到提取到更多的有效信息,帶入后續(xù)的計算中。
MLP是一個常見的基本的網(wǎng)絡(luò)結(jié)構(gòu)。它基于前向反饋網(wǎng)絡(luò),含有多層網(wǎng)絡(luò)層,包括輸入層、中間的隱層、輸出層等,每一層均為全連接層,即下一層的輸出都依賴上一層的所有神經(jīng)元。整個多層感知器,最終會得到一個分類或分?jǐn)?shù)輸出,之后根據(jù)選擇的目標(biāo)函數(shù)進(jìn)行反向傳播,更新前面的參數(shù)以使得相應(yīng)的目標(biāo)函數(shù)降低(向梯度下降的方向)。在本文中,對于自動問答任務(wù),我們簡單地將其看作是一個0-1(二)分類任務(wù),即正確答案看作1,錯誤答案看作0(多個正確語句的前后順序不影響評價指標(biāo)的高低)。
具體地,本文使用的MLP除了輸入層外,還由一層隱藏層,即一層線性全連接層,和一個邏輯回歸組成(softmax層),最終得到一個二值分類的輸出結(jié)果。隱藏層的計算如下所示:
f(whx+b)
(3)
式中:wh和b為隱藏層的參數(shù)向量,wh為隱層的權(quán)重向量,b為激活閾值。另外,f是一個非線性激活函數(shù)(默認(rèn)為tanh函數(shù))。
接下里類似地進(jìn)行一層輸出層的計算,但在線性計算后無需跟一個非線性函數(shù)。而是對計算的結(jié)果進(jìn)行邏輯回歸計算(以得到二值分類),softmax函數(shù)會計算出所有可能標(biāo)簽(是否為正確答案)的概率分布,如下所示:
p(y=j|x)=eyj/∑eyk
(4)
在得到本文自動問答任務(wù)中是否為正確答案的概率分布表示之后,需要為模型定義一個訓(xùn)練目標(biāo)函數(shù)或者損失函數(shù)。根據(jù)具體任務(wù)的不同,損失函數(shù)可以選擇交叉熵?fù)p失函數(shù)、均方差誤差損失函數(shù)、最大邊際損失、其他距離衡量等。而在選取最終的目標(biāo)函數(shù)之后,我們模型的所有網(wǎng)絡(luò)層的參數(shù)才能進(jìn)行相應(yīng)的更新,如使用批量的隨機(jī)梯度下降(SGD)等優(yōu)化方法,最終使得整個任務(wù)的performance提高。
在本文的自動問答任務(wù)中,我們將輸出看作了0-1二值分類任務(wù),并選擇隨機(jī)梯度下降進(jìn)行模型參數(shù)更新。具體地,整個模型的訓(xùn)練目標(biāo)為降低交叉熵?fù)p失函數(shù)為:
(y,o)=-(1/N)∑ynlogonn∈N
(5)
式中:y為正確標(biāo)簽答案,o為預(yù)測得分,N為類別(兩類)。模型對每一輪輸入的batch-size的數(shù)據(jù)進(jìn)行如上更新,并進(jìn)行多輪迭代,最終以early-stop的結(jié)果得到最優(yōu)的模型。
接下來,我們討論將上述基于卷積的語義匹配模型應(yīng)用到具體的自然語言處理任務(wù)中去,并加以改進(jìn)。數(shù)據(jù)集上,我們選取了中文的自動問答任務(wù),其數(shù)據(jù)集來源于NLPCC的DBQA任務(wù)(document-based QA Task)。配合其他如詞重疊等特征,模型取得了實際有效的結(jié)果。
我們在開放域上的基于文檔的中文自動問答數(shù)據(jù)集上進(jìn)行了實驗,數(shù)據(jù)集如表1所示。其中,dbqa-train和dbqa-test的QA-pairs個數(shù)分別為181 882和122 531。經(jīng)統(tǒng)計,在中文分詞后,大多數(shù)問題語句的長度在不到20個詞左右,而大多數(shù)答案語句的長度在不到40個詞左右。
表1 NLPCC DBQA任務(wù)數(shù)據(jù)集
關(guān)于任務(wù)的評價指標(biāo),考慮到DBQA任務(wù)實際上定義為一個排序任務(wù),因此我們選擇使用更合適的Mean Reciprocal Rank(MRR)、Mean Average Precision(MAP)這兩種常見的搜索排序指標(biāo)進(jìn)行評價,而不采用正確率。其中,以MRR指標(biāo)結(jié)果為主。
在詞嵌入上,我們用word2vec方法在中文wiki百科語料上訓(xùn)練了word embedding,其中包含了超過230 000的中文文章。并且值得一提的是,預(yù)訓(xùn)練的word embedding對任務(wù)效果具有很大的幫助。
實驗結(jié)果具體如表2所示。整個表格依次展示了:(1) 基于CNN的神經(jīng)網(wǎng)絡(luò)基準(zhǔn)線的效果;(2) 額外增加的計算相似度單元所帶來的效果提升;(3) 額外增加特征(詞重疊特征)所帶來的效果體征;(4) 基于模型并配合額外特征(詞重疊特征)所共同帶來的效果提升??梢钥吹剑嗨贫葐卧驮~重疊特征都分別起到了很大的作用。并且,基于卷積的語義匹配模型可以與額外的特征共同配合,得到更好的任務(wù)效果。需要說明的是,這幾種神經(jīng)網(wǎng)絡(luò)的超參并未做過多的調(diào)整,后續(xù)還有待做更多的探究。
表2 NLPCC DBQA數(shù)據(jù)集上的實驗結(jié)果
在本文中,我們提出并運用了適用于語義匹配的基于卷積的深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),它不僅考慮了對每個獨立句子作層次化建模,同時還提取出它們的匹配模式特征。并且,在開放域上的基于文檔的中文自動問答任務(wù)中,配合詞重疊等其他特征,本模型取得了實際有效的結(jié)果。后續(xù)仍有待作進(jìn)一步的研究。