聞永毅,王治梅,楊 婷
陜西中醫(yī)藥大學(xué)外語學(xué)院,陜西 西安 712046
從中醫(yī)古文獻(xiàn)中自動抽取信息是一種基于中醫(yī)古文獻(xiàn)語料庫的研究方法。相關(guān)中醫(yī)語料庫建設(shè)的研究已經(jīng)持續(xù)多年,并且涉及多方面的內(nèi)容,有討論語料庫建設(shè)可行性問題的[1]、有研究語料庫標(biāo)注方法的[2]、也有使用個人性質(zhì)的小型語料庫進(jìn)行字詞語義研究的[3]、還有生僻字處理方法[4]、信息檢索[5-6]以及漢英雙語語料庫建設(shè)的[7-8]。這些研究為建設(shè)大中型中醫(yī)文獻(xiàn)語料庫在理論、方法和應(yīng)用等問題方面積累了經(jīng)驗。然而,這些研究很少從計算機(jī)、語言學(xué)、中醫(yī)學(xué)、文獻(xiàn)學(xué)等交叉學(xué)科的角度開展綜合性研究,缺乏對建設(shè)、使用語料庫過程中必然面臨的一些深層次問題的討論。本研究擬從交叉學(xué)科的角度,較為詳細(xì)地討論基于中醫(yī)古文獻(xiàn)語料庫進(jìn)行研究過程中必須面對的一個困難問題——新詞發(fā)現(xiàn)問題,以此說明中醫(yī)古文獻(xiàn)新詞發(fā)現(xiàn)的困難、方法、技術(shù)以及語言學(xué)、中醫(yī)學(xué)知識所發(fā)揮的作用等問題。
中醫(yī)古文獻(xiàn)自動處理是自然語言處理領(lǐng)域的一個分支。理論上講,中文自然語言處理中的一些關(guān)鍵技術(shù)和基本方法都能夠適用于中醫(yī)古文獻(xiàn)自動處理的各個環(huán)節(jié),如分詞、詞性標(biāo)注、句法分析、信息抽取等。然而,由于古漢語與現(xiàn)代漢語在句法、詞匯方面的差別,再加上中醫(yī)古文獻(xiàn)資料的數(shù)量有限性以及在題材方面的獨特性,使得自然語言處理中所使用的技術(shù),如基于詞表的分詞法,或者基于統(tǒng)計的分詞法等都難以承擔(dān)中醫(yī)古文獻(xiàn)資料的自動分詞任務(wù)。要實現(xiàn)從中醫(yī)古文獻(xiàn)資料中自動提取信息的任務(wù),首先必須設(shè)計開發(fā)一款中醫(yī)古漢語自動分詞工具[9]。
本研究中的中醫(yī)古漢語分詞工具采用由字構(gòu)詞的詞表與統(tǒng)計相結(jié)合的分詞方法[10],在完成了基于詞表的分詞任務(wù)之后,即:完成了既定自動分詞任務(wù)之后,句子中的剩余字符會表現(xiàn)為散串的形式,這些散串就成為新詞發(fā)現(xiàn)研究的核心任務(wù)。具體情況如下列句子所示,劃線部分表示本研究擬討論的新詞發(fā)現(xiàn)所涉及的范圍:
例1:翰林 醫(yī)官 副使 趙 拱 等 參校 既終,繕 録 以 獻(xiàn),爰 俾 近 著,為 之 題辭(諸病源候論·序)。
“新詞”的定義很多[11],本質(zhì)上指自動分詞用詞表(以下簡稱為系統(tǒng)詞表)中沒有收錄、因而未能成功識別出來的詞語,主要涉及人名、地名、機(jī)構(gòu)名以及其他低頻率的詞語,自然語言處理領(lǐng)域稱之為未登陸詞。但是,并非所有人名、地名等都是新詞,例如中醫(yī)古文獻(xiàn)的系統(tǒng)詞表中,“黃帝、張仲景、仲景、孫思邈、華佗、扁鵲”等應(yīng)該是已經(jīng)收錄的項目,不是新詞。假如這些人名沒能被系統(tǒng)詞表錄入,而又頻繁出現(xiàn),那么它們就是高頻率新詞。
一般而言,除了少數(shù)歷史人名和地名之外,高頻率新詞都是特定文本中特有的詞匯,它們可能是文學(xué)作品中的人物姓名、地名,也可能是作者臆造的用語,具有明顯的著作特征或者語域特征。這些詞語的使用頻率會隨著處理文本的不同而劇烈變化,即從高頻率狀態(tài)跌至幾近于零。如果系統(tǒng)詞表把這些語匯都收入其中,那么系統(tǒng)將不堪重負(fù)。因此,高頻率新詞通常會被存放在一個動態(tài)詞表中,分詞系統(tǒng)運行時,會把它跟系統(tǒng)詞表同等對待,從而使高頻率新詞能夠像正常詞匯一樣地得到妥善處理,但程序下次運行時則會根據(jù)所處理文本的變化而預(yù)先更新這個動態(tài)詞表。
更新動態(tài)詞表需要運用N元切分技術(shù),會涉及切分、統(tǒng)計、詞表比較、高頻詞提取等多個步驟,高頻率新詞處理技術(shù)是漢語自動分詞中的一種通用的預(yù)處理技術(shù),雖然主要依靠統(tǒng)計數(shù)據(jù)而不是語言特征分析來提取高頻新詞,但它依然離不開跨學(xué)科知識的支持,例如《黃帝內(nèi)經(jīng)》中的高頻率切分單位“帝曰、于岐伯、問于岐伯、何其使然、愿聞其故”等,判斷它們是否為詞的依據(jù)就需要中醫(yī)學(xué)和語言學(xué)知識的支持。再者,現(xiàn)代漢語分詞研究中的網(wǎng)絡(luò)詞語、微博詞語等是一種新近形成的語匯[11-12],它們?nèi)绻皇桥R時性的高頻率用語,那么也應(yīng)該可以通過N元切分技術(shù)得到解決。
解決了高頻新詞的發(fā)現(xiàn)問題之后,再來討論隨文使用的低頻率新詞,如上例中的人名“趙拱”,再如僅用于《黃帝內(nèi)經(jīng)》中并且僅出現(xiàn)1次的“額顱、季秋、陰卵、靈蘭”等。這種類型的詞語被稱之為低頻“指紋語匯”。中醫(yī)古文獻(xiàn)資料中,這種低頻“指紋語匯”的數(shù)量異常龐大。根據(jù)《黃帝內(nèi)經(jīng)》的精細(xì)分詞結(jié)果統(tǒng)計,約20萬字的文本中,形符詞總計9 429個,4次以下頻次的詞數(shù)就高達(dá)6 417個。對于中醫(yī)文獻(xiàn)自動分詞工具的設(shè)計而言,這些“指紋語匯”究竟應(yīng)該列入系統(tǒng)詞表,還是留給新詞發(fā)現(xiàn)模塊進(jìn)行處理,都是一個難題。常規(guī)情況下,系統(tǒng)詞表中不可能錄入這些頻率極低的指紋詞語,收錄它們就意味著人工分詞。但是,如果把它們留給新詞發(fā)現(xiàn)部分,就需要非常可靠的處理方法,否則可能因此而造成更大面積的分詞錯誤。本文中,暫不討論這種“指紋語匯”的處理方法問題,把重點放在隨文出現(xiàn)的低頻率人名方面。
3.1 古文獻(xiàn)中人名處理的困難 根據(jù)“中醫(yī)古文獻(xiàn)語料庫”的統(tǒng)計數(shù)據(jù),中醫(yī)古文獻(xiàn)中的平均詞長大概為1.21個漢字,說明中醫(yī)古文獻(xiàn)在詞表分詞之后依然出現(xiàn)大量散串是一種常規(guī)形式。相比較而言,現(xiàn)代漢語的平均詞長達(dá)到1.8個漢字[13],說明現(xiàn)代漢語中長散串的出現(xiàn)概率不會很高。這種差異說明當(dāng)散串被作為新詞發(fā)現(xiàn)的對象進(jìn)行處理時,現(xiàn)代漢語中散串中間極可能存在新詞。但是,在中醫(yī)古文獻(xiàn)中,由于散串是一種正常形式,如例1所示,其中存在新詞的概率遠(yuǎn)遠(yuǎn)低于現(xiàn)代漢語。因此,在中醫(yī)古文獻(xiàn)中發(fā)現(xiàn)新詞將會困難重重。更為困難的是,在大量低頻“指紋語匯”未能成功處理的狀態(tài)下,如果僅采用姓氏列表、人名常用字表、或者停字表,試圖從散串之中發(fā)現(xiàn)人名或地名只會導(dǎo)致更多錯誤。以《諸病源候論》[14]為發(fā)現(xiàn)人名的測試實驗中,同時使用“姓氏列表+停字表”法,結(jié)果發(fā)現(xiàn)了文件中未被識別出的所有人名(姓與名),但是,準(zhǔn)確率卻不足2%。改用“姓氏列表+人名常用字表”法的效果雖然準(zhǔn)確率優(yōu)于停字表方法,但卻漏掉了像“趙拱”這樣的人名。由此可見,僅依靠人名組合的方法很難有效解決中醫(yī)古文獻(xiàn)中的人名發(fā)現(xiàn)問題。因此,必須開闊視野,把人名出現(xiàn)的上下文語境納入研究范圍。
3.2 人名前語境方法 人名前語境指緊鄰人名之前出現(xiàn)的各種要素的總稱,具體有3種類型:段落首位置、標(biāo)點符號以及字詞。例如下列3種情況“^”表示人名前的具體語境):
由于段落首位和標(biāo)點符號只是一種分割符號,約束人名出現(xiàn)的力度很低,所以能夠直接使用的前語境就只有人名前的語匯,如“弟、臣、士、郡、問、殺、遣、命、迎、問于、名曰、乃令、楚人”等。匯聚這些語匯之后,發(fā)現(xiàn)出現(xiàn)在人名前的語匯在語義方面具有一定的共性,大體上可以分為兩種類型:表示人的身份出處的名詞和表示使人動的動詞。構(gòu)建人名前語境詞表之后,結(jié)合姓氏詞表(排除了個別姓氏如“于、山、水、相、養(yǎng)”等),就可以采用順序掃描的方式實施“前語境限制法”來發(fā)現(xiàn)人名。
“前語境限制法”對人名前語境詞表中的語匯高度敏感,詞表項目的變化會直接影響到發(fā)現(xiàn)人名的正確率。是否能夠找到一個適用于所有古文本的前語境詞表,尚需進(jìn)一步驗證。無論效果如何,前語境限制法只能發(fā)現(xiàn)很少一部分的低頻人名,剩余人名還需要從人名之后的語境中得到解決。
3.3 人名后語境方法 跟人名前語境相反,人名后語境指緊鄰人名之后出現(xiàn)的語匯集合。從詞性和語義方面分析,它們主要是人所能夠發(fā)出的動作或狀態(tài)類型的語匯,如“曰、問、答(對)”以及部分功能詞如“等、?!薄A硗猓帐虾蠼印笆献庸酢钡惹闆r,雖然在中醫(yī)古文獻(xiàn)中的出現(xiàn)頻率不高,也應(yīng)該算作為后語境要素中的特殊情況,其中的“秦王、張氏、孟子、李公”等還會受到文本時代特征的影響,這種情況需要單獨處理。
從計算機(jī)自動處理角度分析,采集人名后語境要素,組成人名后語境表之后,在姓氏詞表的配合下,就可以采用反向掃描的方式來發(fā)現(xiàn)低頻人名。在確定的新詞發(fā)現(xiàn)范圍之內(nèi),具體實施方法如下(name indicator為后語境要素,first name為姓氏,text為新詞發(fā)現(xiàn)范圍):
這種方法只能處理由2個漢字組成的人名。雖然會存在錯誤,但跟處理3個漢字組成的人名比較,錯誤率小。對于由3個漢字組成的人名來說,為了降低識別的錯誤率,程序中還可以追加“停字表”的方法。
建立后語境表不是計算機(jī)程序設(shè)計問題,而是一個基于語料庫的語言研究問題,需要以人名語匯為中心,提取緊鄰人名左右兩側(cè)的語匯,統(tǒng)計分析跟人名出現(xiàn)密切相關(guān)的項目(即進(jìn)行相關(guān)性檢驗),最后組成一個人名后語境表。
本研究從正在加工的12部中醫(yī)古文獻(xiàn)著作中以機(jī)器輔助人工的方式提取人名的前后語境詞語。由于中醫(yī)古文獻(xiàn)中隨文使用的人名數(shù)量偏低,筆者還查閱了少量其他上古漢語資料。組成的人名后語境表中,除了“曰、問、答(對)”以外,其他有效項目有“學(xué)、諫、請、讓、死、佐、餓、告、觀、言、說、聞、過、憂、害、從、坐”等。有一些后語境要素可能需要延伸至第二個字,如“有言,大驚、對曰、即位、告曰、請曰”。
在新詞識別模塊中加載人名后語境表之后,運行程序處理《諸病源候論》(包含序),收集處理的結(jié)果數(shù)據(jù)顯示,《諸病源候論》中未登陸的人名總計22次,前語境方法正確識別出來3次,后語境正確識別14次,5次未能識別的人名均為無姓氏的人名,如下列兩句中的情況(下劃線部分為人名):
例5:是以 族 弟 長 互,舌 縮 入 喉。
例6:東海 神 名 阿 明,南海 神 名 祝融,西海神名巨乘,北海神名禺強(qiáng)。
由此可見,后語境表是自動識別低頻人名的主要要素。令人遺憾的是,為了17次的人名處理,筆者卻付出了高達(dá)68次的錯誤代價。仔細(xì)分析發(fā)生錯誤的原因發(fā)現(xiàn),把中醫(yī)文獻(xiàn)中的高頻用字如“不、死、過、于、之、者”等納入后語境要素?zé)o助于解決低頻人名問題。事實上,“不”字導(dǎo)致的錯誤數(shù)量高達(dá)18次,“死”字也引發(fā)了9次錯誤。另外,錯誤之中,雖然很多漢字用作人名的概率很低,如“腫、胸”等,卻依然被錯誤地識別為人名。這種情況表明,可以在“姓氏+人名后語境”方法中追加“停字表”的方法來過濾掉這些非人名用字。
3.4 停字表法 根據(jù)漢語人名的構(gòu)成特點,人名中包含“腳、手、腹、胸、腫、疔、瘡、死、亡、斃”等字的概率極低。如果把這些字收集起來組成一個停字表,那么,在“口 張 胸 悶”等散串的掃描過程中,雖然“張”是合法的姓氏,但是其后的“胸”字會終止掃描過程,從而確?!皬埿亍崩^續(xù)保持它的散串的形式。
從程序運行過程看,這種方法提前預(yù)設(shè)了程序掃描過程中的具體項目,避免了機(jī)器對無關(guān)項目的無效掃描,能夠節(jié)約時間,并且能夠最大限度地提高自動處理的正確率。當(dāng)然,這種方法的弊端也一目了然。當(dāng)啟用人名常用字表時,其他兩種類型就被禁用,會引發(fā)一些人名無法識別的風(fēng)險,而當(dāng)啟用停字表的時候,其他兩種類型可用,卻可能遭遇掃描數(shù)量過多而引發(fā)的錯誤率升高的風(fēng)險。
從邏輯關(guān)系方面分析,停字表跟人名常用字之間具有互補(bǔ)分布的關(guān)系。這兩種字表是把漢字字符集劃分為人名常用字、人名停用字和其他字3種類型,其中人名常用字跟停用字相互對立,兩者在人名處理中的作用應(yīng)該相似。然而,中醫(yī)古文獻(xiàn)是兩千多年的資料匯集,人名用字中已經(jīng)很難找到像現(xiàn)代漢語中那樣的時代特征??梢哉f,大多數(shù)漢字都是古代人名用字的選擇對象。因此,人名常用字表法可以應(yīng)用在現(xiàn)代漢語分詞系統(tǒng)中,但在處理古代漢語人名時只能使用停字表法。
根據(jù)中醫(yī)古文獻(xiàn)料庫中的資料分析發(fā)現(xiàn)停用字表中的項目具有一些明顯的語義與語用特征,表達(dá)消極意義的字以及很多自由語素字一般都不出現(xiàn)在人名之中,例如以下幾種類型:
1.身體部位類型字:腳、手、腿、腹、胸、脖、頸,等。
2.消極意義的字:疔、瘡、疤、癲、癇、腫、脹、死、亡、斃,暈,等。
3.語法功能類型的字:之、乎、者、也、所、不、沒、未、勿,等。
啟用停字表并適當(dāng)調(diào)整后語境表之后,運行程序的結(jié)果顯示,《諸病源候論》中未登陸的17次人名全部找到,付出的錯誤代價為4次。雖然正確率有了大幅度提升,但是依然沒有達(dá)到實用級別的要求。再次分析發(fā)生錯誤的原因發(fā)現(xiàn),其中的3次錯誤是前文定義的“指紋語匯”所引發(fā)的,如下例中的“毛水”:
例7:肺主皮毛,故余經(jīng)未傷,皮毛先腫,因名毛水也。
3.5 句式結(jié)構(gòu)限定法 句式結(jié)構(gòu)限定法指根據(jù)人名兩側(cè)同時出現(xiàn)的語匯進(jìn)行自動處理的一種方法,本質(zhì)上是利用人名前后語境中的搭配項目進(jìn)行人名識別,例如“謂……曰”“有……者”“以……為”等。自然語言狀態(tài)下,這種情況并不多見,但是在姓氏表和停字表的支持下,一旦遇到,準(zhǔn)確率很高。
新詞發(fā)現(xiàn)問題有兩種設(shè)計和兩種解決方案,高頻率新詞的發(fā)現(xiàn)過程可以在統(tǒng)計法主導(dǎo)下取得很好的效果。但是,處理低頻率新詞,卻必須使用新詞出現(xiàn)的具體語境。本文綜合中醫(yī)學(xué)和語言學(xué)知識創(chuàng)建人名前后語境表,把具體語境納入低頻新詞的處理過程,并通過程序設(shè)計的方式來驗證低頻人名處理的效果。研究結(jié)果顯示,人名前后語境要素能夠在人名自動處理過程中發(fā)揮作用。如果能夠把前后語境表、姓氏表、停字表中的要素進(jìn)一步優(yōu)化,使其中的項目能夠保持較為穩(wěn)定的狀態(tài),那么,這種方法就有可能應(yīng)用到整個中醫(yī)古文獻(xiàn)的分詞之中。由于中醫(yī)古文獻(xiàn)中很少遇到像現(xiàn)代漢語中的綽號、外族翻譯人名等情況,所以本研究中沒有涉及這些情況。再者,對無姓氏的人名以及對低頻率指紋語匯的自動處理也有待于深入研究。