郭江華,苑迎春,2+,王克儉,2,何 晨
(1.河北農業大學 信息科學與技術學院,河北 保定 071001;2.河北農業大學 河北省農業大數據重點實驗室,河北 保定 071001)
預訓練語言模型BERT(bidirectional encoder representations from transformers)經過有監督微調(fine-tune)后展示出了強大的文本表征能力[1]。然而在沒有微調的情況下,BERT便失去了良好的句嵌入表征能力[2]。模型嵌入表征方面的現有研究表明,大多數語言模型學習到的嵌入在向量空間上的分布并不均勻[3,4]:計算句嵌入時,高頻詞的詞嵌入將會主導句嵌入,難以體現差異性[5];而低頻詞的詞嵌入分布較稀疏,存在表征語義能力較弱的“空洞”[6]。這些問題限制了模型的句嵌入表征能力。
最近的研究表明,對比學習(contrastive learning)可以有效提高句嵌入分布的均勻性[5,7]。SimCSE(simple contrastive learning of sentence embeddings)[7]就采用了對比學習方法,在無監督情況下通過dropout[8]作為數據增強方式構建正樣本,并采用批內負樣本策略,有效提高了BERT在無監督情況下的句嵌入表征能力。然而,無監督SimCSE仍有不足之處:一方面它只基于dropout構建正樣本,構造方式有待豐富;另一方面由于dropout機制本身帶來的訓練與測試的不一致性,模型參數自由度更高,影響模型的泛化能力[9]。
本文基于無監督SimCSE提出無監督句嵌入學習方法SimCSE-PSER(unsupervised SimCSE combining positive sample enhancement and R-Drop),采用dropout和位置嵌入擾動聯合作為數據增強方法,從而在相同語義下構造具有更大差異性的正樣本;并引入R-Drop正則化方法[9],使用KL散度(Kullback-Leibler divergence)對模型生成的句嵌入分布進行正則約束,降低模型在訓練和預測時的不一致性。
近年來,無監督句嵌入表征研究進展迅速。Li等[6]提出BERT-flow模型,通過可逆映射將BERT的向量空間映射到各向同性的標準高斯分布空間;Huang等[10]提出BERT-whitening方法,采用線性變換校正BERT的句嵌入協方差矩陣并執行降維操作,從而達到與BERT-flow相近的效果。此類后處理方法雖然提升了句嵌入的表征效果,但是無法對模型本身進行調整,提升空間有限。Zhang等[11]提出IS-BERT模型,對各句的詞嵌入提取n-gram特征作為局部特征,句嵌入作為全局特征,把最大化局部特征與全局特征的互信息作為訓練目標。但是此方法沒有考慮句嵌入間的分布,影響訓練效果。
在無監督句子表征研究中,采用對比學習的方法表現優異。Carlsson等[12]提出無監督模型BERT-CT,此方法在訓練時使用共享初始參數的兩個模型對句子對進行編碼,將相同句子看作正樣本,不同句子看作負樣本。但是此方法負樣本利用率較低,并且在預測階段僅使用其中一個模型,訓練效率不高。Yan等[5]提出ConSERT模型,在模型初始層進行數據增強,對每個句子通過指定數據增強方法生成正樣本,將同訓練批次內的其它樣本作為負樣本。但是此方法僅在模型單層進行數據增強,正樣本質量有待提升。
相比以上方法,Gao等[7]提出的無監督SimCSE模型使用預訓練語言模型本身的dropout機制作為數據增強手段構造對比學習所需正樣本,相對當前同類方法性能獲得顯著提升。但是,無監督SimCSE仍存在相同語義正樣本差異性不足、采用dropout進行數據增強帶來訓練與預測階段不一致性的問題。本文的工作將基于無監督SimCSE的框架并針對其不足展開。
SimCSE是對比學習方法中的一種,在無監督情況下采用批內負樣本策略,即將一個樣本同訓練批次內的其它樣本作為負樣本;而對于正樣本的構建,提出將同一文本兩次通過帶dropout的預訓練語言模型生成正樣本。相比其它無監督句嵌入方法,無監督SimCSE生成的句嵌入可以在使正樣本彼此之間距離足夠近的同時保留更多的語義信息,從而提高句嵌入的表征質量。無監督SimCSE的對比學習目標描述如下:
取句子集合 {xi}mi=1, 設hzi=fθ(xi,z), 其中z是dro-pout的隨機掩碼(random mask),hzi是xi在z下通過預訓練語言模型h=fθ(x) 生成的向量表示,則無監督SimCSE的損失函數為
li=-logesim(hzii,hz′ii)/r∑Nj=1esim(hzii,hz′jj)/r
(1)
其中,z和z′是同一樣本兩次通過模型時的不同dropout掩碼;sim(h1,h2) 是h1和h2的余弦相似度;N為訓練批次內的句子數。
由式(1)可知,無監督SimCSE僅通過dropout構造對比學習所需正樣本,因此相同語義正樣本的差異性有待提升;另外使用dropout本身會帶來模型在訓練與測試階段訓練目標的不一致性,從而增大模型參數自由度、降低模型泛化能力。因此本文提出SimCSE-PSER方法,通過BERT模型的dropout機制和位置嵌入擾動模塊作為數據增強方式生成對比學習正樣本,并結合之前僅在有監督領域應用的R-Drop正則化方法,旨在改善無監督SimCSE中以dropout機制作為數據增強方法的正則化效果并降低dropout本身帶來的負面影響,從而達到提高模型泛化能力、提高無監督句嵌入表征質量的目的。
SimCSE-PSER分為兩個主要部分:多擾動BERT句嵌入編碼層和正則化對比損失層。SimCSE-PSER的整體架構如圖1所示。

