闻永毅,王治梅,杨 婷

陕西中医药大学外语学院,陕西 西安 712046

从中医古文献中自动抽取信息是一种基于中医古文献语料库的研究方法。相关中医语料库建设的研究已经持续多年,并且涉及多方面的内容,有讨论语料库建设可行性问题的[1]、有研究语料库标注方法的[2]、也有使用个人性质的小型语料库进行字词语义研究的[3]、还有生僻字处理方法[4]、信息检索[5-6]以及汉英双语语料库建设的[7-8]。这些研究为建设大中型中医文献语料库在理论、方法和应用等问题方面积累了经验。然而,这些研究很少从计算机、语言学、中医学、文献学等交叉学科的角度开展综合性研究,缺乏对建设、使用语料库过程中必然面临的一些深层次问题的讨论。本研究拟从交叉学科的角度,较为详细地讨论基于中医古文献语料库进行研究过程中必须面对的一个困难问题——新词发现问题,以此说明中医古文献新词发现的困难、方法、技术以及语言学、中医学知识所发挥的作用等问题。

1 研究对象

中医古文献自动处理是自然语言处理领域的一个分支。理论上讲,中文自然语言处理中的一些关键技术和基本方法都能够适用于中医古文献自动处理的各个环节,如分词、词性标注、句法分析、信息抽取等。然而,由于古汉语与现代汉语在句法、词汇方面的差别,再加上中医古文献资料的数量有限性以及在题材方面的独特性,使得自然语言处理中所使用的技术,如基于词表的分词法,或者基于统计的分词法等都难以承担中医古文献资料的自动分词任务。要实现从中医古文献资料中自动提取信息的任务,首先必须设计开发一款中医古汉语自动分词工具[9]。

本研究中的中医古汉语分词工具采用由字构词的词表与统计相结合的分词方法[10],在完成了基于词表的分词任务之后,即:完成了既定自动分词任务之后,句子中的剩余字符会表现为散串的形式,这些散串就成为新词发现研究的核心任务。具体情况如下列句子所示,划线部分表示本研究拟讨论的新词发现所涉及的范围:

例1:翰林 医官 副使 赵 拱 等 参校 既终,缮 録 以 献,爰 俾 近 着,为 之 题辞(诸病源候论·序)。

2 高频率新词的发现问题

“新词”的定义很多[11],本质上指自动分词用词表(以下简称为系统词表)中没有收录、因而未能成功识别出来的词语,主要涉及人名、地名、机构名以及其他低频率的词语,自然语言处理领域称之为未登陆词。但是,并非所有人名、地名等都是新词,例如中医古文献的系统词表中,“黄帝、张仲景、仲景、孙思邈、华佗、扁鹊”等应该是已经收录的项目,不是新词。假如这些人名没能被系统词表录入,而又频繁出现,那么它们就是高频率新词。

一般而言,除了少数历史人名和地名之外,高频率新词都是特定文本中特有的词汇,它们可能是文学作品中的人物姓名、地名,也可能是作者臆造的用语,具有明显的着作特征或者语域特征。这些词语的使用频率会随着处理文本的不同而剧烈变化,即从高频率状态跌至几近于零。如果系统词表把这些语汇都收入其中,那么系统将不堪重负。因此,高频率新词通常会被存放在一个动态词表中,分词系统运行时,会把它跟系统词表同等对待,从而使高频率新词能够像正常词汇一样地得到妥善处理,但程序下次运行时则会根据所处理文本的变化而预先更新这个动态词表。

更新动态词表需要运用N元切分技术,会涉及切分、统计、词表比较、高频词提取等多个步骤,高频率新词处理技术是汉语自动分词中的一种通用的预处理技术,虽然主要依靠统计数据而不是语言特征分析来提取高频新词,但它依然离不开跨学科知识的支持,例如《黄帝内经》中的高频率切分单位“帝曰、于岐伯、问于岐伯、何其使然、愿闻其故”等,判断它们是否为词的依据就需要中医学和语言学知识的支持。再者,现代汉语分词研究中的网络词语、微博词语等是一种新近形成的语汇[11-12],它们如果只是临时性的高频率用语,那么也应该可以通过N元切分技术得到解决。

3 低频率新词的发现问题

解决了高频新词的发现问题之后,再来讨论随文使用的低频率新词,如上例中的人名“赵拱”,再如仅用于《黄帝内经》中并且仅出现1次的“额颅、季秋、阴卵、灵兰”等。这种类型的词语被称之为低频“指纹语汇”。中医古文献资料中,这种低频“指纹语汇”的数量异常庞大。根据《黄帝内经》的精细分词结果统计,约20万字的文本中,形符词总计9 429个,4次以下频次的词数就高达6 417个。对于中医文献自动分词工具的设计而言,这些“指纹语汇”究竟应该列入系统词表,还是留给新词发现模块进行处理,都是一个难题。常规情况下,系统词表中不可能录入这些频率极低的指纹词语,收录它们就意味着人工分词。但是,如果把它们留给新词发现部分,就需要非常可靠的处理方法,否则可能因此而造成更大面积的分词错误。本文中,暂不讨论这种“指纹语汇”的处理方法问题,把重点放在随文出现的低频率人名方面。

