汉语词法分析和句法分析技术综述

第一届学生计算语言学研讨会(SWCL2002)专题讲座
汉语词法分析和句法分析技术综述
北京大学计算语言学研究所
中国科学院计算技术研究所
liuqun@ict.ac
引言
本文主要介绍一些常用的汉语分析技术。
所谓语言的分析,就是将一个句子分解成一些小的组成部分(词、短语等等)并了解这些部分之间的关系,从而帮助我们把握这个句子的意义。
语言的研究,一般而言存在四个层面:词法层、句法层、语义层和语用层。
同样,语言的分析也存在四个层面:词法分析、句法分析、语义分析和语用分析。
本文主要介绍汉语的词法分析和句法分析技术。这两种技术是汉语分析技术的基础,而且已经发展得比较成熟。文中也会少量提及语义层面和语用层面的一些问题,但不会做深入的探讨。
汉语是一种孤立语(又称分析语),与作为曲折语和黏着语的其他一些语言相比,汉语在语法上有一些特点,仅仅从形式上看,这种特点主要体现在以下几个方面:
1. 汉语的基本构成单位是汉字而不是字母。常用汉字就有3000多个(GB2312一级汉字),全部汉字达数万之多(UNICODE编码收录汉字20000多);
2. 汉语的词与词之间没有空格分开,也可以说,从形式上看,汉语中没有“词”这个单位;
3. 汉语词没有形态上的变化(或者说形态变化非常弱),同一个词在句子中充当不同语法功能时,形式是完全相同的;
4. 汉语句子没有形式上唯一的谓语中心词。
这些特点对汉语的分析造成了一定的影响,使得汉语分析呈现出和英语(以及其他一些语言)不同的特点。
不过也不能过分夸大这种不同。我认为,那种以为汉语完全不同于英语,因此有必要重新建立一套分析体系的想法是没有道理的。从现有的研究看,汉语分析所使用的技术和其他语言分析所使用的技术并没有本质的不同,只是应用方式上有所区别(主要体现在词法分析方面)。而且从应用的效果看,没有证据表明,这些技术用来分析汉语比用来分析英语效果更差。
本文结合我们自己的一些工作,比较全面的介绍一下汉语词法分析和句法分析中所使用的各种技术。
1 汉语词法分析
前面说过,汉语在形式上,并没有“词”这一个单位,也就是说,汉语的语素、词、短语、甚至句子之间(词也可以直接成句,称为独词句),都没有明确的界限。
这是不是说,汉语就没有必要做词法分析,可以直接做句法分析呢?
实际并不是这样。因为如果这样做的话,会导致句法分析的搜索空间急剧膨胀,以致无法承受。实际上,根据我们的统计,未定义词在汉语中真实文本中所占的比例并不大,可见绝大部分词都是可以在词典中到的,如果这些词都要从头开始分析,势必给句法分析带来太多的负担。
不过汉语的词法分析与英语(或其他屈折型语言)的词法分析有很大不同。就英语来说,采用确定的有限状态自动机就已经能基本解决问题,而对于汉语词法分析来说,需要更为复杂的计算工具。就问题的复杂性而言,我认为汉语的词法分析大致相当于英语的词法分析和基本短语分析之和。
1.1 汉语词法分析的任务
汉语词法分析包括一下几个任务:
1. 查词典
2. 处理重叠词、离合词、前后缀
3. 未定义词识别
a) 时间词、数词处理
b) 中国人名识别
c) 中国地名识别
d) 译名识别
e) 其他专名识别
4. 切分排歧
5. 词性标注
1.2 数据结构:词图(Word Graph
对于一个汉语句子,如果把两个汉字之间的间隔作为结点,把一个汉语词作为连接两个结点的有向边,那么我们就可以得到一个无环有向图:
根据这个数据结构,我们可以把词法分析中的几种操作转化为:
1. 给词图上添加边(查词典,处理重叠词、离合词和前后缀);
乙炔雌二醇
2. 寻一条起点S到终点E的最优路径(切分排歧);
3. 给路径上的边加上标记(词性标注);
1.3 词典查询与重叠词、离合词和前后缀的处理
词典查询主要考虑分词词典的数据结构与查询算法的时空消耗问题。
在词典规模不大的时候,各种词典查询算法对汉语词法分析的效率整体影响并不大。不过当词典规模很大时(几十万到上百万数量级),词典查询的时空开销会变得很严重,需要详细设计一个好的词典查询算法。
(孙茂松,2000)一文比较详细的总结了汉语词法分析中使用的几种词典查询算法。(Aho&Corasick,1990)提出的算法(简称AC算法)实现了一种自动机,可以在线性的时间里用一组关键词去匹配一个输入字符串,(Ng&Lua, 2002)一文对AC算法中提出的自动机(实际上就是一种词典索引的组织方式)进行了改进,可以快速实现输出汉语句子的多种切分候选结果。对词典查询算法感兴趣的同学可以去查阅这几篇文章,这里不再做详细的介绍。
汉语重叠词的重叠方式有很强的规律,处理起来并不困难。例如汉语的双字形容词的重叠现象主要有三种:AABB、ABAB、A里AB。遇到这种形式的词,只要还原成词语原形AB并查词典即可。
汉语词的前后缀不多,处理也不困难,通过简单的规则,即可这里不做介绍。
离合词的处理稍微复杂一些。现在一般的词法分析器都没有对离合词进行处理,仅仅把分开的离合词作为两个词对待,实际上这样做是不太合理的。离合词中,通常有一个语素的自由度比较差,可以通过这个语素触发,在一定的上下文范围内查另一个语素,即可发现离合词。
1.4 不考虑未定义词的切分排歧
张在元
1.4.1 切分歧义的分类
不考虑未定义词的切分排歧问题,也就是我们一般说的切分问题。
超低能一般把切分歧义分为两种结构类型:交集型歧义(交叉歧义)和组合型歧义(覆盖歧义)。
交集型歧义(交叉歧义):“有意见”:我对他有意见。总统有意见他。
组合型歧义(覆盖歧义):“马上”:我马上就来。他从马上下来。
其中交集型歧义占到了总歧义字段的85%以上。
阿里木事迹
实际语料中出现的情况并不都这么简单,有时会出现非常复杂的歧义切分字段。例如:
公路局正在治理解放大道路面积水问题
其中“治理”“理解”“解放”“放大”“大道”“道路”“路面”“面积”“积水”都是词,考虑到这些单字也都可以成词,这就使得这个句子可能的歧义切分结果非常多。
1.4.2 切分排歧算法概述
这里我们介绍几种最主要的歧义切分算法:
1. 全切分:全切分算法可以给出一个句子所有可能的切分结果。由于全切分的结果数随着句子长度的增加呈指数增长,因此这种方法的时空开销非常大;
2. 最大匹配:从左到右或从右到左,每次取最长词,得到切分结果。分为前向最大匹配、后向最大匹配和双向最大匹配三种方法。很明显,最大匹配法无法发现组合型歧义(覆盖歧义),对于某些复杂的交集型歧义(交叉歧义)也会遗漏;
3. 最短路径法:采用动态规划方法出词图中起点到终点的最短路径,这种方法比最大匹
配法效果要好,但也存在遗漏的情况;
4. 老家的树交叉歧义检测法:(王显芳,2001-1)给出了一种交叉歧义的检测方法,可以快速给出句子中所有可能的交叉歧义切分结果,对于改进切分的效率非常有效;
5. 基于记忆的交叉歧义排除法:(孙茂松,1999)考察了一亿字的语料,发现交集型歧义字段的分布非常集中。其中在总共的22万多个交集型歧义字段中,高频的4,619个交集型歧义字段站所有歧义切分字段的59.20%。而这些高频歧义切分字段中,又有4,279个字段是伪歧义字段,也就是说,实际的语料中只可能出现一种切分结果。这样,仅仅通过基于记忆的方法,保存一种伪歧义切分字段表,就可以使交集型歧义切分的正确率达到53%,再加上那些有严重偏向性的真歧义字段,交集型歧义切分的正确率可以达到58.58%。
6. 规则方法:使用规则排除切分标注中的歧义也是一种很常用的方法。规则的形式定义可以非常灵活,如下所示:
@@ 的话(A+B, AB)
CONDITION FIND(R,NEXT,X) {%X.ccat=~w} SELECT 1
CONDITION FIND(L,NEAR,X) {%X.yx=|相信|同意} SELECT 1
CONDITION FIND(L,NEAR,X) {%X.yx=如果|假如|假设|要是||如若} SELECT 2
OTHERWISE SELECT 1
可以看到,通过规则可以在整个句子的范围内查对于排歧有用的信息,非常灵活。规则方法的主要问题在于知识获取。如果单纯依靠人来写规则,无疑工作量太大,而且也很难总结得比较全面。也可以通过从语料库学习的方法来获取规则,如采用错误驱动的基于转换的学习方法。
7. n元语法:利用大规模的语料库和成熟的n元语法统计模型,可以很容易将切分正确率提高到很高的正确率。(王显芳,2001-2)和(高山,2001)都说明,使用三元语法,在不考虑未定义词的情况下,就可以将切分的正确率提高到98%以上。
8. 最大压缩方法:(Teahan et. al. 2000)提出了一种基于最大压缩的汉语分词算法。这是一种自适应的算法,其基本思想是,首先用一个标注语料库进行训练,在实际标注过程中以最大压缩比为指导来决定切分方式。这种方法的主要优点是其自适应的特定,可以切
分出一些词典中没有出现的词。
上面这些方法中,前四种方法不需要人工总结规则,也不需要语料库;规则方法需要人工总结规则,比较费时费力;其他几种方法需要大规模的切分语料库为训练的基础。好在目前这种语料库已经可以得到,如(俞士汶等, 2000)。
1.4.3 n元语法
从上面的介绍可以看到,在有大规模语料库切分语料库的情况下,采用简单的n元语法,就可以使切分正确率达到相当高的程度。所以我们在这里简单介绍一下n元语法在汉语分词中的应用。首先简单介绍一下n元语法的原理。
n元语法的作用之一,是可以预测一个单词序列出现的概率。n元语法假设一个单词出现的概率分布只与这个单词前面的n-1个单词有关,与更早出现的单词无关。这样,为了描述这个概率分布,我们需要使用一个n维数组,这个数组中每一维长度为单词的个数m,这个数组中元素的个数为mnqlb-06,其中元素的含义为:在单词串后面出现单词的概率,也就是
假设我们的单词表中有50,000个单词,如果我们使用一元语法,就是说,假设每个单词出现的频率与其他单词无关,那么所使用的参数实际上就是每个单词出现的词频,参数个数等于50,000。如果我们使用二元语法,就是说,假设每个单词出现的频率只与上一个单词相关,那么所使用的参数就是一个单词后面出现另外一个单词的转移概率,参数个数为50,000×50,000。如果采用三元语法,参数的个数将是50,000的三次方。实际上,由于很多的单词序列在实际的语料库中并不会出现,所以实际上有效的参数数量会少的多。不过,如果这些在训练语料中没有出现的单词序列出现在测试文本中,会导致该文本的预测概率为0。为了避免这种情况,我们就要采用某种策略将这些为概率为0的单词序列赋予一个很小的猜测值,这种策略叫做数据平滑。由于数据稀疏问题的大量存在,数据平滑在任何一种统计模型中都是必须采用的。数据平滑有很多种技术,这里不再一一介绍。
n元语法是一种非常成熟的语言模型,而且在自然语言处理中被证明是非常有效的。Internet上有现成的n元语法的源代码可以下载(如The CMU-Cambridge Statistical Language Modeling toolkit),而且即使自己编写,也并不太复杂。

本文发布于:2024-09-22 02:07:52,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/379367.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:分析   歧义   方法   词典   词法   单词   出现   算法
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议