李自薦,遲呈英,戰學剛
(遼寧科技大學 計算機與軟件工程學院,遼寧 鞍山 114031)
近年來,深度學習技術在機器翻譯[1-3]、數據抽取[4]、情感分析[5-6]等自然語言處理(Natural Language Processing,NLP)領域得到了廣泛應用并且取得了快速發展。在NLP領域的諸多子任務中,分句任務是一種較為常見的任務。目前此類研究大多基于漢語、英語等被廣泛使用的語言[7-8],其主要原因是這些語言存有大量標準化的數據集,能夠為深度學習模型提供充足且優質的訓練語料。而在泰語等東南亞語種的研究工作中,可用的優質語料數量不足,許多工作的訓練數據來自互聯網上的大規模非結構化數據[9]。數據來源的多樣性和數據質量的不一致性造成在獲取大規模數據集的過程中,很有可能出現摻雜大量段落的超長句子,這將對神經網絡模型的收斂速度和模型最終效果產生影響。此外,在許多分句任務中,用戶輸入的數據不是一句話,而是一篇文章或一個段落,此時需要句子切分工具將段落信息切分為單句信息,方便任務處理。由于語料庫規模龐大,難以通過人工方式對語料庫中的句子進行切分,因此需要利用計算機技術對其進行精確的自動化切分。
與馬來語、緬甸語等東南亞語種類似,泰語在書寫過程中,詞與詞、句與句之間并沒有明顯的分隔標記,如空格、標點符號等[10]。對于具有這種語言特性的語種而言,很難通過一些簡單的規則完成句子的精確切分。就人類而言,對于自己比較擅長的語種,即使段落中的詞句之間沒有明顯的句子邊界標記,也能很容易地判斷出句子邊界的位置,這是因為人類不僅能夠通過標點等標志進行判斷,還能依靠句意信息的協助進行句子邊界的識別。因此,讓模型在學習過程中獲得更多更有用的詞意、句意信息是十分重要的。
由于深度學習方法在自然語言處理領域中強大的學習能力,本文將Glove+Bi-LSTM+CRF網絡結構應用于泰語句子切分任務,提出基于雙向長短期記憶(Long Short-Term Memory,LSTM)循環神經網絡的句子邊界自動識別模型,以快速準確地識別泰語段落中的句子邊界信息。
循環神經網絡(Recurrent Neural Networks,RNN)是一種特殊的前向神經網絡,該種網絡結構能夠使用一種定向循環策略對一組輸入序列重復進行同樣的操作。當需要處理的數據是存在依賴關系的序列時,循環神經網絡能夠非常好地處理這些存在依賴關系的序列,得到令人滿意的結果。
長短期記憶網絡是一種特殊的循環神經網絡單元,該種網絡單元不僅能夠把當前時刻節點的狀態作為下一時刻節點的輸出,還可以選擇性地保留此前時刻的部分信息,能夠更好地利用序列內部的依賴關系。
在實際應用中,對于當前狀態的判斷,除了前面時刻的依賴信息,如果對后面時刻的信息進行部分保留并與前面時刻的信息共同作為條件,就能夠通過多種狀態信息的共同判斷,提高當前時刻狀態預測的準確率。為此,研究者們提出了雙向循環神經網絡(Bi-RNNs)。
分句作為NLP領域中一項基礎任務,在其所屬領域一直承擔著十分重要的角色并且受到廣泛關注。在多數未經數據清洗的語料庫中,句子的來源多種多樣,既存在通過人工翻譯方式得到的高質量雙語語句對,也存在從互聯網上利用網絡爬蟲技術自動爬取得到的語句對。若語料庫中出現過多超長段落,將會影響模型的學習效果以及模型性能。因此,在每次處理大規模數據集或使用者的輸入序列時,希望語料庫中的句子均為單句,以便充分地利用全部數據。將呈段落形式出現的序列精確切分為單句是一項復雜的工作。目前,很多語種的分句技術已經達到極高的準確率,但是依然存在以下3個問題:
1)許多語種使用的句子切分方法是基于規則的方法,需要經常維護且對新領域、新語種很難適應。
2)許多句子切分方法雖然考慮到切分位置的上下文信息,但是并不能完整地保留句子的句意信息。
3)對于一些具有特殊語言特性的語種并不能做到高精度的切分。
使用雙向循環神經網絡完成句子切分任務為解決以上問題提供了有效方法。
以往的研究工作基于規則對句子進行切分,弊端是太過依賴人工編寫規則[11-13]。機器學習技術興起后,經常被用來進行自然語言處理領域的基礎研究,創造了許多非常成功的方法,但是該技術在任務開始之前需要人工對文本進行大量的數據預處理以及特征抽取操作,使得模型的最終處理效果非常依賴前期的人工操作。隨著深度學習技術的發展,該技術在自然語言處理的基礎任務中取得了巨大突破。使用深度學習技術不僅使任務取得了很好的效果,還減少了模型對于特征的依賴,節約了人工成本。因此,深度學習技術成為目前自然語言處理領域中最重要的方法。
在以往的研究中,通常認為空格是分隔兩句泰語的唯一符號,因此,泰語句子切分問題變成了一個分類消歧的問題[14-16]。事實上,根據泰國語言相關部門的規定以及在真實語料中觀察的結果可知,空格字符可能出現在句子中的任何位置,而兩句泰語之間并不一定會使用空格符號。泰國語言皇家協會規定,在某些詞的上下文處需要使用空格進行分隔[17],包括:
然而,這些規定在實際使用中并沒有得到嚴格遵守,不同的泰語使用者將空格添加到句中的位置不盡相同,這造成了在泰語語料中,空格符號可能出現在句子中的任何位置,而不僅僅出現在句末。據統計得知,在一個泰語語料庫中,大約23%的句子末尾沒有空格出現。圖1展示了一個泰語句子結構,其中句末沒有空格出現。