3.1 古文献中人名处理的困难 根据“中医古文献语料库”的统计数据,中医古文献中的平均词长大概为1.21个汉字,说明中医古文献在词表分词之后依然出现大量散串是一种常规形式。相比较而言,现代汉语的平均词长达到1.8个汉字[13],说明现代汉语中长散串的出现概率不会很高。这种差异说明当散串被作为新词发现的对象进行处理时,现代汉语中散串中间极可能存在新词。但是,在中医古文献中,由于散串是一种正常形式,如例1所示,其中存在新词的概率远远低于现代汉语。因此,在中医古文献中发现新词将会困难重重。更为困难的是,在大量低频“指纹语汇”未能成功处理的状态下,如果仅采用姓氏列表、人名常用字表、或者停字表,试图从散串之中发现人名或地名只会导致更多错误。以《诸病源候论》[14]为发现人名的测试实验中,同时使用“姓氏列表+停字表”法,结果发现了文件中未被识别出的所有人名(姓与名),但是,准确率却不足2%。改用“姓氏列表+人名常用字表”法的效果虽然准确率优于停字表方法,但却漏掉了像“赵拱”这样的人名。由此可见,仅依靠人名组合的方法很难有效解决中医古文献中的人名发现问题。因此,必须开阔视野,把人名出现的上下文语境纳入研究范围。

3.2 人名前语境方法 人名前语境指紧邻人名之前出现的各种要素的总称,具体有3种类型:段落首位置、标点符号以及字词。例如下列3种情况“^”表示人名前的具体语境):

由于段落首位和标点符号只是一种分割符号,约束人名出现的力度很低,所以能够直接使用的前语境就只有人名前的语汇,如“弟、臣、士、郡、问、杀、遣、命、迎、问于、名曰、乃令、楚人”等。汇聚这些语汇之后,发现出现在人名前的语汇在语义方面具有一定的共性,大体上可以分为两种类型:表示人的身份出处的名词和表示使人动的动词。构建人名前语境词表之后,结合姓氏词表(排除了个别姓氏如“于、山、水、相、养”等),就可以采用顺序扫描的方式实施“前语境限制法”来发现人名。

“前语境限制法”对人名前语境词表中的语汇高度敏感,词表项目的变化会直接影响到发现人名的正确率。是否能够找到一个适用于所有古文本的前语境词表,尚需进一步验证。无论效果如何,前语境限制法只能发现很少一部分的低频人名,剩余人名还需要从人名之后的语境中得到解决。

3.3 人名后语境方法 跟人名前语境相反,人名后语境指紧邻人名之后出现的语汇集合。从词性和语义方面分析,它们主要是人所能够发出的动作或状态类型的语汇,如“曰、问、答(对)”以及部分功能词如“等、常”。另外,姓氏后接“氏子公王”等情况,虽然在中医古文献中的出现频率不高,也应该算作为后语境要素中的特殊情况,其中的“秦王、张氏、孟子、李公”等还会受到文本时代特征的影响,这种情况需要单独处理。

从计算机自动处理角度分析,采集人名后语境要素,组成人名后语境表之后,在姓氏词表的配合下,就可以采用反向扫描的方式来发现低频人名。在确定的新词发现范围之内,具体实施方法如下(name indicator为后语境要素,first name为姓氏,text为新词发现范围):

这种方法只能处理由2个汉字组成的人名。虽然会存在错误,但跟处理3个汉字组成的人名比较,错误率小。对于由3个汉字组成的人名来说,为了降低识别的错误率,程序中还可以追加“停字表”的方法。

建立后语境表不是计算机程序设计问题,而是一个基于语料库的语言研究问题,需要以人名语汇为中心,提取紧邻人名左右两侧的语汇,统计分析跟人名出现密切相关的项目(即进行相关性检验),最后组成一个人名后语境表。

本研究从正在加工的12部中医古文献着作中以机器辅助人工的方式提取人名的前后语境词语。由于中医古文献中随文使用的人名数量偏低,笔者还查阅了少量其他上古汉语资料。组成的人名后语境表中,除了“曰、问、答(对)”以外,其他有效项目有“学、谏、请、让、死、佐、饿、告、观、言、说、闻、过、忧、害、从、坐”等。有一些后语境要素可能需要延伸至第二个字,如“有言,大惊、对曰、即位、告曰、请曰”。