圖1 SimCSE-PSER架構
2.2.1 多擾動BERT句嵌入編碼層
在SimCSE-PSER中,同一句子文本將兩次通過多擾動BERT句嵌入編碼層:其中一次將直接輸入帶dropout的BERT模型,并在經過平均池化層后轉換為對應句嵌入;另外一次將首先通過位置嵌入擾動模塊再經過相同流程。
在BERT內部,句子文本的輸入表征在嵌入層產生,其內容為詞嵌入(token embedding)、段嵌入(segment embedding)、位置嵌入(position embedding)相加,如圖2所示[1]。

圖2 BERT嵌入層
其中,詞嵌入為輸入句子文本中各個詞的向量表示;段嵌入表示詞所屬的句子;位置嵌入根據模型指定的位置標識生成,包含每個詞的順序信息。三者相加后的句子輸入表征將通過BERT的編碼器部分,生成包含語義信息的詞嵌入矩陣。
由于BERT基于注意力機制(attention mechanism),對文本順序不敏感,所以在BERT中模型對于文本順序的感知全部依賴于位置嵌入。由此,SimCSE-PSER在構建對比學習的正樣本時對兩次輸入BERT模型的句子文本中的其中一個句子進行隨機亂序從而擾動位置嵌入,使BERT在另一文本順序下感知文本,進而在盡量不損害文本語義的情況下提供額外的正樣本變化。此時,位置嵌入擾動模塊與BERT模型的dropout機制會聯合生成句嵌入。
句子文本經過多擾動BERT句嵌入編碼層的流程如下:對于句子文本數據集D=(xi)mi=1中的句子文本xi,分別經過帶dropout的BERT模型和帶dropout且加入位置嵌入擾動模塊的BERT模型生成詞嵌入矩陣ti、詞嵌入矩陣t+i, 即ti=BERT1(xi,z),t+i=BERT2(xi,z′)。 其中,ti,t+i∈L×D,z和z′分別代表BERT模型的dropout掩碼,L代表句子長度,D代表詞嵌入維數。之后,ti和t+i通過平均池化層生成句嵌入si、s+i。
2.2.2 正則化對比損失層
對于無監督SimCSE,dropout是其核心內容。作為一種正則化方法,dropout在模型訓練時隨機丟棄一部分的神經元以防止模型過擬合。然而,由于dropout丟棄神經元的操作,每次丟棄后被訓練的模型都可以看作不同的子模型,因此使用dropout訓練的模型具有參數自由度大、訓練和測試階段不一致等問題,影響dropout的正則化效果。為了避免無監督SimCSE中dropout機制帶來的負面影響,本文在正則化對比損失層向損失函數引入R-Drop正則化方法,使si、s+i的分布盡量一致。
訓練中,SimCSE-PSER每次迭代都會從句子文本數據集D中隨機抽取N個句子文本組成訓練批次,生成2N個句嵌入。這樣,在一個訓練批次中每個樣本有1個正樣本和N-1個負樣本。與SimCSE相同,SimCSE-PSER采用Chen等[13]提出的對比損失,即使用交叉熵(cross entropy)作為基礎損失函數[14]
L′i=-logexpsim(si,s+i)/r∑Nj=1expsim(si,s+j)/r
(2)
其中,sim為相似度函數,此處為余弦相似度;r為溫度超參數。
對于每批訓練樣本,R-Drop(regularized dropout)[9]最小化兩個dropout產生的不同子模型的輸出分布之間的雙向KL散度,使子模型之間輸出分布一致,從而減少了使用dropout時模型在訓練與測試階段的不一致性。R-Drop之前僅在有監督領域應用,本文將其擴展引入無監督領域。R-Drop的描述如下:
給定訓練數據集D=(xi,yi)ni=1, 訓練目標為學習一個模型Pw(y|x), 其中n為訓練樣本數,(xi,yi) 是標記的數據對,xi是輸入數據,yi是標簽。假設學習目標為最小化負對數似然(negative log-likelihood)損失函數,則對每個輸入數據xi進行兩次神經網絡前向傳播,從而獲得模型預測的兩個輸出分布Pw1(yi|xi)、Pw2(yi|xi)。 此時負對數似然損失函數應為
LiNLL=-logPw1(yi|xi)-logPw2(yi|xi)
(3)
之后,R-Drop最小化兩個輸出分布之間的雙向KL散度。設DKL(P1‖P2) 為P1、P2兩個分布之間的KL散度,則
LiKL=12[DKL(Pw1(yi|xi)‖Pw2(yi|xi))+
DKL(Pw2(yi|xi)‖Pw1(yi|xi))]
(4)
設α為控制LiKL的權重超參數,則最終的損失函數為
Li=LiNLL+α·LiKL
(5)
在SimCSE-PSER中,R-Drop正則項應為
L″i=12[DKL(si‖s+i)+DKL(s+i‖si)]
(6)
最后,將式(2)和式(6)加權求和,最終的損失函數為
Li=L′i+α·L″i
(7)
其中,α為權重超參數。

