楊鶴標(biāo), 胡驚濤, 劉 芳
(江蘇大學(xué) 計(jì)算機(jī)科學(xué)與通信工程學(xué)院, 江蘇 鎮(zhèn)江 212013)
詞向量作為單詞的特征向量或表征,因其表現(xiàn)形式呈現(xiàn)矩陣化,故而能夠充分發(fā)揮計(jì)算機(jī)的計(jì)算能力[1].因此如何高效訓(xùn)練詞向量,成為解決自然語言處理(natural language process, NLP)任務(wù)的基礎(chǔ)性問題.Y. BENGIO等[2]率先提出利用前饋神經(jīng)網(wǎng)絡(luò)訓(xùn)練詞向量,通過對單詞的分布式表達(dá)解決數(shù)據(jù)稀疏對統(tǒng)計(jì)建模的影響,受到廣泛學(xué)者的青睞,但其缺點(diǎn)是深層網(wǎng)絡(luò)訓(xùn)練帶來的參數(shù)訓(xùn)練低效問題.為此,眾多學(xué)者或研究人員針對該問題提出了不同訓(xùn)練方法,如E. H. HUANG等[3]在此基礎(chǔ)上,提出了多任務(wù)訓(xùn)練的思路,即通過共享訓(xùn)練參數(shù)提高訓(xùn)練效率.J. PENNINGTON等[4]提出了Glove模型,利用對共現(xiàn)矩陣進(jìn)行分解的方式獲得詞向量.L. VILNIS等[5]提出一種概率圖模型,將每個(gè)單詞映射為一個(gè)多維高斯分布,然后該分布的均值就是對應(yīng)單詞的詞向量.然而這些模型都不能有效表示NLP任務(wù)中所涉及的多義詞.為解決這個(gè)問題,提升詞向量的表示質(zhì)量,T. MIKOLOV等[6]提出Word2Vec模型,引入負(fù)采樣和層序Softmax,建立全局上下文和單詞的訓(xùn)練模型,將文本內(nèi)容簡化為K維向量空間中的向量運(yùn)算,把單詞的語義信息蘊(yùn)含于數(shù)值中,獲得更加緊湊的變現(xiàn)形式與泛化屬性[7].Word2Vec雖然在一定程度上解決了多義詞的表示問題,但是其訓(xùn)練過程中所使用的層序Softmax算法對增量樣本的敏感度極低,導(dǎo)致無法滿足實(shí)際對增量訓(xùn)練的要求.
針對層序Softmax算法對增量樣本的敏感度極低的問題,文中提出動態(tài)層序Softmax算法,通過改進(jìn)該算法依賴的編碼樹常規(guī)生成模式,采用結(jié)點(diǎn)置換方法使得增量樣本所依賴的編碼樹是通過對舊編碼樹結(jié)點(diǎn)的調(diào)整所得,保證訓(xùn)練數(shù)據(jù)的加載與編碼樹的構(gòu)建同步進(jìn)行,從而滿足增量訓(xùn)練要求,避免多次遍歷數(shù)據(jù)樣本.同時(shí)文中提出利用梯度的矩估計(jì)動態(tài)調(diào)整訓(xùn)練過程中參數(shù)的更新方向以及學(xué)習(xí)率,解決損失函數(shù)因樣本量少而出現(xiàn)的震蕩現(xiàn)象,有效提高訓(xùn)練效率.
神經(jīng)網(wǎng)絡(luò)語言模型(neural network language models, NNLM)的結(jié)構(gòu)如圖1所示,模型利用神經(jīng)網(wǎng)絡(luò)在非線性擬合方面的能力推導(dǎo)出詞匯或者文本的分布式表示[8].
圖1 NNLM結(jié)構(gòu)示意圖
NNLM模型由特征映射和條件概率分布計(jì)算兩部分組成.特征映射是通過映射矩陣C∈R|V|×m將輸入單詞映射為特征向量,該過程將得到的{C(Wt-n+1),C(Wt-n),…,C(Wt-1)}合成為(n-1)m維詞向量矩陣.條件概率分布計(jì)算則是通過概率函數(shù)G將詞向量矩陣轉(zhuǎn)為一個(gè)概率分布y∈R|V|,即
F(i,wt-1,wt-2,…,wt-n+1)=G[i,C(wt-1,wt-2,…,wt-n+1)],
(1)
最后的網(wǎng)絡(luò)輸出層采用Softmax函數(shù),表示為
(2)
Word2Vec作為一款基于NNLM的NLP工具,將傳統(tǒng)的NNLM改進(jìn)為CBOW與Skip-gram兩個(gè)模型.兩種模型結(jié)構(gòu)類似,但訓(xùn)練思路稍顯不同.CBOW模型通過訓(xùn)練樣本中的上下文來預(yù)測中心詞的出現(xiàn)概率[9].而Skip-gram模型是根據(jù)中心詞來預(yù)測上下文,即輸入特定單詞,輸出該單詞上下文的詞向量.此外,Skip-gram模型在處理文本時(shí)采用跳過一些單詞去取共現(xiàn)單詞的方式,獲取與當(dāng)前單詞非直接相連單詞之間的關(guān)系[10].
由于訓(xùn)練樣本單詞數(shù)量一般在百萬級別以上,如果采用一般的分類回歸算法,就意味著輸出層需要通過Softmax函數(shù)來計(jì)算每個(gè)單詞的輸出概率,導(dǎo)致計(jì)算量與單詞數(shù)量級大小直接相關(guān).因此在訓(xùn)練過程中,采用層序Softmax、負(fù)采樣兩種算法來解決計(jì)算量問題.
層序Softmax算法采用了Huffman編碼樹代替隱藏層到輸出Softmax層的映射[11].與Softmax相比,該算法將輸入層中的單詞組成特征向量,通過線性變換映射到隱藏層;根據(jù)單詞出現(xiàn)的頻率構(gòu)建編碼樹,輸出結(jié)點(diǎn)編碼,避免計(jì)算所有單詞的輸出概率,解決計(jì)算量的問題.此時(shí)的計(jì)算復(fù)雜度為O(HlbK),其中K為類別數(shù)量,H為文本特征的維度數(shù).
由于層序Softmax對生僻單詞不敏感,T.MIKOLOV等[6]提出負(fù)采樣(negative sampling,NEG)算法.NEG的本質(zhì)是根據(jù)已知概率密度函數(shù)來估計(jì)未知的概率密度函數(shù).輸出層采用隨機(jī)負(fù)采樣來替代編碼樹,因此NEG不對目標(biāo)詞W路徑的中間結(jié)點(diǎn)進(jìn)行更新,而是隨機(jī)選取部分中間結(jié)點(diǎn)對其權(quán)重進(jìn)行更新,從而提高模型應(yīng)對生僻單詞的訓(xùn)練速度和詞向量的質(zhì)量.但在訓(xùn)練常用單詞時(shí),訓(xùn)練效率并沒有層序Softmax算法顯著[12].
有研究[13]表明,層序Softmax算法是依賴對訓(xùn)練樣本進(jìn)行編碼來完成詞向量的訓(xùn)練,可見如何實(shí)現(xiàn)編碼樹的高效構(gòu)建是提高訓(xùn)練效率的關(guān)鍵.由于該編碼方式需要對原始數(shù)據(jù)進(jìn)行兩次掃描,勢必會在編碼過程中造成較大的時(shí)延;并且一旦編碼完成,編碼樹結(jié)構(gòu)將固化不變,導(dǎo)致層序Softmax算法無法滿足增量訓(xùn)練的要求.針對上述問題,文中提出動態(tài)層序Softmax算法,通過編碼樹的動態(tài)構(gòu)建來解決結(jié)構(gòu)的固化問題,進(jìn)而實(shí)現(xiàn)詞向量的增量訓(xùn)練,并且提高訓(xùn)練效率.
fori←1 toNdo
ncurrent←findnode(wi,Tree)
ifncurrentnot inTreethen
whilencurrent≠Rootdo
swap(Tree.NYT,ncurrent.NYT)
Tree.NYT←Tree.NYT+1
wi.NYT←ncurrent
end while
end if
ifncurrent.Weight=max(bcurrent)then
ncurrent.Weigh←ncurrent.Weight+1
else
swap(max(bcurrent),ncurrent)
end if
swap(ncurrent.Parent,ncurrent)
end for
構(gòu)建動態(tài)編碼樹步驟如下:
1) 定義結(jié)點(diǎn)屬性.
定義1結(jié)點(diǎn)編號:按照層序遍歷的方式,為編碼樹中的所有結(jié)點(diǎn)倒序編號,具體編號方式為
T={(node1:k),(node2:k-1), …,(nodek:1)},k=1,2,…,n.
(3)
定義2所屬塊:具有相同權(quán)重W的結(jié)點(diǎn)屬于同一所屬塊B,即如果wnodei=wnodej,則有:
bn+={nodei,nodej}.
(4)
綜上,結(jié)點(diǎn)的特征總結(jié)如下: ① 結(jié)點(diǎn)的權(quán)重越大編號越大. ② 父結(jié)點(diǎn)的編號總是大于子結(jié)點(diǎn)的編號.以上特征稱作兄弟屬性,在動態(tài)構(gòu)建過程中必須時(shí)刻滿足.
2) 編碼樹初始化.在初始化編碼樹時(shí),由于無法預(yù)先得知訓(xùn)練樣本中單詞的出現(xiàn)頻率,此時(shí)初始狀態(tài)只能包含一個(gè)葉子結(jié)點(diǎn)(not yet transmitted,NYT)記作逸出結(jié)點(diǎn),WeightNYT=0.此時(shí),NYT有兩種作用: ① 在編碼時(shí),當(dāng)有未出現(xiàn)在樹中的單詞需要編碼時(shí),就會輸出NYT編碼;在解碼時(shí),如果讀取編碼的過程中出現(xiàn)NYT,就說明該部分暫時(shí)不屬于編碼. ② 插入新單詞時(shí),需要根據(jù)NYT的位置構(gòu)建一顆包含NYT和新單詞兩個(gè)結(jié)點(diǎn)的新子樹,舊NYT結(jié)點(diǎn)由該子樹替代,并將原NYT和新單詞結(jié)點(diǎn)權(quán)值取1.
3) 編碼樹更新.在更新過程中,為避免破壞兄弟屬性,需對結(jié)點(diǎn)權(quán)重、編號同步更新.因此,在對結(jié)點(diǎn)進(jìn)行權(quán)重更新時(shí),首先判斷該結(jié)點(diǎn)的編號是否是所在塊中的最大編號,如圖2所示.
在對單詞W4進(jìn)行增量訓(xùn)練時(shí),由于此時(shí)W4對應(yīng)結(jié)點(diǎn)編號已是所屬塊中的最大編號,直接更新權(quán)重;否則將該結(jié)點(diǎn)與所在塊中最大結(jié)點(diǎn)編號的結(jié)點(diǎn)交換位置,再增加結(jié)點(diǎn)的權(quán)重值.此時(shí)該結(jié)點(diǎn)的結(jié)點(diǎn)編號置換為所在塊中的最大值,因此權(quán)重增加后兄弟屬性仍然滿足.最后,由于結(jié)點(diǎn)的權(quán)重發(fā)生變化,因此結(jié)點(diǎn)的父結(jié)點(diǎn)也必須更新權(quán)重,直至根結(jié)點(diǎn).更新完成后的編碼樹如圖3所示.此時(shí),由于僅需掃描一遍樣本,因而動態(tài)構(gòu)建編碼樹的時(shí)間復(fù)雜度就由原先的O(N2)降低為O(N).
圖2 原始編碼樹
圖3 更新后編碼樹
編碼樹的新增結(jié)點(diǎn)數(shù)增長與新增單詞數(shù)量相關(guān),導(dǎo)致樹的結(jié)構(gòu)變化較大,因此上述方法得到的編碼樹結(jié)構(gòu)并不穩(wěn)定.隨著訓(xùn)練樣本的不斷增加,會產(chǎn)生越來越多的新結(jié)點(diǎn),而受到影響的原有結(jié)點(diǎn)增長幅度卻遠(yuǎn)不如新增結(jié)點(diǎn)的增加幅度.
由于編碼樹會根據(jù)單詞的頻率來分配權(quán)重,頻率較低的單詞結(jié)點(diǎn)由于離根結(jié)點(diǎn)較遠(yuǎn),也就容易發(fā)生位置上的改變.為減少低頻詞對訓(xùn)練造成的影響,需要在編碼樹構(gòu)建完成時(shí),根據(jù)預(yù)設(shè)的裁剪權(quán)重,裁剪樹中所有權(quán)重小于預(yù)設(shè)權(quán)重的結(jié)點(diǎn),過濾出現(xiàn)頻率低的單詞結(jié)點(diǎn).
最終,將Word2Vec模型中的靜態(tài)編碼樹替換為文中的動態(tài)編碼樹,進(jìn)而完成詞向量的訓(xùn)練.調(diào)整后的模型結(jié)構(gòu)圖如圖4所示.
圖4 基于動態(tài)層序Softmax算法NNLM網(wǎng)絡(luò)
假設(shè)給定訓(xùn)練單詞序列W,而w1,w2,…,wT為序列W中的單詞,觀察窗口大小為C.CBOW訓(xùn)練過程通過給定上下文來預(yù)測中心詞的出現(xiàn)概率,因此,目標(biāo)函數(shù)為
(5)
(6)
將其帶入目標(biāo)函數(shù)當(dāng)中,將目標(biāo)函數(shù)改寫為
(7)
采用梯度訓(xùn)練對目標(biāo)函數(shù)進(jìn)行參數(shù)估計(jì),利用梯度迭代過程縮小權(quán)值變化范圍.
為最大化預(yù)測詞的出現(xiàn)概率,因此采用隨機(jī)梯度上升算法優(yōu)化目標(biāo)函數(shù),即
(8)
每次選取的樣本數(shù)量較小將導(dǎo)致?lián)p失呈現(xiàn)震蕩方式上升的問題,故引入自適應(yīng)動量估計(jì)算法,采用參數(shù)動量更新與自適應(yīng)學(xué)習(xí)率相結(jié)合的方式優(yōu)化梯度方向,即
(9)
(10)
此時(shí)所求得的Xw是中心詞w的上下文詞向量之和,故直接將Xw更新到詞向量上,完成詞向量的訓(xùn)練過程,即
(11)
試驗(yàn)數(shù)據(jù)來源于維基百科中文語料(約3.5 GB),借助Jieba分詞工具對數(shù)據(jù)進(jìn)行分詞和過濾,得到84 766 832個(gè)句子以及441 670 563個(gè)獨(dú)立單詞.將其中約2 GB語料作為初始訓(xùn)練數(shù)據(jù),其余數(shù)據(jù)為增量訓(xùn)練樣本,分別以10 kB,100 kB,1 MB,10 MB,100 MB和1 GB依次添加到原初始訓(xùn)練數(shù)據(jù)中.試驗(yàn)分別記錄兩種算法在處理不同大小的增量訓(xùn)練樣本時(shí)所需的訓(xùn)練時(shí)間以及詞向量之間的相似度來對訓(xùn)練效率、效果進(jìn)行衡量.
在對維基中文語料的訓(xùn)練過程中,主要涉及Size等超參數(shù).在處理NLP任務(wù)時(shí),當(dāng)詞向量大于150維之后訓(xùn)練效果的提升較小,維度越大,所需訓(xùn)練時(shí)間越長[14].鑒于維度較小的詞向量不足以提取單詞中的特征,試驗(yàn)將詞向量的訓(xùn)練維度設(shè)置為128維,將觀察窗口大小設(shè)置為8個(gè)單詞.考慮到一個(gè)單詞在語料數(shù)據(jù)集的中出現(xiàn)頻率也從側(cè)面體現(xiàn)了該單詞的重要性,頻率越低重要性越小,因此將最低出現(xiàn)頻率設(shè)置為5個(gè)單詞/語料數(shù)據(jù)集,對編碼樹進(jìn)行結(jié)點(diǎn)裁剪.超參數(shù)設(shè)置如表1所示.
表1 主要訓(xùn)練超參數(shù)
通過對比CBOW與Skip-gram模型在采用層序Softmax與動態(tài)層序Softmax作為訓(xùn)練算法時(shí)的訓(xùn)練時(shí)間、訓(xùn)練增速來評估兩種算法的訓(xùn)練效率.訓(xùn)練時(shí)間如圖5所示.
圖5 訓(xùn)練時(shí)間對比圖
從圖5可見,當(dāng)使用層序Softmax來處理增量數(shù)據(jù)時(shí),CBOW與Skip-gram模型的訓(xùn)練時(shí)間在10 kB到100 MB之間較為平緩.而使用文中所提出的動態(tài)層序Softmax 算法進(jìn)行訓(xùn)練時(shí),訓(xùn)練時(shí)間明顯下降.原因在于10 kB到100 MB的增加訓(xùn)練數(shù)據(jù)相較于初始訓(xùn)練數(shù)據(jù)集(2 GB)來說太小,而層序Softmax算法對少量數(shù)據(jù)的增加并不敏感,使得訓(xùn)練時(shí)間增長較為平緩.但是動態(tài)層序Softmax在設(shè)計(jì)上就能隨著數(shù)據(jù)的增加而自適應(yīng)調(diào)整,因而在訓(xùn)練小體積的增量數(shù)據(jù)時(shí)能夠顯著提高訓(xùn)練效率.此外,CBOW與Skip-gram模型在采用動態(tài)層序Softmax算法時(shí)的訓(xùn)練加速度情況如圖6所示.
圖6 訓(xùn)練增速對比圖
Skip-gram模型具有通過中心詞來預(yù)測觀測詞出現(xiàn)概率的特性,因此在訓(xùn)練少量增量數(shù)據(jù)時(shí)的訓(xùn)練增速要稍好于CBOW模型.譬如在增量數(shù)據(jù)在10 kB~1 MB時(shí),Skip-gram模型的增速能達(dá)到3倍,CBOW 模型也獲得近10倍的增速,可見無論是CBOW還是Skip-gram模型,在采用動態(tài)層序 Softmax算法來訓(xùn)練增量數(shù)據(jù)時(shí),訓(xùn)練效率都有顯著的提高.
表2 訓(xùn)練質(zhì)量對比
注:“層序”代表層序Softmax算法;“動態(tài)”代表動態(tài)層序Softmax算法.
從表2可見,在該數(shù)據(jù)集上無論是采用CBOW還是Skip-gram模型,層序Softmax算法計(jì)算得到的MMSE以及CCoS都與動態(tài)Softmax在不同維度計(jì)算結(jié)果均有提高.其中MMSE最為顯著,分別提升0.19×10-3,0.15×10-3,0.24×10-3,0.39×10-3.試驗(yàn)表明,采用動態(tài)層序Softmax訓(xùn)練質(zhì)量也處于很高的水準(zhǔn),能夠滿足實(shí)際訓(xùn)練的需要.
文中提出了動態(tài)層序Softmax訓(xùn)練算法,通過改進(jìn)編碼的構(gòu)建流程進(jìn)而實(shí)現(xiàn)對增量語料訓(xùn)練,得到訓(xùn)練效率的提高.試驗(yàn)結(jié)果表明,在處理增量語料時(shí),文中所提出的訓(xùn)練算法相比層序Softmax,在詞向量訓(xùn)練效率和訓(xùn)練質(zhì)量上都有顯著提升.
進(jìn)一步的研究工作如下: ① 如何將該算法擴(kuò)展到其他高級神經(jīng)網(wǎng)絡(luò)模型中; ② 基于語言線性平移特性訓(xùn)練詞向量,實(shí)現(xiàn)實(shí)體識別、知識推理、知識圖譜等其他應(yīng)用中.