本發明涉及一種利用計算機進行中文分詞的方法,特別是一種利用基于詞上下文的字嵌入與神經網絡相結合的方式進行自動中文分詞的方法。
背景技術:
中文分詞是自然語言處理的一項基本任務,其廣泛的應用需求吸引了大量相關研究從而促進了其相關技術的快速發展。中文這樣的黏著語與西方語言不同,中文句子的詞與詞之間并沒有明顯的間隔。而一般自然語言處理任務的最小單元是“詞”,所以對于中文來說,首要的問題是先識別詞串。目前處理中文分詞的手段大體可以分為兩類,基于規則的方法與基于統計方法?;谠~典的規則方法需要構建一個大規模的詞典。切詞時會根據預先設計好的匹配規則來匹配詞典中的詞,從而完成對文本的切分。在計算資源相對受限和緊缺的時期,機器學習方法需要占用大量的計算資源和耗費很大內存開銷,并不具有實用性,所以規則方法在相當長的一段時期內成為了處理中文分詞問題的主流方法。而隨著計算資源的不斷增長,基于機器學習的方法慢慢成為了解決中文分詞的主要手段。
在sighan2003舉行的首屆中文分詞評測中,基于字標注的方法首次被提出,該方法的性能雖然不是最高的,但是其未登錄詞的識別率位居榜首。對于中文分詞任務來說,主要有兩大難點,歧義切分和未登錄詞的識別,實驗證明這兩類問題并不是平等的,未登錄詞的影響要遠遠大于歧義切分?;谧值男蛄谢瘶俗⒌姆椒谋淮蠹医邮?,成為了處理分詞問題的主流方法。
在建模分詞任務的方式,將其看成序列化標注任務是一種常見的手段。其工作過程是:針對待分詞的句子,以字為單位,從左至右對每個字進行標注(即打標簽),一般采用的標注體系是包括b、m、e、s四個標記的四詞位標注集,其中b代表當前字占據一個多字詞的詞首,m代表當前字占據一個多字詞的詞中e代表當前字占據一個多字詞的詞尾,s代表當前字是一個單字詞。得到標注序列之后,可以轉換成分詞的結果。本發明在建模中文分詞任務是也將其看成序列化標注任務并采用了上述的標注集。
神經網絡是一種常用的機器學習方法,它具有從一些基本原子特征自動學習特征組合方式的能力,這區別于需要使用者根據語言學相關等先驗知識來設計大量任務相關的模板的傳統方法。神經網絡的使用,可以省去人工定制大量組合特征模板的工作,同時可以借助神經網絡強大的表達能力來自動地學習特征之間的組合。在本發明使用了雙向長短記憶神經網絡來對句子的字序列進行計算,從而更多地捕獲遠距離特征。
對于基于神經網絡的模型方法而言,一個重要的問題就是如何使用詞嵌入。如果擁有足夠多的訓練數據,那么可以首先隨機初始化詞嵌入,然后把詞嵌入的學習融合到模型的訓練中來,從而得到高質量的詞嵌入。但是對于分詞這樣的任務,標注數據集的規模非常有限,一般在幾萬條左右。首先很難訓練好字嵌入,其次由于數據規模有限,遇到測試數據時,經常會遇到未登錄詞這樣的問題。一種方法是利用無監督數據學習字嵌入,典型的方法有word2vec、glove,這些的方法的基本依據是根據分布式假設,相似的詞會出現在相似的上下文中。相似的詞之間會具有相似或相近的詞嵌入。但“相似”這一特性又依賴于具體的任務,對于不同的任務,“相似”這一概念是不同的。
技術實現要素:
發明目的:本發明針對目前中文分詞技術中現有基于字標注的模型不能充分利用詞信息的缺點,提出了了一種基于詞上下文的字嵌入學習方法來間接的融合詞級別的信息,從而提升中文分詞任務的準確度。
為了解決上述技術問題,本發明公開了一種利用基于詞上下文的字嵌入與神經網絡的中文分詞方法以及關于分析過程中所使用模型參數訓練方法的附加說明。
本發明所述的利用基于詞上下文的字嵌入與神經網絡的中文分詞方法包括以下步驟:
步驟1,計算機讀取大規模自動切分的數據,利用基于詞上下文的字嵌入學習方法得到字嵌入和雙字嵌入;
步驟2,利用基于神經網絡的方法對待分詞句子進行句子切分。
其中步驟1包含如下步驟:
步驟1-1,根據四詞位標注體系,一句切分好的句子可以表示成字序列{c1,c2,…,cn}和{l1,l2,…,ln}。n是句子的長度,li∈{b,m,e,s}。在四詞位標注體系中共有b、m、e、s四個標記,其中b代表當前字占據一個多字詞的詞首,m代表當前字占據一個多字詞的詞中e代表當前字占據一個多字詞的詞尾,s代表當前字是一個單字詞。下面給出一個例子說明四詞位標注體系的含義。首先給出一句已經分好詞的句子:
(1)自然科學的研究不斷深入
該句子在用四詞位標注體系進行標注后的形式如下:
(2)自/b然/m科/m學/e的/s研/b究/e不/b斷/e深/b入/e
在四詞位標注體系中(1)和(2)是兩種等價的形式,可以相互轉換,如在自標注方法中會先得到如(2)中的形式,然后轉換成(1)中的形式即是分詞的結果。
步驟1-2,利用基于詞上下文的字嵌入學習方法在大規模自動切分的數據上學習得到字嵌入和雙字嵌入。
步驟1-2中整個大規模自動切分數據中的所有句子拼接成一個長句形成數據集,整個數據集表示為字序列{c1,c2,…,ct}和相對應的標記序列{l1,l2,…,lt},其中t是數據集中字的個數,ct表示數據集中的第t個字,lt表示數據集中的第t個字對應的標記。
步驟1-2包括如下步驟:
步驟1-2-1,字嵌入的學習目標定義為:
其中,logp(ct+j|ct)和logp(lt+j|ct)按如下公式計算,
其中,σ表示sigmoid函數,為一個實值函數,其作用在一個向量上表示對向量中的每個元素都做此操作,得到一個與輸入向量維度相同的目標向量,euni表示輸入端的字嵌入矩陣,
步驟1-2-2,按照隨機梯度下降法學習得到字嵌入矩陣euni;
步驟1-2-3,雙字嵌入的學習目標定義為:
其中,logp(ct+jct+j+1|ctct+1)和logp(lt+j|ctct+1)按如下公式計算,
其中ebi表示輸入端的雙字嵌入矩陣,
步驟1-2-4,在定義完雙字嵌入的學習目標后,按照隨機梯度下降法學習得到雙字嵌入矩陣ebi。
在整個步驟2中w1,w2,…,wn表示待分詞的句子,n表示待分詞句子的長度,wn表示句子中的第n個字,步驟2包括如下步驟:
步驟2-1,在處理第t*字時利用神經網絡對所有標注類型進行打分,其中1≤tt≤n;
步驟2-2,對t*=1,2,…,n迭代執行步驟2-1,按照貪心算法每步選擇得分最高的標記作為當前標記,n表示待分詞句子的長度;
步驟2-3,得到整個句子的詞位標注序列后,轉換成句子切分的結果,即為句子分析的最終結果。
步驟2-1包括如下步驟:
步驟2-1-1,生成特征向量,特征向量包括字特征和雙字特征;
步驟2-1-2,利用神經網絡針對步驟2-1-1中生成的特征向量進行計算得到所有候選標記的得分。
步驟2-1-1包括如步驟:
步驟2-1-1-1,根據步驟1-2中學習得到的字嵌入和雙字嵌入得到字特征向量
步驟2-1-1-2,將字特征向量和雙字特征向量拼接在一起得到當前位置的特征表示
步驟2-1-2包括以下步驟:
步驟2-1-2-1,使用雙向長短期記憶神經網絡模型計算生成當前位置的中間表示,其中網絡的輸入為
其中,
后向網絡的計算過程如下:
其中,
將
步驟2-1-2-2,使用前向神經網絡計算所有標注類型的得分,整個前向網絡的計算過程如下公式:
o=w2h+b2,
其中,w1,w2,b1,b2是已經訓練好的模型參數,h是神經網絡的隱層向量;o是計算輸出,是一個實值向量,其維度對應詞位標記的個數,其中第i個值就對應時刻t*時,標記i的得分,該得分是一個實數值。
有益效果:本發明針對目前中文分詞技術中現有基于字標注的模型不能充分利用詞信息的缺點,提出了了一種基于詞上下文的字嵌入學習方法來間接的融合詞級別的信息,在不增加模型復雜程度的前提下,提升了中文分詞任務的準確度。
附圖說明
下面結合附圖和具體實施方式對本發明做更進一步的具體說明,本發明的上述和/或其他方面的優點將會變得更加清楚。
圖1是本發明的流程圖。
具體實施方式
本發明提出了一種利用基于詞上下文的字嵌入與神經網絡的中文分詞方法,在大規模的自動切分數據上學習字嵌入,將學習得到的字嵌入作為神經網絡分詞模型的輸入,可以有效幫助模型學習。
如圖1所示,本發明公開了一種利用基于詞上下文的字嵌入與神經網絡的中文分詞方法,它既能夠運用字級別的特征,而且可以通過引入基于詞向量的字嵌入來間接融合詞信息,提升了中文分詞任務的準確度。
本發明所述的利用基于詞上下文的字嵌入與神經網絡的中文分詞方法包括如下步驟:
步驟1,計算機讀取大規模自動切分的數據,利用基于詞上下文的字嵌入學習方法得到字嵌入和雙字嵌入;
步驟2,利用基于神經網絡的方法對待分詞句子進行句子切分。
其中步驟1包含如下步驟:
步驟1-1,根據四詞位標注體系,一句切分好的句子可以表示成字序列{c1,c2,…,cn}和{l1,l2,…,ln}。n是句子的長度,li∈{b,m,e,s}。在四詞位標注體系中共有b、m、e、s四個標記,其中b代表當前字占據一個多字詞的詞首,m代表當前字占據一個多字詞的詞中e代表當前字占據一個多字詞的詞尾,s代表當前字是一個單字詞。下面給出一個例子說明四詞位標注體系的含義。首先給出一句已經分好詞的句子:
(1)自然科學的研究不斷深入
該句子在用四詞位標注體系進行標注后的形式如下:
(2)自/b然/m科/m學/e的/s研/b究/e不/b斷/e深/b入/e
在四詞位標注體系中(1)和(2)是兩種等價的形式,可以相互轉換,如在自標注方法中會先得到如(2)中的形式,然后轉換成(1)中的形式即是分詞的結果。
步驟1-2,利用基于詞上下文的字嵌入學習方法在大規模自動切分的數據上學習得到字嵌入和雙字嵌入。
步驟1-2中整個大規模自動切分數據中的所有句子拼接成一個長句形成數據集,整個數據集表示為字序列{c1,c2,…,ct}和相對應的標記序列{l1,l2,…,lt},其中t是數據集中字的個數,ct表示數據集中的第t個字,lt表示數據集中的第t個字對應的標記。
步驟1-2包括如下步驟:
步驟1-2-1,字嵌入的學習目標定義為:
其中,logp(ct+j|ct)和logp(lt+j|ct)按如下公式計算,
其中,σ表示sigmoid函數,為一個實值函數,其作用在一個向量上表示對向量中的每個元素都做此操作,得到一個與輸入向量維度相同的目標向量,euni表示輸入端的字嵌入矩陣,
步驟1-2-2,按照隨機梯度下降法學習得到字嵌入矩陣euni;
步驟1-2-3,雙字嵌入的學習目標定義為:
其中,logp(ct+jct+j+1|ctct+1)和logp(lt+j|ctct+1)按如下公式計算,
其中ebi表示輸入端的雙字嵌入矩陣,
步驟1-2-4,在定義完雙字嵌入的學習目標后,按照隨機梯度下降法學習得到雙字嵌入矩陣ebi。
在整個步驟2中w1,w2,…,wn表示待分詞的句子,n表示待分詞句子的長度,wn表示句子中的第n個字,步驟2包括如下步驟:
步驟2-1,在處理第t*字時利用神經網絡對所有標注類型進行打分,其中1≤t*≤n;
步驟2-2,對t*=1,2,…,n迭代執行步驟2-1,按照貪心算法每步選擇得分最高的標記作為當前標記,n表示待分詞句子的長度;
步驟2-3,得到整個句子的詞位標注序列后,轉換成句子切分的結果,即為句子分析的最終結果。
步驟2-1包括如下步驟:
步驟2-1-1,生成特征向量,特征向量包括字特征和雙字特征;
步驟2-1-2,利用神經網絡針對步驟2-1-1中生成的特征向量進行計算得到所有候選標記的得分。
特征在于,步驟2-1-1包括如步驟:
步驟2-1-1-1,根據步驟1-2中學習得到的字嵌入和雙字嵌入得到字特征向量
步驟2-1-1-2,將字特征向量和雙字特征向量拼接在一起得到當前位置的特征表示
步驟2-1-2包括以下步驟:
步驟2-1-2-1,使用雙向長短期記憶神經網絡模型計算生成當前位置的中間表示,其中網絡的輸入為
其中,
后向網絡的計算過程如下:
其中,
將
步驟2-1-2-2,使用前向神經網絡計算所有標注類型的得分,整個前向網絡的計算過程如下公式:
o=w2h+b2,
其中,w1,w2,b1,b2是已經訓練好的模型參數,h是神經網絡的隱層向量;o是計算輸出,是一個實值向量,其維度對應詞位標記的個數,其中第i個值就對應時刻t*時,標記i的得分,該得分是一個實數值。
本發明所述的分析過程中所使用的模型參數訓練方法的附加說明如下:
從分析過程中的步驟1可以知道,本發明中所述的基于詞上下文的字嵌入學習中所用的參數包括:
1、學習字嵌入的參數
2、學習雙字嵌入的參數
在字嵌入的學習中,對輸入端參數euni,按隨機取值進行初始化,輸出端參數
在雙字字嵌入的學習中,對輸入端參數ebi,按隨機取值進行初始化,輸出端參數
從分析過程中的步驟2可以知道,本發明中所述的分詞過程中所用的的參數包括如下幾個部分(后面叫這些參數為模型參數組):
1、對應輸入的特征向量字嵌入
2、步驟2-1-2-1中計算前向特征所用的神經網絡參數
3、步驟2-1-2-1中計算后向特征所用的神經網絡參數
4、步驟2-1-2-2中前向神經網絡所用的網絡參數w1,w2。
訓練過程采用極大似然訓練數據集中的正確標注序列的、使用迭代方式實現。在訓練開始之前,可以根據步驟1得到參數euni和ebi。2、3、4中的參數按隨機取值進行初始化。然后使用已標注數據集(假設數據集大小為d)dataest={sent1,sent2,…,sentd}對參數進行訓練:首先定義一個訓練目標,該目標定義在整個數據集上,又稱為損失函數,它是整個模型參數組中所有參數的函數,假設為l(dataset),針對每一個句子sentr的損失函數表示為loss(sentr)兩者的定義與計算過程按下述方式進行:
根據步驟2-2,可以得到sentr中任意時刻t*的關于標記i的得分score(sentr,t*,i),其中時刻t*的正確標記為gold,那么關于句子的損失函數可以定義為:
其中的ex表示指數函數,e表示自然對數的常量。
定義針對整個訓練數據集的損失函數為:
其中的θ,e表示該損失函數為模型參數組中參數的函數。
整個訓練過程的目標就是最小化以上損失函數,最小化以上損失函數并求得參數的方法有多種且為業界從業人員熟知,如實施例其中采用了隨機梯度下降法來對其進行求解2,3,4中的參數。
實施例1
首先,本實施例中所采用的標注數據是濱州樹庫中文版ctb6.0,其中訓練集23401句,開發集2078句,測試集2795句。自動切分數據是在中文gigaword(ldc2011t13)得到的共41071242句。
本實施例利用本發明中的利用基于詞上下文的字嵌入與神經網絡的中文分詞方法的完整過程如下:
步驟1-1,確定字標注模型的標注體系,定義了四種類型b,m,e,s,具體含義見說明書中的1-1;
步驟1-2,再gigaword中文自動切分數據上訓練得到字嵌入euni矩陣和雙字嵌入ebi;
步驟2-1,讀取一個中文句子“你馬上過來”,并計算出每個位置關于標記的得分:
1.你score(b)=1.01score(m)=0.32score(e)=0.13score(s)=2.34
2.馬score(b)=1.82score(m)=0.46score(e)=0.39score(s)=0.42
3.上score(b)=0.25score(m)=0.23score(e)=2.26score(s)=0.47
4.過score(b)=2.37score(m)=0.74score(e)=0.29score(s)=0.56
5.來score(b)=0.27score(m)=0.10score(e)=3.26score(s)=0.24
步驟2-2,根據貪心策略可以得到標記序列:你/s馬/b上/e過/b來/e
步驟2-3,通過標記序列可以轉換得到分詞結果:你馬上過來
實施例2
本發明所用的算法全部使用c++語言編寫實現。該實施例實驗所采用的機型為:intel(r)core(tm)i7-4790k處理器,主頻為4.0ghz,內存為24g。本實施例中所采用的標注數據是濱州樹庫中文版ctb6.0,其中訓練集23401句,開發集2078句,測試集2795句。自動切分數據是在中文gigaword(ldc2011t13)得到的共41071242句。模型參數在gigaword數據和ctb6.0數據上訓練得到,實驗結果如表1所示:
表1實驗結果說明
其中xuandsun(2016)采用了為基于依存遞歸神經網絡的分詞模型,liu(2016)為利用切分的表示的分詞模型,zhang(2016)為基于轉換的神經網絡分詞模型,zhang(2016)comb是將傳統特征與神經網絡特征相結合的基于轉換的分詞模型,這幾種模型代表了目前基于神經網絡的分詞模型的前沿水平。需要說明的是,在該數據集上進行評測是評價中文分詞的一個常用方式??梢钥闯?,本發明中的方法在該數據集上取得了較高的f1-score值,說明了該方法的有效性。
此處對f1-score的計算方式進行說明:因為該測試集是已標注數據集,所以是知道正確標注結果的,假設對整個數據集而言,所有正確的詞組成的集合s(gold),其大小為count(gold);在對數據集中的每個句子按實施例1中的方式進行分詞以后,取出所有分析結果中的分詞結果組成預測集合s(predict),假設其大小為count(predict);s(gold)和s(predict)中切分相同的部分組成的集合為s(correct),其大小為count(correct);假設預測準確度表示為precision,預測召回率表示為recall,則各個值的計算按如下公式進行: