李鉑鈞,項秀才讓,德吉卡卓,群 諾*
(1. 西藏大學信息科學技術(shù)學院,西藏 拉薩 850000;2. 西藏信息化省部共建協(xié)同創(chuàng)新中心,西藏 拉薩 850000;3. 藏文信息技術(shù)教育部工程研究中心,西藏 拉薩 850000)
句法分析是自然語言處理研究中的關(guān)鍵技術(shù)之一,分為成分句法分析和依存句法分析。依存句法分析目的是發(fā)現(xiàn)句子中詞與詞之間的依存關(guān)系,通過分析句子得到依存關(guān)系樹。依存樹能夠在許多的語義任務中提供有效的句法信息,例如語義角色標注、機器翻譯、句子分類等任務。
基于轉(zhuǎn)換的依存解析器[1,2]通過一系列操作遞增地構(gòu)建依存樹。解析器的性能取決于每個時間步的決策中對解析器狀態(tài)的有效建模。解析器狀態(tài)通常包括兩個內(nèi)存用來建模對句子的解析過程,一個緩沖區(qū),一個堆棧,從中可以推進或者彈出詞[3]。傳統(tǒng)上,解析器狀態(tài)是使用人工選擇的局部特征來建模的,這些局部特征僅僅與緩沖區(qū)或者堆棧頂部的單詞有關(guān)[4,5]。隨著深度學習的興起,神經(jīng)網(wǎng)絡被用于訓練依存句法解析器[6,7]。
對藏語的句法分析研究還遠沒有英語、漢語句法分析那么成熟。完么才讓等人[8]采用非歧義的規(guī)則形式描述歧義特征,設(shè)計并實現(xiàn)了基于規(guī)則的藏文句法分析器。德格加等人[9]采用Early算法對藏文句子的語法結(jié)構(gòu)進行分析,實現(xiàn)了藏語句子自動分析推導并生成句法分析樹。多杰措等人[10]根據(jù)藏文格助詞的特殊性,建立規(guī)則庫,以線圖分析算法對藏語進行句法分析。班瑪寶等人[11]通過歸納藏文疑問句的結(jié)構(gòu)特征進行分類,通過概率上下文無關(guān)文法對藏語疑問句進行了句法分析。多拉等人[12]利用遞歸的方法分析句子的結(jié)構(gòu),用遞歸轉(zhuǎn)移網(wǎng)絡算法來分析判斷藏文的語法規(guī)則是否合法。
目前,在藏語依存句法分析的研究中,華卻才讓等人[13]提出一種基于判別式的藏語依存句法分析,研究了藏語的格助詞搭配規(guī)則、意義及依存關(guān)系。華卻才讓等人[14]利用最大熵提取特征,采用分治策略,提出了一種基于判別式的藏文復合句切分標注方法。實驗結(jié)果表明該方法在一定程度上降低了藏文復合句依存句法分析的復雜度。夏吾吉等人[15]設(shè)計了語義依存弧類型分析特征模板,保證依存弧沒有交叉的前提下,采用最大熵模型對依存弧的依存關(guān)系類型進行了分類。索朗拉姆等人[16]構(gòu)建了藏文祈使句的依存樹庫,確定了25種依存關(guān)系的句法標注規(guī)范,采用傳統(tǒng)的統(tǒng)計學習方法條件隨機場CRF模型(conditional random field)對藏文祈使句進行依存句法分析。隨著深度學習的發(fā)展,英語、漢語等自然語言的研究早已采用深度學習的方式進行上下文特征的提取,而基于深度學習的藏語依存句法分析研究基本上是空白。為此,多杰才讓等人[17]構(gòu)建了CoNLL格式的藏語依存句法樹庫,用三層神經(jīng)網(wǎng)絡來對藏語進行依存句法分析,提高了藏語依存句法分析的質(zhì)量。
本文用序列模型Bi-LSTM[18]來對每一個詞進行編碼表示,輸入到模型的每個句子在經(jīng)過編碼后,將其傳遞給解析器狀態(tài)。然而,用于依存句法分析的序列神經(jīng)網(wǎng)絡存在的問題是,轉(zhuǎn)移算法通常采用的各種類型的特征被忽略,但它們對于捕獲單詞之間的依存關(guān)系非常重要。因此采用注意力機制對解析器狀態(tài)建模,分析了堆棧信息、緩沖區(qū)信息、已完成解析出棧的詞信息、解析器采取的動作的完整歷史信息及語義信息對解析器狀態(tài)的影響。另外,已經(jīng)被大家廣泛接受的一點是詞性特征和依存句法分析是密切相關(guān)的。詞性特征[19]直接影響依存解析的準確性。另外,在藏文的句法分析領(lǐng)域,更多的是對藏文的成分句法分析,通過深度學習提取特征的方式對藏文進行依存句法分析基本是空白的,本文通過研究漢文、英文、藏文的詞性及句法特點,根據(jù)漢文和英文的UD格式,構(gòu)建了小規(guī)模的藏文依存樹庫,并結(jié)合藏文的特點,用上述依存句法解析器對藏文進行依存句法分析,取得了顯著的效果。
對于數(shù)據(jù)驅(qū)動的依存句法分析,目標是通過訓練可以預測分數(shù)最高的依存樹。對于輸入模型中的一個句子S=w0w1…wn,將其映射到最佳的依存樹G,其中,w0=Root是插入句子開頭的一種詞根標記,句子中的其它詞不變。藏語依存解析樹示例如圖1所示。
圖1 藏語依存解析樹示例
G=(V,A)
(1)
(2)
(3)
基于轉(zhuǎn)移的分析模型一般形式為M=(Ψ,λ,h),其中Ψ表示一組約束條件,用于約束給定句子允許的結(jié)構(gòu)空間。λ是從數(shù)據(jù)中學習到的一組參數(shù),h是解析算法。一個轉(zhuǎn)移系統(tǒng)根據(jù)該系統(tǒng)每個時間步下的配置或者說是狀態(tài)來預測這一時刻的轉(zhuǎn)移動作。給定一個依存關(guān)系的類型集合R,解析句子S時的配置以一個三元組表示c=(σ,β,A),其中σ表示解析入棧的詞集合wi∈Vs,β表示剩余的還未解析的存放于隊列的詞集合wj∈Vs,A則是依存弧集合(wi,r,wj)∈Vs×R×Vs,表示已經(jīng)解析的部分依存樹。初始配置c0包括一個空堆棧、一個緩沖區(qū)(包含一個特殊的索引根Root,后跟句子的所有詞),還有一個空的依存弧集合。轉(zhuǎn)移算法表示見表1。從初始配置c0(s)開始,只要還沒有到達終端配置,則繼續(xù)搜索最佳的轉(zhuǎn)移動作t=o(c)。一旦達到終端配置,則只需要返回當前依存弧集合所定義的依存樹。
表1 基于轉(zhuǎn)移的分析算法
有兩個基本的轉(zhuǎn)移系統(tǒng):arc-standard系統(tǒng)和arc-eager系統(tǒng)。采用Arc-eager轉(zhuǎn)移系統(tǒng),這個系統(tǒng)定義了四個轉(zhuǎn)移動作分別是SHIFT、LEFT-ARC、RIGHT-ARC和REDUCE。假設(shè)要進行解析的句子是S={w1,w2,…,wn}。對于位于棧頂?shù)脑~wi,當解析時不存在詞wk充當它的中心詞時,如果它可以依存于隊首詞wj,則此時采用轉(zhuǎn)移動作LEFT-ARC,即在兩個詞語之間建立一條左向弧,使得棧頂詞成為隊首詞的子結(jié)點,同時將棧頂詞從棧中彈出。對于位于隊首的詞wj,當不存在wk作為中心詞時,如果它可以依存于棧頂詞wi,則此時采用轉(zhuǎn)移動作RIGHT-ARC,即在兩個詞語間建立一條右向弧,使的隊首詞成為棧頂詞的子節(jié)點,同時將隊首詞壓入棧。對于棧頂詞wi,如果存在詞wk充當它的中心詞時,如果它無法與隊首詞建立依存關(guān)系,則此時采用轉(zhuǎn)移動作REDUCE,即將棧頂詞從棧中彈出。當隊首詞無法與棧頂詞建立依存關(guān)系時,采用轉(zhuǎn)移動作SHIFT,即將隊首詞壓入棧。
vi=BiLSTM(x1:n,i)
(4)
通常,特征函數(shù)F(c)[20]是復雜的,一般選取堆棧中的前三個詞及緩沖區(qū)中的第一個詞作為特征向量的部分。配置或者說狀態(tài)c=(σ,β,A)的向量表示是堆棧σ中前三個詞向量及緩沖區(qū)β中第一個詞向量的拼接,如式(5)所示。
F(c)=VS2°VS1°VS0°Vb0
(5)
以上只是對解析器狀態(tài)建模的一種方法,堆棧信息在這個解析過程中起著至關(guān)重要的作用。接下來,經(jīng)過多層感知機MLP計算得分函數(shù)Score(c, a)[20]。
Score(c,a)=MLP(F(c))[a]
(6)
模型結(jié)構(gòu)圖如圖2所示,結(jié)構(gòu)主要分為三部分輸入層、狀態(tài)編碼層、MLP。
圖2 解析模型結(jié)構(gòu)圖
為了融合在轉(zhuǎn)移解析過程中更多的有用信息,將通過注意力機制整合多種特征信息。
堆棧和緩沖區(qū)中的詞信息交互有兩種方式。第一種方法是分別對堆棧和緩沖區(qū)中的單詞進行自注意力計算,根據(jù)注意權(quán)重得到加權(quán)平均值,然后將得到的結(jié)果串聯(lián)起來。第二種方法是使用stack和buffer分別作為Q和V來計算注意權(quán)重的加權(quán)平均值。然后對結(jié)果向量進行拼接。
為了捕獲已經(jīng)過解析的詞信息,即從堆棧中彈出的詞。首先計算彈出詞集合中詞的自注意權(quán)重的加權(quán)平均值,然后添加堆棧集合、緩沖區(qū)集合和彈出詞集合的位置編碼。彈出詞的自我注意計算結(jié)果為Q,堆棧和緩沖區(qū)為V,分別計算堆棧和緩沖區(qū)交互計算的加權(quán)平均值,然后拼接得到的結(jié)果向量。
在依存句法分析中不能忽略語義信息,使用相似的信息交互方式來融合語義信息特征。在解析完每個句子后,將得到每個時間步下的轉(zhuǎn)移動作。將包含所有歷史轉(zhuǎn)移動作的集合反饋到下一時間步解析器狀態(tài)的建模。如圖3所示,解析器狀態(tài)融合了歷史轉(zhuǎn)移動作信息。
圖3 轉(zhuǎn)移動作信息的反饋
給定要訓練的句子,目標是最大限度的縮小分數(shù)最高的正確轉(zhuǎn)移動作和得分最高的錯誤轉(zhuǎn)移動作之間的差距。定義解析器狀態(tài)c下的hinge損失。如下所示
(7)
在訓練過程的每次迭代,解析器計算可能的轉(zhuǎn)移動作的損失。然后選擇要確定的動作,并根據(jù)該動作轉(zhuǎn)移到下一時間步的配置??偟膿p失是每個動作損失的總和。解析器每次采樣的動作不是最佳的轉(zhuǎn)移動作,而是所有有效的轉(zhuǎn)移動作中當前模型得分最高的動作。這樣做的好處是它在學習過程中可能會遇到錯誤的配置,即使之前有錯誤,它仍將嘗試解析后面的內(nèi)容。為了更多地探索錯誤配置,除了選擇當前模型中得分最高的動作外,還將有一定的探索概率選擇得分較低的動作。這類似于強化學習中的探索。
目前,基于深度學習的藏文依存句法分析研究還處于起步階段,尚無公開可用的標準的藏文依存樹庫。因此,采集藏文文本數(shù)據(jù)并構(gòu)建了藏文依存樹庫,以此進行實驗。
依據(jù)Universal-Dependencies(UD)英文和中文的依存樹庫CoNLL-U格式,在藏文分詞和詞性標注的基礎(chǔ)上,通過對其進行依存關(guān)系的人工標注建立了藏文依存樹庫(UD-tb)共2181句。此樹庫的統(tǒng)計數(shù)據(jù)見表2。
表2 藏文依存樹庫數(shù)據(jù)統(tǒng)計
在所有的實驗中,使用默認參數(shù)訓練依存解析器,設(shè)置迭代次數(shù)都為100。關(guān)于模型的實現(xiàn),解析器的輸入編碼器類型默認使用Bi-LSTM,其隱藏層大小為125,dropout設(shè)為0.33,所有實驗的學習率為0.001,并且每個處理批次大小為4。在對解析器狀態(tài)的建模編碼中自注意力機制層數(shù)為2層,注意力頭數(shù)為10,損失函數(shù)采用max margin損失函數(shù)。其它相關(guān)實驗環(huán)境配置見表3。
表3 實驗環(huán)境配置
依存關(guān)系準確率分為帶標簽依存關(guān)系準確率(Labeled Attachment Score, LAS)和無標簽依存關(guān)系準確率(Unlabeled Attachment Score, UAS)。實驗采用LAS值和UAS值對藏文依存句法解析器性能進行評價。
從表4可以看出,當使用相同的序列模型 Bi-LSTM時,無論對解析器狀態(tài)使用哪種建模方法,詞性特征在基于轉(zhuǎn)移的依存句法分析任務中都起著至關(guān)重要的作用。它對解析性能的影響LAS和UAS平均高出5%,可見詞性在句法分析任務中的重要性。此外,在對解析器的狀態(tài)進行建模時嘗試合并更多語言結(jié)構(gòu)的信息,并使用注意力計算將相關(guān)信息進行交互。根據(jù)實驗結(jié)果發(fā)現(xiàn),每個時間步預測的詞信息以及每個時間步預測的轉(zhuǎn)移動作信息都被用于下一時間步的動作預測,這會稍微提高解析的準確性。隨著在解析過程中融合更多的特征信息,解析器的解析精度也在提高。
表4 實驗結(jié)果
表5總結(jié)了所有實驗的平均運行時間。發(fā)現(xiàn)計算中包含的信息越多,所耗費的時間就越多。其中,提到的所有隱含信息的計算耗時最長。引入解析出的棧外詞信息和歷史轉(zhuǎn)移動作信息的相對計算時間很長,因為在解析過程中,這兩種信息都需要經(jīng)過每個時間步解析完成后得到兩種特征信息再編碼,然后反饋到下一個時間步的解析過程中。所以隨著在解析過程中融合更多的特征信息,解析器所耗費的時間也相應的變長,解析器的解析精度也在提高。
表5 平均運行時間(秒)
在本文中,依據(jù)國際通用的英文中文依存樹庫,構(gòu)建了藏文CoNLL-U格式的依存樹庫,進行基于深度學習藏文依存句法分析研究。使用序列模型Bi-LSTM對輸入句子中的單詞及其對應的詞性特征進行編碼,然后使用注意力機制對基于轉(zhuǎn)換的解析器的解析器狀態(tài)進行編碼,以使用自然語言存在的隱式結(jié)構(gòu)信息,提高了解析器的解析性能。目前,已完成標注的藏文依存樹庫2180句左右,對于深度學習還需更多的數(shù)據(jù),未來將繼續(xù)擴充國際通用的藏文依存樹庫,并提高此樹庫的標注質(zhì)量,促進藏文句法分析的研究工作。