由于實驗采用無監督方式,所以訓練時僅使用各數據集的訓練集部分的第一個句子文本。不使用第二句子文本的原因是:防止在采用批內負樣本策略的對比學習方法上訓練時抽取的同訓練批次樣本中出現語義相同樣本,從而錯誤的在向量空間推開正樣本。
本文采用斯皮爾曼相關系數(Spearman’s rank correlation coefficient)作為語義文本相似度任務的評價指標,它將用于表示模型在數據集上對句子對的余弦相似度(cosine similarity)計算結果與數據集標簽之間的相關性。對于數據集中一個句子對,模型生成對應的句嵌入對為(A,B),則它們的余弦相似度為
cos(θ)=∑ni=1Ai×Bi∑ni=1(Ai)2×∑ni=1(Bi)2
(8)
其中,n為向量的維度。余弦相似度的值域為[-1,1]。
若X和Y分別為數據集文本對應的句嵌入表示之間的余弦相似度數列和對應標簽的數列,則它們的斯皮爾曼相關系數為
ρs=1-6∑ni=1d2in(n2-1)
(9)
其中,di為Xi,Yi升序排序后的名次之差,即di=rg(Xi)-rg(Yi)。n為兩組數據的數據對個數。
斯皮爾曼相關系數的值域為(-1,1],等于0時代表兩組數據沒有相關性,越接近1代表兩組數據越正相關,越接近-1代表兩組數據越負相關。
實驗中的所有無監督句嵌入方法都將基于Google發布的中文BERT-Base模型,采用平均池化生成句嵌入。由于實驗在中文領域進行,以下各無監督句嵌入方法的參數經過測試調整為在中文語義文本相似度任務中表現最佳的組合。本文實驗中各無監督句嵌入方法參數設置見表1。

