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