唐雪梅, 蘇 祺, 王 軍,4, 陳雨航, 楊 浩
(1. 北京大學(xué) 信息管理系,北京 100871; 2. 北京大學(xué)數(shù)字人文研究中心,北京 100871;3. 北京大學(xué) 外國(guó)語(yǔ)學(xué)院,北京 100871; 4. 北京大學(xué) 人工智能研究院, 北京100871)
中華文明歷史悠久,古典文籍浩如煙海。古籍具有極高的文獻(xiàn)價(jià)值和學(xué)術(shù)價(jià)值,古籍整理是連接現(xiàn)代和歷史的橋梁,有利于民族文化的傳承和研究。而古人在著書(shū)時(shí)一般不使用標(biāo)點(diǎn),現(xiàn)存的許多古籍也沒(méi)有斷句和標(biāo)點(diǎn),這給讀者閱讀學(xué)習(xí)和學(xué)者研究古籍造成了障礙。所謂 “凡訓(xùn)蒙,須講究,詳訓(xùn)詁,明句讀”,即是說(shuō)句讀是古人求學(xué)問(wèn)道的基礎(chǔ)。傳統(tǒng)的古籍句讀工作主要依靠人工,但人工句讀對(duì)標(biāo)注者的古漢語(yǔ)素養(yǎng)要求較高,一般人難以勝任。且中國(guó)古代典籍?dāng)?shù)量眾多,人工句讀效率低,短時(shí)間內(nèi)無(wú)法完成批量典籍的句讀工作。計(jì)算機(jī)自動(dòng)句讀可以有效地解決以上兩個(gè)問(wèn)題。古文自動(dòng)句讀是指根據(jù)古代漢語(yǔ)句子特點(diǎn),結(jié)合現(xiàn)代漢語(yǔ)的標(biāo)點(diǎn)符號(hào)用法,讓計(jì)算機(jī)自動(dòng)切割、斷開(kāi)連續(xù)的文本字符序列為句,然后加標(biāo)點(diǎn)的過(guò)程[1]。
古文自動(dòng)句讀經(jīng)歷30多年的發(fā)展,從基于規(guī)則的方法逐漸發(fā)展到基于深度學(xué)習(xí)的方法。由于目前沒(méi)有公開(kāi)的大規(guī)模的繁體古文語(yǔ)料庫(kù),且整理過(guò)的古籍散落在不同的語(yǔ)料庫(kù)或者出版社數(shù)據(jù)庫(kù),難以收集到大量整理過(guò)的繁體古籍文本,所以目前古文自動(dòng)斷句的研究基本都是針對(duì)簡(jiǎn)體漢字文本,如王博立[2]、胡韌奮[3]、俞敬松[4]等人的研究。而現(xiàn)存很多未被整理的古籍都是繁體漢字,若將繁體轉(zhuǎn)為簡(jiǎn)體再做句讀,繁簡(jiǎn)轉(zhuǎn)化的錯(cuò)誤可能會(huì)延續(xù)到句讀的結(jié)果中。同時(shí)現(xiàn)在常用在古籍任務(wù)中的預(yù)訓(xùn)練語(yǔ)言模型[5-6]都有固定的詞表,詞表中包含的繁體字較少,在詞表之外的繁體字會(huì)被替換成特殊字符,造成語(yǔ)義的缺失,會(huì)影響任務(wù)效果。因此構(gòu)建一個(gè)專門(mén)用于繁體古文的句讀模型是有必要的。斷句之后的古籍文本方便閱讀研究,標(biāo)點(diǎn)之后的文本有助于整理出版,現(xiàn)有研究較多集中在自動(dòng)斷句[3,7],俞敬松等[4]雖然同時(shí)關(guān)注自動(dòng)斷句和自動(dòng)標(biāo)點(diǎn),但用于自動(dòng)標(biāo)點(diǎn)的訓(xùn)練語(yǔ)料規(guī)模較小,且標(biāo)點(diǎn)效果并不理想;釋賢超等[8]在不同朝代的不同類型語(yǔ)料上進(jìn)行自動(dòng)標(biāo)點(diǎn)研究,但其模型泛化能力有限。另一方面未經(jīng)整理的古籍文本篇幅較長(zhǎng),整篇文章連成整體居多,篇章級(jí)句讀是應(yīng)用環(huán)境下必須解決的問(wèn)題?,F(xiàn)有的研究較少涉及篇章級(jí)斷句,胡軔奮等[3]的斷句模型以段落為單位,俞敬松等[4]提出以串行滑動(dòng)窗口方式處理長(zhǎng)文本句讀,但是該方法的句讀效率較低。
本文的主要工作有以下三項(xiàng):
(1) 本文整理了約10億字的繁體古文語(yǔ)料,基于整理的語(yǔ)料增量訓(xùn)練BERT[5]模型得到繁體古文預(yù)訓(xùn)練語(yǔ)言模型;
(2) 基于繁體古文預(yù)訓(xùn)練語(yǔ)言模型,利用高質(zhì)量帶標(biāo)點(diǎn)繁體古文語(yǔ)料微調(diào)預(yù)訓(xùn)練語(yǔ)言模型,實(shí)現(xiàn)繁體古文的自動(dòng)句讀和自動(dòng)標(biāo)點(diǎn);
(3) 基于前人的工作,本文改進(jìn)數(shù)據(jù)串行滑動(dòng)窗口方式進(jìn)行篇章級(jí)句讀,在一定程上提高了運(yùn)行效率;同時(shí)本文提出了一種數(shù)據(jù)并行的滑動(dòng)窗口方案,不僅保證了自動(dòng)句讀的準(zhǔn)確率,而且大幅度提高了篇章級(jí)句讀的運(yùn)行速率。
古文自動(dòng)句讀的研究大致經(jīng)歷了三個(gè)發(fā)展階段,分別是基于規(guī)則的階段、基于統(tǒng)計(jì)方法的階段以及基于深度學(xué)習(xí)的階段。
黃建年等[9]總結(jié)農(nóng)業(yè)古籍的斷句標(biāo)點(diǎn)規(guī)則,包括句法特征、詞法特征、引文特征等,利用規(guī)則在農(nóng)業(yè)古籍上進(jìn)行測(cè)試,斷句的準(zhǔn)確率為48%?;谝?guī)則的方法簡(jiǎn)單、易于理解,但是需要專家建立規(guī)則庫(kù),不僅費(fèi)時(shí)費(fèi)力,且規(guī)則的覆蓋面有限,只能用于處理小規(guī)模文本。
陳天瑩等[10]采用基于上下文的N-gram模型對(duì)古文做句子切分,在《論語(yǔ)》上達(dá)到了81%的召回率、52%的準(zhǔn)確率。后續(xù)逐漸有學(xué)者將序列標(biāo)注算法應(yīng)用到自動(dòng)斷句任務(wù)中,黃瀚萱[11]比較了基于字的條件隨機(jī)場(chǎng)模型(Conditional Random Field,CRF)和隱馬爾可夫(Hidden Markou Model,HMM)模型在《孟子》《論語(yǔ)》上的斷句效果,發(fā)現(xiàn)CRF模型優(yōu)于HMM。張開(kāi)旭等[12]在CRF的基礎(chǔ)上引入互信息和t-測(cè)試差,在《論語(yǔ)》和《史記》上訓(xùn)練斷句任務(wù),分別取得了0.762和 0.682的F1值。張合等[13]基于六字位標(biāo)記集,采用層疊CRF對(duì)《老子》《水經(jīng)注》《戰(zhàn)國(guó)策》《左傳》《赤壁賦》《出師表》等進(jìn)行斷句和標(biāo)點(diǎn),低層CRF模型用于識(shí)別句子邊界,高層CRF模型用于自動(dòng)標(biāo)點(diǎn)?;诮y(tǒng)計(jì)的方法主要依靠人工特征模板,但是古籍文體風(fēng)格多樣,年代跨度大,很難構(gòu)建一個(gè)適用于所有古籍的斷句模板,從而導(dǎo)致統(tǒng)計(jì)模型的泛化能力較弱。
隨著深度學(xué)習(xí)在自然語(yǔ)言處理領(lǐng)域的應(yīng)用,陸續(xù)有學(xué)者將深度學(xué)習(xí)方法用于自動(dòng)句讀任務(wù)。循環(huán)神經(jīng)網(wǎng)絡(luò)具有時(shí)序性結(jié)構(gòu),相比于卷積神經(jīng)網(wǎng)絡(luò)能夠更好地處理長(zhǎng)文本,常用于序列標(biāo)注任務(wù)。王博立[2]在2.37億字規(guī)模的訓(xùn)練集上訓(xùn)練雙向GRU (Gate Recurrent Unit)模型,該模型在古文上的斷句F1值達(dá)75%。釋賢超等[8]在南北朝、隋、唐、宋、遼和明六個(gè)朝代的佛、道和儒典籍上比較了長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)(Long Short-Term Memory, LSTM)和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)的標(biāo)點(diǎn)效果,實(shí)驗(yàn)表明,LSTM的標(biāo)點(diǎn)效果好于CNN,在唐代的語(yǔ)料上標(biāo)點(diǎn)可以達(dá)到94.3%的準(zhǔn)確率。古文分詞需要建立在斷句的基礎(chǔ)之上,分步進(jìn)行容易造成錯(cuò)誤多級(jí)擴(kuò)散,程寧等[7]設(shè)計(jì)了斷句、分詞及詞性一體化標(biāo)注方法,利用Bi-LSTM模型同時(shí)訓(xùn)練斷句、分詞和詞性標(biāo)注三項(xiàng)任務(wù),發(fā)現(xiàn)一體化標(biāo)注方法在三個(gè)任務(wù)上的F1值均有提升。
2018年谷歌提出了預(yù)訓(xùn)練語(yǔ)言模型BERT,通過(guò)精調(diào)在11項(xiàng)自然語(yǔ)言處理任務(wù)上的效果超過(guò)了之前的模型,自此古文句讀模型也逐漸轉(zhuǎn)向使用預(yù)訓(xùn)練語(yǔ)言模型階段。俞敬松等[4]利用3億7 000萬(wàn)殆知閣古文語(yǔ)料對(duì)BERT語(yǔ)言模型做斷句和標(biāo)點(diǎn)訓(xùn)練,分別在單一類別文本和復(fù)合文本上測(cè)試斷句,達(dá)到了89.97%和91.67%的F1值。在單一文本上測(cè)試,標(biāo)點(diǎn)F1值達(dá)到了70.4%。胡韌奮等[3]基于33億字古漢語(yǔ)語(yǔ)料訓(xùn)練了古文BERT模型,并比較了BERT+FCL、BERT+CRF、BERT+CNN等序列標(biāo)注方法在古文斷句任務(wù)上的表現(xiàn),發(fā)現(xiàn)BERT+CNN模型在詩(shī)、詞及古文三種文體上自動(dòng)斷句效果最好,分別達(dá)到了99%、95%、92%的F1值。
以上研究已經(jīng)在自動(dòng)斷句任務(wù)上取得了較好的結(jié)果,但自動(dòng)標(biāo)點(diǎn)的效果還有待提升,并且對(duì)篇章級(jí)長(zhǎng)文本的自動(dòng)句讀關(guān)注較少。受前人研究啟發(fā),本文試圖將BERT模型用于繁體古文自動(dòng)句讀,但由于谷歌發(fā)布的中文BERT模型是基于簡(jiǎn)體現(xiàn)代漢語(yǔ)語(yǔ)料訓(xùn)練得到的,并不一定能夠很好地表示古文語(yǔ)義,本文利用大規(guī)模繁體古文語(yǔ)料對(duì)BERT中文模型進(jìn)行增量訓(xùn)練,使其得到更好的繁體古文語(yǔ)義表示,然后再進(jìn)行自動(dòng)斷句和自動(dòng)標(biāo)點(diǎn)訓(xùn)練。在實(shí)際的生產(chǎn)環(huán)境下,很多需整理的古籍的篇幅都較長(zhǎng),本文改進(jìn)了數(shù)據(jù)串行滑動(dòng)窗口方式并提出數(shù)據(jù)并行滑動(dòng)窗口方式,能夠同時(shí)解決篇章級(jí)自動(dòng)句讀準(zhǔn)確率低和效率低的問(wèn)題。
預(yù)訓(xùn)練語(yǔ)言模型BERT的使用包括增量訓(xùn)練和微調(diào)兩個(gè)階段,以下分別介紹BERT模型增量訓(xùn)練過(guò)程和自動(dòng)句讀標(biāo)點(diǎn)實(shí)驗(yàn)設(shè)置。
BERT由多層Transformer構(gòu)成,具有強(qiáng)大的語(yǔ)義表示能力。與傳統(tǒng)的靜態(tài)詞向量不同,BERT能根據(jù)上下文生成動(dòng)態(tài)的詞向量,即同一個(gè)詞在不同語(yǔ)境中會(huì)有不同的向量表示。BERT的訓(xùn)練過(guò)程是無(wú)監(jiān)督的,能夠自動(dòng)從大量無(wú)標(biāo)注語(yǔ)料中學(xué)習(xí)到字詞和句子的語(yǔ)義表示。
本文從不同渠道收集大量繁體古文語(yǔ)料,包括詩(shī)歌、小說(shuō)、駢文、論文等各類文體,內(nèi)容包含經(jīng)史子集、佛經(jīng)等,文獻(xiàn)分布年代廣泛,包含從先秦至清朝的文獻(xiàn)。經(jīng)人工清洗整理,最后得到了約10億字的帶標(biāo)點(diǎn)繁體古文語(yǔ)料。統(tǒng)計(jì)整理的語(yǔ)料得到的繁體字表有7萬(wàn)字左右(包括各類異體字、古今字),BERT中文模型(以下稱BERTbase)有固定詞表,其中僅包含7 321個(gè)漢字,覆蓋率不到十分之一,如果直接使用BERTbase,會(huì)使得很多繁體字在任務(wù)過(guò)程中被替換成UNK,造成語(yǔ)義不完整,從而影響自動(dòng)句讀任務(wù)的效果。因此本文在進(jìn)行增量訓(xùn)練之前,對(duì)整理得到的字表中的古今字、異體字去重,并在整理得到的字表中選擇部分高頻字替換掉原來(lái)詞表中的部分簡(jiǎn)體字?;谛碌脑~表和訓(xùn)練語(yǔ)料對(duì)12層BERTbase進(jìn)行增量訓(xùn)練。根據(jù)BERTbase模型預(yù)訓(xùn)練步驟將增量訓(xùn)練分為三個(gè)階段,每個(gè)階段訓(xùn)練參數(shù)如表1所示。
表1 BERT增量訓(xùn)練三個(gè)階段參數(shù)設(shè)置
因?yàn)楦鼡Q了詞表,原來(lái)的Embedding層對(duì)應(yīng)于原來(lái)的詞表,因此在第一階段,只更新Embedding層參數(shù),使之和新的詞表對(duì)應(yīng)。第二階段用于學(xué)習(xí)古漢語(yǔ)知識(shí),因此訓(xùn)練步驟為500K,比第一階段和第三階段訓(xùn)練步驟更多,使其有更多時(shí)間學(xué)習(xí)古漢語(yǔ)表示,在第二階段時(shí)更新模型的所有參數(shù)。在前兩個(gè)階段中,將Sequence Length設(shè)為128,在第三階段將其設(shè)為512,因?yàn)榈谌A段用于學(xué)習(xí)長(zhǎng)距離語(yǔ)義關(guān)系,據(jù)BERT研發(fā)者回應(yīng),長(zhǎng)距離的語(yǔ)義關(guān)系比較容易學(xué)習(xí)到,因此只需進(jìn)行較少步驟的學(xué)習(xí)。經(jīng)過(guò)三個(gè)階段的學(xué)習(xí),最后得到增量繁體古文BERT模型,以下稱BERTguwen。實(shí)驗(yàn)設(shè)備為兩塊32 GB的TESLAV100 顯卡,訓(xùn)練時(shí)間為7天左右。
預(yù)訓(xùn)練模型可以通過(guò)微調(diào)迭代調(diào)整為適合當(dāng)前任務(wù)的模型,本文將自動(dòng)句讀和標(biāo)點(diǎn)當(dāng)作是預(yù)訓(xùn)練模型下游的序列標(biāo)注任務(wù)。
2001年Lafferty等人提出的條件隨機(jī)場(chǎng)模型(CRF)是一種無(wú)向圖模型,在詞性標(biāo)注、命名實(shí)體識(shí)別等序列標(biāo)注任務(wù)中表現(xiàn)優(yōu)異。雖然現(xiàn)在深度學(xué)習(xí)模型也可以很好地解決序列標(biāo)注問(wèn)題,但是增加CRF作為解碼層似乎效果更好。如Huang等[14]在做命名實(shí)體識(shí)別任務(wù)時(shí)考慮到標(biāo)簽前后的依賴性,在Bi-LSTM后接CRF層作為解碼層,發(fā)現(xiàn)增加CRF層會(huì)比單獨(dú)使用深度學(xué)習(xí)模型效果更好。因此,本文也將CRF作為模型的最后一層,通過(guò)其學(xué)習(xí)標(biāo)簽之間的關(guān)系,找到全局最優(yōu)的標(biāo)簽序列。
CNN是一種前饋神經(jīng)網(wǎng)絡(luò),可以在大量數(shù)據(jù)中識(shí)別序列的局部特征,并將它們生成為固定大小的向量表示,捕捉對(duì)當(dāng)前任務(wù)最有效的特征。我們?cè)贐ERTguwen后接CNN層和全連接層,在BERTguwen的基礎(chǔ)上對(duì)句子的上下文做進(jìn)一步編碼,捕捉局部特征。BERTguwen+CRF/CNN模型如圖1所示。
圖1 BERTguwen+CRF/CNN模型圖
本文以學(xué)衡網(wǎng)(1)http://core.xueheng.net/200本核心典籍和github(2)https://github.com/jackeyGao/chinese-poetry公開(kāi)的全中華古詩(shī)詞數(shù)據(jù)庫(kù)中的30多萬(wàn)首詩(shī)作為實(shí)驗(yàn)語(yǔ)料,兩部分皆經(jīng)過(guò)人工整理,都是繁體漢字,且標(biāo)點(diǎn)質(zhì)量比較高。語(yǔ)料具體統(tǒng)計(jì)信息如表2所示,雖然最大句長(zhǎng)超過(guò)萬(wàn)字,但統(tǒng)計(jì)發(fā)現(xiàn)97%的句長(zhǎng)都在200字以內(nèi)。我們將數(shù)據(jù)集按照句子數(shù)8∶1∶1切分為訓(xùn)練集、測(cè)試集和驗(yàn)證集。為了讓模型能處理較長(zhǎng)文本,我們隨機(jī)將同一段落中的3~10個(gè)句子合并作為一條訓(xùn)練數(shù)據(jù)。本文選用二元標(biāo)簽BM進(jìn)行斷句數(shù)據(jù)標(biāo)注,在二元標(biāo)簽基礎(chǔ)上設(shè)計(jì)斷句和標(biāo)點(diǎn)聯(lián)合標(biāo)注標(biāo)簽。“B”表示對(duì)應(yīng)的字符在句首,“M”表示對(duì)應(yīng)字符在句中或句尾。“Dou”“J”“Dun”“F”“M”“W”“G”分別表示該句以逗號(hào)、句號(hào)、頓號(hào)、分號(hào)、冒號(hào)、問(wèn)號(hào)、感嘆號(hào)結(jié)尾。
表2 數(shù)據(jù)集統(tǒng)計(jì)信息
BiLSTM-CRF模型是經(jīng)典的序列標(biāo)注模型[14],本文將該模型作為基準(zhǔn)模型,將BiLSTM的隱藏元數(shù)量設(shè)為256,詞向量維度設(shè)為300。俞敬松等人[4]和胡韌奮等人[3]的古文句讀和標(biāo)點(diǎn)研究非常具有代表性,因此本文也將他們的模型作為基準(zhǔn)模型。本文比較BERTguwen+CRF、BERTbase+CRF、BERTguwen+CNN、BERTbase+CNN模型在句讀和標(biāo)點(diǎn)任務(wù)上的表現(xiàn),Sequence Length設(shè)為300,Batch Size設(shè)為32。實(shí)驗(yàn)在兩塊32 GB的Tesla V100 GPU上進(jìn)行,每個(gè)模型訓(xùn)練到收斂為止。
為檢驗(yàn)不同模型在斷句任務(wù)上的性能,本文使用精確率(Precision)、召回率(Recall)和F1(F1-score)作為評(píng)價(jià)指標(biāo)。
斷句實(shí)驗(yàn)結(jié)果如表3所示,可以看出詩(shī)歌斷句結(jié)果整體好于古文斷句結(jié)果,可能是因?yàn)楣旁?shī)具有特定的體制和韻律,如五言絕句、七言律詩(shī)等,模型更加容易學(xué)得其斷句規(guī)律,古詩(shī)斷句最好的F1值已經(jīng)超過(guò)99%。而古文的形式更加靈活,句式更加豐富,最好的斷句F1值為95.03%,比古詩(shī)低了4.5個(gè)百分點(diǎn)。
表3 不同模型在古文和詩(shī)歌上的斷句實(shí)驗(yàn)結(jié)果 (單位:%)
對(duì)比不同模型的性能,可以看到BERTguwen+CRF模型相比其他模型在斷句任務(wù)上有最高的召回率和F1值,分別為95.16%、95.03%,BERTguwen+CNN模型有最高的準(zhǔn)確率95.13%。相比于基線模型Bi-LSTM+CRF,融入了預(yù)訓(xùn)練語(yǔ)言模型之后斷句效果均有一定程度的提升。融合增量訓(xùn)練的古文預(yù)訓(xùn)練模型的BERTguwen+CRF模型比基線模型Bi-LSTM+CRF的F1值提高了12.98個(gè)百分點(diǎn)。
對(duì)比BERTbase+CRF和BERTguwen+CRF的實(shí)驗(yàn)結(jié)果??梢钥闯?使用了BERTguwen的模型斷句效果比使用BERTbase的模型好,F1值提高了1.83個(gè)百分點(diǎn),這說(shuō)明對(duì)BERT模型做繁體古文增量訓(xùn)練,可以使模型學(xué)習(xí)到更多古文知識(shí),能更好地處理斷句任務(wù)。如以下案例所示, “用兵”其主語(yǔ)本是“朝廷”,在此處承前省略主語(yǔ),“其主”與“秉常”屬于同位語(yǔ),共同作為“囚廢”的賓語(yǔ),BERTguwen+CRF經(jīng)過(guò)了古文增量訓(xùn)練,能夠更好地識(shí)別此類主語(yǔ)省略的句式,斷句結(jié)果正確。而B(niǎo)ERTbase+CRF模型錯(cuò)誤地將“秉常”當(dāng)作“用兵”的主語(yǔ),“西方”作為“既下”的主語(yǔ),導(dǎo)致斷句錯(cuò)誤?!俺琼巍睘殡p音節(jié)文言詞,在古文中屬于比較常用的詞,但在現(xiàn)代漢語(yǔ)中幾乎不再使用,BERTbase+CRF不能準(zhǔn)確地識(shí)別這一詞語(yǔ),可能是因?yàn)樵谄洮F(xiàn)代漢語(yǔ)訓(xùn)練語(yǔ)料中“城砦”出現(xiàn)頻次較低,BERTguwen+CRF將“城砦”作為一個(gè)整體且斷句正確,這說(shuō)明增量訓(xùn)練之后的BERTguwen+CRF對(duì)文言詞更加敏感。
例1
原文: 朝廷以夏人囚廢其主秉常。用兵西方。既下米脂等城砦數(shù)十。
BERTguwen+CRF: 朝廷以夏人囚廢其主秉常。用兵西方。既下米脂等城砦數(shù)十。
BERTbase+CRF: 朝廷以夏人囚廢其主。秉常用兵。西方既下。米脂等城。砦數(shù)十。
通過(guò)分析斷句結(jié)果,我們發(fā)現(xiàn)斷句經(jīng)常出現(xiàn)“可斷可不斷”的情況,如以下兩個(gè)案例所示,原文為“借兵於楚伐魏”,模型斷句結(jié)果為“借兵於楚。伐魏”,在“伐魏”之前斷句應(yīng)該也不為錯(cuò)誤。案例2的模型斷句也是類似的情況,模型斷句偏向于將長(zhǎng)句斷為小句,但這種斷句結(jié)果似乎不能算作錯(cuò)誤。在實(shí)驗(yàn)時(shí),將唯一斷句標(biāo)注集作為標(biāo)準(zhǔn)答案,并不能全面地評(píng)估模型的性能,以后可以嘗試在測(cè)試集中給出多種正確標(biāo)注答案。
案例1:
原文: 取我剛平。六年。借兵於楚伐魏。
BERTguwen+CRF: 取我剛平。六年。借兵於楚。伐魏。
案例2:
原文: 故曰。禮人而不荅則反其敬。愛(ài)人而不親則反其仁。治人而不治則反其知。
BERTguwen+CRF: 故曰。禮人而不荅。則反其敬。愛(ài)人而不親。則反其仁。治人而不治。則反其知。
本文在評(píng)價(jià)標(biāo)點(diǎn)模型時(shí)使用微平均精確率(Pmicro)、召回率(Rmicro)和F1micro。
標(biāo)點(diǎn)實(shí)驗(yàn)結(jié)果如表4所示,由于詩(shī)歌的標(biāo)點(diǎn)規(guī)則比較簡(jiǎn)單,所有模型的標(biāo)點(diǎn)F1值都在95%以上。BERTguwen+CNN模型在古文和詩(shī)歌上標(biāo)點(diǎn)表現(xiàn)最好,F1值為80.18%和98.91%。在古文標(biāo)點(diǎn)中,BERTguwen+CRF比BERTbase+CRF的標(biāo)點(diǎn)F1值高1.54個(gè)百分點(diǎn),BERTguwen+CNN比BERTbase+CNN的標(biāo)點(diǎn)F1值高2.21個(gè)百分點(diǎn),說(shuō)明增量訓(xùn)練之后的模型在一定程度上能夠幫助提升標(biāo)點(diǎn)效果。
表4 不同模型在古文和詩(shī)歌上的標(biāo)點(diǎn)實(shí)驗(yàn)結(jié)果 (單位: %)
和斷句任務(wù)的結(jié)果相比,標(biāo)點(diǎn)的精確率、召回率、F1值與斷句均有較大差距,因?yàn)閿嗑湟?guī)則相對(duì)比較統(tǒng)一,而標(biāo)點(diǎn)的規(guī)則比較復(fù)雜,不同的標(biāo)點(diǎn)表達(dá)不同的感情和意義。本文實(shí)驗(yàn)的語(yǔ)料雖然是經(jīng)過(guò)人工整理的,但是依然存在標(biāo)注規(guī)則不一致的情況,如逗號(hào)和句號(hào)、分號(hào)和逗號(hào)的使用常常因人而異,模型也難以分辨。
上面的實(shí)驗(yàn)結(jié)果已經(jīng)證明BERTguwen模型相比BERTbase模型在斷句和標(biāo)點(diǎn)任務(wù)上表現(xiàn)更好。本文設(shè)計(jì)實(shí)驗(yàn)進(jìn)一步討論BERTguwen的表現(xiàn)優(yōu)于BERTbase的原因。
古代漢語(yǔ)和現(xiàn)代漢語(yǔ)各有特點(diǎn),現(xiàn)代漢語(yǔ)以雙音節(jié)詞為主,古代漢語(yǔ)以單音節(jié)詞為主,且多義詞比例很高。BERT與傳統(tǒng)的詞向量模型不同,BERT能夠?qū)Σ煌Z(yǔ)境下同一個(gè)詞有不同的語(yǔ)義表示,具有區(qū)分同一個(gè)詞的不同義項(xiàng)的能力,如“君之病在腸胃”中的“病”與“人皆嗤吾固陋,吾不以為病”中的“病”分別對(duì)應(yīng)不同的向量。
本文選取一組古漢語(yǔ)多義詞來(lái)討論BERTguwen和BERTbase文言詞的語(yǔ)義表示能力。本文選取古漢語(yǔ)多義詞基于以下三個(gè)原則: ①單音節(jié)多義詞,因?yàn)锽ERT中文模型只能對(duì)句子和單字詞做語(yǔ)義表示; ②詞語(yǔ)義項(xiàng)多,文言詞除本義外通常還有引申義和假借義; ③詞語(yǔ)在古漢語(yǔ)中使用率高,屬于常用詞。
基于以上三點(diǎn),我們參考文學(xué)網(wǎng)(3)https://wyw.hwxnet.com/article/24.html發(fā)布的150個(gè)古文多義實(shí)詞以及《古漢語(yǔ)常用字字典》第四版,選取“安”“謝”“信”“兵”“愛(ài)”“病”“假”七個(gè)單音節(jié)詞作為實(shí)驗(yàn)對(duì)象,以上七個(gè)多義詞義項(xiàng)都在3個(gè)以上,并且在我們的語(yǔ)料庫(kù)中出現(xiàn)頻次較高。
首先從整理的語(yǔ)料中分別找到3 000條含有以上七個(gè)單音節(jié)詞的句子,利用BERTguwen對(duì)每條例句中的詞作向量化表示,然后用k-means對(duì)以上七個(gè)詞語(yǔ)的所有詞向量做聚類,最后使用t-nse對(duì)聚類結(jié)果進(jìn)行可視化。根據(jù)《古漢語(yǔ)常用字字典》中的義項(xiàng),七個(gè)單字詞的義項(xiàng)共36個(gè),將k-means的聚類數(shù)設(shè)為36,模型自動(dòng)將所有詞向量聚為36個(gè)小類。聚類效果如圖2所示,圖中每個(gè)點(diǎn)代表一個(gè)詞向量,從圖2上可以比較明顯地看出聚類之后出現(xiàn)了七個(gè)模塊,每一模塊對(duì)應(yīng)一個(gè)文言單字詞,每個(gè)模塊內(nèi)部又包含不同灰度的點(diǎn),不同顏色表示詞內(nèi)部有不同的義項(xiàng)。以上聚類結(jié)果說(shuō)明BERTguwen能夠?qū)⒉煌难栽~的語(yǔ)義區(qū)分開(kāi),并且能表示出一個(gè)多義詞的不同義項(xiàng)。
圖2 k-means對(duì)七個(gè)古漢語(yǔ)單字詞向量的聚類效果圖
為了進(jìn)一步討論BERTguwen模型對(duì)同一個(gè)文言詞的不同義項(xiàng)的區(qū)分能力,我們對(duì)比BERTguwen和BERTbase兩個(gè)模型對(duì)七個(gè)多義詞的不同義項(xiàng)的語(yǔ)義表示能力,即是否能將不同義項(xiàng)分開(kāi)。以“安”和“謝”為例,首先根據(jù)文言詞“安”的四個(gè)常用義項(xiàng)人工挑出2 000條例句,根據(jù)文言詞“謝”的三個(gè)常用義項(xiàng)挑出1 500條例句,部分例句如表5所示。
表5 文言詞“安”“謝”常用義項(xiàng)例句(部分)
分別使用BERTguwen和BERTbase兩個(gè)模型生成“安”和“謝”在所有例句中的詞向量,最后進(jìn)行聚類。我們使用輪廓系數(shù)評(píng)估聚類效果,聚類效果越好,輪廓系數(shù)越高,計(jì)算如式(1)所示。
(1)
其中,a(i)表示樣本點(diǎn)i的簇內(nèi)不相似度,j表示與樣本i在同一個(gè)類中的其他樣本,distance(i,j)表示i和j之間的距離。
(2)
其中,b(i) 表示i和其他每個(gè)類別的所有樣本之間的距離和的最小值,計(jì)算方式和a(i)類似。所有樣本的S(i)均值即為聚類結(jié)果的輪廓系數(shù)。
如圖3所示,圖3(a)為BERTguwen生成的“謝”的詞向量的聚類效果,聚類系數(shù)為3,輪廓系數(shù)S為0.1173;圖3(b)為BERTbase生成“謝”的詞向量的聚類效果,聚類系數(shù)為3,輪廓系數(shù)S為0.096 4;對(duì)比圖3(a)和3(b)發(fā)現(xiàn)BERTguwen生成的“謝”的向量能夠被清晰地聚為3類,且圖3(a)的輪廓系數(shù)大于圖3(b)的輪廓系數(shù)。對(duì)比七個(gè)多義詞的七組聚類效果圖及其輪廓系數(shù)發(fā)現(xiàn),除了“信”以外,BERTguwen生成的詞向量的聚類效果明顯好于BERTbase生成的詞向量。
圖3 (續(xù))
觀察“信”的聚類效果圖我們可以看出,BERTguwen的聚類效果似乎好于BERTbase,但輪廓系數(shù)前者卻小于后者。原因可能是“信”的義項(xiàng)較多,并且這些義項(xiàng)之間有比較緊密的引申關(guān)系,詞性主要是動(dòng)詞和名詞。如“不欺,講信用”(言而有信)“信任”(愿陛下親之信之)“相信“(忌不自信)“信用”(小信未孚,神弗福也)。而如“安”“謝”這類多義詞,不同義項(xiàng)距離較遠(yuǎn),且詞性多樣。
近年來(lái),不斷有學(xué)者提出長(zhǎng)文本處理模型,BlockBERT[15]切斷BERT中不重要的注意力頭,將BERT可處理的Token數(shù)從512個(gè)擴(kuò)展到1 024個(gè)。Big bird模型[16]使用稀疏注意力機(jī)制,將計(jì)算復(fù)雜度降到線性,可以處理比全局注意力Transformer長(zhǎng)8倍的序列。但是這類模型能處理的長(zhǎng)度依然有限,長(zhǎng)文本句讀是生產(chǎn)環(huán)境下需要解決的問(wèn)題,但目前涉及這一問(wèn)題的研究較少。俞敬松等[4]使用滑動(dòng)窗口的方式處理篇章級(jí)句讀(以下稱串行滑動(dòng)窗口1),如圖4中示例所示,每次輸入不超過(guò)64字的片段,因其訓(xùn)練數(shù)據(jù)最長(zhǎng)為21字,所以只取輸出結(jié)果的前一個(gè)或兩個(gè)斷句結(jié)果,剩余的部分歸并到第二次切分的64字。這種滑動(dòng)窗口方式雖然在一定程度上保證了斷句的準(zhǔn)確性,但是每次處理的序列只有64字,且每次只取前兩句的斷句結(jié)果,后面的處理結(jié)果因準(zhǔn)確性不高都被放棄。這種方式每次需等待前一片段輸出結(jié)果之后才能進(jìn)行第二片段的處理,處理效率很低。
本文提出了兩種新的滑動(dòng)窗口方式,在保證準(zhǔn)確率的同時(shí)也能極大提高運(yùn)行速率,以下稱串行滑動(dòng)窗口2和并行滑動(dòng)窗口。串行滑動(dòng)窗口2是通過(guò)對(duì)串行滑動(dòng)窗口1改進(jìn)得到,如圖5示例,首先輸入文檔的前125個(gè)字,然后等待模型返回前125個(gè)字的斷句結(jié)果,因?yàn)榈箶?shù)第一句可能因?yàn)檎Z(yǔ)義不完整而出現(xiàn)錯(cuò)誤斷句,所以將倒數(shù)第一句的斷句結(jié)果加入到下一次切分的125字中過(guò),依次處理完所有文本。這種方法使得每次能處理更長(zhǎng)的序列,并且每次只放棄輸出結(jié)果的最后一句,運(yùn)行速度相比串行滑動(dòng)窗口1有一定提高。但是因?yàn)閿?shù)據(jù)處理的方式仍然是串行的,每次需要等待前面的返回結(jié)果,句讀效率不足以滿足使用需求。
圖5 串行滑動(dòng)窗口2示例第一次取得結(jié)果為“……據(jù)其要害。擊之可破也。岱不從。遂與戰(zhàn)。”
為了進(jìn)一步提高篇章級(jí)句讀速率,本文提出了并行滑動(dòng)窗口方法。如圖6案例所示,將長(zhǎng)文本數(shù)據(jù)按照滑動(dòng)窗口的方式切分,第一個(gè)片段與第二個(gè)片段重復(fù)n個(gè)字,第二個(gè)片段與第三個(gè)片段重復(fù)n個(gè)字,依次將長(zhǎng)文本切成m個(gè)片段,將m個(gè)片段同時(shí)送入模型,同時(shí)返回m個(gè)結(jié)果。在處理返回結(jié)果時(shí)也按照滑動(dòng)窗口的方式處理,對(duì)于片段1,首先刪除倒數(shù)第一句的輸出結(jié)果得到新的片段1,然后在片段2的輸出結(jié)果中刪除和新的片段1重復(fù)的部分,同樣刪除片段2的倒數(shù)第一句的輸出結(jié)果,得到新的片段2,最后將新的片段1和新的片段2拼接,依次將所有的片段拼接得到最后的輸出序列。將一整篇文本切分為多條數(shù)據(jù)并行處理,大幅度提高了句讀速度,并且能保證句讀的準(zhǔn)確率。在實(shí)驗(yàn)中我們將片段長(zhǎng)度設(shè)置為125,重復(fù)字?jǐn)?shù)n設(shè)為20。
圖6 并行滑動(dòng)窗口示例切分為m個(gè)片段,然后在返回的斷句結(jié)果中,將每個(gè)片段重復(fù)的部分去掉。
我們將直接截?cái)嗟姆绞阶鳛榛€標(biāo)準(zhǔn),將長(zhǎng)文本每64字截?cái)嘟M成一批數(shù)據(jù)喂進(jìn)模型。使用以上四種方式句讀一段4 168字的長(zhǎng)文本,實(shí)驗(yàn)結(jié)果如表6所示。
表6 四種篇章級(jí)句讀方法實(shí)驗(yàn)結(jié)果
從表6中可以比較明顯地看出,滑動(dòng)窗口方法的F1值都高于直接截?cái)嗟姆椒?這是因?yàn)榛瑒?dòng)窗口只取語(yǔ)義比較完整的文本片段作為輸出結(jié)果,而直接截?cái)嗟姆绞饺菀自斐晌谋酒谓Y(jié)尾強(qiáng)制斷句的錯(cuò)誤,但是直接截?cái)嗟姆绞骄哂凶罡叩奶幚硇?。?duì)比兩種串行滑動(dòng)窗口方式,本文改進(jìn)的串行滑動(dòng)窗口2句讀速度相比于串行滑動(dòng)窗口1提高了11倍,且有最高的F1值。比較并行滑動(dòng)窗口和兩種串行滑動(dòng)窗口,并行滑動(dòng)窗口方式用時(shí)5.79 s,和直接截?cái)喾绞接脮r(shí)基本無(wú)差,同時(shí)也保證了斷句具有較高的F1值。
基于本文提出的句讀模型和并行滑動(dòng)窗口方式,我們開(kāi)發(fā)了“吾與點(diǎn)”古籍自動(dòng)句讀平臺(tái)(4)http://wyd.pkudh.xyz/。該平臺(tái)可以輔助古籍研究者和愛(ài)好者自動(dòng)句讀古籍文本。
古文斷句和標(biāo)點(diǎn)是古籍整理過(guò)程中重要的一步,本文利用預(yù)訓(xùn)練語(yǔ)言模型實(shí)現(xiàn)了繁體古籍的自動(dòng)斷句和標(biāo)點(diǎn)。首先利用10億字繁體古文語(yǔ)料對(duì)中文BERT模型做增量訓(xùn)練,然后以此預(yù)訓(xùn)練模型為基礎(chǔ)實(shí)現(xiàn)了繁體古文的自動(dòng)斷句和標(biāo)點(diǎn)。古文和詩(shī)歌的自動(dòng)斷句F1值分別為95.03%和99.53%,標(biāo)點(diǎn)F1值分別為80.18%和98.91%。并且通過(guò)實(shí)驗(yàn)發(fā)現(xiàn)增量訓(xùn)練后的BERT模型能夠提升自動(dòng)斷句和自動(dòng)標(biāo)點(diǎn)的效果。本文通過(guò)對(duì)文言多義詞的多個(gè)義項(xiàng)聚類發(fā)現(xiàn),增量訓(xùn)練的語(yǔ)言模型的古文語(yǔ)義表示能力優(yōu)于原始BERT模型,并且具備一定的區(qū)分多義詞不同義項(xiàng)的能力。在篇章級(jí)句讀方面,本文改進(jìn)了數(shù)據(jù)串行方案并提出數(shù)據(jù)并行的滑動(dòng)窗口方式,既能保證句讀的準(zhǔn)確率,也能保持極高的處理效率。