?

自然語言處理領域中的詞嵌入方法綜述

2024-01-11 13:14王子威文俊浩
計算機與生活 2024年1期
關鍵詞:詞匯表語料庫語義

曾 駿,王子威,于 揚,文俊浩,2,高 旻,2

1.重慶大學 大數據與軟件學院,重慶 401331

2.信息物理社會可信服務計算教育部重點實驗室(重慶大學),重慶 400044

詞嵌入作為解決自然語言處理(natural language processing,NLP)任務中的核心步驟,其目的是將離散字符格式的文本數據,轉換成模型能夠處理且蘊涵豐富內隱語義信息的連續實值向量,即生成詞向量[1](也稱詞的分布式表示)。對于計算機視覺領域而言,其處理的數據為圖片格式,由于圖片在計算機中直接以數值類型的矩陣表示,原數據自身攜帶了豐富的信息,通過簡單的數據預處理即可直接作為模型的輸入。而NLP 任務所處理的對象是字符格式的文本數據,機器學習和深度學習模型不能直接對文本字符串輸入進行學習。因此如何將文本數據轉換成模型可以處理的實值向量格式,并將語料庫中蘊含的豐富內隱知識信息嵌入到生成的詞向量中,是詞嵌入方法所關注的重點和難點。

生成詞向量的方法有很多,例如,獨熱編碼(onehot encoding)能夠為詞匯表中的每個詞生成一個唯一的one-hot 向量作為詞的向量表示,該向量維度大小與詞匯表中的單詞數相等,詞匯表中的每個詞都對應一個索引編號,每個詞所對應的one-hot 向量只有在索引編號位置處的維度的值為1,其余維度的值均為0。雖然使用one-hot 向量作為詞的向量表示能夠解決數據的格式轉換問題,但是由于其0值過多而導致的稀疏性問題、詞向量維度過高導致的維度災難問題以及語義鴻溝問題(任意兩個詞之間相互獨立,難以刻畫詞與詞之間的相似性)限制了NLP 模型整體的性能提升[2]。

表示學習(representation learning)是一種自動從大量原始數據中學習每個詞的特征表示(特征向量)的方法,其基于預定義的規則進行模型性能的提升。這一過程涉及將學習到的特征表示儲存為模型的一部分,以便更有效地捕捉和表達詞匯的語義信息。這樣的表示學習方法旨在優化模型對輸入數據的理解,使得模型能夠更精確地處理各種NLP 任務[1]。Hinton[2]提出了詞的分布式表示(distributed representation)這一概念,利用表示學習方法,將每個詞從離散的數值空間(即one-hot向量)映射到連續且稠密的高維特征空間,使用這些具有豐富特征信息的稠密向量作為詞的特征表示,即詞向量。Bengio等人[3]使用神經網絡(neural network)搭建神經概率語言模型(neural probabilistic language model)來學習詞的特征表示。

詞嵌入利用表示學習方法并結合語言模型(language model,LM)和預訓練任務,能夠將語料庫中所蘊含的豐富內隱知識信息嵌入到低維稠密的詞向量中,進而為每個字符格式的單詞生成一個數值格式的詞向量。使用這些經過預訓練生成的詞向量作為每個詞的特征表示,可以直接對輸入的文本序列進行建模并作為下游任務模型的輸入來解決各種NLP 任務(如自然語言推理任務、情感分析任務、文本摘要任務、問答任務以及文檔分類任務等),不僅能夠提升模型的整體性能,還可以加速模型在訓練階段的收斂速度[4-6]。

使用LM 在語料庫上進行訓練,學習詞與詞之間的語義關聯,最終生成詞的特征表示,是目前詞嵌入方法的主流范式[1]。詞嵌入的第一個步驟是對語料庫進行分詞處理構建詞匯表,根據構造的詞匯表可以對輸入的文本序列進行分詞操作(Tokenization)并將每個單詞映射為詞向量。然而,在開放域的NLP任務中,大量未登錄詞(未在詞匯表中出現的詞)和多義詞(一個字或詞在不同語境下表達不同的含義)的出現限制了模型性能的進一步提升。(1)為了解決開放域中的未登錄詞問題,針對英文這類符號語言的子詞(sub-word)分詞模型[7-8],在整詞(whole word)切分的基礎上,進一步將整詞拆解成更細粒度的子詞。使用子詞拼接的方式對未登錄詞進行重構,進而解決未登錄詞問題。(2)為了解決多義詞問題,研究人員通過引入預訓練語言模型(pre-trained language model,PLM)對輸入序列進行建模,生成能夠根據輸入序列的上下文語境動態改變詞向量語義的特征表示[6,9]。其中PLM 是指經過預訓練的LM(參考2.4.5小節)。預訓練屬于遷移學習的范疇,即預先使用一些目標函數對模型進行初次訓練,從而更好地完成模型參數的初始化。預訓練階段使用的數據規模一般較大,因此模型能夠更好地學習到大規模數據中內隱的通用知識。

詞嵌入方法已從基于詞頻的統計學習方法發展至如今由神經網絡驅動的深度學習方法,神經網絡的強大擬合能力使得LM 能夠充分地學習并存儲語料庫中豐富的內隱知識,并生成高質量的詞向量。詞嵌入作為NLP領域的基礎研究點,目前已有很多研究工作從不同角度對詞嵌入方法進行綜述。文獻[10-11]著重分析并羅列了經典的詞嵌入模型。文獻[11]從生成詞向量時是否融入上下文信息的角度梳理了詞嵌入模型。文獻[12]介紹了基于預訓練語言模型BERT(bidirectional encoder representations from transformers)[13]的詞嵌入模型。文獻[14]分析并羅列了詞嵌入方法發展歷程及各階段出現的模型,并對詞嵌入方法在自然語言處理下游任務上的應用進行了綜述。部分研究工作將詞嵌入的發展階段劃分為基于機器學習的詞頻表示向量階段、基于淺層神經網絡的詞的分布式表示階段和基于雙向注意力模型的上下文詞向量階段。本文以2013 年提出的word2vec[4]和2017 年提出的Transformer[9]作為劃分依據,從生成的詞向量是否能夠通過捕獲輸入文本的上下文特征來動態地改變其語義這一角度,將詞嵌入方法劃分為靜態詞嵌入方法和動態詞嵌入方法。靜態詞向量是指詞向量一旦訓練完畢,其維度和數值不再改變,因此只能表達固定語義,并通過模型微調的方式進行更新;而動態詞向量能夠通過PLM 捕獲輸入序列的上下文語境信息,進而動態地改變自身數值,使其所表達的語義信息與輸入序列的語境相匹配。

文獻[15]與本文對詞向量的劃分觀點一致,并總結了用于生成靜態詞向量和動態詞向量的神經網絡模型。本文從詞向量生成的全過程這一角度對詞嵌入方法進行探討,對詞嵌入中的分詞方法、訓練詞向量所使用LM 的演化進行綜述,對詞嵌入方法中的靜態詞嵌入方法和動態詞嵌入方法展開討論,總結詞向量質量的評估方法,分析詞嵌入方法的現狀并對其未來發展方向進行展望。

1 詞嵌入方法在自然語言處理任務中的作用

詞嵌入方法通過學習語料庫中的內隱知識,生成嵌入語義和語法等特征信息的連續稠密詞向量。在解決自然語言處理任務時,需要根據具體任務進行模型結構設計,但無論是何種模型,都只能接受數值格式的輸入數據。因此,解決自然語言處理任務的第一步就是使用詞嵌入方法生成詞向量,并通過詞向量對輸入的文本序列進行建模,將文本序列中的每個詞映射到詞的嵌入空間,實現自然語言文本到數值向量的轉換。

當前,處理NLP 任務主要有兩種范式:基于靜態詞嵌入的表示學習范式和基于動態詞嵌入的“預訓練+微調”范式,如圖1所示。

圖1 詞嵌入方法在自然語言處理任務中的作用Fig.1 Role of word embedding methods in natural language processing tasks

在基于靜態詞嵌入的表示學習范式下,對輸入文本進行分詞處理后,通過與詞匯表進行映射,直接使用經過預訓練的靜態詞向量作為輸入序列的初始化特征表示輸入模型[16-17]。