圖1 泰語句子結構Fig.1 Sentence structure of Thai
鑒于在泰語句子中空格問題的復雜性,文獻[18]提出一種基于詞的序列標記方法,將泰語句子切分問題看作詞級的序列標記問題。該方法把句子中的空格看作普通單詞進行處理,對句子中所有位置進行標記,根據標記結果判斷句子切分位置。
受文獻[18]啟發,本文將泰語句子切分任務看作是一個序列標注的問題,并且在切分過程中序列的長度是未知的。LSTM神經單元作為一種特殊的神經網絡單元,不僅能非常有效地處理變長的數據輸入,還能解決在訓練過程中出現的長距離依賴問題。基于雙向長短期記憶(Bi-LSTM)和條件隨機場(Conditional Random Field,CRF)[19-21]的泰語句子切分模型的詞向量輸入層、Bi-LSTM網絡層和神經網絡輸出層組成,模型框架如圖2所示。

圖2 基于Bi-LSTM網絡的泰語句子切分模型Fig.2 Thai sentence segmentation model based on Bi-LSTM network
此前的研究已經證明,在深度學習研究中,使用詞嵌入技術能夠明顯提升序列標注任務的準確率。本文使用Glove詞嵌入技術,將句子中每個位置的詞編碼成指定維度的向量,將多個詞向量組合得到的句子向量作為模型的輸入,提供給模型學習。
Glove是一種無監督的深度學習方法,將語料中的每一個詞編碼成不同維度的向量,轉換后的向量能夠保存被編碼詞的詞意信息。Glove通過計算兩個詞向量的歐式距離來調整合適的參數對詞進行編碼,通過該種方式使具有相似語意的詞在向量空間上獲得更近的距離。
使用Glove模型得到的單詞編碼不僅能表現出單個詞的詞意信息,還能表現出不同類別詞之間的差異,這是因為使用歐式距離計算出的向量相似度是一個標量,可以對兩個詞之間的相似程度進行度量。但是單詞往往能夠表現出比標量更加復雜的相關程度,例如,“國王”和“王后”兩個詞都屬于人類范疇,但無論從性別還是職位上來講都存在一定差異。為了在最終結果中體現這些差異,Glove捕獲并計算很多向量之間的差異性,使得最終結果能夠盡可能地表示兩個不同詞語之間的差異性。
在切分模型的第2層,使用Bi-LSTM保證模型網絡結構在訓練過程中能夠捕獲不同單位之間的相互依賴關系,這種依賴關系主要包括前向和后向兩種。通常情況下,一個循環神經網絡在學習過程中除了接收一個序列在時刻t的輸入向量xt之外,還會接收來自前一時刻的狀態信息ht-1,ht-1與xt共同決定t時刻的狀態ht。將初始時刻狀態h0的值設置為0。通過上述方法,循環神經網絡可以在學習的過程中接收到來自其他時刻的信息并且有選擇性地進行保留,這種方式能夠使學習序列中連續元素共享相關信息,讓模型得到更好的學習效果。
雙向循環神經網絡結構在訓練過程中,通常使用隨機梯度下降的方法優化網絡結構中的參數,在每一步的訓練過程中計算網絡的整體誤差,通過反向傳播的形式迭代找到最優的權重,使得誤差最小。然而,使用這種方式處理序列問題也存在一定弊端,即在網絡訓練過程中因為需要進行多次連續的相乘操作而使得參數調整量過小或過大,造成梯度消失或梯度爆炸,進而引起縮短誤差的周期過長或權重的調整幅度過大,導致網絡訓練結果無法達到最優。解決這一問題的主要方法是將循環神經網絡結構中的普通單元替換成LSTM單元,該單元能夠在每次的訓練過程中忘掉一部分之前得到的狀態信息,從而減少梯度消失或梯度爆炸問題的發生。
除此以外,模型還使用了dropout機制來增加泛化性能。在神經網絡的學習過程中,如果網絡結構的模型參數特別多,同時又缺少足夠的訓練樣本,那么訓練完成的模型很容易產生過擬合現象,即在模型訓練樣本上損失函數很小且準確率較高但在測試數據上損失函數很大且準確率較低。為此,使用dropout機制,在網絡訓練過程中,模型會隨機使得某些神經元以一定的概率p停止工作,這樣可以保證在每一批次的訓練過程中,訓練樣本在不同的網絡結構中進行學習,這使得模型的學習效果更好,不會依賴某些局部的特征。
在神經網絡的輸出層使用CRF層替代通用的softmax層,這是因為LSTM單元雖然能夠處理長距離上下文信息,但是不能很好地處理標簽之間的依賴關系,而CRF模型恰好能夠彌補這一點。CRF結構能夠考慮相鄰標簽之間的依賴關系,得到的輸出序列不是單位之間相互獨立的,而是一個最優的輸出序列s(x,y),表示如下:
(1)
輸出矩陣的大小為T×k,其中,T為序列的長度,k為標簽的數量。A為狀態轉移概率矩陣,Aij為從狀態i轉移到狀態j所需要的狀態轉移概率,pi,yi為當前位置表示內容的第yi個標簽的分數,定義如下:
pi=Ash(t)+bs
(2)
其中,h(t)是深度神經網絡上一層t時刻輸入數據xt的隱藏狀態,As和bs分別為狀態轉移矩陣和參數矩陣。
在模型中,輸入部分是一個基于詞編碼的序列(x1,x2,…,xn),輸出為概率向量(y1,y2,…,yn),其中yi為i時刻對應標簽的概率向量。
本文實驗基于IWSLT2015公開數據集,對這一數據集中的所有單個句子進行切分并且驗證模型的準確率。實驗目標是探究Bi-LSTM+CRF模型在泰語句子切分任務中的應用效果,并且選取最合適的超參數以訓練出最優的泰語分句模型。
本文的實驗數據來自IWSLT2015公開數據集。經過篩選后,數據集中共包含單句泰語數據191 538條,均為擁有較高質量的泰語單語句子。各個數據集的數據量如表1所示。

