本發(fā)明涉及對抗神經(jīng)網(wǎng)絡和模型訓練,具體地,涉及一種基于對抗神經(jīng)網(wǎng)絡的語法糾錯模型訓練方法和系統(tǒng)。
背景技術:
1、隨著互聯(lián)網(wǎng)普及,越來越多的信息通過互聯(lián)網(wǎng)進行傳播。據(jù)統(tǒng)計,用戶在facebook、twitter、whatsapp、youtube和電子郵件上產(chǎn)生的數(shù)據(jù)量是驚人的。每天,都會產(chǎn)生72萬小時的youtube的新視頻,650億條whatsapp上的消息,5億條twitter上的推文以及4000萬條facebook上的新數(shù)據(jù)。2018年,全球的數(shù)據(jù)總量達到了33zb,相當于33萬億gb。2020年,這一數(shù)字已經(jīng)達到了接近59zb,預計到2025年將會增加到大約175zb,這是一個難以想象的數(shù)字。而在這大量的信息,有相當一部分為文本信息,而在文本中,也充斥著大量的出錯內容。這些出錯的文本內容,不僅十分影響用戶的觀看體驗,同時也對各種自然語言處理任務提出了挑戰(zhàn)。在這種情況下,語法糾錯任務應運而生,并開始迅速成為自然語言處理的熱門研究領域。
2、語法糾錯(grammatical?error?collection,gec),顧名思義,就是將一個語法錯誤的句子修改為語法正確的句子。語法糾錯技術不僅能夠幫助語言學習者和文字工作者自動化地診斷、修改語法錯誤,提高工作和學習效率,而且還是許多自然語言處理任務的重要前置步驟。例如,在信息檢索、語音交互、機器翻譯等上層應用中,對輸入文本進行語法校正等預處理操作,可以有效提升應用的性能。例如,在信息檢索中,用戶輸入的文本會在搜索引擎中進行檢查,以提高最后的結果的準確度;在語音交互中,用戶的語音會被轉換為文本,并進行相應的語法校正和糾錯,以提高意圖識別和交互的準確性;在機器翻譯中,源語言被翻譯之后會進行語法糾錯,以確保翻譯質量。
3、transformer模型是一種深度學習模型,它利用注意力機制來提高模型訓練速度。transformer由編碼器和解碼器兩部分組成。編碼器由6個編碼塊構成,每個編碼塊有兩個子層:自注意力層和前饋神經(jīng)網(wǎng)絡層,其結構一致,但是參數(shù)不同。解碼器也由6個解碼塊構成,每個解碼塊有三個子層:自注意力層、前饋神經(jīng)網(wǎng)絡層和編碼器-解碼器注意力層,該層用來幫忙解碼器關注輸入句子的相關部分,同樣結構相同但參數(shù)不共享。自注意力機制是transformer模型的核心部分。它通過計算輸入序列中每個元素與其他元素之間的相關性來捕獲序列中不同位置之間的依賴關系。
4、遷移學習(transfer?learning)是一種機器學習方法,它通過現(xiàn)有的成熟的模型應用到新的領域,兩個領域之間可能解決的問題不同,但有一定的相通性。遷移學習可以分為幾種不同的類型,包括有基于模型的、基于實例的以及基于特征的等。這些側重于解決不同類型的問題,具體使用哪種方法取決于具體應用場景?;趯嵗倪w移學習方法側重于從源領域中選擇對目標領域有用的實例;基于特征的遷移學習方法主要希望將在源領域和目標領域之間的特征以同樣的方法表示出來;基于模型的遷移學習方法側重于在兩個領域之間共享模型,具體是共享模型的先驗分布或者是參數(shù)。
5、cyclegan是一種生成模型,能夠根據(jù)給定的數(shù)據(jù)生成新的數(shù)據(jù)樣本。cyclegan的主要目的就是實現(xiàn)不同域數(shù)據(jù)之間的轉換。以一個假設為例,目前有兩個數(shù)據(jù)集x,y存放不同風格的圖片,cyclegan希望訓練出一個生成器g,其輸入一個x,輸出得到一個y′,即g(x)=y(tǒng)′,x∈x;同時,也要訓練出一個生成器f,其輸入y得到x′,即f(y)=x′,y∈y。為了達到這個目的,還需要訓練兩個判別器dx,dy,用來判別生成圖像的質量。如果生成器生成的x′,y′與數(shù)據(jù)集x,y中的x,y差別較大,則應給予低分,反正則給予高分。此外,判別器應當始終給予數(shù)據(jù)集x,y中的x,y高分。語法正確和語法錯誤的句子也可看為兩種不同的風格,本方法利用cyclegan來訓練生成器,該生成器可以生成語法錯誤的句子,且生成的句子會不斷向真實的語法錯誤句子靠攏,所以可以用來進行數(shù)據(jù)增強,用擴充的語料庫訓練gec模型得到更好的效果。
6、當前較為主流的語法糾錯研究辦法分為兩類:(1)數(shù)據(jù)增強(2)模型結構改進。
7、目前的語法糾錯任務主要是當作一種特殊的機器翻譯任務來進行處理,將其視為同語種之間的翻譯任務,利用seq2seq(序列到序列)的網(wǎng)絡架構進行訓練。顯然,可以通過大規(guī)模的錯誤句子-正確句子的語句對來訓練一個生成模型,用該模型實現(xiàn)語法錯誤的自動糾正。但是,生成模型一般需要的平行語料庫的規(guī)模會比較大,與機器翻譯的大規(guī)模語法料庫規(guī)模相比,語法糾錯這部分的語料規(guī)模通常比較小,只有十幾萬句。于是如何進行科學的數(shù)據(jù)增強成為了研究的方向。有部分已有的方法隨機在句子添加錯誤構造數(shù)據(jù)或者利用大規(guī)模的人工去標注,但是隨機添加錯誤生成的數(shù)據(jù)與真實數(shù)據(jù)差異較大,質量較低,而大規(guī)模的人工標注成本太高。如何自動的生成高質量的數(shù)據(jù)成為一大難點。
8、源語句和目標語句在語法糾錯中通常只有微小的差異,所以用序列到序列模型來從頭生成整個目標語句應該不是最佳的選擇。針對這一問題,有些方法構建了專門針對語法糾錯這一任務的模型結構。將seq2seq(序列到序列)的模型架構修改為seq2edit(序列到修改)架構,模型同樣接受文本的輸入,但是不再直接輸出糾正后的文本,而是輸出需要進行改錯的位置以及錯誤類型,將生成問題轉變?yōu)榱朔诸悊栴}。這種方法在推理時可以并行運行,速度較序列到序列的框架也有所提升。但是此方法在根據(jù)錯誤類型進行修改句子時一般需要多輪次的改錯,因為一般句子的錯誤可能不止一處,而多輪次的改錯容易帶來引入新的語法錯誤,在原本正確的位置引入了不恰當?shù)男薷膶е乱胄碌腻e誤,這也是目前序列到修改架構所面臨的問題。
9、專利文獻cn114239557a公開了一種語法糾錯方法及訓練方法、裝置、電子設備、存儲介質,其中,訓練方法包括:分別獲取包含標注信息的第一訓練語料集和第二單語語料集,其中,標注信息用于表征所述第一訓練語料集中各訓練語料的語法錯誤對,語法錯誤對包括錯誤形式的源片段和與錯誤形式的源片段對應的正確形式的目標片段;提取所述第一訓練語料集中各訓練語料的語法錯誤對,構建語法錯誤對參考集;基于所述語法錯誤對參考集,對所述第二單語語料集進行腐化處理,得到與所述第二單語語料集相對應的偽錯誤語料集;將所述偽錯誤語料集和所述第一訓練語料集輸入至預設的神經(jīng)網(wǎng)絡模型,對所述預設的神經(jīng)網(wǎng)絡模型進行訓練,得到語法糾錯模型。
10、目前的數(shù)據(jù)增強方法采用隨機添加錯誤構造數(shù)據(jù),其與真實數(shù)據(jù)差異較大,使訓練出的模型的效果并不好,而人工標注的方法成本太高,不切合實際。使用序列到序列的模型架構對數(shù)據(jù)量的要求比較高,同時推理速度較慢,而序列到修改框架一定程度上解決了這兩個問題,但同時帶來更復雜的模型設計。
技術實現(xiàn)思路
1、針對現(xiàn)有技術中的缺陷,本發(fā)明的目的是提供一種基于對抗神經(jīng)網(wǎng)絡的語法糾錯模型訓練方法和系統(tǒng)。
2、根據(jù)本發(fā)明提供的基于對抗神經(jīng)網(wǎng)絡的語法糾錯模型訓練方法,包括:
3、步驟1:使用預訓練模型作為生成器,預測每個位置上概率最大的單詞組成句子,用于后續(xù)判別器的判別以及輸入到另一個生成器繼續(xù)生成;
4、步驟2:構建一個判別器,用來判別輸入的句子是由生成器生成的還是真實數(shù)據(jù);
5、步驟3:基于兩個生成器以及兩個判別器,構建cyclegan網(wǎng)絡,實現(xiàn)生成器與判別器之間的博弈;
6、步驟4:計算交叉熵損失,用于反向傳播進行神經(jīng)網(wǎng)絡參數(shù)的更新。
7、優(yōu)選地,所述步驟1包括:
8、選用t5模型作為生成器,對輸入到t5模型中的句子先經(jīng)過分詞器的處理,然后t5模型統(tǒng)一進行填充、截斷,并生成對應的輸入句子的身份識別碼;
9、生成一個注意力掩碼矩陣,使得t5模型在進行注意力計算時只關注句子本身;
10、對目標句子進行分詞器處理、填充和截斷,將目標句子中所有值為指定填充標記pad_token_id全部改為-100;
11、將輸入句子的身份識別碼、注意力掩碼和句子標簽輸入到t5模型中進行前向傳播,生成得到與目標語句之間的交叉熵損失,用于反向傳播進行神經(jīng)網(wǎng)絡參數(shù)的更新,和每個位置上詞表中每個單詞的分數(shù),經(jīng)過softmax后即為每個單詞在此位置出現(xiàn)的概率。
12、優(yōu)選地,所述步驟2包括:
13、對輸入判別器的句子先進行編碼提取特征然后進行判斷;
14、使用t5編碼器來進行句子的編碼,先對句子進行分詞器的處理,得到對應的輸入句子的身份識別碼、注意力掩碼,然后輸入到t5編碼器中,t5編碼器對句子中每一個單詞都輸出一個隱層編碼向量;
15、構建一個線性層,根據(jù)輸入的句子編碼向量來預測分數(shù),并將預測的分數(shù)轉換為對應的概率,該概率將與句子的標簽進行計算得到損失,在線性層后再連接一個sigmod層,將分數(shù)轉換為0-1之間的概率。
16、優(yōu)選地,所述步驟3包括:
17、設x為語法錯誤的句子,y為語法正確的句子,則生成器的表達式為:
18、gt(x)=y(tǒng)′,x∈x#(1)
19、gf(y)=x′,y∈y#(2)
20、其中,生成器gt輸入語法錯誤句子x,生成語法正確句子y′;生成器gf輸入語法正確句子y,輸出語法錯誤句子x′;
21、將y′再次進行改錯后恢復到原句子x,表達式為:
22、gf(gt(x))=x,x∈x#(3)
23、gt(gf(y))=y(tǒng),y∈y#(4)
24、兩個判別器分別為dt和df,dt用于判別句子是由gt生成的還是真實的,df用于判別句子是由gf真實的還是生成的;判別器dt將gt糾正后的語句判別為0,將真實的語法正確語句y,y∈y判別為1。
25、優(yōu)選地,所述步驟4包括:
26、當訓練判別器時,gt,gf的參數(shù)固定,只更新dt,df的參數(shù);當訓練生成器時,dt,df的參數(shù)固定,只更新gt,gf的參數(shù);
27、對于生成器的交叉熵損失loss,首先gt將語法錯誤句子x糾正,糾正后的句子與目標句子之間計算loss,該loss稱為lossforward;同時糾正后的句子需使判別器dt判別為真實數(shù)據(jù),該loss稱為lossgan;gf生成的語法錯誤句子通過gt的糾正,糾正后句子與原句子保持一致,該loss稱為losscycle;最后對原本符合語法的句子,gt不進行修改,該loss稱為lossidentity;整體的生成器gt的lossgen計算表達式為:
28、lossgen=lossforward+lossgan+losscycle+lossidentity#(5)
29、
30、
31、
32、
33、訓練判別器時,判別器將生成器生成的句子判別為0,將真實語句判別為1,其lossdis的計算表達式為:
34、
35、loss計算完畢后,將其反向傳播來更新神經(jīng)網(wǎng)絡的參數(shù)。
36、根據(jù)本發(fā)明提供的基于對抗神經(jīng)網(wǎng)絡的語法糾錯模型訓練系統(tǒng),包括:
37、模塊m1:使用預訓練模型作為生成器,預測每個位置上概率最大的單詞組成句子,用于后續(xù)判別器的判別以及輸入到另一個生成器繼續(xù)生成;
38、模塊m2:構建一個判別器,用來判別輸入的句子是由生成器生成的還是真實數(shù)據(jù);
39、模塊m3:基于兩個生成器以及兩個判別器,構建cyclegan網(wǎng)絡,實現(xiàn)生成器與判別器之間的博弈;
40、模塊m4:計算交叉熵損失,用于反向傳播進行神經(jīng)網(wǎng)絡參數(shù)的更新。
41、優(yōu)選地,所述模塊m1包括:
42、選用t5模型作為生成器,對輸入到t5模型中的句子先經(jīng)過分詞器的處理,然后t5模型統(tǒng)一進行填充、截斷,并生成對應的輸入句子的身份識別碼;
43、生成一個注意力掩碼矩陣,使得t5模型在進行注意力計算時只關注句子本身;
44、對目標句子進行分詞器處理、填充和截斷,將目標句子中所有值為指定填充標記pad_token_id全部改為-100;
45、將輸入句子的身份識別碼、注意力掩碼和句子標簽輸入到t5模型中進行前向傳播,生成得到與目標語句之間的交叉熵損失,用于反向傳播進行神經(jīng)網(wǎng)絡參數(shù)的更新,和每個位置上詞表中每個單詞的分數(shù),經(jīng)過softmax后即為每個單詞在此位置出現(xiàn)的概率。
46、優(yōu)選地,所述模塊m2包括:
47、對輸入判別器的句子先進行編碼提取特征然后進行判斷;
48、使用t5編碼器來進行句子的編碼,先對句子進行分詞器的處理,得到對應的輸入句子的身份識別碼、注意力掩碼,然后輸入到t5編碼器中,t5編碼器對句子中每一個單詞都輸出一個隱層編碼向量;
49、構建一個線性層,根據(jù)輸入的句子編碼向量來預測分數(shù),并將預測的分數(shù)轉換為對應的概率,該概率將與句子的標簽進行計算得到損失,在線性層后再連接一個sigmod層,將分數(shù)轉換為0-1之間的概率。
50、優(yōu)選地,所述模塊m3包括:
51、設x為語法錯誤的句子,y為語法正確的句子,則生成器的表達式為:
52、gt(x)=y(tǒng)′,x∈x#(1)
53、gf(y)=x′,y∈y#(2)
54、其中,生成器gt輸入語法錯誤句子x,生成語法正確句子y′;生成器gf輸入語法正確句子y,輸出語法錯誤句子x′;
55、將y′再次進行改錯后恢復到原句子x,表達式為:
56、gf(gt(x))=x,x∈x#(3)
57、gt(gf(y))=y(tǒng),y∈y#(4)
58、兩個判別器分別為dt和df,dt用于判別句子是由gt生成的還是真實的,df用于判別句子是由gf真實的還是生成的;判別器dt將gt糾正后的語句判別為0,將真實的語法正確語句y,y∈y判別為1。
59、優(yōu)選地,所述模塊m4包括:
60、當訓練判別器時,gt,gf的參數(shù)固定,只更新dt,df的參數(shù);當訓練生成器時,dt,df的參數(shù)固定,只更新gt,gf的參數(shù);
61、對于生成器的交叉熵損失loss,首先gt將語法錯誤句子x糾正,糾正后的句子與目標句子之間計算loss,該loss稱為lossforward;同時糾正后的句子需使判別器dt判別為真實數(shù)據(jù),該loss稱為lossgan;gf生成的語法錯誤句子通過gt的糾正,糾正后句子與原句子保持一致,該loss稱為losscycle;最后對原本符合語法的句子,gt不進行修改,該loss稱為lossidentity;整體的生成器gt的lossgen計算表達式為:
62、lossgen=lossforward+lossgan+losscycle+lossidentity#(5)
63、
64、
65、
66、
67、訓練判別器時,判別器將生成器生成的句子判別為0,將真實語句判別為1,其lossdis的計算表達式為:
68、
69、loss計算完畢后,將其反向傳播來更新神經(jīng)網(wǎng)絡的參數(shù)。
70、與現(xiàn)有技術相比,本發(fā)明具有如下的有益效果:
71、(1)本發(fā)明利用cyclegan結構訓練相應的生成器與判別器,二者之間的博弈是不斷提高生成器生成質量的關鍵,一個生成器不斷生成更高質量的錯誤語句來擴充數(shù)據(jù)庫,另一個生成器則不斷提高其糾正錯誤的性能,直接提升語法糾錯的效果。而且本方法訓練的生成器與判別器均為端到端的模型,由模型自己提取特征并生成數(shù)據(jù),并不需要人工再進行特征的提取,只需提供給模型標準的語法錯誤-正確語句對,模型就能學習到兩種語句之間的不同并自動化的進行轉換,并不需要人工再進行標注,大大減少了人力成本,能夠在實際場景中有更廣泛的應用;
72、(2)本發(fā)明使用了cyclegan的結構,訓練了兩個生成器,一個生成器將語法正確的語句改為語法錯誤的語句用于數(shù)據(jù)增強,而另一個生成器則是將語法錯誤的語句改為正確的語句,這就是我們所需要的語法糾錯模型,而且在判別器的作用下,該語法糾錯模型不單單只是糾正語法錯誤,同時也會使生成的句子更加靠近人類真實的表達;
73、(3)本發(fā)明訓練的語法糾錯模型是根據(jù)語法錯誤的語句直接生成語法正確的語句而不是預測改錯的操作,所以只需要一次的糾錯過程,而且由于seq2seq架構的特異性,模型更傾向于生成與原來相同的句子,這就意味著會有更小的幾率引入新的語法錯誤,在已有的訓練下,模型的糾錯效果已經(jīng)得到了驗證,而其本身的結構能夠保證不引入新的錯誤,本發(fā)明訓練的語法糾錯模型具有更加出色的表現(xiàn)。