system: [SYSTEM]

user: 3. 自动语法检查系统的实现方法 早期语法检查系统主要是基于字符串匹配(string matching)或模式匹配(pattern matching)，例如，最早广泛使用的语法检查工具Unix Writer’s Workbench [ 5 ] 。由于模式匹配的方法具有较高的信度，因此，在20世纪80年代得到较为广泛的使用。同年代，基于句法分析(parsing)的语法检查也成为自然语言处理的重要方法之一 [ 6 ] ，句法分析所基于的规则主要通过语言学家人工编写实现。采用了该技术的系统包括：Houghton Mifflin公司推出的CorrecText、Aspen软件公司推出的Grammatik、IBM公司的Epistle和Critique，以及LINGER等。但是由于该方法需要占用大量的计算机资源，受当时计算机技术条件的限制，未能获得进一步的发展。Pusack [ 6 ] 指出，如果使用语法分析技术，“哪怕是一个最简单的系统都可能占用一台中型计算机的全部资源”。不过，随着计算机技术的飞速发展，一直以来牵制语法分析技术发展的硬件问题迎刃而解。基于句法分析技术的自动语法检查开始成为主流。可以说，现有语法检查系统几乎全部采用了基于句法分析的技术，只是程度有所不同 [ 7 ] 。例如，Lingsoft公司开发的瑞典语语法检查工具 Grammatifix和挪威语语法检查工具Grammar Checker for Norwegian，以及Open Source团队开发的开源文字处理系统AbiWord 4 中的语法检查模块。 20世纪90年代之后，基于句法分析的语法检查工具在具体实现方式上逐渐多元化。随着大规模语料库的陆续建成，词性赋码工具(如CLAWS)的不断成熟，以及宾州树库的推出及其应用的不断增多，以统计(或数据驱动)为基础的语法分析开始快速发展。由于基于统计方法省时省力，很快受到自然语言处理界的青睐。不过，在语法错误自动检查研究领域，这一发展趋势还不是很明显 [ 7 ] 。 对于自动语法检查实现方法的分类，Naber [ 1 ] 认为自动语法检查的实现主要依靠三种基本方法：基于句法的(syntax-based)、基于统计的(statistics-based)和基于规则的(rule-based)。不过笔者认为，和自然语言处理领域的大趋势一样，这些方法仍旧可以归为两大类：基于规则的方法和基于统计的方法。 3.1. 基于规则的方法 基于规则的方法是自然语言处理领域最为常用的理性主义方法 [ 8 ] ，主要通过研究者内省的方式获得有关输入语言的语法知识，并人工编制形式化规则，以便实现系统对输入语言的自动处理。就自动语法检查来说，基于规则的方法主要表现为：基于正确规则的语法检查和基于错误规则的语法检查。 1) 基于正确规则的语法检查 在基于规则的方法占主导的时代，使用计算机识别并处理书面语语法错误的方法有三种：或采用模式匹配，或使用句法分析器(parser)，或将两者相结合 [ 9 ] 。 模式匹配的理念非常简单。在匹配模式下，所有的模式必须与相对应的搜索空间完全一致，否则匹配失败。这就是最简单的模式匹配，有的研究也称之为“字符串匹配” [ 7 ] 。不过，基于正确模式匹配的自动语法检查非常少见。已有的语法检查研究多是在错误模式匹配的基础上进行的。 基于正确规则的语法检查在自动语法检查研究领域具有重要地位。该方法需要的是一部正确的语法，或者说是一部本族者语法。句法分析器 5 根据配备的语法知识对输入文本做完全的句法分析，每一个句子输出一个树形图。如果语法分析失败，则认为该句输入有误。简单来说，句法分析是将一维的线性串转换为二维结构的一种过程 [ 10 ] ，而实现该过程的计算机程序就是句法分析器。 Holland et al. [ 11 ] 将句法分析器称为“自然语言处理引擎”(NLP engine)，“句子输入之后，句法分析器会将其分解为不同的成分，并与计算语法进行对照，最终输出句子的结构分析结果。根据该结果，我们可以判定该句是否符合语法规则，或符合什么样的语法规则” [ 11 ] 。Schulze [ 12 ] 考察了当时基于句法分析的CALL系统，发现使用最为普遍的句法分析器有一个共同特点，即它们都配置了基于语言学规则的陈述性知识。也就是说，它们的语法和算法是分开的 6 。“所谓语法和算法分开，就是要把语言分析和程序设计分开，程序设计工作者提出规则描述的方法，而语言学工作者使用这种方法来描述语言的规则。……它非常有利于程序设计工作者与语言工作者的分工合作，为面向计算机的语言研究指出了方向” [ 8 ] 。这一理念有利于我们将研究重心放在语言规则的描述上，进一步完备语法知识，提高语法分析的准确率。此外，这样的句法分析器允许研究者采用与之相适应的语法理论，对其知识库进行扩充。 2) 基于错误规则的语法检查 对于语法检查系统而言，模式匹配通常指的是“错误模式”与输入语言错误的匹配。这种“错误模式”是研究者从错误语料中总结出的词或词性搭配错误的规则，并加以形式化描述的结果 [ 13 ] 。有不少语法检查系统是全部或部分基于模式匹配的，例如，Liou [ 14 ] 和Rypa & Feurman [ 15 ] 等。从句法分析的角度来看，句法分析器除了需要做出最基本的合语法性判断，还需要在句法分析结果中提供足够的信息，来说明句子存在什么样的语法错误，错在什么地方，应该怎么修改。Matthews & Fox [ 16 ] 认为，传统的句法分析器所包含的正确的语法规则属于“专家模型”；若想对学习者错误进行检查，还需要加入包含有“学习者中介语规则”的“学生模型”。Leacock et al. [ 7 ] 也认为，语法检查系统中的语法需要有较好的“容错性”，要能够分析含有典型语法错误的句子，并给出足够的诊断信息。综合已有研究可以发现，在语法检查系统实现方法中，“错误规则”和“约束松弛”起到了非常重要的作用。Vandeventer-Faltin [ 2 ] 就曾指出，“错误语法 7 ”是CALL领域十分常用的句法检查技术，而“约束松弛”则可能是错误检查研究中使用最为广泛的技术。 其一，约束松弛。 作为不合语法句子分析中最常用到的技术，约束松弛首先预设的是，语言中存在着各种各样的约束。这些约束条件是语法的一部分，可以判断输入文本是否具有合语法性。简单来说，英语中要求主语和谓语的数要一致，“数”就可以看作是主谓一致的约束条件。输入句法分析器的文本一旦无法满足该约束，分析过程就会终止。为了使分析继续，最终输出对学生有用的信息，我们需要对该约束进行松弛，让分析器将其忽略，直至完成分析。之后，通过查找松弛的约束条件，便可确定错误所在。使用了约束松弛技术的语法检查系统包括：IBM公司开发的Epistle和Critique，Chen & Xu [ 17 ] 的Grammar-Debugger，Vosse [ 18 ] 的荷兰语语法检查系统，以及Catt & Hirst [ 19 ] 的Scripsi等等。 其二，错误语法。 Sanders & Sanders [ 20 ] 将“错误语法”定义为：能反映典型错误句子结构的语法。句法分析器首先调用正确语法对输入文本进行分析，若分析失败则会转向错误语法。错误语法或错误规则必须叠加在正确语法或正确规则的基础之上。使用错误规则的语法检查系统较多。Weischedel et al. [ 21 ] 的德语学习系统是较早采用该技术的研究，主要利用错误规则来检查词序错误。该系统语法规模较小，只有不到两百个词汇，但却证明了用错误规则检查句法错误的可能性。Schwind [ 22 ] 的错误分析、解释系统“EAES”采用错误规则检查三类错误：低层次的句法错误，高层次句法错误和语义错误。采用了错误规则的语法检查系统还有：Yazdani [ 23 ] 的LINGER，Schneider & McMoy [ 24 ] 为美国手语使用者设计的英语学习系统ICICLE，以及Carlberger et al. [ 25 ] 的瑞典语语法检查系统Granska等等。 3) 基于规则的方法：优势与问题 基于正确规则的句法分析方法之所以被语法检查领域的研究者持续关注，是因为该方法体现了两大优势：第一，可以检查出句子中长距离依存关系错误，而不仅仅局限于局部错误；第二，如果语法足够完备，则能够分析各种类型的句子，而不需要预置其他信息。不过，构建一部完备的语法绝非易事。这也就意味着，一旦输入的句子结构是分析器没有涵盖的语言知识，句法分析器就无法输出句子结构的分析结果。因此，构建一部覆盖所有语言知识的语法，应该是不断追求的目标。 基于错误模式匹配的语法检查之所以还在发挥作用 [ 26 ] ，是因为该方法有三大优势：第一，部分错误模式的总结和提取较为容易，且模式匹配的实现较为容易；第二，对于部分错误来说，该方法查错准确性高，可信度好。错误模式一旦与输入文字相匹配，则可说明输入的文本有误；第三，系统运行速度快。 不过，错误模式匹配也具有一些无法克服的问题：第一，所关注的语言错误太过具体化，而且无法涵盖学习者语言中的其他问题，因此，检查中可能会遗漏很大一部分语法错误；第二，模式匹配仅考虑输入语言在线性顺序上的问题，而无法关注语言的层次性或结构方面的错误；第三，即便是线性顺序上的语法错误，仅凭模式匹配也无法解决，如主谓一致问题。显然，对于这类错误，采用一例一错的模式匹配反而是最不经济的办法。 和模式匹配相类似，基于错误规则的句法分析查错准确率高。只要预先将错误规则写入语法，句法分析器就能检查到相关错误。同样，约束松弛的查错准确性也比较高。不仅如此，约束松弛技术还能够确保句法分析器顺利完成整个句子的句法分析 [ 2 ] ，语法检查系统可以根据分析过程中的约束松弛记录，来抓取句子错误信息。此外，约束松弛还免去了为语法添加新规则的麻烦，也避免了规则添加所导致的其他问题。 但是，在考虑采用错误规则和约束松弛技术时，需要注意三方面问题：第一，学习者错误很难穷尽。为了尽可能覆盖所有错误，我们必须编写足够多的规则，而有些错误规则的编写较为困难；第二，错误规则的条件太过于具体，一条规则只能对应一类错误，研究者以有限的时间和精力难以完成。Murphy，Krüger & Grieszl [ 27 ] 指出，“颗粒度细化的唯一方法就是制定非常具体的规则，而过度具体化的错误规则只能覆盖非常少量的语言错误。所以，设计错误规则的核心任务就是找一个合适的度。这个度既要足够宽泛，能让同一条错误规则尽可能覆盖多个错误；又要足够具体，以便给用户详细的反馈”。Sanders [ 28 ] 更是直言，“一部错误语法至少应该和分析器配备的主体语法规模相当”。这个任务在短时间内是不可能完成的。第三，如果采用约束松弛技术，那也就意味着系统搜索空间的增大，可能造成过度生成的问题。因此，在设计约束松弛的时候，还要考虑如何限制结构过度生成的问题。 3.2. 基于统计的方法 在自然语言处理领域，基于统计的方法由来已久。不过，具体到自动语法检查的实际应用领域，直到上个世纪90年代，基于统计的方法才开始逐渐应用于研究当中。该方法主要依赖于大型语料库来获取语法知识，系统通过对输入文本的关键特征进行统计或计算，然后通过句子成分的权重来判断句法关系，实现语法检查的目的。 基于统计的语法检查系统的实现可以从两个视角来考察：一是分类方法(classification approach)；二是语言模型(language modeling)的方法 [ 7 ] 。 1) 基于分类方法的语法检查 基于分类的方法本质上属于机器自动学习的范畴，而大多数基于分类的语法检查系统采用的是有指导的学习方式。其主要思想是：首先使用事先定义好的类别或范畴标记对文本中的实例进行人工标注；标注好的文本作为训练数据对分类器进行训练；之后，机器根据标注好的训练数据进行自动学习，获得某一类词，如介词的用法模型，包括一些上下文特征。在实际使用中，计算机会根据学习得到的知识对新输入的文本进行分类，计算新文本中介词的用法是否与训练数据提供的特征相近，如果差距过大，则说明可能有错。 不同研究所使用的分类器和训练数据有所不同。对于分类器而言，主要有：最大熵分类器，支持向量机，以及决策树等。早期的研究主要使用的决策树(如Knight & Chander [ 29 ] )，而现在使用较为广泛的则是最大熵分类器(如Chodorow et al. [ 30 ] 等)。从训练数据的角度来看，有的研究采用的是不含任何语法错误的正确文本(well-formed text) (如Gamon et al. [ 31 ] ；Bergsma et al. [ 32 ] )，有的使用的则是含有语法错误的文本(ill-formed text)或是经过错误标注的文本(如Han et al. [ 3 ] )。 2) 基于语言模型的语法检查 统计语言模型就是表示语言基本单位的分布函数 [ 33 ] 。基于统计的语言模型将自然语言近似地看成随机过程，以概率形式对语言进行描写，并做进一步的定量分析，发现蕴藏其中的规律和特征。这种方法是建立在大量语料的统计基础之上的，能够较为细致地从概率特征方面对语言进行描写 [ 34 ] 。 基于统计语言模型的语法检查理念较为简单。对于统计语言模型来说，语言中的任何一个句子(符号串)都是可以接受的，只是接受的可能性(概率)不同。因此，在实际操作中，研究者需要为合语法的句子设定一个最低阈限，输入文本一旦低于这个值就会被判定是错误的。 将语言模型运用到语法检查研究始于Atwell [ 35 ] 。他在研究中提出了将词性赋码工具CLAWS用作语法检查工具的可能性。其主要思路是：首先，使用CLAWS为文本标注词性码；其次，提取核心词及其左右邻词的词性标注码串，并计算这些标注码共现的概率；如果低于系统设定的阈值，则认为该处有语法错误。有的研究采用了语言概率模型。Nagata et al. [ 36 ] 的研究以日本的英语学习者的冠词错误为目标，为了实现错误检查的目的，他们以不同上下文特征中冠词的条件概率为基础，通过概率模型呈现了冠词使用的各种情况。还有的研究用到了N元组模型。例如Lee & Seneff [ 37 ] 的研究就采用N元组模型来生成最佳N元组集，以帮助检查并纠正冠词、动词的时态体等错误。 3) 基于统计的方法：优势与问题 其实，不论是基于分类的方法，还是基于语言模型的方法，它们在研究中的广泛使用都说明，最近几年基于统计的方法开始备受关注。究其原因，主要是该方法克服了基于规则方法的几点不足：第一，避免了手工编写规则的耗时耗力；第二，避免了基于规则的系统所面临的容错性问题。因为对于基于统计的系统来说，输入文本不论对错只有概率上的不同。 不过，基于统计的方法也有自身较难克服的问题：第一，最突出的就是数据稀疏的问题，即无法获得足够多的人工标注语料来训练系统。Leacock et al. [ 7 ] 指出，基于统计的方法在自动语法检查研究中的使用还不是很广泛，这可能和数据稀疏问题有很大关系，因为语言错误的人工标注执行起来困难较大，而通过少量包含错误标注的语料对系统进行训练，又不足以建立一个可推广的模型。Yarowsky [ 38 ] 将该问题称为“知识获取瓶颈”。不少研究者对这一问题的解决办法进行了探索。有的研究者采用人工引入错误的语料(如Foster & Andersen [ 39 ] 等)；有的研究者则采用机器翻译的方法来解决该问题，例如，Lee et al. [ 40 ] 就探讨了机器翻译译文是否可以有效替代学习者文本作为训练语料的问题。此外，还有的研究者转而寻求网络资源的帮助(如Yi et al. [ 41 ] ；Bergsma et al. [ 32 ] 等)。另外一些研究者则试图通过技术手段来解决这个问题，例如，采用半指导的学习和无指导的学习(如Chodorow & Leacock [ 42 ] )等。这些新的尝试在不同程度有助于问题的解决，但也势必带来其他一些问题。第二，基于统计的方法在处理长距离语言约束时可能会存在问题 [ 7 ] ，这或许是“基于统计的方法在语法检查研究中使用较少” [ 7 ] 的原因之一。第三，基于统计的方法对语法错误的判断取决于研究者对阈值的设定。这会导致两方面的问题。首先，阈值设定的合理性问题还需要进一步论证。其次，不论阈值是否合理，在实际语法检查中，都会有“一刀切”的问题，系统可能无法区分不常用但正确的句子和不常用也不正确的句子。