本發(fā)明涉及信息處理領(lǐng)域,特別涉及一種基于神經(jīng)網(wǎng)絡(luò)中文分詞的領(lǐng)域遷移方法。
背景技術(shù):
中文分詞是中文自然語言處理中的基礎(chǔ)任務(wù),它的目標(biāo)是將以中文漢字為組成的序列轉(zhuǎn)換為以中文詞語組成的序列。因?yàn)橹形脑~語是中文語義表達(dá)的基本單元,中文分詞是非常重要的基礎(chǔ)任務(wù),而且分詞系統(tǒng)的性能會直接影響到中文自然語言處理的上層任務(wù),例如,信息檢索和機(jī)器翻譯。
在過去的十幾年里,中文分詞方面有許多研究工作,也取得了很多矚目的成果。一方面,許多中文分詞的標(biāo)準(zhǔn)數(shù)據(jù)集被建立了起來;另一方面,許多統(tǒng)計(jì)學(xué)習(xí)的分類器被應(yīng)用到中文分詞任務(wù)中,目前最普遍的分詞方法是把分詞任務(wù)作為一個有監(jiān)督的序列標(biāo)注任務(wù)來完成。比較常見的傳統(tǒng)分詞模型有結(jié)構(gòu)化感知器、條件隨機(jī)場(crfs)等。但是這些傳統(tǒng)模型都十分依賴人工設(shè)計(jì)的特征,需要復(fù)雜的特征才能取得較好的分詞效果。最近,由于神經(jīng)網(wǎng)絡(luò)可以自己學(xué)習(xí)特征以代替復(fù)雜的人工設(shè)計(jì)特征,大大減輕特征工程的負(fù)擔(dān),許多工作嘗試將神經(jīng)網(wǎng)絡(luò)應(yīng)用于中文分詞任務(wù)。正是由于這些大量的標(biāo)注數(shù)據(jù)和不斷改進(jìn)的統(tǒng)計(jì)學(xué)習(xí)模型,中文分詞在標(biāo)準(zhǔn)數(shù)據(jù)集上取得了很好的效果,有些模型在標(biāo)準(zhǔn)數(shù)據(jù)集上的準(zhǔn)確率甚至超過了98%。
然而中文分詞并不能說是一個已經(jīng)解決了的任務(wù),由于大量標(biāo)注的數(shù)據(jù)主要是新聞?wù)Z料,這使得在這些數(shù)據(jù)上訓(xùn)練得到的分詞器在例如專利、文學(xué)、金融等領(lǐng)域的文本上性能大大下降。這一問題就是著名的領(lǐng)域遷移問題。領(lǐng)域遷移問題,由可得到的資源可進(jìn)一步細(xì)分為兩個大類,一個是全監(jiān)督領(lǐng)域遷移,一個是半監(jiān)督領(lǐng)域遷移。這兩個類別的主要區(qū)別在于遷移的目標(biāo)領(lǐng)域是否有標(biāo)注數(shù)據(jù)。全監(jiān)督領(lǐng)域遷移中,我們有大量的源領(lǐng)域標(biāo)注數(shù)據(jù)和少量目標(biāo)領(lǐng)域標(biāo)注數(shù)據(jù)。在半監(jiān)督領(lǐng)域遷移中,我們有大量源領(lǐng)域標(biāo)注數(shù)據(jù),但是在目標(biāo)領(lǐng)域我們只能得到無標(biāo)注的數(shù)據(jù)。
而本發(fā)明主要為了解決上述的半監(jiān)督領(lǐng)域遷移問題,采用了一種基于嵌入式表示的領(lǐng)域遷移方法,利用語言模型建模中文文本字符之間的共現(xiàn)關(guān)系,將這一跨領(lǐng)域信息通過嵌入式表示傳遞給神經(jīng)網(wǎng)絡(luò)分詞器,得到了較好的領(lǐng)域遷移分詞效果。
技術(shù)實(shí)現(xiàn)要素:
為了解決現(xiàn)有的技術(shù)問題,本發(fā)明提供了一種基于神經(jīng)網(wǎng)絡(luò)分詞的領(lǐng)域遷移方法。方案如下:
訓(xùn)練時,分詞網(wǎng)絡(luò)和語言模型網(wǎng)絡(luò)同時工作:
步驟一,我們將輸入的已標(biāo)注句子和隨機(jī)抽取的未標(biāo)注句子的每個字符都映射為字符向量,通過這一步將句子參數(shù)化,句子各映射為一個數(shù)值矩陣。
步驟二,我們使用一個多卷積核的卷積神經(jīng)網(wǎng)絡(luò)對參數(shù)化的已標(biāo)注句子進(jìn)行卷積操作,不同窗口大小的卷積核從句子中提取到隱多粒度的局部特征。
步驟三,將隱多粒度局部特征送入一個前向網(wǎng)絡(luò)中,得到各個字符序列標(biāo)注的標(biāo)簽概率。
步驟四,在句子層面上,對整個句子中各個字符的標(biāo)簽概率進(jìn)行維特比解碼,得到句子層面的最優(yōu)分詞結(jié)果和分詞網(wǎng)絡(luò)的損失函數(shù)值。
步驟五,未標(biāo)注的句子送入一個基于長短期記憶單元(lstm)循環(huán)神經(jīng)網(wǎng)絡(luò)的字符語言模型。得到各個字符位置的隱層表示。
步驟六,將隱層表示送入一個前向網(wǎng)絡(luò)中,得到各個字符位置的下一個字符的概率分布。得到語言模型網(wǎng)絡(luò)的損失函數(shù)值。
步驟七,將分詞網(wǎng)絡(luò)的損失函數(shù)值與語言模型網(wǎng)絡(luò)的損失函數(shù)值進(jìn)行組合,利用反向傳播算法回傳損失,更新兩個網(wǎng)絡(luò)的參數(shù)值。
分詞時,僅只用分詞網(wǎng)絡(luò)一側(cè):
步驟一,我們將輸入句子的每個字符都映射為字符向量,通過這一步將句子參數(shù)化,句子映射為一個數(shù)值矩陣。
步驟二,我們使用一個多卷積核的卷積神經(jīng)網(wǎng)絡(luò)對參數(shù)化的句子進(jìn)行卷積操作,不同窗口大小的卷積核從句子中提取到隱多粒度的局部特征。
步驟三,將隱多粒度局部特征送入一個前向網(wǎng)絡(luò)中,得到各個字符序列標(biāo)注的標(biāo)簽概率。
步驟四,在句子層面上,對整個句子中各個字符的標(biāo)簽概率進(jìn)行維特比解碼,得到句子層面的最優(yōu)分詞結(jié)果。
附圖說明
圖1是本發(fā)明提供的分詞領(lǐng)域遷移方法的網(wǎng)絡(luò)結(jié)構(gòu)圖
圖2為lstm循環(huán)神經(jīng)網(wǎng)絡(luò)單元的內(nèi)部結(jié)構(gòu)圖
具體實(shí)施方式
接下來將對本發(fā)明的實(shí)施方法作更詳細(xì)的描述。
圖1是本發(fā)明提供的分詞方法的網(wǎng)絡(luò)結(jié)構(gòu)圖,其中包括:
訓(xùn)練部分:
步驟s1:共享的字符嵌入式表示層,將輸入的已標(biāo)注句子和隨機(jī)抽取的未標(biāo)注句子字符向量參數(shù)化;
步驟s2:卷積神經(jīng)網(wǎng)絡(luò)對已標(biāo)注句子提取隱多粒度局部信息;
步驟s3:前向神經(jīng)網(wǎng)絡(luò)計(jì)算各個字符的標(biāo)簽得分;
步驟s4:使用標(biāo)簽推斷方法得到最優(yōu)標(biāo)簽序列和損失函數(shù)值;
步驟s5:未標(biāo)注的句子送入一個基于長短期記憶單元(lstm)循環(huán)神經(jīng)網(wǎng)絡(luò)的字符語言模型,得到各個字符位置的隱層表示;
步驟s6:將隱層表示送入一個前向網(wǎng)絡(luò)中,得到各個字符位置的下一個字符的概率分布,得到語言模型網(wǎng)絡(luò)的損失函數(shù)值;
步驟s7:將分詞網(wǎng)絡(luò)的損失函數(shù)值與語言模型網(wǎng)絡(luò)的損失函數(shù)值進(jìn)行組合,利用反向傳播算法回傳損失,更新兩個網(wǎng)絡(luò)的參數(shù)值;
分詞部分,僅使用分詞網(wǎng)絡(luò)部分:
步驟s1:共享的字符嵌入式表示層,將輸入句子字符向量參數(shù)化;
步驟s2:卷積神經(jīng)網(wǎng)絡(luò)對已標(biāo)注句子提取隱多粒度局部信息;
步驟s3:前向神經(jīng)網(wǎng)絡(luò)計(jì)算各個字符的標(biāo)簽得分;
步驟s4:使用標(biāo)簽推斷方法得到最優(yōu)標(biāo)簽序列;
下面將對每個步驟進(jìn)行具體的說明:
步驟s1:向量參數(shù)化,為了克服傳統(tǒng)one-hot表示法所帶來的稀疏性和無關(guān)性的問題,本發(fā)明首先將句子中的各個字符參數(shù)化,通過一個映射字典,將字符映射為不稀疏的向量表示。假設(shè)中文漢字一共有c個字符,那么整個映射字典可以表示為一個c*d維的數(shù)值矩陣,其中每一個行是一個字符的數(shù)值表示,一個d維的數(shù)值向量。那么一個句子,就可以表示為句子中每一個字符都映射為向量后組成的數(shù)值矩陣。
其中x為句子的矩陣表示,xi為句子中第i個字符映射后的向量,
在這一步驟中,借鑒去噪自動編碼器的思想,本發(fā)明引入了dropout的機(jī)制,在訓(xùn)練網(wǎng)絡(luò)時,隨機(jī)將一部分參數(shù)置零,使得參數(shù)訓(xùn)練更具有魯棒性,訓(xùn)練過程更為平滑。
步驟s2:使用卷積神經(jīng)網(wǎng)絡(luò)層提取隱多粒度局部信息。卷積神經(jīng)網(wǎng)絡(luò)擅長于局部特征的提取,并已經(jīng)被廣泛用于中文自然語言處理任務(wù)中,如:情感分類、文檔分類。不同的卷積核卷積句子,得到不同的局部特征。卷積神經(jīng)網(wǎng)絡(luò)提取到的局部特征比傳統(tǒng)使用的uni-gram、bi-gram有更好的表現(xiàn)。所以本發(fā)明中將多卷積核的卷積神經(jīng)網(wǎng)絡(luò)引入中文分詞中,用于提取更好的局部特征。
對于文本處理中的卷積神經(jīng)網(wǎng)絡(luò)而言,一個窗口為w的卷積核可以表示為一個w*d維的矩陣,其中d是文本參數(shù)化后的向量維度。則卷積核對窗口內(nèi)的w個向量的卷積操作,可以表示為:
其中c為提取到的局部特征,
而且中文詞語的成詞規(guī)律有很多種,僅僅用一個特征是不能表示的,所以我們對不同的窗口都引入了多個卷積核。假設(shè)我們對窗口w引入n個卷積核,則在句子中一個字符周圍窗口為w個字符提取到的局部特征就可以表示為各個卷積核卷積提取到的特征的組合。
其中c為句子中一個字符周圍提取到的特征向量,ci表示一個卷積核提取到的局部特征。
步驟s3:使用前向神經(jīng)網(wǎng)絡(luò)計(jì)算各個字符的標(biāo)簽得分。在步驟s2中,卷積神經(jīng)網(wǎng)絡(luò)得到了隱多粒度局部特征,這一步中的前向網(wǎng)絡(luò)就是利用之前提取到的局部信息對序列進(jìn)行標(biāo)注生成標(biāo)簽概率。以bies四標(biāo)簽體系為例,則輸出標(biāo)簽共有4個,分別表示字符是一個詞語的開頭、中間、結(jié)尾和當(dāng)前字是一個單字詞語。這個前向網(wǎng)絡(luò)是一個輸入為卷積神經(jīng)網(wǎng)絡(luò)輸出維度,輸出維度是4的全連接網(wǎng)絡(luò)。前向網(wǎng)絡(luò)的輸入是步驟s2中得到的輸出向量,輸入是bies四標(biāo)簽的得分,最后使用softmax函數(shù)對輸出的標(biāo)簽得分進(jìn)行概率化,得到四個標(biāo)簽對應(yīng)的概率。在這一層中,本發(fā)明還使用了dropout策略,提升網(wǎng)絡(luò)的整體性能,防止過擬合。
步驟s4:使用標(biāo)簽推斷方法得到最優(yōu)標(biāo)簽序列。本發(fā)明將中文分詞作為一個序列標(biāo)注的問題,其中的標(biāo)注標(biāo)簽并不是相互無關(guān)的,以bies四標(biāo)簽體系為例,b表示字符是一個詞語的開始,i表示字符在一個詞語的內(nèi)部,e表示字符是一個詞語的結(jié)尾,s表示字符是一個單字詞語。存在明確的約束關(guān)系,標(biāo)簽b之后符合約束的只能是標(biāo)簽i或者e,標(biāo)簽e后面符合約束的只能是標(biāo)簽b或者s,標(biāo)簽i之后符合約束的只能是標(biāo)簽e,標(biāo)簽s之后符合約束的只能是標(biāo)簽b或者s。這些約束關(guān)系表明標(biāo)注標(biāo)簽之間有很強(qiáng)的依賴關(guān)系。為了建模這種關(guān)系,本發(fā)明中加入了標(biāo)簽的跳轉(zhuǎn)得分。同時為了從各個字符的標(biāo)簽概率分布得到句子的最優(yōu)標(biāo)簽序列。本發(fā)明使用標(biāo)簽推斷來計(jì)算得到整個句子層面上的最優(yōu)標(biāo)簽路徑。路徑的得分有兩部分組成,一個是標(biāo)簽的跳轉(zhuǎn)得分,一個是標(biāo)簽本身的概率得分。假設(shè)標(biāo)簽轉(zhuǎn)移矩陣是a,其中的第i行第j列的元素表示從標(biāo)簽i跳轉(zhuǎn)到標(biāo)簽j的得分。則一個句子上某一個標(biāo)簽路徑的得分為:
其中s(yt)為該標(biāo)簽本身的概率得分,n為句子長度。本發(fā)明使用維特比算法計(jì)算得到最優(yōu)標(biāo)簽路徑。網(wǎng)絡(luò)用最大化對數(shù)似然函數(shù)進(jìn)行訓(xùn)練:
其中y(s)表示輸入句子s的所有可能標(biāo)簽序列。
步驟s5:將步驟s1中參數(shù)化的未標(biāo)注句子送入一個基于長短期記憶單元(lstm)循環(huán)神經(jīng)網(wǎng)絡(luò)的字符語言模型,得到各個字符位置的隱層表示。循環(huán)神經(jīng)網(wǎng)絡(luò)擅長于抽取長距離的依賴關(guān)系,也被廣泛用于自然語言處理各個任務(wù)。但是傳統(tǒng)循環(huán)神經(jīng)網(wǎng)絡(luò)由于結(jié)構(gòu)比較簡單,很容易出現(xiàn)梯度爆炸和梯度彌散的問題。梯度彌散會使得網(wǎng)絡(luò)訓(xùn)練變得非常緩慢,梯度爆炸會使得訓(xùn)練變得困難,甚至導(dǎo)致網(wǎng)絡(luò)發(fā)散。而lstm(長短期記憶)單元通過使用類似門電路的方式控制記憶單元的遺忘和更新,使得循環(huán)神經(jīng)網(wǎng)絡(luò)能夠更有效地學(xué)習(xí)到長距離的依賴關(guān)系。
圖2給出了一種lstm單元的單元結(jié)構(gòu),一個lstm單元在坐標(biāo)點(diǎn)t可以描述為:
it=σ(wi·xt+ui·ht-1+bi)
ft=σ(wf·xt+uf·ht-1+bf)
ot=σ(wo·xt+uo·ht-1+bo)
ht=ot⊙tanh(ct)
其中x是輸入,c是記憶單元狀態(tài),i、f、o分別是輸入門,遺忘門和輸出門,σ和tanh是邏輯斯蒂克函數(shù)和雙曲正切函數(shù)?!咽菙?shù)值對位相乘。w、u和b是權(quán)重矩陣和偏置項(xiàng)。
步驟s6:語言模型預(yù)測下一個字符。將步驟s5中得到的隱層表示送入一個前向網(wǎng)絡(luò)中,使用softmax函數(shù)得到各個字符位置的下一個字符的概率分布,語言模型使用交叉熵的損失函數(shù),計(jì)算得到語言模型網(wǎng)絡(luò)的損失函數(shù)值。
步驟s7:損失函數(shù)組合,更新參數(shù)。將步驟s4中得到的分詞網(wǎng)絡(luò)損失函數(shù)值與步驟s6中得到的語言模型網(wǎng)絡(luò)的損失函數(shù)值進(jìn)行組合:
loss=lossseg+a·losslm
其中l(wèi)ossseg為分詞網(wǎng)絡(luò)損失函數(shù),losslm為語言模型網(wǎng)絡(luò)損失函數(shù),α為一個平衡兩個網(wǎng)絡(luò)損失的超參數(shù)。最后利用反向傳播算法回傳損失,更新兩個網(wǎng)絡(luò)的參數(shù)值。
分詞時,僅激活分詞網(wǎng)絡(luò)一側(cè),執(zhí)行步驟s1、s2、s3、s4即可得到分詞結(jié)果。
以上結(jié)合附圖對所提出的一種基于隱多粒度局部特征的中文分詞方法及各模塊的具體實(shí)施方式進(jìn)行了闡述。通過以上實(shí)施方式的描述,所屬領(lǐng)域的一般技術(shù)人員可以清楚的了解到本發(fā)明可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件實(shí)現(xiàn),但前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以計(jì)算機(jī)軟件產(chǎn)品的形式體現(xiàn),該軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺或多臺計(jì)算機(jī)設(shè)備執(zhí)行本發(fā)明各個實(shí)施例所述的方法。
依據(jù)本發(fā)明的思想,在具體實(shí)施方式及應(yīng)用范圍上均會有改變之處。綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
以上所述的本發(fā)明實(shí)施方式,并不構(gòu)成對發(fā)明保護(hù)范圍的限定。任何在本發(fā)明的精神和原則之內(nèi)所作的修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。