對于“預訓練+微調”范式,其在靜態詞嵌入的基礎上引入了PLM,將輸入序列進行分詞處理后,直接輸入PLM來學習每個單詞的全局上下文語境信息,最終將PLM輸出的特征向量作為輸入序列的詞向量[18-19]。

2 詞嵌入方法

生成詞向量的流程如下:(1)基于分詞規則對語料庫中的文本進行分詞處理,生成詞匯表;(2)參照詞匯表對語料庫中的自然語言文本進行切分,將切分后的每個詞通過詞匯表映射成數值格式的索引(索引被稱作Token,該過程稱作Tokenization),最后將這些索引作為LM 的輸入,并根據目標函數對LM進行預訓練;(3)使用PLM 的部分隱藏層參數[4](靜態詞向量)或輸出層輸出的特征向量[13](動態詞向量)作為詞向量。本章對詞嵌入方法中使用的分詞方法和語言模型進行分析,并對靜態詞嵌入和動態詞嵌入方法展開探討。

2.1 分詞

分詞作為詞嵌入方法中的基礎任務,其目的是根據一定的規則將語料庫中非結構化的連續文本集合,分解為結構化的以字或詞為最小單位的數據結構,以便于后續處理和分析,并根據拆分后的字詞創建詞匯表V,V=[{1:word1},{2:word2},…,{n:wordn}],其中n為詞匯表大小。對同一個語料庫使用不同的分詞規則會產生不同的詞匯表,在訓練詞向量時,需要參照詞匯表對輸入的文本序列進行切分。因此,分詞操作對詞向量的生成和模型的整體性能產生直接的影響。根據分詞粒度的不同,分詞可劃分為整詞切分和子詞切分。

2.1.1 整詞切分

整詞切分是指以整個詞或詞組為最小單元對文本序列進行拆分。對于英文這類符號語言,單詞之間以空格為邊界,因此可以直接以空格為分隔標記對語料庫進行分詞。然而,對于中文這類象形文字語言,輸入文本的表現形式為連續的字符串,詞與詞之間沒有明顯的分隔符,且象形文字自身蘊含豐富的語義信息,因此針對中文這類象形文字語言的分詞一直是分詞技術存在的挑戰[20]。

針對中文的分詞存在切分歧義和未登錄詞識別兩大挑戰[21]。切分歧義是指在切分中文字符序列時,在序列的不同位置切分會產生截然不同的語義。未登錄詞(out of vocabulary,OOV)是指沒有在詞匯表中預先定義的詞匯,如網絡詞匯、人名、機構名稱等。中文分詞算法可分為基于詞匯表匹配的機械分詞方法[22]、基于機器學習的統計分詞方法[23]和基于深度學習的統計分詞方法[24-25]。

2.1.2 子詞切分

在開放域的自然語言處理任務中,大量OOV 的出現導致模型無法對這些未在詞匯表中記錄的詞匯進行表示。在遇到OOV 時,一般將其映射為詞匯表中的特殊字符,如“|UNK|”。一種直接的解決方法是不斷地對詞匯表進行擴充,但是這種方式并不能夠從本質上解決OOV 問題,且該方式也會造成模型的靈活性和魯棒性不足[26]。

對于符號語言來說,子詞是介于整詞和單個字符之間的一種粒度。為了解決OOV 問題,針對英文這類符號語言的子詞切分算法將整詞按照一定規則,繼續拆分為單個字母或連續的字母片段,在遇到未登錄詞時,通過詞匯表中所記錄的子詞進行合并,來對OOV進行重建[7,27]。

BPE(byte pair encoding)子詞切分算法[7]是對字節壓縮算法BPE(1994)[28]進行的改進。BPE[7]首先將單詞拆解成單個字母并使用貪心算法每次選擇語料庫中詞頻最高的字母對或子詞對(subwords-pair),并將其進行合并,生成新的子詞,通過不斷的迭代,最終生成包含子詞的詞匯表。同時,BPE[7]也很好地平衡了詞典大小和解碼器的解碼效率。

與BPE[7]不同,WordPiece[27]通過最大化語言模型的詞共現概率來選取合適的字母進行合并。ULM(universal language model)[8]通過基于Uni-Gram 語言模型的子詞拆分算法,使其生成的子詞帶有概率信息,從而能夠更好地對OOV進行重建。

另一方面,子詞還帶有整詞所不具備的一些信息,如詞根信息和詞性信息。Kudo[8]也詳細分析了子詞切分的優越性。在NLP 領域中,大多數高性能的模型在處理數據時均使用子詞切分來獲取詞匯表,如ELMo(embeddings from language models)[6]使用Character CNN[29]進行分詞,UniLM(unified language model)[30]、SpanBERT[31]、BERT[13]和StructBERT[32]使用WordPiece[27]進行分詞,ALBERT(a lite BERT)[33]和XLNet[34]使用SentencePiece[35]進行分詞。GPT(generative pre-trained transformer)[36]、GPT-2[37]、XLM(cross-lingual language model)[38]、RoBERTa(robustly optimized BERT approach)[39]以及MASS(masked sequence to sequence pre-training for language generation)[40]使用BPE[7]進行分詞。

表1為部分文本預處理工具,這些預處理工具提供了文本的分詞、命名實體標注、詞性標注、近義詞匹配、關鍵詞提取以及文本分類等功能。

表1 文本預處理工具Table 1 Text preprocessing tools

2.2 語言模型

語言模型(LM)是一個函數或學習這種函數的算法,它通過根據先前詞序列對出現概率最大的下一個詞進行預測,用于捕獲自然語言序列中詞匯分布的統計特征[41]。語言模型作為自然語言處理領域的基石,通過對文本序列進行建模,學習語料庫中詞與詞之間的共現關系,并生成詞的分布式表示[4-5]。詞向量是訓練語言模型生成的附屬產物,因此性能良好的LM 對生成詞向量的質量起著決定性作用。語言模型可分為基于詞頻統計信息的概率語言模型、基于神經網絡搭建的神經概率語言模型以及能夠建模雙向上下文信息且模塊深層堆疊的深度上下文語言模型。

2.2.1 概率語言模型

概率語言模型是用于人機交互的自然語言系統的重要組成部分,其建模的目標是在一種語言的語料庫中學習單詞序列的聯合概率函數[3],或者說是預測輸入序列中的每個詞匯在當前上下文中出現的條件概率[42]。自20 世紀80 年代以來,概率語言模型建模的主流方法大多為基于非參數學習的N-gram 模型[43-44],使用one-hot 向量作為每個詞的向量表示,并基于觀測序列的部分上下文預測下一位置出現概率最大的詞[41]。

以N-gram 語言模型為例,其具體處理步驟如式(1)和式(2)所示。首先對輸入的文本序列S進行建模,S=[w1,w2,…,wl],wt表示輸入序列中的第t個詞,l表示輸入序列長度。在給定上下文St-N+1,t-1的條件下對wt進行預測。N是一個常量,其含義為假設當前詞只與其前N個相鄰的詞有關聯。需要優化的目標函數為P(wt|St-N+1,t-1),C(wiwj)表示wi和wj在語料庫中共現的次數,|V|為詞匯表的大小。

2.2.2 神經概率語言模型

神經概率語言模型使用神經網絡的中間隱藏層參數作為詞向量的權重[3]。神經概率語言模型根據搭建語言模型所使用的神經網絡可分為:前饋神經網絡語言模型(forward feedback neural network language model)[45-47]和循環神經網絡語言模型(recurrent neural network language model)[6,48-49]。

神經概率語言模型的建模目標為P(wt|St-N+1,t-1)=f(t,E(wt-1),E(wt-2),…,E(wt-N+1),θ),其中f表示神經網絡模型,θ為神經網絡中可學習的參數,N表示在預測第t位置的詞wt時,需要考慮t位置之前的N個詞,即N-gram。E表示f中對應的詞嵌入矩陣,E∈R|V|×d,d表示詞向量維度,d<<|V|。wi為輸入序列中第i個位置詞的one-hot 向量,。模型訓練完畢后,詞嵌入矩陣E中的每一行即為詞匯表V中對應位置的詞向量。

