陳觀林, 侍曉龍, 周 梁, 翁文勇
(1. 浙大城市學院 計算機與計算科學學院 浙江 杭州 310015; 2. 浙江大學 計算機學院 浙江 杭州 310027; 3. 杭州市大數(shù)據(jù)管理服務中心 浙江 杭州310020)
語義相似計算是機器進行語義理解的一種手段[1-2],通過相似類比從而讓機器能間接地理解問題。語義相似計算應用十分廣泛,比如百度問答系統(tǒng)、新聞推薦領(lǐng)域等。
相比于傳統(tǒng)的基于統(tǒng)計的語義相似計算模型,基于機器學習和深度學習的語義相似計算模型能更加細致地表達句子的語義特征和結(jié)構(gòu)特征,比如詞向量[3]、長短時記憶網(wǎng)絡(luò)(long short-term memory, LSTM)模型[4]。這些語義特征模型存在一些深度學習模型的通病,比如長短時記憶模型雖然是專門用來處理時序模型的,這種模型可以較好地表達句子的結(jié)構(gòu)信息,但是它在處理長句子過程中會因為反向傳播算法而帶來梯度消失問題,從而喪失很多語義信息,尤其是句子靠前部分的詞語信息,因為梯度很難傳到靠近前面詞語的位置。
深度學習的快速發(fā)展促進了詞義、語義理解方面很大的進展,比如Word2vec[5]、LSTM等對語義特征提取有很好的表達方式。詞向量模型的出現(xiàn)很好解決了詞義級別上的表達,通過收集大量語料庫可以很好訓練出詞與詞之間的關(guān)系表達,詞義關(guān)系通常體現(xiàn)在其詞向量的空間距離上的關(guān)系。LSTM模型主要是循環(huán)神經(jīng)網(wǎng)絡(luò)的改進模型,用來解決具有時序相關(guān)性的問題。通過使用LSTM模型提取句子語義信息,可以很好地表達句子結(jié)構(gòu)上的信息,然后映射到固定向量特征中,通過計算向量的距離來表示相似程度,這是比較主流的處理方式。卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks, CNN)在圖像處理領(lǐng)域取得了巨大成功,很多研究人員把CNN當作語義特征抽取的一種方式,將句子的詞向量拼接成句子矩陣,使用CNN網(wǎng)絡(luò)卷積轉(zhuǎn)化為語義矩陣,通過池化等方法從語義矩陣抽象出語義向量,計算向量的余弦距離或者歐氏距離等。注意力模型對圖像和自然語言處理的深度學習模型有重要的影響,注意力模型可以用于LSTM等模型當中,緩解模型的語義丟失現(xiàn)象。
深度學習的語義計算模型一般是基于Siamese[6]模型,Siamese網(wǎng)絡(luò)本質(zhì)上也是解決降維問題,將句子的語義映射到一個低維的向量空間。LSTM Siamese Network網(wǎng)絡(luò)[7]是Siamese 網(wǎng)絡(luò)的一個實例框架,以單個字符作為輸入單元,用LSTM網(wǎng)絡(luò)來代替Siamese網(wǎng)絡(luò)的函數(shù),通過LSTM來提取特征得到一個固定長度向量,然后通過全連接層后抽取兩個樣本的最終特征作為計算距離的向量,采用余弦距離表示語義相似程度。Siamese LSTM模型[8]最大的亮點是使用了曼哈頓距離來衡量句子語義相似程度。最近在斯坦福數(shù)據(jù)集中表現(xiàn)較好的是DRCN[9]模型,該模型將前層的特征拼接到下一層,從而可以長時間保留前層的信息。
Information distilled LSTM(ID-LSTM)[10]模型將強化學習算法和LSTM結(jié)合用于文本分類任務,通過訓練一個蒸餾網(wǎng)絡(luò)將句子中非重要詞蒸餾出去。為了判斷蒸餾網(wǎng)絡(luò)模型好壞,引入強化學習的策略梯度算法,LSTM抽取后的語義特征輸入到分類網(wǎng)絡(luò)當中進行文本分類,并且使用分類網(wǎng)絡(luò)輸出的結(jié)果作為回報值來更新蒸餾網(wǎng)絡(luò)模型。
本文基于Siamese Network模型,加入強化學習的方法,通過一系列句子詞語蒸餾的方法,將句子中不重要的詞語蒸餾出去,從而可以改善LSTM進行語義提取過程中對重要的詞語學習不到的問題,實驗結(jié)果表明該方法對中文句子有不錯的效果。
深度確定性策略梯度算法(deep deterministic policy gradient,DDPG)[11]是一種強化學習算法,使用策略梯度方法[12-13]來更新神經(jīng)網(wǎng)絡(luò)的參數(shù)。DDPG算法有策略網(wǎng)絡(luò)Actor和估值網(wǎng)絡(luò)Critic兩個部分組成:Actor是動作執(zhí)行者,輸入的是環(huán)境特征,輸出的是動作;Critic輸入的是環(huán)境特征以及策略網(wǎng)絡(luò)輸出的動作,而輸出的是評判該Actor最終能獲得總回報值的期望。同時為了解決策略更新過程中神經(jīng)網(wǎng)絡(luò)收斂不穩(wěn)定情況,DDPG算法在更新梯度的時候使用了軟更新的策略,在訓練過程中定義在線網(wǎng)絡(luò)和目標網(wǎng)絡(luò),并不是直接將在線網(wǎng)絡(luò)復制給目標,而是以微小的更新量更新給目標網(wǎng)絡(luò),這樣可以使訓練過程更加穩(wěn)定。DDPG網(wǎng)絡(luò)算法步驟如下。
1) 初始化Actor和Critic的在線網(wǎng)絡(luò)和目標網(wǎng)絡(luò)。
2) 將在線網(wǎng)絡(luò)參數(shù)拷貝給目標網(wǎng)絡(luò)。
3) 循環(huán)以下步驟:
① 在線的Actor會根據(jù)傳入的環(huán)境st執(zhí)行動作at;
② 執(zhí)行動作以后獲得一個回報值rt,并且更新新的狀態(tài)st+1;
③ 將這個過程中的st、at、rt、st+1存儲到一個緩沖區(qū)中;
④ 互動多個過程后,從緩沖區(qū)采樣然后訓練Critic網(wǎng)絡(luò),采用傳統(tǒng)Back Propagation的更新方式;
⑤ 采用策略更新的方式更新Actor;
⑥ 采用軟更新的方式將在線的參數(shù)更新到目標網(wǎng)絡(luò)當中。
本文將強化學習算法和Siamese LSTM模型進行融合,訓練出具有一定自動蒸餾句子能力的語義相似計算模型,模型的整體結(jié)構(gòu)如圖1所示。
圖1 模型整體結(jié)構(gòu)Figure 1 The overall architecture of the model
模型的整體結(jié)構(gòu)是一個強化學習的模型,類似于DDPG算法模型,有兩個組成部分,最外圍的策略網(wǎng)絡(luò)是句子蒸餾網(wǎng)絡(luò)模塊,該網(wǎng)絡(luò)使用多層深度神經(jīng)網(wǎng)絡(luò)模型,可以看成是一個Actor網(wǎng)絡(luò)。內(nèi)層的整體架構(gòu)是一個Siamese LSTM模型,可以看成是一個Critic網(wǎng)絡(luò),Multi-LSTM使用了兩層的LSTM模型疊加,并且在第二層LSTM模型的隱藏層輸出加入Attention模型來加權(quán)語義,最終將提取的語義向量用曼哈頓距離來表示語義相似度。模型的訓練模式也和DDPG算法相似,Actor網(wǎng)絡(luò)部分和Critic網(wǎng)絡(luò)部分分別訓練,內(nèi)部的環(huán)境模型通過反向傳播算法(back propagatio,BP)[14]來更新,外部的策略網(wǎng)絡(luò)根據(jù)環(huán)境的損失值使用策略梯度來更新。
句子蒸餾網(wǎng)絡(luò)是由策略網(wǎng)絡(luò)和Multi-LSTM網(wǎng)絡(luò)組成的結(jié)構(gòu),Multi-LSTM是環(huán)境模型的一個組成部分,用于句子的語義抽取,是環(huán)境和Actor交互的唯一接口。Policy Network模型就是Actor網(wǎng)絡(luò),模型的詳細表述如圖2所示。
圖2 句子蒸餾網(wǎng)絡(luò)模型Figure 2 The network model of sentence distillation
圖2(a)是Multi-LSTM模型,包含兩層的LSTM網(wǎng)絡(luò),圖2(b)是Policy Network模型,是一個兩層的神經(jīng)網(wǎng)絡(luò)模型,其中{w1,w2,…,wt,…,we}表示每個時刻輸入句子的詞向量,{S1,S2,…,St,…,Se}表示每個時刻細胞的狀態(tài),初始時刻將LSTM細胞初始化為0,{h1,h2,…,ht,…,he}表示每個時刻LSTM的隱藏層輸出,{a1,a2,at-1,an}表示每個時刻Policy Network的輸出動作值,當詞向量輸入到LSTM模型當中的時候,都會先將LSTM細胞當前的狀態(tài)和隱藏層的輸出以及詞向量合并成狀態(tài)St,St=St-1⊕ht-1⊕wt。
將第一層LSTM細胞當前狀態(tài)和隱藏層輸出以及詞向量合并成狀態(tài)St后,將狀態(tài)傳入句子蒸餾網(wǎng)絡(luò)判斷當前傳入詞是否應該被保留,如果判斷保留就將詞向量傳入第一層LSTM模型當中進行計算,如果判斷不保留則跳過當前詞。同時將采用兩層的LSTM模型來進行語義特征提取,通過句子蒸餾網(wǎng)絡(luò)可以將一個長句子中的非關(guān)鍵詞去掉,從而保留句子的核心詞語,使得語義相似判斷效果更好。
協(xié)同注意力是一種相互加權(quán)的機制,是一種軟注意力的加權(quán)方式。LSTM的第二層輸出每個時刻的語義信息。將這些語義信息進行相互加權(quán),其中兩個多層的LSTM模型的權(quán)重可以根據(jù)輸入的文本類型來決定是否共享參數(shù)。模型的結(jié)構(gòu)如圖3所示。第二層的{H1,H2,…,Ht,…,He}輸出狀態(tài)傳入加權(quán)模型當中進行加權(quán)。協(xié)同注意力模型的內(nèi)部加權(quán)方式有很多種,比如可以直接將兩個多層LSTM模型的最高層生成的每個時刻語義矩陣直接進行相乘,然后經(jīng)過Softmax函數(shù)來生成權(quán)重信息,也可以用額外的語義矩陣進行加權(quán),如圖4所示的加權(quán)方式,其中H1和H2表示LSTM的第二層隱藏層輸出拼接成的語義矩陣,Ws是一個L×L加權(quán)矩陣,H1是一個L×n形狀的矩陣,H2是一個L×m形狀的矩陣,進行矩陣操作運算:
圖3 Co-Attention加權(quán)模型Figure 3 The Co-Attention weighted model
圖4 Co-attention加權(quán)方式Figure 4 The Co-attention weighted method
經(jīng)過運算可以獲得一個n×m的權(quán)重矩陣,然后將每行的參數(shù)同樣相加,并將每列的參數(shù)相加,經(jīng)過Softmax函數(shù)進行歸一化后,可以分別獲得H1語義矩陣和H2語義矩陣的每個時刻分別對應的語義權(quán)重向量,最后將各自的權(quán)重向量和語義矩陣相乘可以獲取最后句子的語義向量。
單個的加權(quán)矩陣往往會加權(quán)語義矩陣中的某一個方面,我們?yōu)榱双@取語句更豐富的語義信息,使用多個加權(quán)矩陣來對LSTM每個時刻輸出的語義進行加權(quán),生成多個權(quán)重向量。為了避免多個權(quán)重矩陣最終生成的權(quán)重矩陣相同從而失去豐富性,在最終的函數(shù)當中會定義一個正則項,正則項的推導如下。
算法整體的流程和DDPG算法流程類似,有在線和目標網(wǎng)絡(luò)兩個部分,依據(jù)策略更新的方式更新網(wǎng)絡(luò)。模型在訓練過程中不容易收斂,會因為參數(shù)大小或者參數(shù)的遞減策略設(shè)置不正確等原因使整個模型達不到理想的效果。為了使訓練過程更加穩(wěn)定,我們將使用高策略的更新方式來更新網(wǎng)絡(luò)。高策略更新方式定義在線和目標兩組網(wǎng)絡(luò),兩組網(wǎng)絡(luò)的結(jié)構(gòu)完全相同,但是更新時間不同。在每個批量訓練之前要將目標網(wǎng)絡(luò)的參數(shù)賦值給在線網(wǎng)絡(luò),然后用在線網(wǎng)絡(luò)作為訓練網(wǎng)絡(luò)來參與整體的訓練,并且在一個批量當中進行每個樣本的更新,當一個批量訓練完畢后,要將在線網(wǎng)絡(luò)當中的參數(shù)更新到目標網(wǎng)絡(luò)上,更新方式使用的是軟方式,即設(shè)置一個參數(shù)β,則最終更新到目標網(wǎng)絡(luò)上的參數(shù)為Targetθ=(1-β)Targetθ+βOnlineθ。
最后在下個批量訓練開始之前,將目標網(wǎng)絡(luò)的參數(shù)再次賦值給在線網(wǎng)絡(luò)進行下一輪的訓練,同時本文將采用曼哈頓距離來表示句子之間相似性,損失函數(shù)采用對比損失值作為訓練。
在訓練過程中還用到一些訓練技巧,比如在強化學習訓練過程中,當要學習的環(huán)境很復雜的情況下,開始訓練收斂過程會很慢,或者很可能不會收斂,因此會有一個預訓練的過程。預訓練過程可以認為是模型學習環(huán)境的一個初始的合理參數(shù)的設(shè)置過程。對于句子蒸餾網(wǎng)絡(luò)的預訓練部分,由于本文后續(xù)實驗采用數(shù)據(jù)的中文詞匯特殊性(句子的前幾個詞非常重要),一般將句子的前幾個詞組保留,后面的詞組以一定的概率隨機蒸餾出去。
本論文的實驗數(shù)據(jù)使用的是網(wǎng)絡(luò)爬取的數(shù)據(jù),包括一整套汽車名稱數(shù)據(jù)、汽車的配件信息以及售后信息等,用戶同樣會提供他們收集的汽車信息的數(shù)據(jù)庫,我們要將這兩個數(shù)據(jù)庫的信息進行整合,使得相同型號的汽車信息能被整合到一起。但是用戶提供的汽車名稱和本文數(shù)據(jù)庫中的汽車名稱不完全相同,如表1所示,該表是部分本文標注好的數(shù)據(jù),右邊是本文數(shù)據(jù)的命名標準,左邊是用戶的數(shù)據(jù)庫??赡軙行吞柹系拿枋霾灰粯?,通過語義相似計算的方法將用戶提供的名稱和數(shù)據(jù)庫中的車輛名稱做一個相似性匹配,從而確定是我們數(shù)據(jù)庫當中的哪個型號的車,然后將所有的數(shù)據(jù)進行整合。實驗數(shù)據(jù)有6萬多對已經(jīng)標注的配對的數(shù)據(jù),訓練和測試數(shù)據(jù)集比例為5∶1。在生成訓練數(shù)據(jù)過程中要1∶2隨機生成負樣本,對于每一對標注的語句對,隨機從樣本數(shù)據(jù)中選擇非配對的句子作為負樣本。
表1 數(shù)據(jù)命名標準Table 1 The standard of naming data
本文使用gensim工具來訓練Word2vec的詞向量,gensim是一個python庫,能實現(xiàn)很多常用自然語言處理的算法,比如latent semantic analysis(LSA)、latent dirichlet allocation(LDA)等,首先使用數(shù)據(jù)庫當中的所有汽車作為語料庫來訓練詞向量,總量大概有1 000多萬條數(shù)據(jù)。對數(shù)據(jù)庫當中的詞進行一些特殊符號及格式除雜后,使用jieba分詞工具對汽車描述名稱進行分詞,然后使用gensim工具進行中文的詞向量訓練。
3.3.1模型的訓練 本次實驗是驗證多加權(quán)協(xié)同注意力模型有效性,該模型主要在Siamese LSTM上實現(xiàn),加權(quán)方式會定義額外的加權(quán)矩陣進行語義的加權(quán),具體結(jié)構(gòu)參考2.3節(jié)。首先是3個Co-attention模型,3個模型的不同點是加權(quán)矩陣的數(shù)量不同。訓練的兩個模型的參數(shù)如表2所示。
表2 Co-attention模型參數(shù)Table 2 The parameters of the Co-attention model
兩個模型都使用Siamese LSTM架構(gòu)和兩層的LSTM來計算輸入句子的語義信息。輸入句子長度大于30的句子將被采用截斷處理。輸入句子的長度小于30的句子使用特殊字符填充。每次輸入一個Batch進行訓練。句子之間的相似度采用曼哈頓距離來表示,損失函數(shù)使用對比損失函數(shù)來計算。最后使用Adam優(yōu)化算法[15]來調(diào)整參數(shù)。
3.3.2實驗結(jié)果分析 本次實驗主要是驗證多加權(quán)的注意力模型效果。試驗結(jié)果表明:當加權(quán)矩陣從1個矩陣變成3個矩陣,并且使用一定正則項來訓練以后,準確率有明顯提升,從0.85提升到0.87;但是從3個加權(quán)矩陣上升到10個加權(quán)矩陣的時候,實驗效果提升的幅度明顯小很多。由此我們可以看出,多加權(quán)的注意力模型相比于單個加權(quán)模型來說有一定的提升效果,但是當加權(quán)矩陣過多的時候,提升就很小,同時也會增加很多計算量。
本次實驗選取測試數(shù)據(jù)中用戶數(shù)據(jù)庫命名的數(shù)據(jù)作為原始數(shù)據(jù),設(shè)置閾值為0.5,對于每個用戶的汽車名稱,和我們數(shù)據(jù)庫的汽車名稱作相似性計算,大于0.5的作為相同車名備選項,然后把相似值排序后選出最相似的一個作為最終的相似車型名稱。本次實驗使用Siamese LSTM模型作為對比模型,最終試驗結(jié)果在測試數(shù)據(jù)集下,我們提出的基于強化學習的模型相較于Siamese LSTM模型準確率從91%上升到95.7%。
由于訓練數(shù)據(jù)不夠充分,所以訓練出來的蒸餾模型對于部分句子蒸餾出的信息比較多,比如必要的汽車名稱或者一些車型的具體型號被蒸餾出去,導致相同車型的車名稱計算相似性時值會很小,從而被丟棄,所以召回率會有一些損失,從100%下降到96%。但是蒸餾模型能夠蒸餾出去一些非必要的詞語,比如像“商務型”等修飾詞,可以使得語義抽取更加簡練,能夠突出重點信息。而非蒸餾的模型,可能會受汽車名稱中過多的無效或者是錯誤的修飾性詞語的干擾,比如我們用戶數(shù)據(jù)庫有一個汽車為“駿捷SY7182UZ 1.8T AT(200603) 駿捷1.8T AT舒適型轎車”,我們的車型庫的數(shù)據(jù)里有“中華SY7182UZ轎車 駿捷1.8T 自動擋 尊貴型”和“中華SY7182US轎車 駿捷1.8T 手動擋 舒適型”,在Siamese LSTM模型計算下后一個會比前一個相似性還高,這樣的情況在樣本數(shù)據(jù)中大量存在。但是判斷是不是同一輛車一般只需要車名和緊接著車名后面的車型號就能唯一識別出來,因此蒸餾模型可以一定程度地將后面修飾的蒸餾出去,因此會增加模型判斷的準確率。
表3為句子蒸餾前后的效果,其中第1列是原來的汽車名稱,第2列是經(jīng)過分詞工具分詞后去除特殊符號后的模型輸入數(shù)據(jù),第3列的是蒸餾后的效果。雖然訓練數(shù)據(jù)不足,但是可以看出句子蒸餾模型會對句子中一些不太重要的修飾性詞語蒸餾出去,基本上會保留主要的汽車名稱以及必要的汽車統(tǒng)一型號名稱,這些信息是識別汽車唯一性的充要條件。但也會導致比如排量、年份等信息丟失,這與具體的訓練數(shù)據(jù)不足有關(guān)。
表3 句子蒸餾效果Table 3 The sentence distillation results
本文將深度學習算法和強化學習算法結(jié)合起來研究,通過使用強化學習算法來改善LSTM模型提取語義時可能的語義丟失現(xiàn)象,在語義相似計算模型Siamese Network上取得了很好的效果。但是本文的模型仍然存在一些問題:由于模型是采用強化學習方式訓練,LSTM提取的語義很復雜,模型要想收斂比較好就需要大量的采樣,從而大大增加訓練的時間,否則很容易陷入局部最優(yōu);另外,測試使用的場景和數(shù)據(jù)有限,只是在比較小的項目數(shù)據(jù)集上測試,對于很多其他場景的應用沒有測試。