表1 各個無監督句嵌入學習方法的參數設置
由于Chinese-STS-B數據集樣本數量偏少,訓練輪數(epoch)將被設置為10,其它數據集的訓練輪數設置為1。
本文表格中的數據皆為計算斯皮爾曼相關系數5次后取平均值。為了符合閱讀習慣,表格中的斯皮爾曼相關系數都將乘以100表示,并省略小數點后兩位的數字,最優數據將加粗表示。表2為SimCSE-PSER與其它無監督句嵌入學習方法的對比實驗結果。

表2 SimCSE-PSER與其它無監督句嵌入學習方法的對比
根據實驗結果可以看到:
(1)采用對比學習策略的BERT-CT、ConSERT、SimCSE和SimCSE-PSER在幾個數據集上的表現都明顯優于原始的無微調BERT和僅進行后處理的BERT-whitening。
(2)在采用對比學習策略的無監督句嵌入方法中,BERT-CT的表現略低于其它方法。這可能是因為其它對比學習方法采用的批內負樣本策略比BERT-CT的負樣本策略能提供更強的訓練信號;而且BERT-CT采用兩個獨立的編碼器,對于相同文本的表征可能造成較大的偏差。ConSERT、SimCSE和SimCSE-PSER都采用了單編碼器結構和批內負樣本策略,因此整體上結果優于BERT-CT。
(3)作為曾經在英文無監督語義文本相似度任務上表現最好的方法,SimCSE在中文任務上同樣表現優異。在對比實驗中,SimCSE取得了現有主流無監督句嵌入學習方法中最高的平均斯皮爾曼相關系數,驗證了此方法在中文領域的有效性和泛用性。
(4)不管是在通用領域的數據集LCQMC、Chinese-STS-B上還是特定領域的數據集The BQ Corpus、AFQMC上,SimCSE-PSER相對于SimCSE均有提升。其中,SimCSE-PSER在通用領域的數據集LCQMC、Chinese-STS-B上相對于SimCSE提升較大,平均提升1.335;在銀行金融領域的數據集The BQ Corpus、AFQMC上相對SimCSE提升較小,平均提升0.3。由于Google發布的中文BERT模型僅在中文維基語料上進行訓練,未學習到銀行金融領域的語義信息,所以可以推斷:在模型已學習到語義信息的情況下,SimCSE-PSER能更好提升模型的句嵌入表征效果。
(5)相比于其它的無監督句嵌入方法,SimCSE-PSER在4個數據集上的斯皮爾曼相關系數均為最優,在Chinese-STS-B數據集上的結果最高達到了72.76。相比之前表現最好的方法SimCSE,SimCSE-PSER在單個數據集上最大提升了2.04,提升率約為2.9%;在4個數據集上平均提升了0.82,平均提升率約為1.5%,表明了改進策略的有效性。
本節對所提方法進行了消融實驗,以探究SimCSE-PSER各個組成部分的有效性。表3為對SimCSE-PSER中位置嵌入擾動和R-Drop兩個部分的消融實驗結果。