2.2.3 深度上下文語言模型

使用語言模型對語料庫進行建模能夠使模型通過擬合語料庫的數據分布,來學習語料庫中蘊含的知識信息[4-6,9,13]。然而,隨著語料庫規模的增大,使用結構簡單的神經網絡作為特征提取器的神經概率語言模型,并不能夠充分地擬合大規模語料庫中的數據分布,從而導致模型欠擬合問題的出現,限制了詞向量質量的進一步提升。因此,語言模型需要使用特征抽取能力更加強大的特征提取器來適應蘊含更加豐富的知識信息的大規模語料庫。

使用單向循環神經網絡,如LSTM(long shortterm memory network)[50],搭建語言模型來訓練詞向量,并不能夠同時捕獲中心詞的雙向上下文信息,因此生成的詞向量缺乏建模時的雙向上下文信息。另一方面,捕獲輸入序列的雙向上下文信息能夠進一步提升模型的性能[6],如在機器閱讀理解任務和完形填空任務中,只考慮單向的上下文可能導致模型預測出錯誤的結果。ELMo[6]分別使用兩個前向和后向的LSTM[50]作為特征提取器對輸入序列進行自回歸式的特征提取,并通過將前向特征和后向特征拼接的方式實現雙向上下文特征的捕獲。然而這種方式并不能夠實現同時對雙向上下文特征進行學習,且效果與完全由注意力機制驅動的Transformer 網絡結構具有一定差距[13]。

Transformer[9]是由多層結構更為復雜的編碼器模塊(Transformer-encoder module,TEM)和解碼器模塊(Transformer-decoder module,TDM)堆疊搭建的“編碼器-解碼器”網絡。相較于傳統的RNN(recurrent neural network)網絡:(1)Transformer[9]引入的自注意力機制(self-attention mechanism,SAM)使其能夠同時捕捉序列中不同位置之間的雙向上下文關系;(2)SAM使其能夠并行處理序列中的所有位置,而不是像RNN一樣必須按照時間步序列進行單向的順序處理(step-by-step)。SAM 作為Transformer[9]模塊的核心組成部分:①其完全由矩陣乘法運算驅動的計算模式實現了模型的并行計算,大大提升了Transformer[20]網絡的訓練速度;②在SAM 中,輸入序列中的每個單詞可以交互并影響所有其他單詞,而不僅僅是固定數量的鄰居,這使得Transformer[9]模塊可以更好地捕捉長距離依賴關系;③SAM 中的多頭機制(multi-head)允許模型將單詞的表示分為多個不同的表示子空間,以更好地捕獲輸入序列中的不同信息,這一機制大大提高了Transformer[9]模塊的性能表現和泛化能力;④Transformer[9]模塊中還使用了殘差連接和層歸一化等技術,使得模塊可以深層堆疊而不會出現梯度消失和性能衰退問題。Transformer[9]的提出可以被視為AI(artificial intelligence)領域的一個里程碑,直接驅動了AI大模型時代的到來。

TEM由多頭自注意力層、歸一化層、線性連接層,并結合殘差連接搭建而成,TDM 在TEM 的基礎上添加了交叉自注意力層,用于與TEM端進行注意力分布的計算?;赥EM[13,31-32,39,51-53]或TDM[36-37]或同時使用TEM 和TDM 深層堆疊搭建的語言模型[30,34,38,40,54-55]也被稱為深度上下文語言模型。Transformer[9]模塊的雙向上下文建模能力、可深層堆疊以及高效的并行計算能力,使得深度上下文語言模型能夠結合自監督學習,高效地在大規模語料庫上進行預訓練,進而學習并存儲大規模語料庫中蘊含的通用知識。

2.3 靜態詞嵌入

語言模型在訓練完畢后,其內部的中間隱藏層參數被單獨取出并存儲,作為詞向量映射表。隱藏層張量的維度為RV×D,其中V與詞匯表中的詞數相等,D為詞向量的維度。詞向量映射表中的每一行作為詞匯表中對應位置詞的詞向量。由于模型參數在訓練完成后不再發生改變,詞向量的維度和其內部蘊含的內隱信息也隨之固定,因此通過上述方式生成的詞向量稱為靜態詞向量。

本文將靜態詞向量的生成方法歸納為四類方法:(1)基于矩陣分解的靜態詞嵌入;(2)基于上下文窗口的靜態詞嵌入;(3)基于全局矩陣分解和局部上下文窗口靜態詞嵌入;(4)基于神經翻譯模型的靜態詞嵌入。

2.3.1 基于矩陣分解的靜態詞嵌入

