徐潤華,梁社會
(1.金陵科技學(xué)院人文學(xué)院, 江蘇 南京 210038;2.南京師范大學(xué)國際文化教育學(xué)院, 江蘇 南京 210097)
先秦傳世文獻(xiàn)篇幅一般不長,即使篇幅最長的《左傳》也僅有28萬字,其余文獻(xiàn)多數(shù)為幾萬字篇幅,有的甚至僅幾千字?,F(xiàn)代漢語的信息處理方法往往需要較大的參數(shù)規(guī)模和大量的訓(xùn)練語料,這與先秦文獻(xiàn)篇幅短小的特點(diǎn)相沖突。因此對先秦文獻(xiàn)進(jìn)行信息處理需要探索新方法。
先秦文獻(xiàn)由于年代久遠(yuǎn),語言生澀,故后人為其注釋,謂之“注”。由于“注”仍然存在語言難懂、解釋不全的問題,為此后人對“注”進(jìn)行注釋,謂之“疏”。先秦文獻(xiàn)注疏中的信息十分豐富,包含大量的半結(jié)構(gòu)化詞匯和語義知識,是先秦文獻(xiàn)信息處理的重要依據(jù)。注疏文獻(xiàn)猶如現(xiàn)今語文教學(xué)中的“串講”,是對先秦文獻(xiàn)進(jìn)行自動分詞和標(biāo)注的重要依據(jù)[1]。對語言進(jìn)行信息處理需要啟動知識,現(xiàn)代漢語信息處理的一般模式是用訓(xùn)練語料作為啟動知識(有監(jiān)督的學(xué)習(xí)),而先秦文獻(xiàn)由于所需的知識已存于相關(guān)文獻(xiàn)(即注疏文獻(xiàn))中,且這些文獻(xiàn)的證據(jù)要比統(tǒng)計模型更可靠和好用[2],因此,對其進(jìn)行信息處理應(yīng)將相關(guān)文獻(xiàn)作為啟動知識。例如,《左傳》“六人叛楚”一句,根據(jù)《春秋左傳正義》“六國,今廬江六縣”的注疏可知,此句中的“六人”應(yīng)被理解為六國之人,而不是六個人,藉此可以幫助計算機(jī)對該句做出正確的理解和詞語切分。
注疏文獻(xiàn)中雖然包含了大量的詞匯語義知識,但它尚未和原文建立起對應(yīng)關(guān)系。而自動對齊正是要找到注疏文獻(xiàn)和原文之間的這種關(guān)聯(lián)并將其形式化,進(jìn)而將半結(jié)構(gòu)化的注疏文獻(xiàn)結(jié)構(gòu)化,從而為自動分詞乃至其他先秦文獻(xiàn)的信息處理提供更為可靠和有效的幫助。本文以先秦文獻(xiàn)中篇幅最長的《左傳》為研究對象,對《左傳》及其注疏文獻(xiàn)進(jìn)行內(nèi)容自動對齊研究。
注疏文獻(xiàn)是一種半結(jié)構(gòu)化的文獻(xiàn),其內(nèi)部構(gòu)成方式呈現(xiàn)明顯的規(guī)律性,《左傳》注疏文獻(xiàn)也不例外。本文選用的《左傳》注疏文獻(xiàn)為《春秋左傳正義》,以下為部分內(nèi)容示例:
【傳】元年,春,王周正月。言周以別夏殷?!饎e,彼列反。夏,戶雅反。不書即位,攝也。假攝君政。不脩即位之禮,故史不書於策,傳所以見異於常。
【疏】“不書即位,攝也”?!鹫x曰:攝訓(xùn)持也。隱以桓公幼少,且攝持國政,待其年長,所以不行即位之禮。史官不書即位,仲尼因而不改,故發(fā)傳以解之。[3]
例中,“元年,春,王周正月”和“不書即位,攝也”都是援引自《左傳》原文的引文,引文后面的內(nèi)容是對該引文所做的注釋。從示例中可以看出,注疏文獻(xiàn)在行文結(jié)構(gòu)上具有以下特點(diǎn):基本上是由“對原文的援引”和“對引文的注解”兩部分構(gòu)成;“對引文的注解”分為“注”和“疏”兩部分,“注”緊跟引文之后,“疏”則另起一段;一段引文及“注”的內(nèi)容,加上一段“疏”的內(nèi)容,構(gòu)成注疏文獻(xiàn)的最基本單位。
自動對齊的最終目的是要找到原文在注疏文獻(xiàn)中的引文、注疏對引文所作的解釋以及該解釋中所出現(xiàn)的原文詞匯。因此,《左傳》及其注疏文獻(xiàn)的對齊任務(wù)可以細(xì)化為句子對齊、注釋對齊、詞匯對齊三個子任務(wù)[4]。三個子任務(wù)中,句子對齊最為重要。由于注疏本身就是半結(jié)構(gòu)化的文獻(xiàn),因此句子對齊成功后,注釋對齊自然也就完成了。而詞匯對齊是基于注釋對齊的一個子串匹配過程,所以必須以句子對齊和注釋對齊的結(jié)果作為前提和依據(jù)(圖1)。
圖1 《左傳》自動對齊任務(wù)示例
《左傳》及其注疏文獻(xiàn)在進(jìn)行自動對齊時存在以下特殊情況。
一是繁體字存在不同版本,同一個字原文和引文使用的版本不一致[5],但此時并不存在引用錯誤的問題。
二是原文和引文的標(biāo)點(diǎn)位置不一致,并且相同位置的標(biāo)點(diǎn)也存在不一致的情況,但由于古籍文獻(xiàn)的句讀本身就是后人加上去的,所以此時也不存在引用錯誤的問題。
三是有時原文和引文相似程度非常高,但實(shí)際上該引文卻不是此處原文的對齊結(jié)果;有時原文和引文的相似程度并不高甚至只有50%左右,但實(shí)際上該引文正是此處原文的對齊結(jié)果。因此,自動對齊算法的匹配功能,必須要能兼容各種復(fù)雜特殊的對齊情況,不能僅由一個相似度計算結(jié)果決定。
四是在面對大規(guī)模文獻(xiàn)的對齊任務(wù)時,算法首先要能保證順利跑完所有的注疏文獻(xiàn)而不中途報錯,其次要保證不出現(xiàn)因為某一次的匹配失敗或者匹配錯誤而導(dǎo)致接下來所有內(nèi)容的匹配失敗或匹配錯誤的現(xiàn)象。
順序無關(guān)是指,原文的每個句子都到注疏文獻(xiàn)庫中查找可能的對齊結(jié)果。這樣的對齊過程,其實(shí)相當(dāng)于一個全文檢索過程。每一個句子是否對齊成功,互相之間沒有影響。順序有關(guān)是指,按照順序,原文中的每個句子都到注疏文獻(xiàn)的相應(yīng)部分中查找可能的對齊結(jié)果。只有“過去”的原文對齊成功,“現(xiàn)在”和“將來”的原文才可能對齊成功。兩者比較,順序無關(guān)算法健壯性更好,因為不能寄希望于注疏中的引文也完全按照原文中的先后順序出現(xiàn)。但是順序無關(guān)算法的正確性較差,因為和當(dāng)前原文相似程度高的注疏中的句子可能有很多,但其中只有一句才是真正的引文。此外,由于原文和引文的標(biāo)點(diǎn)位置存在不一致現(xiàn)象,如果采用次序無關(guān)的對齊算法,因為引文被斷成了更多的小句,并散落在不同的段落里,許多原文可能因此找不到相關(guān)的引文。可見,順序無關(guān)的對齊算法健壯性較好,而順序有關(guān)的對齊算法正確性更優(yōu)??紤]到《左傳》的注疏文獻(xiàn)大都是按照原文的先后順序來援引相關(guān)內(nèi)容的,因此本研究采用了順序有關(guān)的對齊算法來對其進(jìn)行自動對齊。
句子與句子之間的相似度可以用浮點(diǎn)型數(shù)值表示,同時設(shè)優(yōu)、良、中、差四個等級。一個好的對齊算法不能僅由一個相似度結(jié)果來確定,其必須要有很強(qiáng)的兼容性。在進(jìn)行局部匹配時,算法不會僅僅只根據(jù)當(dāng)前原文和當(dāng)前引文的相似度計算結(jié)果就給出對齊成功與否的結(jié)論,依照當(dāng)前原文的相似度計算結(jié)果的不同,分四種情況。
一是當(dāng)前原文和引文的相似度等級為優(yōu),則對齊成功。回溯上一句原文和引文的相似度等級,若為良或者中,則上一句對齊成功。
二是當(dāng)前原文和引文的相似度等級為良,則回溯上一句原文和引文的相似度等級:若為優(yōu),則當(dāng)前對齊成功;若為良,則上一句對齊成功并且當(dāng)前對齊成功;若為其他,則上一句對齊失敗,當(dāng)前句暫不判斷。
三是當(dāng)前原文和引文的相似度等級為中,則回溯上一句原文和引文的相似度等級:若為優(yōu),則當(dāng)前對齊成功;若為其他,則上一句對齊失敗,當(dāng)前句暫不判斷。
四是當(dāng)前原文和引文的相似度等級為差,則對齊失敗?;厮萆弦痪湓暮鸵牡南嗨贫鹊燃墸魹榱蓟蛘咧?則上一句對齊失敗。
《春秋左傳正義》的字?jǐn)?shù)在100萬以上,大約是《左傳》字?jǐn)?shù)的5倍。因此,當(dāng)原文A和注疏B對齊失敗后,若一直繼續(xù)往后匹配直到注疏文獻(xiàn)末尾,那么在大多數(shù)的情況下,原文A總是能夠?qū)R成功的。但是事實(shí)上,A的真正引文,或者就是B,或者就在B的附近,而一直往后匹配所找到的那個匹配成功的C,往往并不是A的真正的引文。這就會造成一種嚴(yán)重的錯位現(xiàn)象,并且?guī)磉B鎖反應(yīng),導(dǎo)致A之后的所有原文都將無法正確地進(jìn)行對齊。
對齊并不意味著每一句原文都必須要找到引文。對齊允許失敗,而且有些失敗是必要的。只有及時地反饋對齊失敗的結(jié)果,才能及時地回溯,從而使整個對齊過程繼續(xù)有效地進(jìn)行下去。因此,本文在對齊算法中加入了全局回溯機(jī)制:當(dāng)注疏文獻(xiàn)中連續(xù)10行內(nèi)容都找不到與當(dāng)前原文匹配的引文時,則當(dāng)前原文匹配失敗,不再向下匹配,回退到注疏文獻(xiàn)內(nèi)容的10行之前,并開始對原文的下一句進(jìn)行匹配;若原文中連續(xù)10個小句都無法在當(dāng)前10行的注疏文獻(xiàn)內(nèi)容中匹配成功,則跳轉(zhuǎn)至接下來的10行注疏文獻(xiàn)內(nèi)容中,回退到原文的10個小句之前,繼續(xù)匹配。這樣處理的好處是,無論是由于算法誤判而造成的對齊失敗,還是由于錯誤的對齊成功而造成的錯位現(xiàn)象,都可以被控制在有限的范圍之內(nèi),而不影響全局(圖2)。
圖2 全局回溯示例
《左傳》全文共37 588個小句,在本次實(shí)驗中,一共對齊了36 917個小句,其中36 835個小句對齊正確,句子對齊的正確率為99.8%,召回率為98.2%,可見《左傳》及其注疏文獻(xiàn)的句子對齊效果較為理想。
注疏文獻(xiàn)的詞匯對齊是對先秦文獻(xiàn)進(jìn)行語義分析及加工的前提。但詞匯對齊和句子對齊的過程并不相同,句子對齊的實(shí)質(zhì)是把原文和注疏中的相同文字、相同片段找出來并一一對應(yīng),而詞匯對齊的任務(wù)并不是找出相同的文字或者片段,而是把原文和注疏中的詞匯及其相應(yīng)的釋義內(nèi)容找出來并進(jìn)行對齊。所以詞匯對齊涉及兩個具體子任務(wù):一是要找到原文和注疏文獻(xiàn)中究竟有哪些詞匯;二是要在注疏文獻(xiàn)中找到這些詞匯的釋義內(nèi)容,并與這些詞匯進(jìn)行對齊。這兩個子任務(wù)是互相關(guān)聯(lián)的,通過比對原文或引文和釋義內(nèi)容之間的相同文字,可以幫助找出原文或引文中的詞匯,通過原文或引文中的詞匯,又可以把釋義內(nèi)容中與該詞匯相關(guān)的所有釋義文字準(zhǔn)確地定位出來。
通過判斷某個字串是否出現(xiàn)在注疏文獻(xiàn)中的釋義內(nèi)容部分,可以為判斷該字串是否為詞匯提供幫助。在確認(rèn)該字串是詞匯的同時,可以把出現(xiàn)該字串的釋義內(nèi)容抽取出來,從而完成詞匯對齊。本文設(shè)計了兩種詞匯對齊原則來進(jìn)行詞匯發(fā)現(xiàn)和釋義內(nèi)容抽取:一是寬式原則,即只要原文或引文的某部分字串在注疏文獻(xiàn)的釋義內(nèi)容部分中出現(xiàn)過,就把該字串看作是一個詞匯,并將相關(guān)釋義內(nèi)容抽取出來;二是嚴(yán)式原則,即只關(guān)注“者、也、稱、言、為、曰”等提示詞,若原文或引文的某部分字串在注疏文獻(xiàn)的釋義內(nèi)容部分和這些提示詞緊鄰出現(xiàn)過,或者單獨(dú)出現(xiàn)過(出現(xiàn)在‘’或“”中也算單獨(dú)出現(xiàn)),則把該字串看作是一個詞匯,并將其所位于的釋義內(nèi)容小句(由“。”“?”等標(biāo)點(diǎn)分隔開的注疏文獻(xiàn)部分)抽取出來。由于寬式原則過于寬松,嚴(yán)式原則又有些矯枉過正,兩者間需要平衡。因此,本文綜合以上兩種原則,對《左傳》及其注疏文獻(xiàn)進(jìn)行了詞匯對齊的實(shí)驗。以《左傳》原文句子“惠公元妃孟子”為例,該句在《春秋左傳正義》中相應(yīng)的注疏內(nèi)容如下:
傳惠公元妃孟子。言“元妃”,明始適夫人也。子,宋姓?!鸹莨?名不皇。謚法愛人好與曰惠。其子隱公,讓國之君。元妃,芳非反。傳曰“嘉耦曰妃”。適,本又作嫡,同,丁曆反。
[疏]傳“惠公元配孟子”。正義曰:惠公,名弗皇,孝公之子也。謚法:“愛民好與曰惠?!薄夺屧b》雲(yún)“元,始也。妃,匹也”。始匹者,言以前未曾娶,而此人始爲(wèi)匹,故注雲(yún):言元妃,明始適夫人也。妃者,名通適妾,故傳雲(yún)“陳哀公元妃鄭姬生悼大子偃師,二妃生公子留,下妃生公子勝”。元者,始也,長也。
……
但林父、荀首并得立家,故荀首子孫亦從適長稱伯也?;蚩纱呵镏畷r不能如禮,孟伯之字無適庶之異,蓋從心所欲而自稱之耳。契姓子,宋是殷後,故子爲(wèi)宋姓。婦人以字配姓,故稱孟子。[3]
綜合利用寬式原則和嚴(yán)式原則,對上述原文內(nèi)容進(jìn)行自動詞匯對齊。
第一步,找出所有可能構(gòu)成詞匯的字串(設(shè)最大詞長為3),并把這些字串在《春秋左傳正義》中出現(xiàn)過的釋義內(nèi)容部分也找出來并進(jìn)行對齊,共有12個候選詞匯(圖3)。
圖3 詞匯對齊第一步
第二步,去除從未在《春秋左傳正義》釋義內(nèi)容部分出現(xiàn)過的候選詞,此時還剩下8個候選詞(圖4)。
圖4 詞匯對齊第二步
圖5 詞匯對齊第三步
本文探討了《左傳》及其注疏文獻(xiàn)的三種自動對齊過程:句子對齊、注釋對齊和詞匯對齊。在句子及注釋對齊試驗中,對齊的正確率為99.8%,召回率為98.2%,效果較為理想。相比之下,詞匯對齊的任務(wù)仍然很艱巨。本文提出了兩種詞匯對齊的原則,并通過具體的實(shí)例展示了《左傳》及其注疏文獻(xiàn)的詞匯對齊效果,但在大規(guī)模的文本實(shí)驗過程中仍然存在兩個需要解決的問題。
一是如何有效地從注疏文獻(xiàn)的釋義內(nèi)容中抽取信息。“有效”包含兩層意思:有用的信息盡量不遺漏,無用干擾的信息盡量篩掉。例如《左傳》原文“繼室以聲子”,對于“聲子”這個詞,注疏文獻(xiàn)的釋義部分只能找到“聲,謚也”的信息,但是在該句中,“聲子”才是正確的詞。又如原文“莊公寤生,驚姜氏”,注疏文獻(xiàn)的釋義部分可以找到“驚姜氏”,但通過對注疏的仔細(xì)觀察可以找到“寐寤而莊公巳生,故驚而惡之”這樣的句子,“故驚而惡之”可以表明“驚”是個動詞,加之“姜氏”可以在上下文全篇中找到,因此可以有把握地推翻“驚姜氏”是一個詞的結(jié)論。但這樣的判斷對于人來說很容易,讓機(jī)器能夠自動甄別和正確篩選卻很難。
二是如何有效地利用從注疏文獻(xiàn)的釋義內(nèi)容中抽取到的信息。對于先秦文獻(xiàn)來說,發(fā)現(xiàn)詞匯的過程其實(shí)就是一個尋找多字詞的過程,我們只需要關(guān)注抽取到的信息中的多字詞,例如,對于原文“邾子克也”,我們抽取出了“王命以爲(wèi)邾子”這樣的信息,就可以對它進(jìn)行正確分詞了,而不用理會“邾”“克”也被抽取到。但如果可以抽取到“此傳言‘爲(wèi)魯夫人’者”,也可以抽取到“其‘友’及‘夫人’”,那么“魯夫人”和“夫人”都是經(jīng)過嚴(yán)式原則的篩選,是最終“合格”的候選詞。如何在這兩個“合格”的候選詞之間進(jìn)行取舍,需要挖掘更多注疏內(nèi)部的知識來支撐。
找到解決上述問題的有效辦法是提高《左傳》及其注疏文獻(xiàn)詞匯對齊效果的關(guān)鍵所在,也是本研究需要進(jìn)一步探索和改進(jìn)的方向。