朱鑫洋 遲呈英 戰(zhàn)學(xué)剛
(遼寧科技大學(xué)計算機與軟件工程學(xué)院 遼寧 鞍山 114000)
自然語言處理包含許多任務(wù),它們大多需要語料庫的支撐,例如,神經(jīng)機器翻譯的性能就嚴(yán)重依賴于語料庫的數(shù)據(jù)規(guī)模和數(shù)據(jù)質(zhì)量[1],語料數(shù)據(jù)中往往存在重復(fù)、缺失和不一致等問題,任務(wù)性能會因此受到較大的影響。數(shù)據(jù)清洗的目的就是為了解決數(shù)據(jù)問題,保證數(shù)據(jù)質(zhì)量,提高機器翻譯性能。
通過對多語言的雙語語料庫研究分析發(fā)現(xiàn),英文數(shù)據(jù)中經(jīng)常存在一些空格丟失多詞粘連的情況,以下統(tǒng)稱為粘連詞。如:“In just three years, more than 800 schools have been built to educate thousandsof girls.”中的“thousandsof”,很明顯該詞并不是復(fù)合詞,而是短語相連。數(shù)據(jù)中還有大量的介詞名詞相連的粘連詞。造成詞粘連的主要原因有輸入錯誤、轉(zhuǎn)換錯誤(如刪除換行符而不是用空格替換)、OCR錯誤(原始文檔或手寫文本質(zhì)量差)和傳輸錯誤等。為了進一步保障數(shù)據(jù)質(zhì)量,本文針對英文中出現(xiàn)的粘連詞問題進行處理。經(jīng)研究考察發(fā)現(xiàn),并沒有針對此問題的具體解決方案,僅在Towards Data Science學(xué)習(xí)網(wǎng)站上看到了由Wolf Garbe提出了使用貝葉斯分類器的方法,但并沒有給出實驗結(jié)果。我們嘗試把該問題看成序列到序列的任務(wù),2014年Sutskever等[3]為了解決神經(jīng)網(wǎng)絡(luò)對序列到序列任務(wù)不適用的問題,提出了一種端到端的神經(jīng)網(wǎng)絡(luò)機器翻譯構(gòu)架。它具有豐富的源于句表征和表示局部結(jié)構(gòu)的靈活性。同年,Bahdanau等[7]使用固定長度向量提高編碼器-解碼器架構(gòu)性能。2016年Google[5]提出了基于自注意力機制的模型構(gòu)架Transformer,這種構(gòu)架可以建模各種自然語言處理問題,更好地處理序列到序列的任務(wù),并在多項任務(wù)中取得了最好成績。
基于上述研究,本文嘗試復(fù)現(xiàn)基于貝葉斯分類器的粘連詞還原方法,并提出一種基于Transformer模型的英語粘連詞還原方法。
一個字符串可以用幾種方式劃分。每個不同的劃分稱為“組合”,組合有很多種,在長度為n的字符串中,潛在字邊界的數(shù)目為n′=n-1(在字符串的每個字符之間),這些位置中的每一個實際上都可以用作詞界或不用作詞界。每個長度為n的字符串可以被分割成2n-1個可能的組合。需要判定該組合是否是有效的分詞,即它由真實的單詞組成。
采用遞歸方法列舉所有可能的組合,將字符串分割成子字符串(候選詞),并在字典中查找這些候選詞,所有子字符串都是有效詞匯將作為結(jié)果返回。例如對于“ISIT”作為輸入,生成所有8種可能的組合如表1所示。
表1 組合示例
其中兩個組合由真實的英語單詞組成,是有效的切分組合。那么,在返回的兩種組合應(yīng)該怎么選取,在此借助貝葉斯分類器選取最佳的組合。
應(yīng)用貝葉斯分類器的基本思想是:在英文語料庫中粘連詞的組合結(jié)果取決于該詞所處的上下文語境c,如果某個詞w有多個組合方式si(i≥2),那么,可以通過計算argmax(si|c)確定w的組合方式。
根據(jù)貝葉斯公式:
(1)
計算式(1)時,可以忽略分母,并利用獨立性假設(shè)得:
(2)
在實現(xiàn)中,將概率P(vk|si)和P(si)的乘積轉(zhuǎn)換為對數(shù)加法得:
(3)
這里的概率P(vk|si)和P(si)都可以通過最大似然估計求得,因為訓(xùn)練語料數(shù)據(jù)量小,會存在概率參數(shù)沒有被統(tǒng)計到的情況,存在數(shù)據(jù)稀疏問題[8]。為避免參數(shù)“0”對計算的影響,采用數(shù)據(jù)平滑技術(shù)(Data Smoothing Technique,DST),本文采用加法平滑方法(additive smoothing),其基本思想是使公式給出的方法通用化,假設(shè)發(fā)生的次數(shù)比實際統(tǒng)計次數(shù)多δ次,0≤δ≤1(本文選取δ=1),那么:
(4)
(5)
式中:N(w)是整個語料庫大小;N(si)是訓(xùn)練語料中組合方式si出現(xiàn)的次數(shù);N(vk,si)是訓(xùn)練語料中粘連詞的組合方式si出現(xiàn)時,上下文vk出現(xiàn)的次數(shù)。
Transformer模型是2017年Google的Ashish Vaswani等[9]提出了一種基于自注意力機制(self-attention)的模型構(gòu)架,其拋棄了傳統(tǒng)的構(gòu)架,可以完全地進行并行運算。Transformer模型構(gòu)架如圖1所示。
圖1 Transformer模型框架圖
可以看出,對于給定的輸入數(shù)據(jù),首先要轉(zhuǎn)換成對應(yīng)的Embedding,Transformer中的Embedding操作不是普通的Embedding而是加入了位置信息的Embedding,稱之為Position Embedding。因為Transformer沒有使用循環(huán)或卷積計算,能夠并行處理輸入序列,但缺失序列信息,需要利用序列的分詞相對或者絕對位置信息,位置信息計算如下,其中:pos代表的是第幾個詞,i代表embedding中的第幾維。
PE(pos,2i)=sin(pos/10 0002i/dmodel)
(6)
PE(pos,2i+1)=cos(pos/10 0002i/dmodel)
(7)
編碼器由多個相同的層堆疊在一起,每一層又有兩個支層,第一個支層是一種多頭的自注意力實現(xiàn),輸入序列x經(jīng)d(dmodel=512)的嵌入矩陣映射為詞向量矩陣e,詞向量矩陣分別經(jīng)過不同線性變換產(chǎn)生Q、K和V,將Q、K、V線性映射h次,并做h次點乘注意力運算后結(jié)果拼接起來。
MultiHead(Q,K,V)=Concat(head1,head2,…,headh)
(8)
(9)
(10)
第二個支層是一個簡單的全連接前饋網(wǎng)絡(luò),在注意力機制之后,經(jīng)過簡單的正則化與殘差連接,隱層向量進入全連接的前饋網(wǎng)絡(luò):
FFN(x)=max(0,xW1+b1)W2+b2
(11)
至此編碼端單層結(jié)束,以上重復(fù)6次構(gòu)成完整編碼器結(jié)構(gòu)。解碼端與編碼端類似,同樣由6層注意力機制和全連接前饋網(wǎng)絡(luò)構(gòu)成,但多了一個多頭注意力機制。
選取數(shù)據(jù)集UN corpus French-English(來源:July 15-16,in conjunction with ACL 2010 in Uppsala, Sweden)中的英文單語部分,對其進行亂碼過濾、句首特殊字符替換、引號修正等數(shù)據(jù)清洗工作。從中隨機抽取2 020 000條數(shù)據(jù),其中2 000 000條數(shù)據(jù)用作訓(xùn)練集(貝葉斯分類器中的語料庫),20 000條數(shù)據(jù)用作測試集,另選取200條真實數(shù)據(jù),通過人工校正作為真實數(shù)據(jù)集進行測試。
深度神經(jīng)網(wǎng)絡(luò)具有大量的參數(shù),需要海量的訓(xùn)練數(shù)據(jù)。利用真實數(shù)據(jù)進行訓(xùn)練,人工標(biāo)注的成本會大大增加,因此我們需要使用一些技術(shù)對已有數(shù)據(jù)進行數(shù)據(jù)構(gòu)造。數(shù)據(jù)構(gòu)造基于訓(xùn)練集的句子,為了讓神經(jīng)網(wǎng)絡(luò)模型通過大量的粘連詞信息進行擬合,我們啟發(fā)式的設(shè)置含有粘連詞的數(shù)據(jù)占整體的0.7,后續(xù)會對粘連詞占比做進一步分析;根據(jù)已有的問題數(shù)據(jù)進行抽樣,統(tǒng)計出粘連詞粘連個數(shù)如表2所示。
表2 粘連詞粘連個數(shù)分布
在統(tǒng)計粘連位置時發(fā)現(xiàn)句首句尾粘連的概率更小一些,句首和句尾即第一個位置和最后一個位置的概率相等均為其余的1/3。
利用random()函數(shù)在遍歷文件時,每讀取一句得到一個0-1之間的隨機數(shù)x,按照70%占比構(gòu)造偽粘連詞數(shù)據(jù),即若x≤0.7則將該句子作為含有粘連詞的句子,若x>0.7則不做處理,直接輸出數(shù)據(jù)(句對)。構(gòu)造粘連數(shù)據(jù)要確定粘連詞數(shù),根據(jù)粘連詞數(shù)的分布,利用random()函數(shù)得到一個[0,1]均勻隨機數(shù)m,m的不同取值對應(yīng)著構(gòu)造該句話粘連詞的粘連詞數(shù)gram,gram的取值結(jié)果如下:
(12)
確定可選取的粘連位置n,n的取值:n=words-gram+1,其中words為該語句的單詞數(shù)目;根據(jù)粘連位置分布得知,句首和句尾即第一個位置和最后一個位置的概率相等均為其余的1/3,因此按比例構(gòu)造隨機數(shù)的范圍[1,x],其中x=3×n-4,根據(jù)隨機范圍映射粘連位置的周期為T=x/(n-1),得到的隨機數(shù)ran映射的位置信息為(ran-1)/T。按照得到的位置信息去空格構(gòu)造粘連詞,將構(gòu)造好的數(shù)據(jù)進行輸出,將經(jīng)上述步驟處理后的數(shù)據(jù)作為源語,原始數(shù)據(jù)作為目標(biāo)語輸出。
將英文句子按照標(biāo)點符號、空格進行切分,并且整理了特殊的不需要切分的形式,如A.D、e.g、U.S等形式不做切分。在機器翻譯任務(wù)中,為了解決數(shù)據(jù)稀疏以及集外詞(Out of vocabulary,OOV)的問題,Luong等[10-13]曾提出字符集神經(jīng)機器翻譯解決此類問題,2015年Sennrich等[14]提出了子字單元(subword unit)序列模型和子字切分方法(Byte Pair Encoding,BPE),該方法可以將單詞切分成子詞單元,有效緩解了機器翻譯中罕見詞和未登錄詞較難翻譯的現(xiàn)象。BPE子詞切分可以有效減少詞表的大小,幫助訓(xùn)練。
將含有粘連詞的句子作為源語,將原始句子作為目標(biāo)語。面對含有粘連詞的句子,模型不能識別粘連詞,學(xué)習(xí)信息會比較模糊,因此在預(yù)處理階段對含有粘連詞的源語句子采取不同的數(shù)據(jù)處理策略,首先想到的處理方式是將整個句子全部粘連到一起,這樣模型能學(xué)習(xí)到最全面的還原信息,但這樣的數(shù)據(jù)會詞表過大,目前現(xiàn)有的機器翻譯模型和設(shè)備都不足夠支持訓(xùn)練,因此本文放棄這種處理方式。選定以下三種數(shù)據(jù)處理策略。
(1) 策略一:數(shù)據(jù)處理方式是將句子按照字符全切分,全切分的數(shù)據(jù)不需要對其進行分詞、BPE字詞切分等操作,面對全切分數(shù)據(jù)模型不需要判斷哪些是粘連詞,只需要學(xué)習(xí)如何拼接單詞。策略一預(yù)處理如表3所示。
表3 策略一預(yù)處理示例
(2) 策略二:數(shù)據(jù)處理方式是借助外部的規(guī)則來幫助判定粘連詞,在分詞的基礎(chǔ)上,將判定為粘連詞的次按字符切分,其他詞匯不變,同時為了區(qū)別于正常的空格,對于粘連詞的切分標(biāo)識設(shè)定為“^^”,e而后對數(shù)據(jù)進行BPE字詞切分。策略二預(yù)處理如表4所示。
表4 策略二預(yù)處理示例
(3) 策略三:數(shù)據(jù)處理方式是只做分詞和BPE子詞切分。通過對策略二預(yù)處理后的數(shù)據(jù)觀察發(fā)現(xiàn)判定的粘連詞過多,有很多正常詞匯會被認定為粘連詞,因此嘗試直接分詞、BPE切分。策略三預(yù)處理如表5所示。
表5 策略三預(yù)處理示例
本文采用Transformer模型完成訓(xùn)練,由于本文任務(wù)較小,采用標(biāo)準(zhǔn)的Transformer模型進行訓(xùn)練時,容易梯度爆炸,增加訓(xùn)練輪數(shù),因此本文適當(dāng)調(diào)整了Transformer的模型參數(shù),使其更適于我們的任務(wù)。實驗參數(shù)設(shè)置如下:編碼端與解碼端都使用4層隱藏層的結(jié)構(gòu),多頭注意力[15]num_heads設(shè)置為8,隱藏層大小hidden_size為256,詞向量加入位置編碼信息,batch的類型為單詞,單批數(shù)據(jù)量batch_size設(shè)置為4 096,學(xué)習(xí)率0.000 5,預(yù)防模型過擬合dropout設(shè)置為0.1,最大句長過濾為512,訓(xùn)練輪數(shù)為15輪。訓(xùn)練前使用BPE做字詞切分,BPE參數(shù)設(shè)置為10 000。
首先對比利用貝葉斯分類器的還原方法與在Transformer模型中不同的數(shù)據(jù)處理策略在兩個測試集上的準(zhǔn)確率,準(zhǔn)確率如表6所示。
表6 兩個測試集上的準(zhǔn)確率(%)
基于貝葉斯分類器的方式,在兩種數(shù)據(jù)集上的差異最小,但是準(zhǔn)確率比較低,經(jīng)分析發(fā)現(xiàn)原因有兩個:其一是介詞在整個語料庫中(訓(xùn)練語料)出現(xiàn)的頻數(shù)較多,在通過貝葉斯計算時,會因為介詞在上下文出現(xiàn)的頻數(shù)大,導(dǎo)致計算結(jié)果會有一個很大的偏向,致使結(jié)果并不準(zhǔn)確;其二是該方法更傾向于將復(fù)合詞切分開,如:timeout->time out,雖然這類復(fù)合詞被切分開并不影響理解,但是在計算準(zhǔn)確率時會判定切分錯誤,并且如果所有復(fù)合詞均被切分,在后續(xù)的自然語言處理任務(wù)中會導(dǎo)致訓(xùn)練從沒見過復(fù)合詞,這樣是不合理的。
基于Transformer模型的方式,從結(jié)果來說,整體準(zhǔn)確率都高于基于貝葉斯分類器的方法,但不同的數(shù)據(jù)處理策略準(zhǔn)確率有了差別:
(1) 策略一:訓(xùn)練集按字符切分在測試集上的準(zhǔn)確率是最高的,但在真實數(shù)據(jù)中的準(zhǔn)確率卻是最低的,根據(jù)結(jié)果分析發(fā)現(xiàn)兩個問題,其一是同貝葉斯分類一樣,復(fù)合詞被切分開,其二是有“搶字母”的情況,模型更傾向于組合一個最大長度的詞匯,如表7所示。
表7 錯誤示例
模型輸出的結(jié)果是將‘Pradesh’中的sh拼接到了are上形成單詞‘share’,從結(jié)果上講,新的組合方式確實是兩個完整的單詞,但是很明顯這是錯誤的。
(2) 策略二:粘連詞按字符切分在測試集上的準(zhǔn)確率僅次于第一種策略,但在真實數(shù)據(jù)中的準(zhǔn)確率相比全字符切分有提升,根據(jù)結(jié)果分析發(fā)現(xiàn)該種方式存在有增譯漏譯的情況,這里說的增譯漏譯是指在原有的詞匯基礎(chǔ)上,對詞匯本身增加或減少了字母,使其與原詞匯不一致。除此之外,在判定句子中粘連詞的過程中借用了外部詞典,但沒有字典是完整的,字典中缺少不常見的單詞,如:新單詞、外來單詞等,常見詞與這些不常見詞粘連,就會判定不出該詞是粘連詞,而將其作為未登錄詞,因此外部詞典所包含的詞的豐富性也影響了訓(xùn)練結(jié)果。
(3) 策略三:訓(xùn)練集做分詞、BPE的方式在測試集上的準(zhǔn)確率最低,但在真實數(shù)據(jù)中的準(zhǔn)確率卻最高,根據(jù)結(jié)果分析在錯誤句子中有增譯的情況,模型偏向?qū)釉~轉(zhuǎn)換形態(tài)。
針對增漏譯的問題,我們合理懷疑,在構(gòu)造數(shù)據(jù)時設(shè)定粘連詞占比過高(0.7),導(dǎo)致模型更傾向于更愿意更改句子。為了驗證粘連詞占比是否對準(zhǔn)確率有影響,分別構(gòu)造了粘連詞占比10%、20%、…、90%的偽粘連詞數(shù)據(jù),在不更改模型參數(shù)的情況,使用在真實數(shù)據(jù)上表現(xiàn)更好的策略三處理數(shù)據(jù)進行訓(xùn)練,訓(xùn)練后準(zhǔn)確率如圖2所示,橫坐標(biāo)是粘連詞匯占比,縱坐標(biāo)是準(zhǔn)確率。
圖2 不同粘連詞占比的準(zhǔn)確率變化情況
圖2中,模型準(zhǔn)確率隨著訓(xùn)練集中粘連詞占比的增加大致呈上升趨勢,在粘連詞占比70%時,準(zhǔn)確率最高,經(jīng)過70%之后逐級降低,在90%的地方降低幅度較大。不同的粘連詞占比在各自的測試集上表現(xiàn)良好,在真實測試集上表現(xiàn)略差,相較于測試集平均低了2百分點,準(zhǔn)確率的浮動趨勢與測試集基本相符合。由此可以看出增漏譯等情況的出現(xiàn)受訓(xùn)練集中粘連詞的占比影響不大。
在工程實踐中,尤其是數(shù)據(jù)清洗的工作,理想情況是更改的句子都是正確的,并且不會因為該清洗造成其他錯誤問題,因此在結(jié)果處添加后處理操作,即判斷輸出句子與源語句子的全連接是否一致,不一致則輸出原句,這樣就可以新的錯誤句子的出現(xiàn),后處理操作如圖3所示。
圖3 后處理流程圖
添加后處理后,統(tǒng)計準(zhǔn)確率結(jié)果如表8所示。
表8 添加后處理操作后的準(zhǔn)確率(%)
經(jīng)過后處理之后,準(zhǔn)確率都有明顯的提升,通過對實驗結(jié)果的分析發(fā)現(xiàn)99%以上的粘連詞都能被準(zhǔn)確識別并還原,但在同一句話中,會出現(xiàn)其他復(fù)合詞被切分開,或者增譯的問題,這類句子會被判定為錯誤句子,即使真正的粘連詞已經(jīng)被還原。經(jīng)過后處理,對粘連詞按字符切分的策略二訓(xùn)練出的模型準(zhǔn)確率最高,相較于之前提升了6百分點,提升最快,這說明該種策略導(dǎo)致模型更容易出現(xiàn)增譯漏譯問題,排除增譯漏譯的情況后,該策略的準(zhǔn)確率提升到了99%。整體表現(xiàn)最佳的是只對數(shù)據(jù)做分詞、BPE的處理策略三,該策略在測試集和真實測試集中均有很好的表現(xiàn),并且經(jīng)過后處理后準(zhǔn)確率達到了98.5%。
本文復(fù)現(xiàn)了基于貝葉斯分類器的粘連詞還原方法,同時實現(xiàn)了基于Transformer模型還原粘連詞的方法,該方法結(jié)合原神經(jīng)機器翻譯模型的數(shù)據(jù)擬合特點,經(jīng)過數(shù)次迭代和篩選,最終訓(xùn)練出了一套適用的模型。
實驗結(jié)果表明,基于Transformer模型的粘連詞還原方法行之有效,相較于基于貝葉斯分類器的方法能夠更準(zhǔn)確地識別并還原英文粘連詞?;赥ransformer模型的粘連詞還原方法中,對訓(xùn)練數(shù)據(jù)采取不同的處理策略,達到了不同的效果,其中直接對訓(xùn)練數(shù)據(jù)進行分詞、BPE之后訓(xùn)練,得到的模型效果在真實測試集上表現(xiàn)最佳;在Transformer基礎(chǔ)上添加后處理操作后,對粘連詞進行字符切分的數(shù)據(jù)處理策略訓(xùn)練出的模型效果最佳。本文方法具備可遷移性,其他單詞之間使用空格分隔的語言,面對粘連詞問題,可以采用同樣的方法清洗數(shù)據(jù)。在未來的工作中,我們會依照此方法,嘗試構(gòu)建其他語言方向的粘連詞還原規(guī)則,同時考慮在模型訓(xùn)練中引入數(shù)據(jù)增強技術(shù)。