zoukankan      html  css  js  c++  java
  • 中文文本校对

    一、研究现状:

    【国外】

    文本校对最初是英文自动校对。其发展到今天,它的技术也相对成熟,并且出现了一批实用的商业系统。由于英文等拼音文字的文本中词与词之间有明显的分隔符,所以它们的自动校对基本以词的校对为核心在两个层次上进行:
    ①非词错误[3](non-word error)。即字串不是词典中存在的词。例如“the”错成“teh”。
    ②真词错误(real-word error)。即虽然字串是词典中的词,但它与上下文搭配不当(这个词不应该出现在这里)。例如“from”错成“form”。这里的搭配不当包括语法、语义等许多方面。
    早期的英文非词错误的侦错方法受到计算机硬件条件的限制,多建立在字母的 N 元模型上,这些方法试图通过发现罕见的字母接续(例如 shj )来定位有拼写错误的词。随着计算机存储能力和计算能力的迅速增长,非词错误的侦错方法基本都转移到查字典上。字典里有没有的字母串被认为有错。不依赖上下文的非词错误纠错称为孤立词纠错(isolated-word error correction),它的任务是为非词字母串寻找可能的正确候选词,并对这些候选进行排序。选择候选的主要依据是候选词和非词字母串的相似程度。具体的方法可以分成以下几大类:
    1、 最小编辑距离法
    2、 相似编码(similarity key)法。
    3、 纠容错能力的自动机方法
    4、 N 元模型的方法
    5、 基于规则的方法[5]
    6、 概率的方法
    7、 神经网络的方法等
    非词错误的校对方法比较成熟,而且在英文文本错误中,非词错误的比例占相当大,因此英文校对系统的实用性容易得到保证。
    真词错误在文本错误中占的比例虽然不大,但其处理难度则比非词错误高得多,由于真词错误的校对必须依赖上下文,所以它又称为上下文相关的词校正(context-dependent word correction)。真词错误的校对方法有两大类:基于规则的方法基于统计的方法。英文校对中基于规则的方法占很大的比例。它主要有以下三种:

    1、 基于接受的技术
    2、 基于松弛的技术
    3、 机遇期望的技术

    早期的基于统计的真词错误校对方法主要使用前面讲的 N 元查错模型。英文中通常使用的N元模型[4]主要有词和词性的二元、三元模型,中文里还有汉字的二元、三元模型。
    以词的三元模型为例,设句子S= W1 W2...Wn,其中Wi是词。当试图判断Wi是否有错时,就是要看不等式P(Wi|Wi-2Wi-1)<a 是否成立。其中 a 为预先设定的阈值。如果不等式成立,则认为 Wi (或其附近)有错。不等式中条件概率可以用极大似然法得到:

    P(Wi| Wi-2Wi-1)=freq(Wi-2Wi-1 Wi)/freq(Wi-2Wi-1)
    其中 freq 表示词串在语料库中出现的次数,实际使用中通常要通过平滑(折扣或插值)或聚类(词群,词间字模型)等方法解决数据稀疏的问题。一个简单的插值公式如下:

    P(Wi| Wi-2Wi-1)=a×Pr(Wi| Wi-2Wi-1)+b×Pr((Wi| Wi-1))+c×Pr(Wi)
    其中,0<a,b,c<1,a+b+c=1,Pr 表示用最大似然法估计的概率值。

    在一些使用词性N元模型查错的方法中,由于一个词的词性可能有多种,因此通常在查错判断之前不得不额外引入自动词性标注的过程。而目前的自动词性标注技术采用的语言模型也是词性的 N 元模型,它的基本任务就是寻找一条标记间接续强度最大的标记路径。这时,再使用与自动标注过程相同的依据进行查错无疑会掩盖掉许多错误。因此我们认为在目前的技术水平下,自动标记过程在校对中应该用其它方法解决。

    【国内】

    汉语的特点决定了中文自动校对的难度比英文更大:
    首先,中文文本中词与词之间没有明显的分隔符,这意味着中文自动校对要想从字一层上升到词一层就必须引入自动切分过程。而中文自动切分本身就是一个很困难的课题,何况文本中的错误还会对切分产生各种干扰。

    其次,非词的概念在中文校对中几乎没有意义。在中文自动切分中,不能和相邻汉字形成两字或多字词的汉字被看成单字词输出。因此英文中的非词字串在中文中仅仅指不能单独成词且分词后落单的汉字。例如单独出现在句子中的“蝴蝶”中的“蝴”字,在全部6700多汉字中不可以单独成词出现的汉字有2300个左右,但是它们出现的频率非常低。另外,中文的灵活性比英文大得多,这不仅给中文自动校对本身带来很大的困难,也使得在英文校对中基于规则的方法在中文自动校对中难以施展。

    同时,国内关于中文文本校对的研究起步也比较晚。在上世纪90年代初,国内的研究人员开始探索中文自动校对的可行性。初期的主要思想还是从国外引入的。但由于汉语本身的特点,英文的研究方法不能完全适用。目前中文文本自动校对的研究总体上还处于刚起步的阶段,采用的方法多是字、词级别上的统计方法,也有一些语义级上的探讨。使用的模型较简单,利用的语言学知识也不丰富。
    目前多数采用字、词或词性的N元模型进行查错,这些方法的召回率在70%左右,准确率在30%左右。这些方法包括:

    1、啄木鸟系统。
    啄木鸟系统是出现得比较早的中文自动校对系统,该系统的自动查错方法的出发点是文本中的绝大多数错误都导致切分后的落单单字词。因此它首先对句子分词并定位落单单字词,然后根据落单单字词的词频和它与前后两个汉字的接续强度给该单字词打分,最后将得分与一个预先设定的阈值比较来判断该单字词是否为错字。评分公式为S=f(fwd, f1, f2),其中fwd为单字词的词频, f1, f2为以互信息表示的落单字与前后汉字的接续强度。该系统的召回率在70%左右,准确率只有2.5%。该方法本质上还仅仅是字一级的校对方法。
    2、张照煌的近似字集代换法。
    张照煌首先根据四种汉字的相似类型:①同音或近音②字形相近③字义相近④输入编码相近,生成各个汉字C的相似字集cfs(C)。这与英文中的混淆集概念类似。设要检查的输入句子S= C1, C2,..., Cn,其中Ci为汉字。该方法将句子中的每个汉字都用其近似字集中的汉字依次代换,得到
    cfs(C1)|×|cfs(C2)|×...×|cfs(Cn)|
    个候选字串,然后用词间字二元模型和词性二元模型对各个字串进行评分,并考虑非原字扣分,最后选出得分最高的字串,其中的汉字与原句子中对应汉字不同的地方被认为有错。这是一个查错纠错一体的方法。它的召回率为76.64%,准确率为51.72%。具体的算法还利用动态规划降低时间和空间复杂度。

    3、使用前后件规则来解决部分句法错误。(对固定搭配比较有效) 
    这些规则形如:
    <前件><后件1>...<后件n>
    其中<前件>是规则的激活模式。在校对过程中,如果一个句子中前件模式匹配成功,则要求至少有一个后件模式匹配成功,否则句子存在句法错误。例如句子“空想社会主义者之所以是空想社会主义者,因为在资本主义...” 中,连词“因为”应该是“是因为”,此时规则为:<之所以><是因为>。
    4、模糊匹配。
    在中文中,常常有这样的错误,如“一文不名”错成“一文不明”,“生产关系”错成“手产关系”,“忠心耿耿”错成“忠耿耿”等。这类错误的特点是一个多字词中出现错字、缺字或多字等错误,通过长词的模糊匹配可以非常准确地把这些
    错误定位出来。目前,虽然有不少方法提到了模糊匹配的概念,但还没有人给出具体的高效算法。


    前面提到的中文自动校对方法的主要问题在于:
    ①语言模型简单。大多数方法使用字、词或词类n元语言模型。但是n元模型只反映局部的语言限制,而不包括长距离的语言限制。
    ②多数方法都是只使用字、词或词类的n元模型中的一种模型,或孤立地分别使用其中的几种模型,没有很好地融合成一体。

  • 相关阅读:
    [转]用异或交换两个整数的陷阱
    线索化二叉树
    [转]Socket编程中,阻塞与非阻塞的区别
    两个链表的归并
    [转] std::string and stl 算法
    类图
    leetcode 答案
    about raw socket
    54. Spiral Matrix【数组】
    矩阵乘法问题的实现
  • 原文地址:https://www.cnblogs.com/mo-wang/p/4449492.html
Copyright © 2011-2022 走看看