使用獨熱向量(one-hot)、詞袋模型((bag-ofwords)和共現矩陣(co-occurrence matrix)作為詞的向量表示會導致稀疏性問題(即向量中零值元素過多,模型難以捕獲有效信息)、維度災難(即向量維度隨詞匯表大小呈線性增長)和語義鴻溝(即無法衡量詞與詞之間的相似程度)問題的出現?;诰仃嚪纸獾撵o態詞嵌入通過使用語料庫中詞的出現頻數作為信息,創建“詞-詞”或“詞-文檔”共現矩陣,使用矩陣分解算法,如奇異值分解(singular value decomposition,SVD),將共現矩陣分解為特征矩陣和正交矩陣,并對正交矩陣使用歸一化操作生成每個詞的低維稠密詞向量。

HAL(hyperspace analogue to language)[56]構 建“詞-詞”共現矩陣C,C∈RV×2V,其中Cij表示在句子中第j個詞和第i個詞之間的距離,V表示詞匯表大小。通過對矩陣C中的每行選擇d個方差最大的值作為每個詞的特征進行降維來得到每個詞的詞向量。

LSA(latent semantic analysis)[57]提出含義相近的詞在文章中總是共同出現這一觀點,并通過對整個文檔集合進行統計分析,使用詞在文檔中出現的頻數作為權值構建“詞-文檔”共現矩陣W,其中行向量表示詞,列向量表示文檔,Wij表示詞i在文檔j中出現的次數,之后對共現矩陣W的行向量進行歸一化操作并執行奇異值分解實現降維來挖掘詞的潛在語義信息,最終產生低維稠密且包含詞的語義信息的詞向量。

為了減少類似于“a”“an”“the”或“and”等這類詞匯,雖然高頻出現但并不會影響句子整體語義的影響,COALS(correlated occurrence analogue to lexical semantic)[58]將HAL[57]的共現矩陣進行歸一化操作,并將矩陣中所有負相關數據置零來克服負相關的不可靠性,從而得到新的滿足高維稀疏性且可使用SVD快速分解“詞-詞”共現矩陣。

2.3.2 基于上下文窗口的靜態詞嵌入

從直觀上講,和中心詞距離較近的詞與中心詞之間的相關性更強,能夠提供更多有用信息。為了學習中心詞的強相關特征,基于上下文窗口的方法限制模型在學習中心詞的上下文分布時,只考慮當前上下文窗口內的k個詞對中心詞的影響。

win(wi)=[wi-k/2,wi-k/2+1,…,wi+k/2],其中S表示原始輸入序列,wi為序列中的第i個詞,win(wi)表示中心詞wi的局部上下文(滑動窗口),k表示窗口的長度。

文獻[4]提出了CBOW(continuous bag-of-words)模型和Skip-Gram 模型用于訓練詞向量。CBOW 模型根據中心詞的上下文來預測中心詞,即P(wi|win(wi))。與之相反,Skip-Gram 模型則根據中心詞來預測中心詞的上下文,即P(win(wi)|wi)。

Mnih 和Kavukcuoglu[59]在CBOW 和Skip-Gram的基礎上進行改進提出了vLBL 模型。與CBOW 不同的是,vLBL 只預測窗口中的一個詞來提升模型推理速度,同時添加注意力權重和噪聲對比評估NCE(noise contrastive estimation)來提升模型學習詞的上下文分布的能力。

2.3.3 基于全局矩陣分解和局部上下文窗口的靜態詞嵌入

基于矩陣分解的模型雖然能夠通過構建“詞-詞”共現矩陣或“詞-文檔”共現矩陣的這種方式,充分利用每個詞在語料庫中的出現頻數來捕獲詞的全局信息,然而詞的頻數并不能夠充分地反映詞與詞之間的相關性,即詞的局部上下文信息?;谏舷挛拇翱诘哪P碗m然能夠通過上下文窗口只關注與中心詞最相關的上下文,從而捕獲中心詞的局部上下文信息,卻丟失了詞的全局性信息。

詞的全局向量表示(global vectors for word representation,GloVe)[5]是一種新的全局對數雙線性回歸模型,通過同時引入全局矩陣分解和局部上下文窗口方法,實現對詞的全局詞頻信息和局部上下文信息的捕獲。GloVe[5]的建模過程為:基于整個語料庫構建全局詞頻共現矩陣X,X∈RV×V,V為詞匯表大小。Xij表示在詞wi的局部上下文窗口中,詞wj出現的次數。GloVe[5]使用建模詞wi、wj、wk之間的關系,其中Pij表示詞wj出現在詞wi的上下文窗口內的概率。

模型訓練時的損失函數如下:

其中,vi表示詞wi的詞向量,f(x)表示權重函數,xmax和α為超參數,bi表示偏置向量。Xij表示在詞wi的局部上下文窗口中,詞wj出現的次數。訓練目標為最小化損失函數Loss,即根據全局詞頻信息來指導函數優化,使具有較強關聯的詞之間距離更近,弱關聯詞之間距離更遠。

2.3.4 基于神經翻譯模型的靜態詞嵌入

靜態詞向量是在特定的NLP 任務上訓練語言模型而生成的附屬產物。NLP 任務種類繁多,在不同任務上訓練出的詞向量的質量也有所差異。

機器翻譯任務作為NLP 領域一個具有挑戰性的任務,對模型的特征學習能力要求很高,因此通過機器翻譯任務訓練出來的模型具有較強的特征學習能力,生成的詞向量質量相對更高[60]。機器翻譯任務的主流模型為“編碼器-解碼器”框架,首先使用編碼器將一個語種的文本序列進行建模并學習其特征表示,之后使用解碼器對特征表示進行解碼生成其他語種的文本序列[9,27,61]。

神經機器翻譯模型的出現使得機器翻譯任務得到了進一步的發展[61]。Hill 等人[62]通過實驗證明,基于神經翻譯模型編碼器預訓練獲取的詞向量,比通過語言模型編碼器獲取的詞向量在語義相似性任務上的效果更好。另一方面,注意力機制的引入使模型能夠為中心詞的上下文分配不同權重,使中心詞能夠更多地關注與自身具有強相關的上下文,減小弱相關詞對其的負面影響。

CoVe(contextualized word vectors)[63]基于神經機器翻譯模型并結合注意力機制,在機器翻譯任務上進行語言模型的訓練來生成詞向量。CoVe[63]的建模過程如下,首先使用預訓練完成的GloVe[6]詞向量將原始輸入序列S={w1,w2,…,wn}中的每個詞映射到對應的詞嵌入空間,得到S′=GloVe(S)。之后將S′輸入神經翻譯模型獲得S′ 的特征表示=CoVe(S′)=MT-LSTM(S′),其中MT-LSTM 是 以雙向LSTM 作為特征提取器搭建的“編碼器-解碼器”框架,并在解碼器端添加注意力機制的神經機器翻譯模型,最后與GloVe[5]向量進行拼接得到具有上下文特征信息和全局詞頻信息且帶有一定語法和語義信息的詞向量=[GloVe(wi);CoVe(wi)]。

訓練詞向量是一個耗時耗力的工作,為了更好地推進NLP 領域的發展,不少研究人員開源了預訓練完成的詞向量。Qiu等人[64]開源了在數十種中文語料庫(百度百科、維基百科、人民日報、知乎、微博、文學、金融等)上訓練生成的中文詞向量(https://github.com/Embedding/Chinese-Word-Vectors)。https://github.com/Embedding 開源了使用多種模型預訓練生成的詞向量。FastText[65]、Word2Vec[4]、GloVe[5]也開源了通過預訓練生成的詞向量(FastText 詞向量下載地址:https://github.com/facebookresearch/fastText/blob/master/docs/crawl-vectors.md;Word2Vec 詞向量下載地址:https://code.google.com/p/word-2vec/;GloVe 詞向量下載地址:https://nlp.stanford.edu/projects/glove/)。

2.4 動態詞嵌入

靜態詞嵌入通過對語料庫中的全局詞頻信息和窗口內的局部上下文信息進行建模,并結合分層Softmax(hierarchical Softmax)和負采樣(negative sampling)策略[66]等優化方法,能夠簡單高效地訓練出低維稠密且蘊含語法、語義信息的詞向量。然而,靜態詞向量訓練完畢后其表示的含義也隨之固定,因此靜態詞嵌入不能夠處理多義詞問題[6]。

基于預訓練語言模型(pre-trained language model,PLM)生成的動態詞嵌入方法,能夠生成根據輸入序列的全局語境信息動態地改變詞向量參數分布的動態詞向量,解決了多義詞問題。本節對動態詞向量的生成和基于深度上下文語言模型的動態詞嵌入模型進行介紹,并對進一步提升動態詞向量質量的一系列研究進行分析。

2.4.1 動態詞向量的生成

與靜態詞向量的生成方式相比,動態詞向量是基于PLM 生成的。由于PLM 已經在大規模語料庫中完成了預訓練過程,能夠捕獲輸入序列的整體語境信息并將其嵌入輸出層輸出的特征向量之中[6,13]。

動態詞向量的生成經過兩個步驟:(1)對輸入序列中的每個詞,使用PLM 中的詞嵌入層對其進行建模,將其映射到連續的向量空間;(2)使用PLM 對經過詞嵌入層處理的輸入序列進行建模并學習其全局上下文特征,并在PLM 輸出層生成輸入序列中每個詞的動態詞向量。經過PLM 處理后輸出的詞向量被動態地嵌入了輸入序列的整體語義信息,能夠根據輸入序列動態地改變其語義,解決了靜態詞向量存在的一詞多義問題。

動態詞向量的生成過程如圖2 所示。其中S表示原始輸入序列,S=[w1,w2,…,wl-1,wl],l表示輸入序列長度,V表示輸入序列S經過詞嵌入層映射,生V=E(S),V=[v1,v2,…,vl-1,vl],V∈Rl×d,d表示詞向量維度,E表示詞嵌入層,H表示經過PLM 處理后,輸出層輸出的動態詞向量。表示動態詞向量的維度,PLM表示預訓練語言模型。

圖2 動態詞向量的生成Fig.2 Generation of dynamic word vectors

ELMo[6]作為較早提出的用于生成動態詞向量的PLM,使雙向LSTM作為基座來建模輸入序列的雙向上下文信息。然而,雙向LSTM 本質上還是兩個獨立的單向LSTM,通過將兩個方向的特征向量進行拼接這種方式,并未實現真正意義上的雙向上下文信息同時建模。另一方面,RNN 的串行推理模式限制了模型的計算速度,這導致此類模型難以高效地在大規模數據中進行預訓練。

基于Transformer 模塊[9]搭建的深度上下文語言模型很好地解決了基于RNN搭建的語言模型所存在的上述問題。Transformer 模塊[9]內部的SAM 賦予了模型雙向上下文建模和并行計算能力,確保了深度上下文語言模型在大規模語料庫中的高效訓練;殘差連接和歸一化操作使得模塊在多層堆疊時模型的整體不會出現衰退,令深度上下文語言模型能通過深層堆疊來擁有足夠多的參數,進而存儲足夠多的知識信息,緩解了RNN 模型在大規模語料庫下存在的欠擬合問題。

2.4.2 自編碼語言模型和自回歸語言模型

自編碼(auto-encoder,AE)和自回歸(auto-regressive,AR)是兩種使用最為廣泛的預訓練方式,它們能夠使模型在大規模無標記語料庫上進行自監督式的訓練。深度上下文語言模型可以根據所使用的預訓練方式劃分為:自編碼語言模型(auto-encoder language model,AELM)和自回歸語言模型(auto-regressive language model,ARLM)[34]。

(1)自編碼語言模型:自編碼訓練方式是指將原始的輸入序列按照一定規則進行破壞,如使用“|Mask|”標記符(使用“|Mask|”標記符替換的Token叫作被掩碼詞,Mask被稱為掩碼。使用“|Mask|”標記符替換輸入序列中某一位置的Token 這一過程被稱為Mask操作)替換部分Token(在自然語言處理領域中,無論是整詞切分還是子詞切分,模型的輸入序列中的每個單元都被稱為Token)或刪除部分Tokens[51],而AELM 的訓練目標就是將這些被破壞的序列進行重建還原[13]。這樣就可以將原序列作為標簽,實現語言模型在無標簽數據上進行自監督式的訓練。但AELM 可能會出現模型在預訓練階段和微調階段的訓練目標不一致問題[12-13,39],從而導致誤差的產生[55]。如在預訓練階段引入的“|Mask|”標記符并不會出現在下游任務的微調階段。

大多數AELM 使用TEM[9]模塊堆疊作為語言模型的主體框架[13,31-32,34,39],并結合AE 的訓練目標,使深度上下文語言模型能夠在大規模無標簽語料庫上高效地進行預訓練,提升深度上下文語言模型的自然語言理解(natural language understanding,NLU)能力,使其能夠更好地處理情感分類、抽取式問答、自然語言推理、文本語義相似度檢驗、機器閱讀理解等一系列NLU任務。

(2)自回歸語言模型:AR 是統計學習上一種用于處理時間序列的方法,即根據歷史上文內容預測下一時間步可能出現的單詞。自回歸語言模型是按照step-by-step 方式串行推進,因此是自左向右或自右向左的單向語言模型。

與基于TEM[9]的AELM 相比,ARLM 的最大優勢在于,其step-by-step 的推理方式能夠直接體現出文本之間的位置信息,使得ARLM 能夠更加自然地適配自然語言生成式任務,如生成式文本摘要任務、生成式問答任務、機器翻譯任務等。

ARLM 大多基于單向的TDM[9]進行搭建[36-37],或使用雙向TEM[9]和單向TDM[9]搭建“編碼器-解碼器”框架,在編碼器端建模輸入序列的上下文特征生成隱向量,并根據隱向量在解碼器端使用自回歸的方式重建目標序列[38,40,54-55]。

2.4.3 對模型的參數體量和預訓練語料庫規模的研究

自從預訓練語言模型BERT[13]利用大規模的預訓練語料庫、大體量的模型參數以及更多的訓練步數,在一系列自然語言任務上實現性能的顯著提升以來,不少研究人員圍繞模型的參數體量和預訓練語料庫的規模展開了進一步的探索。

Liu 等人提出RoBERTa[39]深度上下文語言模型證明了這一猜想,RoBERTa[39]在BERT[13]使用的訓練數據集BookCorpus[67](16 GB)的基礎上,添加了更大的訓練語料庫CC-NEWS[68](預處理后76 GB)、Open-WebText[69](38 GB)和STORIES[68](31 GB),使用了更大的模型訓練步數(500 000),以及更大的BatchSize(8 000 個序列),在多個NLP 任務上使模型性能得到了進一步的提升。You 等人[70]使用32 000 大小的BatchSize 進行BERT 模型的訓練,探究了BatchSize對模型性能的影響。Megatron-LM[71]使用72 層的Transformer 模塊[9]進行堆疊,模型參數量為8.3 億。Turing-NLG[72]使用78 層的Transformer 模塊[9]進行堆疊,模型參數量達到了17億。

Qiu 等人[73]認為NLP 模型的性能可以通過增加模型的參數量和在更大規模的語料庫下訓練得到進一步提升。Baevski 等人[74]也證明了增加訓練數據大小能夠提升下游任務的性能。當前,千億參數體量的ChatGPT、GPT4等大模型的提出,也進一步證實了當模型體量和訓練數據達到一定規模時,會出現知識的涌現現象。

2.4.4 對掩碼策略的研究

掩碼學習策略的提出[13]使模型能夠在大規模的無標簽語料庫上進行自監督式的訓練,充分地學習語料庫中蘊含的通用知識。掩碼學習受到完形填空任務(Cloze Task)[75]的啟發,以BERT[13]為例,掩碼學習的具體做法為在輸入句子中隨機選擇15%的Tokens作為掩碼候選詞集合C,在C中80%的Tokens用“|Mask|”標記符替換,10%的Tokens 保持不變,剩余10%的Tokens用隨機詞替換,即:

其中,S表示分詞后的原始輸入序列,l表示序列長度,掩碼學習的目標就是根據對S進行重建還原。其中“|CLS|”和“|SEP|”標記符分別表示輸入序列的起始和終止標記,語言模型的任務為學習S的上下文表征并預測被“|Mask|”標記符所替換的原始Tokens?!皘Mask|”標記符的引入使得大量的非結構化無標簽文本數據被充分地利用起來。

由于語言模型在進行預測時不能捕獲掩碼詞之間的相關關系,即每個“|Mask|”標記符之間是相互獨立的。另一方面,“|Mask|”標記符的引入會導致預訓練和微調階段的不一致,即“|Mask|”標記符只有在預訓練階段才會被引入,進而產生了人為誤差。

為解決上述問題,XLNet[34]提出了排序語言模型(permutation language model)預訓練任務,即在不引入“|Mask|”標記符的情況下,根據原始輸入序列的下標S,生成length(S)! 個全排列列表,例如S=[1,2,3,4,5],List=Perm(S)=([3,5,4,1,2],[1,2,5,3,4],…),其中Perm(?)為排序函數,之后從List里選取部分列表并生成對應的自注意力矩陣來控制上下文的關注范圍。當Listk=[1,5,4,2,3],預測下標i=3,即id等于4 位置的Token 時,該位置的Token 不僅注意到了id=1 的Token還注意到了id=5的Token,這樣不僅捕獲了每個詞的上下文信息,且沒有引入“|Mask|”標記符,同時模型是以自回歸的方式進行推演,因此模型還具備很好的文本生成能力。同時,為解決BERT[13]不能很好地處理長序列問題(即輸入序列長度超過512個Tokens 時導致時間和空間復雜度過大和性能衰退),XLNet[34]使用Transformer-XL[76]模型進行搭建,并提出了相對位置編碼。

BERT[13]提出的掩碼學習使得每個輸入序列在整個模型訓練過程中只對應唯一的掩碼列表,因此不能很好地捕獲句子的多樣性信息。RoBERTa[39]提出了動態掩碼策略,對每個輸入序列按照一定概率生成多個不同的掩碼列表,在模型預訓練過程中,每個輸入序列在每輪迭代都會從掩碼列表候選集中隨機采樣,因此在整個模型訓練過程中,每個序列使用相同掩碼列表的次數會大大降低。

由于深度上下文語言模型在分詞時均在子詞粒度進行切分,子詞分詞雖然解決了OOV問題,但輸入序列中存在大量的子詞,導致在執行掩碼預測任務時模型難以充分地學習單詞或詞組的整體語義。為此,ERNIE(百度)[51]提出了三種掩碼策略來緩解子詞切分所產生的不完整語義問題:(1)基掩碼策略(basic-level masking)[39],即原始的子詞掩碼;(2)詞段掩碼策略(phrase-level masking),使用詞段分割工具識別句子中的詞段(例如詞組和短語);(3)實體掩碼策略(entity-level masking),由于句子中的命名實體往往包含著句子的重要信息,將句子中的實體進行掩碼處理。ERNIE[51]通過三種掩碼策略使得模型生成的詞向量能夠捕獲更加豐富的語義信息。

MacBERT[77]提出了Mac(mask language model as correction)掩碼策略,使用整詞掩碼并結合N-gram機制,對多個整詞使用“|Mask|”標記符替換。由于“|Mask|”標記符的引入會導致人為誤差的產生,MacBERT[77]使用Synonyms 工具包[45]將“|Mask|”標記符位置的詞替換為相似詞來緩解人為誤差對模型性能的影響。

SpanBERT[31]使用范圍掩碼(span masking)策略,每次使用一個“|Mask|”標記符替換多個相鄰的Tokens,并對掩碼范圍內的所有“|Mask|”標記符進行預測來捕獲整詞和詞組的語義。

UniLM[30]將掩碼預測任務擴展至多語種場景,分別使用TEM[9]搭建單向語言模型、雙向語言模型以及Seq-to-Seq 語言模型執行掩碼詞預測任務,以學習不同語種之間的語義關聯。

2.4.5 對預訓練任務改進的研究

預訓練任務可以視為模型從語料庫中學習知識的途徑,對于NLP 中的預訓練任務,研究人員一直在努力改進,目的是使得模型能夠更加充分且高效地學習語料庫中的內隱知識。

XLM[38]在訓練多語種翻譯任務時,對原始端序列和目標端序列同時添加“|Mask|”標記符來增加任務難度,迫使模型在翻譯文本時從原始文本抽取更多的信息。

為了學習單詞的結構語義信息和句子的結構語義信息,StructBERT[32]將執行掩碼操作后序列中Tokens 的順序打亂,通過使模型還原Tokens 的原始順序這種訓練目標來學習單詞級別的結構語義信息;在預測句子對之間的順序關系時,針對句子S1,在1/3 的訓練時間步中選取S1的下一個句子S2作為S1的句子對(S1,S2),1/3 的訓練時間步中選取S1的前一個句子S0作為S1的句子對(S0,S1),其余1/3 的訓練時間步中從其他文檔中任選一個句子Sk作為S1的句子對(S1,Sk),這三種句子之間的關系分別對應標簽label={1,2,0},通過訓練模型正確分類句子對的類別來學習句子級別結構語義信息。

在模型訓練時除了使用標準的掩碼學習策略[10]之外,BART(bidirectional and auto-regressive transformers)[54]還引入了:(1)Token 刪除任務,即刪除一些Token,使模型檢測缺失位置;(2)文本填充任務,以往的模型如SpanBERT[31]每次Mask 掉多個連續的Token 并用等數量的“|Mask|”標記符替換,而BART[54]一次Mask 掉多個Token 但只使用一個“|Mask|”標記符代替,模型預測“|Mask|”標記符之前,首先預測被“|Mask|”標記符覆蓋的范圍中Token的數量;(3)句子排序任務,文檔中的句子隨機排序,使模型預測文檔中句子的正確順序;(4)文檔翻轉任務,將一個文檔從中間切分,并互換順序,使模型去識別文檔開始的Token位置。

MacBERT[77]摒棄了BERT 的(next sentence prediction,NSP)任務[13]而選擇難度更大的句子序列預測(sentence order prediction,SOP)任務,即預測句子之間的順序關系。

ELECTRA[52]受到生成對抗網絡(generative adversarial network,GAN)[78]的啟發提出了單詞替換檢測任務,使用兩個TEM[9]分別作為生成器和判別器,生成器用于執行原始的掩碼預測任務[13],判別器在MLM 的基礎上[13]進一步判別生成器預測的“|Mask|”標記是否和原始詞相同。

2.4.6 對融入知識信息的研究

使用深度上下文語言模型在大規模語料庫下進行預訓練,雖然能夠捕獲語料庫中豐富的內隱知識,但是在處理專業領域問題時,往往由于缺少特殊領域的專業知識信息而導致模型性能出現大幅度的衰退。對于預訓練階段使用的語料庫而言,絕大多數的數據為網絡爬取的非結構化數據,因此只能夠為模型提供通用知識。為了解決通用知識向專業領域遷移時所存在的問題,大量研究人員針對如何引入專業領域知識展開探討。

K-BERT[53]通過知識圖譜將領域知識融入模型,使模型輸出的特征表示(動態詞向量)中嵌入了專業的領域知識信息,進而提升模型在領域下游任務的性能。在知識圖譜中,知識是以三元組的形式進行表示,即ε={ei,rj,ek},ε∈K,其中ε表示一個知識,K表示一個專業領域的知識圖譜,ei和ek分別表示兩個命名實體,rj表示兩個命名實體之間的關系。KBERT[53]從3 個知識圖譜CN-DBpedia[79]、HowNet[80]、MedicalKG 中獲取知識三元組。對于輸入序列S,S=[w1,w2,…,wl],首先提取S中的所有命名實體詞EKG,并在知識圖譜K中檢索每個實體詞ek∈EKG所對應的所有關系r與實體ekr作為知識ε,最后將ε拼接到每個實體詞之后得到帶有領域知識信息的輸入序列SKG,SKG=[w1,w2,…,ei{(ri0,ei0),(ri1,ei1),…,(rik,eik)},…,wl],使模型在捕獲通用知識的同時能夠學習到專業的領域知識。

與K-BERT[53]通過引入知識圖譜捕獲領域知識的做法不同,ERNIE[51]認為如果模型在預訓練階段能夠學習到更多的先驗知識,那么模型就能夠輸出高質量的特征表示。因此,ERNIE[54]并沒有采用通過直接添加知識三元組的方式來學習先驗知識,而是通過對話語言模型(dialogue language model,DLM)在對話數據集上學習對話文本中隱藏的知識信息,如實體間的關系、實體的屬性和事件的類型。

人類能夠不斷地積累通過學習或經驗獲得的知識,從而有效地開發新技能。受到人類學習方式的啟發,ERNIE-2.0[81]添加了針對不同粒度的預訓練任務(單詞級別、句子級別和語義級別)來學習語料庫中不同粒度的內隱信息,并采用持續多任務學習[82]的訓練方式進行模型參數的更新。持續多任務學習是指模型在不同任務上并行地進行訓練,首先使用一個簡單的任務訓練一個初始模型,然后不斷地引入新的預訓練任務對模型進行參數更新。當一個新任務到來時,使用前一個任務的參數對模型進行初始化并與先前所有任務一起訓練,以緩解模型對先前任務中所積累知識的遺忘。

命名實體詞往往帶有非常關鍵的語義信息,LUKE(language understanding with knowledge-based embeddings)[83]為了更加充分地利用實體知識信息,在帶有實體標簽的語料庫上對語言模型進行預訓練來學習實體知識,并在詞嵌入層引入實體類型嵌入向量,通過對實體詞添加額外的實體向量來增強模型對序列中實體的關注度。此外,LUKE[83]還通過引入實體掩碼任務讓模型預測被“|Mask|”標記符替換的實體,以最大程度地學習實體知識信息。

CoFEE(coarse-to-fine entity knowledge enhanced)[84]提出了一種Coarse-to-Fine 的預訓練方式用以學習不同粒度的知識。CoFEE[84]首先利用維基百科給出的錨點來抽取出若干實體,并在二分類任務上訓練模型區分實體詞和非實體詞;之后根據每個實體對應的實體類型,使用多分類任務訓練模型學習實體所屬類別;最后對于每個類別下的所有實體,模型根據其特征表示進行聚類,從而得到更加細粒度的類別標簽并返回模型繼續進行學習。Coarse-to-Fine 的訓練方式使得模型能夠通過逐步執行不同粒度的實體任務,從而學習不同粒度的實體知識信息。

2.4.7 對模型參數壓縮的研究

隨著各種大體量預訓練語言模型的提出,各種下游任務的state-of-the-art被不斷刷新,但是模型的參數體量也朝著大幅度增長的趨勢發展,如RoBERTalarge[39]有3.55 億參數,GPT2-xl[37]有15 億參數,GPT-3[85]的參數達到了驚人的1 750 億,高額的存儲空間要求和計算資源消耗使各種大體量模型難以有效地部署在硬件條件有限的平臺或終端設備。為此,不少研究人員開始研究通過對模型進行壓縮來減少模型參數體量并提升模型訓練和推理速度。

模型壓縮的主要手段有模型剪枝、知識蒸餾、參數量化、低秩分解和參數共享。ALBERT[33]使用詞嵌入矩陣分解和跨層參數共享的方式大幅度減少了模型的參數體量。(1)詞嵌入矩陣分解是將高維度的詞嵌入矩陣拆分為兩個低維度的子矩陣,即,其中V為詞匯表大小,d為隱藏層維度,m為中間維度,m遠小于d。這樣模型的復雜度由O(V×d)減小為O(V×m+m×d)。(2)對于參數共享,ALBERT[33]通過共享所有堆疊的Transformer 模塊[10]的參數,來防止模型參數量隨著模塊堆疊深度的增長而增長,把單層模型變成偽多層(即參數量減少,但模型的計算量沒有改變)。Lan 等人[33]還證實了這兩種壓縮方式不僅能夠實現模型壓縮,還能夠作為一種正則化的方式增強訓練穩定性并提升模型泛化能力。

DistilBERT[86]、BERT-PKD(patient knowledge distillation)[87]、MiniLM[88]以及TinyBERT[89]使用知識蒸餾的方法,通過構建“教師-學生”網絡,使用小體量模型作為學生模型去學習大體量教師模型的參數分布,從而在實現模型參數壓縮的同時,最大程度地提升模型性能。

DistilBERT[86]通過設計如下蒸餾損失函數來指導學生模型對教師模型的參數學習。

其中,ti是教師模型未經歸一化操作的輸出特征,si是學生模型未經歸一化操作的輸出特征(也稱logits),并使用溫度系數來控制平滑程度,使學生模型能夠充分學習到教師模型的參數分布。

DistilBERT[86]通過對BERT[13]模型使用知識蒸餾的方法,使其模型參數量減少為BERT-base[13]的40%,推理速度提升了60%,但仍保持BERT-base 模型[13]97%的NLU能力。

BERT-PKD[87]提出了弱知識蒸餾,從教師模型的中間層學習知識,避免只學習大體量模型輸出層時出現的過擬合問題。通常來說,“|CLS|”標記符用于表示整個句子的語義信息,BERT-PKD[87]為了避免中間層學習的計算量過大,僅指導學生模型學習“|CLS|”標記符在教師模型各中間層輸出的特征分布。

MiniLM[88]針對BERT[13]的自注意力層進行蒸餾。TinyBERT[89]對BERT[13]的詞嵌入層、中間層隱狀態以及自注意力層進行蒸餾來全方位地學習教師模型的知識。

3 詞向量的評估

嵌入方法通過訓練語言模型,將字符型的文本數據映射到高維抽象的嵌入空間,生成詞的數值型向量表示,即詞向量。使用不同的訓練方法生成的詞向量,所蘊含的內隱信息也不相同。使用高質量的詞向量作為模型的初始化特征表示,不僅能夠提升模型的整體性能,還能加快訓練時的收斂速度。然而,詞向量本身并不具有很好的可解釋性[17]。

詞向量的評估是非常重要的一個環節,該階段用于檢驗生成的詞向量質量,根據任務的評價指標來直觀地反映詞向量的質量。詞向量的評估可分為內部任務評估和外部任務評估[90]。本章對詞向量的評估方法進行分析和闡述。

3.1 內部任務評估

詞向量的內部評估用于度量詞向量所蘊含的內隱信息,通過向量運算的方法,如余弦相似度[24,66],計算出詞向量之間的一個數值得分,通過數值得分來反映詞與詞之間語法關系或語義關聯的相似程度[91]。內部任務評估需要人工創建帶標簽的查詢數據集[90],如(查詢詞:“北京”,候選詞集合:[“中國”,“首都”,“故宮”,“北京大學”]),根據查詢詞的詞向量與詞匯表中的其他詞向量進行得分計算,并將得分最高的詞向量所對應的詞與人工標注的候選詞進行對比評估。

因此,在對詞向量的性能進行內部任務評估時,首先要創建查詢數據集。Schnabel 等人[90]提出了一種數據驅動的方法用于構造進行內部任務評估的查詢數據集。Finkelstein 等人[92]創建了WordSim-353 數據集,數據集中數據為三元組{w1,w2,score}的格式,表示詞w1和w2的相似性得分為score。Bruni 等人[93]基于圖片數據集創建了用于詞向量內部任務評估的有標簽數據集MEN。Faruqui 和Dyer[94]搭建了一個基于大量查詢數據進行詞向量自動評估的網站。

內部任務評估主要有相關性任務評估(relatedness)、類比任務評估(analogy)、聚類任務評估(categorization)、語義優選任務評估(semantic preference)、入侵詞檢測任務評估(intrusion)和名詞性別判斷任務評估(noun gender)。

(1)相關性任務評估:使用余弦相似度進行度量。

其中,vi是詞wi的詞向量,通過計算兩個詞向量之間的距離L,根據詞向量之間的距離大小來反映兩個詞之間的相似程度,詞向量之間的距離越遠說明兩個詞的相關性越小,詞向量之間的距離越近則說明兩個詞越相似[24,66]。

(2)類比任務評估:該任務由Mikolov 等人[4]提出,類比任務的目標是給定單詞wb、單詞wc和單詞wd,其中wc和wd存在某種關系r,找出和單詞wb存在關系r的單詞wa,使等式va-vb=vc-vd成立。如v國王-v王后=v男人-v女人,其中蘊含的關系r為性別。

其中,Voc表示詞匯表所對應的詞向量集合。

(3)聚類任務評估:使用詞向量對數據集進行聚類,生成k個詞簇Ci,i=1,2,…,k,每個詞簇中的詞都具有某些共同的內隱特征,通過每個詞的標簽計算每個詞簇的純度得分進行詞向量的評估。

(4)語義優選任務評估:根據標簽判斷一個名詞是一個動詞的主語或者賓語[91]。

(5)入侵詞檢測任務評估:具有相干性的詞之間往往具有相同的鄰域,入侵詞任務使用無監督聚類的方法用于評估詞與詞之間的相干性[90]。入侵詞檢測任務是指在一些具有相干性的詞向量集合中添加一個不相干的入侵詞wk,通過向量運算來找出入侵詞wk。

(6)名詞性別判斷:對能夠反映出性別信息的名詞使用二分類的方法判斷名詞的性別[61]。如雄性、丈夫、國王等這些帶有性別信息的名詞都表示“性別=男”,而雌性、公主、王后等名詞都表示“性別=女”。通過對名詞性別的判斷可以反映出詞向量是否嵌入了性別特征信息。

除了上述內部評估任務以外,還可以根據目標詞的詞向量進行同義詞和反義詞匹配完成詞向量的評估[95]。Mikolov等人[4]設計了一個“語義-語法”關系詞測試集,包括五種類型的語義相似詞查詢方法和九種類型的語法相似詞查詢方法,通過詞向量間的余弦相似度計算,查找與目標詞具有相似語法和語義關系的相似詞,通過返回結果的準確度來度量詞向量的質量。WordRep(http://research.microsoft.com/enus/um/beijing/events/kpdltm2014/WordRep-1.0.zip)是微軟發布的用于評估和訓練詞向量的基準數據集。

3.2 外部任務評估

內部任務評估可以很好地對詞向量所蘊含的各種類別內隱信息進行分析和評估,但是內部任務評估大都需要人工的參與,因此具有較高的時間和人力成本。

與內部評估任務不同,外部任務評估將生成的詞向量作為特征直接輸入處理NLP 下游任務的模型,根據不同的下游任務評價指標來分析詞向量的質量。Arora等人[96]針對靜態詞向量和動態詞向量在多個NLP下游任務上進行了實驗,并對兩種詞向量的優勢和劣勢展開了深入的分析與探討。不同的下游任務對詞向量所蘊含內隱信息的關注點并不相同[90],如偏向于抽取詞向量語法信息的命名實體識別任務[97]。外部任務評估可以通過下游任務的評價指標,直觀地對比使用不同方法生成的詞向量的質量。然而,僅依靠外部任務評估并不能夠對詞向量內部蘊含的語法、語義等信息進行全面且深度的分析[90]。

除了內部評估和外部評估,還可以通過對詞向量進行可視化這種方式,直觀地分析詞向量所表達的含義。常見做法是將訓練好的詞向量映射到一維、二維或者三維空間并利用繪圖工具將每個詞向量在這些低維空間進行繪制[97-98]。通過觀察那些具有語義和語法相關性或無關性的詞或詞簇在低維空間上的距離和分布規律,從而判別詞向量的質量。詞向量的維度是詞向量的重要參數,將單詞映射到高維的特征空間能夠使詞向量從更多的角度進行語義信息的存儲,但是當維度過高時反而會對模型的性能產生負面作用[17,99]。表2為NLP領域具有代表性的深度上下文語言模型及其模型結構、使用的分詞方法和預訓練階段使用的語料庫。

表2 深度上下文語言模型Table 2 Deep contextual language models

4 詞嵌入方法的未來發展趨勢展望

通過子詞切分方法解決開放域任務下的OOV問題,再利用性能強大的預訓練語言模型生成能夠擬合輸入序列整體語境的動態詞向量,這一流程已成為目前詞嵌入方法的范式。本章對詞嵌入方法的未來發展趨勢進行分析和展望。

4.1 特征提取器

語言模型通過特征提取器對語料庫中的文本序列進行建模和特征提取,結合預訓練任務能夠將語料庫中的內隱知識嵌入到詞向量中,使詞向量蘊含豐富的語義信息。因此,特征提取器能否高效地抽取出大規模語料庫中所蘊含的通用知識,對詞向量的質量起重要作用。

特征提取器從結構簡單的小體量神經網絡[4-6,46,63]發展到如今能夠捕獲雙向上下文且具有并行計算能力的Transformer模塊[9,13,31,34,38-39],特征提取器的特征提取能力和計算效率在不斷提升,基于此搭建的語言模型的性能和生成的詞向量質量也在不斷提升。然而,Transformer 模塊[9]在處理每個輸入單元時都需要對整個句子中的所有單元進行并行計算,這將導致其計算復雜度與輸入序列長度呈現線性相關。因此在輸入序列過長時,對硬件設備的性能要求很高,這樣的高計算成本影響了模型的實際應用。因此,設計更加高效的且具有較低計算成本的特征提取器是詞嵌入方法未來發展的一個重要方向。

4.2 模型的推理效率

截至目前,使用動態詞向量作為詞的特征表示已成為NLP 任務的一個范式。動態詞向量本質上是預訓練語言模型輸出的特征向量,然而高性能的預訓練語言模型參數量非常龐大,如有著3.4×108參數量的BERT-large[13]、8.3×109參數量的Megatron-LM[71]、1.7×1010參數量的Turing-NLG[72]甚至是5.3×1011參數量的Megatron-Turing。參數量更大的預訓練語言模型其性能也更加優異[73],但是這將導致動態詞向量的生成極為緩慢,因而使用動態詞向量作為輸入的下游任務模型的推理速度也受到了很大程度的限制。與此同時,存儲容量和算力有限的計算機或小型移動終端設備并不能夠支持大體量模型的部署。Louizos等人[100]通過使用模型剪枝的方式來減少模型的參數量,進而提升模型的推理速度。Shen 等人[101]通過量化的方式實現模型壓縮。因此,減少模型參數量并提升模型的推理效率,同時最大程度地確保模型性能,將會是詞嵌入方法未來的一個重要發展趨勢。

4.3 詞向量評估機制

當前詞向量的質量評估主要關注于外部任務評估,通過將序列的詞向量作為模型的輸入,根據具體下游任務評價指標來反映詞向量的質量。通過下游任務進行詞向量評估雖然可以較為直觀地對比不同模型生成詞向量的質量,但是這種由具體任務驅動的評價方法很難從多個角度更加全面地對詞向量的質量進行評判。內部任務評估法雖然能夠從多個角度,如詞向量所蘊含的語法信息、語義信息、詞相關關系信息等方面,對詞向量進行評估[4,90,95],但是當前的內部任務評估方法缺少具有說服力的統一評價指標和統一測試數據集。因此,制作高質量的詞向量評估數據集以及制定更多角度的詞向量評價指標對詞嵌入方法的發展起關鍵作用。

4.4 詞向量的可解釋性

通過詞嵌入方法能夠生成低維稠密且蘊含豐富內隱信息的詞向量,將生成的詞向量作為詞的特征表示輸入模型,解決不同的自然語言處理任務的表示學習方式能夠提升模型的性能[4-5,24,63]。但對于蘊含豐富知識信息的詞向量很難清晰地對其進行分析,即詞向量的性能雖然良好,但是可解釋性很差。

可解釋性對于人工智能領域和詞嵌入方法都十分重要,可解釋性工作有助于判斷模型輸出誤差并進行修正[102],能夠幫助研究人員了解詞向量中包含和未包含的各種內隱信息。

之前的研究多從以下兩個角度進行詞向量的可解釋性分析:一是對通過語料庫訓練生成的詞向量進行知識注入,這種方法雖然關注到了知識庫對詞向量可解釋性的重要性,但由于沒有采用特征注入的方法,只是簡單利用了知識庫,無法表明詞向量在維度取值和語言特征上的具體關聯;二是對詞向量生成算法及其生成的詞向量進行理論分析,嘗試從算法上對詞向量做出解釋,但由于神經網絡自身的不可解釋性使得該方式只能結合部分任務對詞向量進行解釋分析。

使用可視化工具對詞向量進行可視化[98]也只能夠反映出詞向量的部分低維信息。目前已有研究人員對神經網絡的可解釋性進行了研究[103],但對詞向量可解釋性的研究仍處于初步階段。因此,詞向量的可解釋性也是詞嵌入方法需要關注的一個重要研究方向。

4.5 多模態詞向量

人類在學習語言的過程中,能夠通過自身不同的感官與世界進行交互來獲取豐富的外部知識信息,比如圖像和聲音。因此,除了文本數據以外,其他模態的數據中也蘊含著豐富的知識信息。在一些特殊的任務上,基于純文本的模型可能會因為缺乏語言的外部模式而削弱表征能力[104]。

學習多模態數據內隱的知識并將其嵌入到詞的向量表示中能夠使詞向量所蘊含的知識更加豐富。Feng 等人[105]首次將多模態思想應用于圖像標注等任務。Kiros 等人[106]將視覺特征引入語言模型,提出多模態神經語言模型。Kiela等人[107]研究了聽覺感知信息中的語義表示,利用聽覺詞袋模型(bag of audio words model)來獲得音頻的特征表示,并嘗試多種融合策略將音頻與文本進行組合,形成多模態特征表示。Collell 等人[108]提出了一種方法用于學習語言特征到視覺特征的映射,并以此構建詞的多模態特征表示。Mao 等人[109]對多模態詞向量的訓練和評價問題進行了深入的探討。因此,多模態詞向量的研究對NLP領域的發展有著重要作用。

5 總結

通過對語料庫進行分詞獲取詞匯表,根據分詞粒度大小可將分詞算法分為粗粒度的整詞切分和細粒度的子詞切分,在開放域任務中常使用子詞切分算法解決OOV 問題。在獲取詞匯表后,使用詞嵌入方法生成詞的分布式表示,即詞向量,將詞匯表中的每個詞或字符映射到一個固定維度的連續稠密特征向量空間,該特征空間中蘊含了豐富的內隱信息。在處理具體的自然語言處理下游任務時,可以直接使用預訓練好的詞向量作為詞的初始化特征表示輸入模型,不僅可以提升模型性能,還可以加快模型訓練階段的收斂速度。詞嵌入方法的發展經歷了從生成只能表達固定語義信息的靜態詞向量,到如今基于預訓練語言模型生成擬合輸入序列語境信息的動態詞向量。從基于如LSTM 這類小體量神經網絡的神經概率語言模型到如今基于Transformer 模塊的深度上下文語言模型,用于訓練詞向量的語言模型的性能也在不斷提升,詞嵌入方法正在朝著使用更大規模的語料庫和更復雜的大體量語言模型的方向發展。

猜你喜歡
詞匯表語料庫語義
Peritoneal dissemination of pancreatic cancer caused by endoscopic ultrasound-guided fine needle aspiration: A case report and literature review
語言與語義
《語料庫翻譯文體學》評介
“上”與“下”語義的不對稱性及其認知闡釋
基于JAVAEE的維吾爾中介語語料庫開發與實現
認知范疇模糊與語義模糊
語義分析與漢俄副名組合
語料庫語言學未來發展趨勢
詞匯表
詞匯表
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合