表1 數據集的數據量Table 1 Data quantity of data set
對準備好的泰語數據進行以下處理,得到符合數據格式的泰語訓練數據:
1)樣本構造。在訓練集中所有泰語句子均為獨立出現的單個句子,沒有呈段落式出現的訓練數據。由于模型需要呈段落式出現的泰語句子作為訓練數據,為此采取如下策略:將整個數據集中的句子全部打亂順序并且逐條進行編碼,每條句子都將得到一個唯一的編號,通過編號對指定的句子進行隨機兩兩組合并且用

圖3 樣本構造方法Fig.3 Sample construction method
2)分詞處理。泰語中詞語之間并沒有如英文一樣的句子分隔標記,因此,需要對泰語數據進行分詞處理。本文使用SERTIS泰語分詞方法,該方法使用雙向循環神經網絡,按照字符級的切分方式,將每個字符轉換成唯一的id提供給神經網絡模型進行學習,同時使用padding以及dropout等方法,提升模型的切分效果和泛化性。最終模型在標準測試集上能夠得到99.11%的F1值。
3)特征抽取。在實驗過程中,針對某些特定的任務需要對泰語訓練數據進行相應的特征抽取,將抽取出來的特征提供給相關的模型進行訓練。本實驗對每個位置的上下文內容信息進行抽取,由當前位置的內容及其上下文特征組合成一條特征樣本。此外,根據當前位置內容所屬標簽(句末或非句末)對抽取出來的特征樣本進行分類。若當前位置為句末,則下文信息由句首位置的對應內容代替,這樣的樣本稱為正樣本;若當前位置為非句末,由其組成的樣本稱為負樣本。正負樣本抽取完成后,平衡正負樣本數量的比例,將數量接近的正負樣本提供給模型進行學習。正負樣本具體提取方式如式(3)所示:
Zxi=[xi-2,xi-1,xi,xi+1,xi+2]
(3)
其中,Zxi是以xi作為中心提取的樣本。輸入序列為[x0,x1,…,xn],窗口大小為5,取當前位置前后兩個位置的內容與當前位置組合在一起作為一組樣本。
4)子詞切分(Byte-Pair Encoding,BPE)。在對泰語句子進行句子編碼之前,可以利用子詞切分策略將泰語句子中的詞進一步切分成精度更小的子詞。BPE方法經常被應用到深度學習模型的訓練過程中,因為其能夠將待訓練的數據進一步細化成粒度更小的子詞,縮小模型在訓練過程中詞匯表的規模,減少模型參數量,使模型在訓練過程中能夠更快地找到最優參數,加快模型收斂速度。
5)標簽化。本文實驗將泰語句子切分任務看作一個序列標注問題。因此,在訓練開始前根據句子中的單位粒度進行標簽映射,為每個單位位置賦予一個指定標簽,使用