表3 SimCSE-PSER的消融實驗
從表中結果可以看出:
(1)即使SimCSE在已經有dropout作為數據增強方法生成正樣本時,單獨加入位置嵌入擾動或R-Drop正則化方法后結果仍有提升。這表明SimCSE-PSER引入的位置嵌入擾動和R-Drop正則化方法可以有效彌補無監督SimCSE使用dropout作為數據增強手段在正樣本構造方面和dropout本身的不足,提升了正則化效果,從而提高BERT模型在無監督情況下的句嵌入表征質量。
(2)對比位置嵌入擾動和R-Drop正則化方法,加入位置嵌入擾動在3個數據集上的結果優于僅加入R-Drop的情況。可見,加入位置嵌入擾動可以在不損害文本語義信息的情況下有效增強正樣本多樣性,進而提升原方法正則化效果;并且dropout作為數據增強手段在構造正樣本方面的提升空間相對較大。
(3)SimCSE-PSER在4個數據集上的平均斯皮爾曼相關系數達到最優,并在通用數據集LCQMC、Chinese-STS-B上取得了最好結果,說明位置嵌入擾動和R-Drop正則化方法的結合能夠更好地提升句嵌入的表征質量。
本節主要對比采用批內負樣本策略的對比學習方法,即SimCSE-PSER、SimCSE和ConSERT。圖3為3種對比學習方法在LCQMC、Chinese-STS-B、The BQ Corpus、AFQMC這4個數據集上訓練時驗證集的評估曲線。

圖3 3種學習方法在4個數據集上的評估曲線
可以看到,在4個數據集的驗證集上采用批內負樣本策略的3個對比學習方法都在較少的訓練步數下達到最大斯皮爾曼相關系數,其中在LCQMC、The BQ Corpus、AFQMC的驗證集上的SimCSE-PSER的最大斯皮爾曼相關系數大于其它兩個方法。此結果表明,采用批內負樣本策略的對比學習方法具有優秀的小樣本學習能力,且本文方法SimCSE-PSER的小樣本學習能力更強。因此對于實際生產環境中文本數據時常稀缺的情況,SimCSE-PSER具有更高的實際應用價值。
值得一提的是,在Chinese-STS-B的驗證集上ConSERT的最大斯皮爾曼相關系數略微高于SimCSE-PSER和SimCSE,但是在測試集上的結果卻高于SimCSE且低于SimCSE-PSER。可見,SimCSE-PSER加入的改進帶來了更好的正則化效果,因此相比其它兩種方法防過擬合能力更強,擁有更強的泛化能力。
從圖中還可看出,采用批內負樣本策略的對比學習方法過度訓練后會使句嵌入表征效果下降。這可能是采用批內負樣本策略的對比學習訓練目標造成的:在向量空間中拉近各樣本與正樣本之間的距離,推遠與批內負樣本之間的距離。這樣,過強的負樣本信號可能會使向量空間中樣本的分布變為群間稀疏、群內密集的集群,降低模型的句嵌入表征能力。因此,該類方法訓練步數不宜過高,這也進一步說明SimCSE-PSER方法可以在取得良好性能的同時,具有較高的訓練效率。
本文針對無監督SimCSE使用dropout作為數據增強方法的不足提出了一種基于改進SimCSE的無監督句嵌入方法SimCSE-PSER。該方法使用BERT模型的dropout機制與位置嵌入擾動模塊作為數據增強方法聯合構造對比學習所需的正樣本,彌補相同語義正樣本差異性的不足;同時結合R-Drop正則化方法,降低無監督SimCSE中dropout機制帶來的負面影響。實驗結果表明,SimCSE-PSER相比其它主流無監督句嵌入方法在跨領域的多個數據集上都展現出更強的句嵌入表征能力。下一步的工作重點將放在提高對比學習中的負樣本質量。