在新词识别模块中加载人名后语境表之后,运行程序处理《诸病源候论》(包含序),收集处理的结果数据显示,《诸病源候论》中未登陆的人名总计22次,前语境方法正确识别出来3次,后语境正确识别14次,5次未能识别的人名均为无姓氏的人名,如下列两句中的情况(下划线部分为人名):

例5:是以 族 弟 长 互,舌 缩 入 喉。

例6:东海 神 名 阿 明,南海 神 名 祝融,西海神名巨乘,北海神名禺强。

由此可见,后语境表是自动识别低频人名的主要要素。令人遗憾的是,为了17次的人名处理,笔者却付出了高达68次的错误代价。仔细分析发生错误的原因发现,把中医文献中的高频用字如“不、死、过、于、之、者”等纳入后语境要素无助于解决低频人名问题。事实上,“不”字导致的错误数量高达18次,“死”字也引发了9次错误。另外,错误之中,虽然很多汉字用作人名的概率很低,如“肿、胸”等,却依然被错误地识别为人名。这种情况表明,可以在“姓氏+人名后语境”方法中追加“停字表”的方法来过滤掉这些非人名用字。

3.4 停字表法 根据汉语人名的构成特点,人名中包含“脚、手、腹、胸、肿、疔、疮、死、亡、毙”等字的概率极低。如果把这些字收集起来组成一个停字表,那么,在“口 张 胸 闷”等散串的扫描过程中,虽然“张”是合法的姓氏,但是其后的“胸”字会终止扫描过程,从而确保“张胸”继续保持它的散串的形式。

从程序运行过程看,这种方法提前预设了程序扫描过程中的具体项目,避免了机器对无关项目的无效扫描,能够节约时间,并且能够最大限度地提高自动处理的正确率。当然,这种方法的弊端也一目了然。当启用人名常用字表时,其他两种类型就被禁用,会引发一些人名无法识别的风险,而当启用停字表的时候,其他两种类型可用,却可能遭遇扫描数量过多而引发的错误率升高的风险。

从逻辑关系方面分析,停字表跟人名常用字之间具有互补分布的关系。这两种字表是把汉字字符集划分为人名常用字、人名停用字和其他字3种类型,其中人名常用字跟停用字相互对立,两者在人名处理中的作用应该相似。然而,中医古文献是两千多年的资料汇集,人名用字中已经很难找到像现代汉语中那样的时代特征。可以说,大多数汉字都是古代人名用字的选择对象。因此,人名常用字表法可以应用在现代汉语分词系统中,但在处理古代汉语人名时只能使用停字表法。

根据中医古文献料库中的资料分析发现停用字表中的项目具有一些明显的语义与语用特征,表达消极意义的字以及很多自由语素字一般都不出现在人名之中,例如以下几种类型:

1.身体部位类型字:脚、手、腿、腹、胸、脖、颈,等。

2.消极意义的字:疔、疮、疤、癫、痫、肿、胀、死、亡、毙,晕,等。

3.语法功能类型的字:之、乎、者、也、所、不、没、未、勿,等。

启用停字表并适当调整后语境表之后,运行程序的结果显示,《诸病源候论》中未登陆的17次人名全部找到,付出的错误代价为4次。虽然正确率有了大幅度提升,但是依然没有达到实用级别的要求。再次分析发生错误的原因发现,其中的3次错误是前文定义的“指纹语汇”所引发的,如下例中的“毛水”:

例7:肺主皮毛,故余经未伤,皮毛先肿,因名毛水也。

3.5 句式结构限定法 句式结构限定法指根据人名两侧同时出现的语汇进行自动处理的一种方法,本质上是利用人名前后语境中的搭配项目进行人名识别,例如“谓……曰”“有……者”“以……为”等。自然语言状态下,这种情况并不多见,但是在姓氏表和停字表的支持下,一旦遇到,准确率很高。

4 结论

新词发现问题有两种设计和两种解决方案,高频率新词的发现过程可以在统计法主导下取得很好的效果。但是,处理低频率新词,却必须使用新词出现的具体语境。本文综合中医学和语言学知识创建人名前后语境表,把具体语境纳入低频新词的处理过程,并通过程序设计的方式来验证低频人名处理的效果。研究结果显示,人名前后语境要素能够在人名自动处理过程中发挥作用。如果能够把前后语境表、姓氏表、停字表中的要素进一步优化,使其中的项目能够保持较为稳定的状态,那么,这种方法就有可能应用到整个中医古文献的分词之中。由于中医古文献中很少遇到像现代汉语中的绰号、外族翻译人名等情况,所以本研究中没有涉及这些情况。再者,对无姓氏的人名以及对低频率指纹语汇的自动处理也有待于深入研究。