圖4 訓練數據標簽化Fig.4 Tagging of training data
本文實驗采用如表2所示的系統環境以及如表3所示的超參數設置。

表2 實驗環境Table 2 Experimental environment

表3 模型超參數設置Table 3 Model hyperparameter setting
本實驗分為3組,具體設計如下:
1)使用不同方法構造模型網絡結構,挑選出最優模型。本文實驗對比了CRF模型、Bi-LSTM+Glove模型和Bi-LSTM+CRF+Glove模型,分別記為CRF、Bi-LSTM和Bi-LSTM+CRF。
2)對比不同粒度的句子切分方法在最優模型上的表現,選出最優的句子切分粒度。分別以基于詞、字符以及子詞的粒度對句子進行編碼,記為base-Word、base-Char和base-Bpe。
3)使用不同維度大小的句子編碼方式對泰語句子進行編碼并應用在最優模型上,選出最優的編碼方式。實驗使用的維度大小分別為50、100、150、200、250和300,記為Glove-50d、Glove-100d、Glove-150d、Glove-200d、Glove-250d和Glove-300d。
實驗使用準確率(precision)、召回率(recall)和F1值來衡量泰語分句模型的性能,F1值為模型準確率和召回率的調和平均值,具體公式如下所示:

(4)
(5)
(6)
precision表示模型預測的所有正樣本邊界中正確預測的邊界數量。recall表示所有真實正樣本邊界中被正確預測的邊界數量。Tp為模型識別正確的句子邊界個數,Fp為模型識別錯誤的句子邊界個數,Fn為是句子邊界但模型未正確識別的個數。在分類問題中,F1值能夠綜合準確率及召回率的結果,從而更加準確地反映出模型精度。
分別使用CRF、Bi-LSTM和Bi-LSTM+CRF 3種模型結構完成泰語句子切分任務,效果對比如表4所示。可以看出,實驗中的最優模型Bi-LSTM + CRF在泰語句子切分任務上能夠達到非常精準的識別效果,明顯優于另兩種方法。

表4 3種模型句子切分效果對比Table 4 Comparison of sentence segmentation effect of three models %
在最優模型上,對比不同粒度的句子切分方法,實驗結果如表5所示。可以看出,基于詞的句子編碼形式能夠獲得最好的效果,這是因為以詞為最小切分單元進行編碼并組成句子向量能夠幫助模型在學習過程中獲得更多詞意信息,從而提升分句準確率。

表5 不同粒度的句子切分方法對模型的影響Table 5 Influence of sentence segmentation methods with different granularity on the model %
將泰語句子中的詞轉換成不同維度大小的編碼向量供模型進行訓練,探究單詞編碼維度的大小對模型效果的影響,實驗結果如表6所示。實驗結果表明,使用更高維度的編碼方式由于將數據編碼成高維向量,因此能夠使模型得到更多的有效信息,從而更好地表示詞意和句意信息,最終獲得更高的切分精度。

表6 不同句子編碼維度下本文模型的表現Table 6 Representation of the model in different sentence coding dimentions %
泰語特有的語言特性使其句子切分任務具有復雜性。為此,本文使用LSTM神經網絡的變形結構Bi-LSTM+CRF模型對泰語句子進行切分。實驗表明,該模型對泰語能夠進行準確切分。在此基礎上,本文研究了使用不同粒度的句子切分方法和不同維度大小的編碼方式在同一模型上的表現,證明基于詞的句子切分方法和更高維度的向量能夠使模型得到最高的準確率。下一步將針對與泰語具有相似語言特性的語種展開研究,例如高棉語、老撾語等,使得同一模型能夠對多個語種的段落進行精確切分,提升模型的泛化性。