倒排参考句型语言分析方法.pdf

上传人:r5 文档编号:974767 上传时间:2018-03-22 格式:PDF 页数:30 大小:1.59MB
返回 下载 相关 举报
摘要
申请专利号:

CN200810005364.3

申请日:

2008.01.28

公开号:

CN101499056A

公开日:

2009.08.05

当前法律状态:

实审

有效性:

审中

法律详情:

实质审查的生效IPC(主分类):G06F 17/20申请日:20080128|||公开

IPC分类号:

G06F17/20

主分类号:

G06F17/20

申请人:

徐文新

发明人:

徐文新

地址:

330031江西省南昌市红谷滩新区学府大道999号南昌大学前湖校区中文系

优先权:

专利代理机构:

代理人:

PDF下载: PDF下载
内容摘要

倒排参考句型语言分析方法是一种基于参考句型的语言分析方法,可用于自然语言处理、智能信息处理等方面。方法是建立语言的基本句型S的数据库,包含处理信息,给出S的字符元数k;给出字段j;句型或j的地址为d、或给出句型编号n。以所有字符元Pi作为关键词,对每个字符元Pi,列出包含该字符元Pi的S或其j值的地址d、或编号n,得到倒排表。设P为需要分析的句子T的字符元,根据倒排表P后的d、或n,对数据库相应S的j进行累计标示,得到各基本句型S的j值。j=k的句型S为T的参考句型,参照这些句型的相关信息对T进行处理,一般优先参考j即k值大的句型,但应考虑其它因素。如果S和T中有重复字符元,情况会相对复杂。

权利要求书

1.  一种语言分析方法,其特征在于,包括以下步骤:
a.建立某种语言的基本句型(含词语搭配、短语、词组、词语,下同)S的数据库,给出处理信息;给出各基本句型的字符元数k、或给出剔除重复后的字符元数h、或同时给出k和h、或给出k和字符元重复次数g、或给出h和g、或给出k和h和g;给出j;句型或j的地址为d,或给出句型编号n;
b.列出该语言此种应用的所有字符元Pi(i=1、2、3…w),对每个字符元Pi,均列出包含该字符元Pi的所有基本句型或j的地址d,或句型编号n,得出倒排表;
c.设需要分析的句子为T,用T的字符元Pr(i=1、2、3…m),根据倒排表Pr的d,或n,对基本句型数据库相应记录的j进行累计标示,得到各基本句型S的j值;
d.通过比较各句型S的j与k、h或者以及g的大小,筛选出T包含、可能包含其全部字符元、部分字符元的S,对S与T的字符元进行比较,剔除不合要求的S,一般优先选择k或h或j值大的句型作为基础句型,参照这些句型对T进行分析处理。

2.
  按照权利要求1所述的方法,其特征在于:累计标示后,如果j值能准确反映S与T的字符元交集的大小,将j=k的句型S作为参考句型,将0<j<k的句型S作为容错句型,将j=m的句型S作为可能的引文,从这些句型中择优选出基础句型,分析处理T;如果累计标示后,j值不能准确反映S与T的字符元交集的大小,适当放宽查询条件得到R1,从R1中择优选出基础句型,分析处理T。

3.
  按照权利要求1所述的方法,其特征在于:语音输入中,累计标示,剔除冗杂、结构不合的记录后,优先选择k或h或j值大的句型作为基础句型,但综合考虑频率、语法、文体、系联、关联信息多种因素及各因素的权重做选择。

4.
  按照权利要求1所述的方法,其特征在于:用一个数据Ln的bit标记S的文体倾向,分析生成某语句的S的Ln,得到该语句的文体倾向Ls;总计一节文字的S的Ln或语句的Ls,分析得出该段文字的文体倾向Lp;如果满足Ls or Lp=Lp或其等价式,则该句的文体倾向符合该节的文体倾向,在备选语句中可给予优先保留;生成后续语句时,优先选择Ln接近Lp的基础句型;机器翻译中,同时给出原始语言S的Ln与目标语言S的Ln,利用Ln分析当前文件的Lp,用Ls、Ln同Lp做比较,评价已生成的备选语句、辅助后续语句生成。

5.
  按照权利要求1所述的方法,其特征在于:将引文资料进行组织存贮,再将引文资料的篇名、首句、精华之句S收入基本句型库,并给出引文信息;当T与某句型S、或按T生成的语句与S的对应信息相同或相近时,自动或接受用户提示,根据引文信息,将前后文读出,供用户确认。

6.
  按照权利要求1所述的方法,其特征在于:给出基本句型的关联词、关联信息,处理概念之间的同义近义关系、并列排斥关系、包含关系、属性关系,或用于处理语法关系、语言的形态变化,辅助对T的分析处理。

说明书

倒排参考句型语言分析方法
技术领域
本发明是基于参考句型(含词语搭配、短语、词组、词汇)的语言分析方法,可用于自然语言处理、智能信息处理等方面进行语句分析、语义比较。
背景技术
自然语言处理、智能信息处理需要进行语句分析、语义比较。更受关注的是,提高拼音串的分词准确率已成为提升汉语语音输入水平的关键。汉语拼音串自动分词的算法多种多样,如:最大匹配法(MM)、最少分词词频选择法(FWF)和逐词遍历法。根据扫描方向的不同,最大匹配法又分为正向最大匹配法(FMM)和反向最大匹配法(BMM)。
但目前实行的分词方法准确率不能满足应用需要,提升分词准确率和速度需要新的算法。本人在中国申请号200410067258.X的“质数代换字符串检索技术”修改文本、国际申请号PCT/CN2005/001493文本中,提出对字符串按字符元用质数代换,以检索关键词T的字符元的质数乘积Ft值为被除数,以数据库基本句型Sn的字符元的质数乘积Fn值为除数,进行除法运算,如能整除,则该句型Sn为T的可参考句型,称为“逆检索”,形成基于参考句型的语言分析方法。但“质数代换字符串检索技术”的速度不能满足语言处理的需要,本人在中国申请号200510023383.5的“位标记字符串检索技术”修改文本、国际申请号PCT/CN2005/001642文本中,说明了用“位标记字符串检索技术”进行快速预选的方法,使基于参考句型的语言分析方法切实可行。作为一种变通的方法,也可利用倒排文件,进行基于参考句型的语言分析。
发明内容
语音输入、机器翻译、搜索引擎、智能信息处理需要进行语句分析、语义比较,目前使用的是分词方法,本文件公开的是基于参考句型的语言分析、语义比较方法,是较“分词”方法高一层面的语言分析方法,但优先权文件沿用了通常的术语,称为“倒排参考句形分词技术”,现称为“倒排参考句型语言分析方法”。下面围绕汉语语音输入中转换拼音串为汉字串的过程,说明:1.基于参考句型的语音输入算法的基本原理。2.用倒排参考句型方法进行语言分析的一般步骤。3.倒排参考句型语音输入方法。倒排参考句型语言分析方法的许多方面与利用“位标记”“质数代换字符串检索技术”进行语言分析是相同的,可以互相参考。如果把其它语言的音标符号看作汉语拼音,单词、短语、句型等看作汉语的词语、短语、句型等,其他语言各方面的应用也可参照实施。
1.基于参考句型的语音输入算法基本原理
A.语言协同现象与基本句型提炼
与其它语言一样,汉语语句的总数是难以穷尽的,至少就目前的技术水平而言,在普通微机,不可能列出足够数量的句子,实现瞬时响应,找到拼音串对应的句子。当然,句子由词语构成,如:“他明年六月毕业”可分解为“他”“毕业”“明年”“六月”,词语数量是有限的,《现代汉语词典》收“语词”约60,000条,但词语存在同音现象。语音输入中需要对语音串进行正确切分,并在同音词中作出合乎语境的选择。
汉语有400多个无调音节,常用汉字有5000-7000个,平均每个音节对应10多个常用汉字,有的音节则对应上百个汉字。单独给出一个音节“xue”、或“sheng”,不能确定其意义及所指的汉字,但“xuesheng”两个音节连用,则意为“学生”,这里“xue”与“sheng”起了“互证”作用,可称为语言的“协同现象”。汉语2个音节排列数约为400*400=160,000,汉语语词60,000条不都是双音节词语,但汉语双音节中一方面存在“有音无义”现象,如,“rexiang”,一方面存在“同音多词”现象,如:音为“shixian”的词语有“实现、事先、失陷、视线、时限、时鲜、时贤”,音为“lixiang”的词语有“理想、里巷”。不过,如果有人说“shixianlixiang”,我们会理解为“实现理想”,而不会理解为“视线里巷”,这里“shixian”与“lixiang”起了“互证”作用。总之,音节越多,语义越确定。对于汉语来说,三音节、四音节中,“同音多词”或“同音多义”的概率越来越少,并且出现大量“有音无义”现象。正是由于三音节中“有音无义”的概率大,如果他人谈话中提及一个三音节的陌生人名,如“lifuhao”,我们多数时候能判断出这是一个人的名字,而不是词语。
既然三音节、四音节中,“同音多义”的概率越来越少,如将单音节词语、双音节词语,按语义搭配组成三、四字乃至五字以上的短语、句型,给出相应的拼音,建立数据库,由于音、义一一对应性好,根据这种数据库进行音字转换,就能提高准确率。设语音转换或拼音输入的T为“shixianlixiangxuyaonuli”,用正向最大匹配法进行分词,可以在数据库找到拼音串:“shixianlixiang”,其相应的汉字串为“实现理想”,将T处理为“实现理想xuyaonuli”,可以避免用“shixian”“lixiang”分别转换时的选词错误。
当然,语言不是这么简单。如果有人说“shixianweidalixiang”,我们会理解为“实现伟大理想”,而不是“时贤伟大里巷”,说明语言的“协同现象”是可以“跨音节”的;如果有人说“lixiangyijingshixian”,我们会理解为“理想已经实现”,而不是“理想意境视线”,说明语言的“协同现象”是可以“无序”的。但是,通常的分词方法不能发现“shixianweidalixiang”、“lixiangyijingshixian”同数据库“shixianlixiang”有内在联系,也就是对“跨音节协同现象”“无序协同现象”无效。当然,对字符串进行“跳格比较”,也能发现两者之间存在包含关系,但数据库稍大的时候,响应速度不能满足需要。
所以,本人提出用“质数代换字符串检索技术”进行语言分析,该方法把主串与子串之间字符的“串行比较”变成相应质数的“并行相除”,减少了读取数据的时间,在一定范围内,速度比模式匹配快1-2倍。而且质数代换整除判断,“不考虑字符元秩序”的特点,正好适合处理“跨音节协同现象”“无序协同现象”。如果数据库中有“实现#理想”一条记录,并用一个类似#的符号,说明从此处字符元秩序是灵活的,无论输入“实现伟大理想”、“理想已经实现”,整除一次均可发现。如果用字符串跳格比较发现“无序协同现象”,筛选参考句型时需要进行两次跳格比较。当然,“质数代换字符串检索技术”的速度也不能满足语言处理的需要,所以需要用“位标记字符串检索技术”进行句型初选。
对于汉语来说,“五车”可以看作词语、或数量词搭配,“春节晚会”是一个词组,“只鸽子”是量词与名词搭配,“打电话”是一个动宾词组、也可看作短语,“他笑”可以看作词组,也可以看作主谓句,“我说汉语”则是一个有主谓宾的句子。语言分析数据库中可以有提炼出来的句子、词语搭配、短语、词组、词语等,为了便于行文,本文件概略地称为“基本句型”,其数据库称为“基本句型数据库”,记为jxk。从jxk中筛选出来的,字符元被关键词T包含的句型一般地称为“参考句型”,部分字符元被T包含的句型称为“容错句型”。对“参考句型”、“容错句型”进行分析比较后,确定用来处理T的句型称为“基础句型”。
在数据库中选择“参考句型”做“基础句型”,优先选择字符元多的句型,简称为“长词优先”。对于“他明年六月毕业”这个句子,如果数据库有“他毕业”“明年六月”,则有2个字符元数较多的参考句型。如果数据库没有“明年六月”,则会找到“明年”“六月”等词语做参考。就是说,基于参考句型的语音输入算法能兼容通常的分词算法,句型的标准是灵活的,数据库中基本句型的数量可以随硬件的条件调整,硬件处理能力大,句型长、数量多量多,处理效果就会越好。如果硬件条件差,可以对基本句型按学科进行分类,如通用160万条,文史40万条,科技40万条,报刊40万条。如果用户录入科技文章,则调入160万+40万的数据库。若当前库未能找到可信度高的参考句型,再在其它学科句型库中查找。即使硬件性能好,分类建库仍可考虑,毕竟,有些用户是很少使用某些专业句型的。运行中,如果程序发现用户当前频繁使用某一专业的词句,可自动调整当前库的构成。
典型的句子有主语、谓语、宾语,如,“我说汉语”。如果基本句型都有这三种成分,无疑是便于计算机“识别理解”的,但主语、谓语、宾语三种成分俱全,句型的数量会很多。所以把“我说汉语”分解成“我说”、“说汉语”,作为两个基本句型列入数据库是可取的。优选“基础句型”进行语言分析,除了“长词优先”的原则外,应综合考虑语法、频率等多方面因素。如果T为“woshuohanyuhenliuli”,根据长词优先的原则,可依据“说汉语”,处理成“wo说汉语henliuli”;如果数据库中有“说流利”这个搭配,进一步可处理成“wo说汉语hen流利”。再用“说”,在参考句型中查找对应汉字中含“说”、音为“woshuo”的“我说”的S作为第3个基础句型,处理成“我说汉语hen流利”,这种方法,可称为“系联”或“联想”。最后,按语法规则、频率处理成“我说汉语很流利”。当然,如果把“很流利”作为一个句型列入数据库也是可以的,这要根据cpu的处理速度、内存容量来决定。句型数量越大,语法规则可以越简单,句型数量越小,就需要越多的语法规则做辅助判断。
在硬件有限的条件下,列入jxk的主谓宾句只能是常用的,如“我在上班”。数据库主体是某种语言的动词及宾语构成的句型,如“强化管理”;以及动补关系的句型,如“写得好”;主谓句,如“天晴”。但不限于基本句型,也可以是各种词语搭配,如:“大学|系”“省|市”“高|楼”“条|牛”“虽然|但是”“以|方式”“抄|遍”。
三字以上的词语、成语,是有助于句子切分的,可以收入jxk中。专业词语数量大,如上所述,可以分学科建库,也可考虑将常见的专业名词列入jxk,不常用的列入词汇表中。通常的索引不能查找跨音节的语句,但可快速顺序查找大词汇表,如果利用收入jxk的句型对T进行切分的准确率高,切分后部分拼音串在jxk中未发现可信的S,可去词汇表中查找。应用中,是分学科建库,还是分为基本句型库、词汇表,可按实际测试效果来决定。
两个汉字的词语需要重点关注,如“shengshi”相应的词语中有:“省市”、“声势”。其中“省市”作为一种搭配,可保留为两字形式,如:“湖北|省|武汉|市”;而“声势”,应尽量与其它词语组成较长的句型,如“声势|浩大”“造|声势”“声势|不少”。
B.文体分析、引文信息、关联信息
语言是复杂的,在参考句型的基础上,可给出文体信息、引文信息、关联信息等,提高音标串到文字串的转换准确率。
文体倾向分析:可用一个数据L来标记文体倾向,将文体分为报刊、公文、商务、经济、文学、历史、哲学、数学、物理、机械、电子、化学、生物、教育等若干类,对应L中的若干个bit;如语料库中一篇文章或一个语句大体属于某n类文体,则将L相应的n个bit置为“1”,为该篇文章或语句的文体倾向。对语料库进行统计分析得出一个基本句型、词语的文体倾向,记为Ln:如“外交部长”这个词“常见”于“报刊、公文、文学、历史”4类文体,则将相应的4个bit置为“1”,L=51;“浮力”这个词“常见”于“物理、机械、教育”3类文体,则将相应的3个bit置为“1”,L=8960。
语音输入中,通过分析生成某语句的基本句型的Ln,得到该语句的文体倾向,记为Ls。段、章、篇的文体倾向可用总计的方式计算:设生成某段文字所用的基础句型、词语为100条。如第3个bit指示“商务文体”,用第3个bit为“1”的整数4与这100个基础句型的Ln做“位”的“and”运算,值等于4的记录有效,即满足4&Ln=4的记录,假设为40;如第13个bit指示“生物”,第13个bit为“1”的整数4096,满足4096&Ln=4096的记录有效,假设为10。“商务文体”的值40大,再用接近报刊文体的“公文”“报刊”“经济”“历史”之类的bit去统计,如果“公文”的记录数为45,“商务”为40,“经济”为37,“历史”为15,公文、报刊、商务、经济4类记录数“明显”比其它类记录数大,将相应的4个bit置为1,记为Lp=15。需要恰当地确定“常用”“明显”的标准,使Ln、Lp中的bit适量,过多过少都不能产生好的效果。一些频繁使用的基本句型、词语,出现的文体种类多,可不用于文体分析,让Ln=0即可。
对于一个待处理语句T,程序处理后可能生成数个备选语句,各备选语句的Ls可以通过分析生成它所用的基础句型的Ln得到,以备选语句的Ls同段、章、篇各层次的文体倾向Lp进行比较,满足Ls or Lp=Lp或其等价式的语句,可信度高,优先选用。其含义是:该语句的文体倾向,没有超出该部分文字的总体文体倾向范围。否则,文体倾向不符,放弃或者在备选句型中靠后排列,当然要综合考虑生成语句的基础句型的j值等因素。比较高的目标是,文体分析能实时动态地进行,评价已生成的语句,并通过对Ln与Lp进行比较,指导后续语句生成时的句型选择。
建立引文系统:创建一个引文资料库,长文按段落切分并相互链接,按段给出索引号,再将引文的篇名、各段落首句、精华之句S收入jxk,并给出索引号。当T与某句S的拼音串、或按T生成的语句与S的文字串相同或相近时,根据索引号将前后文读出,不仅可以提高正确率,还可以节约时间。设将“大学之道”收入jxk,如果输入的T与该句的拼音相同或相近,或进一步生成的语句是“大学之道”,即将“大学之道,在明明德,在亲民,在止于至善”整段及链接的下一段“知止而后有定…”读出,供用户确认。如果用户仅记得“在明明德”一句,或其中的“明明德”三个字,这种引文系统就无效了。但可将引文资料库,按语句切分并相互链接,给出每句的位标记值W,并用位标记值V建立索引,用户提示“引文”时,用“mingmingde”,或用生成的“明明德”的位标记值V、W去“正检索”筛选出R1后,进行字符模糊匹配,读出符合的记录,供用户确认。如果cpu足够快,不必用户提示“引文”,程序自动地用T,或生成的语句的位标记值V、W,去模糊查找。也可以用通常的倒排文件方式建立一个模糊引文系统,用T或生成的语句根据倒排表去引文资料库模糊查找;还可以将引文资料库按句切分,并前后链接,将比较重要的语句并入jxk,根据倒排表进行累计标示后,j=m的记录,可能是引文,用户确认后,可根据链接读出下文,m指T的字符元数,具体方法见下文。
另外,数据库中可给出基本句型的关联词、关联信息。基本句型主要是围绕动词建立的,而关联词可主要围绕名词建立,根据知识系统给出。关联词可以处理同义、近义、并列、排斥关系,如:“肝”与“胆”、“氩”与“氖”“氡”可互作关联词;“+”可作为“加”的关联词;“CO2”可作为“二氧化碳”的关联词。如T含“eryanghuatan”,转换为“二氧化碳”,但给出“CO2”,供用户选择。关联词也可以处理概念之间的多层次包含关系,如:鸽子、鸟、动物。把“鸽子鸟”“鸽子动物”“鸟动物”作为搭配收入数据库,是可以的,但句型数量可能太大。可仅将“鸽子”“鸟”“动物”列入句型库,但在“鸽子”后列出相关概念。如果用户输入T为“gezishiniao”,通过位标记、质数代换逆检索确定“鸽子”是参考词汇,再用它的关联词“鸟”的拼音niao与T进行匹配,匹配成功,即可把T处理成“鸽子shi鸟”,继续用频率、语法、知识系统处理,可能得到“鸽子是鸟”。关联词还可以处理属性关系,如“上海”与“中国”、“水”与“浮力”,“圆”、“∏”与“半径”。关联词之外,可以用关联信息将基本句型连接到专门的知识系统。

汉语动词常与助词“着、了、过”连用,形容词常与助词“的、地、得”连用,可以用语法规则来处理,也可将动词、形容词与助词搭配成“游览过”“美丽的”等,作为参考句型收入数据库,第三种选择是将助词作为关联词处理,可以减少基本句型的数量。类似地,也可以处理量词与数词、名词动词与量词、形容词动词与副词、名词与介词、名词与方位词、动词与趋向词等关系,还可以处理各种语言的语法形态变化,如把[ist]及相应的est作为形容词副词的关联词,处理英语的最高级。
2.倒排参考句型语言分析方法:
基于参考句型的语言分析可利用“质数代换”及“位标记字符串检索技术”进行,作为一个变通的方法,也可用倒排文件方法进行。“倒排参考句型语言分析方法”实施中,根据应用的不同,jxk、倒排表、需要分析的语句T的字符单位,可以是汉字、其它语言的单词、汉语拼音的音节、音素、其它语言的音节、音素、适合识别的语音单位等,为了便于说明,称为“字符元”,记为P。
A.无重复字符元的情况
这里先说明不含重复的字符元时,利用倒排参考句型进行语言分析的基本步骤,如果有重复的字符元,累计标示后,情况复杂一些,在后面说明。倒排参考句型语言分析方法的流程,可大体分为两个阶段、四个步骤:
1.语言分析建库倒排阶段,分建立基本句型数据库、建立倒排表两步,属于程序开发时期,流程见附图1。
第1步,根据应用需要,对某种语言进行分析,提炼基本句型(含词语搭配、短语、词组、词汇,下同),建立jxk,统计出各基本句型S所含的字符元数k,给出字段j,令全部j=0;给出对应信息、字符串结构信息、文体倾向、频率、引文信息、关联信息、语法信息等处理信息。
字符元,语音输入中是汉语拼音、其它语言适合声学处理的语音单位的音标符号,机器翻译、搜索引擎、智能信息处理中是汉字、其它语言的单词等。对应信息,语音输入中是某种语言的音标串相应的文字串;机器翻译则是目标语言的相应基本句型,但不必一一对应,以便进行文体倾向分析;智能信息处理,对应信息可以给出指令、标准语句、标准词汇、中心词及同义近义句型。字符元串结构信息说明组成基本句型的字符元秩序是固定的,还是灵活的,即能否“无序协同”;以及字符元之间可否插入其它字符元,即能否“跨音节协同”。文体倾向标示基本句型常见于哪几类文体,机器翻译中同时给出原始语言句型的文体倾向Ln与目标语言句型的文体倾向Ln,利用Ln可以分析当前文件的Lp,用Ln同Lp做比较,优先选择Ln与Lp相符的目标语言句型,辅助语句生成;或分析生成目标语句所用的句型的Ln得到该语句的Ls,同Lp做比较,在多个备选语句中给Ls与Lp相符的语句更高的评价。频率,常见的术语是词频,因为数据库中有基本句型、搭配、词语等,故用频率,是一定范围内的统计结果,比如,统计100,000,000个语句,某基本句型出现2300次,就是0.0023%。引文信息,给出引文资料库相关段落编号或被切分出来的句与句之间的链接信息,机器翻译也可利用。关联信息是与基本句型、词语经常同时出现的词语、符号、公式,可根据知识系统或语法给出,也可以关联到更全面的知识系统;机器翻译中可以给出目标语言的备选语句,或语法形态变化;智能信息处理中,同义近义句型、乃至反义句型也可以用关联词给出。语法信息是基本句型的语法分类、词语的词性等;机器翻译,不仅要给出原始语言基本句型的语法信息、目标语言相应基本句型的语法信息,还需要语法系统支持。进行倒排需要地址d,或句型编号n。在第3步累计标示中,需要读取j值进行累记后,再写入,如果第2步倒排使用句型地址,第3步需要计算偏移量得到j值的地址;如果倒排中使用j值地址,累计标示不必计算偏移量。如给句型编号,为减少查询时间,应按顺序编号。
 

jskjnabc31bd22ad23

第2步,建立jxk的倒排表。顺序列出此类应用中该语言的所有字符元Pi(i=1、2、3…w)作为关键词;从jxk中顺序读取每一个基本句型S,如果S含有Pi,在倒排表关键词中查找Pi,并将该句型的地址或j值的地址d列在Pi后,处理完jxk中全部基本句型,得到倒排表,称为“倒排d表”。jxk中给出基本句型编号,从jxk中顺序读取每一个基本句型S,如果S含有Pi,在倒排表关键词中查找Pi,并将该基本句型的编号列在Pi后,处理完jxk中全部基本句型,得到倒排表,称为“倒排n表”。为便于说明,本文件中多给出句型编号。这是上面示意jxk的两种倒排表:

2.具体语句分析阶段,分累计标示、语句分析两步,属于用户运行时期,流程见附图2。
第3步,每次分析处理1个T,应先将jxk中全部记录的j置为0。设需要分析的句子T所有的字符元为P1、P2、P3…Pm,读取其第一个字符元P1,在倒排表中查找P1,如果倒排表P1后,有某个地址d或句型编号n,则将jxk中该记录的j值增加1;同样的,用其它字符元P2、P3…Pm进行处理。处理完毕,各记录的j值为该基本句型S含T中的字符元个数。这个过程称为累计标示。设T=dca,利用上面的倒排表标示后,jxk成为:
 jskjnabc321bd212ad223

如果把每个字符元看成一个元素,基本句型S与T的交集记为J,则J=S∩T,j为J的大小;k值是基本句型S所有的字符元个数,是S的大小。j=k,即J=S,又有J=T∩S,所以S=T∩S,根据集合运算原理: T S = S &DoubleLeftRightArrow; S &SubsetEqual; T ]]>。其含义是,若j=k,S的每个字符元均出现在T中。第3个句型j=k,它的全部字符元a、d出现在T中,dca中有“c”,而且字符元秩序也不同,但通过倒排可以发现“dca”与“ad”中存在联系。这个特点与“质数代换”整除判断相同,适合处理语言的“无序”、“跨音节协同现象”。第1、2个句型0<j<k,它们与T有部分字符元相同,是广义的容错句型。
第4步,查询出所有j=k的句型S,这些句型为T的“参考句型”,从中优选部分句型做“基础句型”,用以处理T。语言中存在“无序协同现象”,但并不是任意的,如:“实现#理想”不能是“实#现理想”;有些句型只能“跨音节协同”,不能“无序协同”,如:“以…方式”不能用做“方式…以”。所以,并非所有j=k的句型S都可用于处理T,需要将S同T的字符元进行结构比较,剔除无效的S,当然这需要在第1步建库时给出字符元结构信息。在j=k的结果集R1中,根据语言“协同现象”,k值,也就是j值越大,语义越确定,据以处理T越可靠。这样,没有必要将R1中所有的S同T进行字符元结构比较,只需要检查j、k大的S。语音输入中,可把k和j值的大小同文体倾向分析、频率等综合起来考虑。
搜索引擎中,用数个k值较大的参考句型同T进行比较,即可完成对T的切分;智能信息处理中,用户口语表述的语句为T,通过累计标示确定出基础句型,可以剔除T中不重要的信息,还可以在对应信息、关联词中得到指令、标准语句、标准词汇、中心词、同义近义句型、反义句型等,计算机直接执行指令或通过对标准语句、标准词汇进行分析合成产生指令,进行适当操作,可用于人机交互;中心词、同义近义句型、反义句型可用于智能信息查找。机器翻译中,倒排参考句型语言分析方法能保证原始语句被正确切分,找出原始语言句子的核心、辅助成分,可以说是让计算机理解“句子”,利用对应信息中给出的目标语言的基本句型、词语,再在语法系统的支持下合成目标语句。
B.有字符元重复的情况
上文未考虑S、T含重复字符元的情况,但语言中一个语句可能会重复出现某个字符元,在语音输入中,还占有一定的比例。设有3个基本句型:S1:aabb,k=4;S2:abc,k=3;S3:acd,k=3。建立倒排表可以有两种方式:1.不管字符a在基本句型n中出现多少次,倒排表关键词a后,n只出现1次,称为单一表,用dpb=1表示;2.字符a在基本句型n中出现m次,倒排表关键词a后,n就出现m次,称为重复表,用dpb=2表示。
 关键词单一表关键词重复表a1、2、3a1、1、2、3b1、2b1、1、2c2、3c2、3d3d3

设有两个待处理关键词:T1=“aabbcef”、T2=“abce”。T1的参考句型应该是S1、S2;T2的参考句型应该是S2。对T1不剔除重复的a、b,用单一表进行累计标示:S1:aabb,k=4,j=4;S2:abc,k=3,j=5;S3:acd,k=3,j=3。如果查询j=k的句型,S2被遗漏,S3被混入。其原因是,T1中a、b是重复的,标示两次,所有含a、b的记录的j值都增加了两次,对于S1来说不成问题,但S2、S3的j值产生了问题:j值不能准确反映S与T的字符元交集的大小。由于倒排表的不同、T中是否有重复的字符元等因素,标示后j值会不同;解决的途径可从3方面考虑:jxk中用h记录S中不重复的字符元的个数,剔除T中重复的字符元后再进行累计标示,修改查询条件。
先分析利用单一倒排表标示后出现的各种情况,表中“a[a]b[b]cef”表示累计标示前“a、b”被剔除,“abce[]”表示该句无重复字符元被剔除,+表示S出现在R1中,-表示S不出现在R1中,y表示S出现与否符合意图,n表示S出现与否不符合意图,*表示S出现在R1中是冗杂的。
 SkhjdpbTj=kj=k or j>kaabb441aabbcef+y+yabc351aabbcef-n+yacd331aabbcef+*+*aabb421abce-y-yabc331abce+y+yacd321abce-y-y1-No2-Okaabb421a[a]b[b]cef-n-nabc331a[a]b[b]cef+y+yacd321a[a]b[b]cef-y-yaabb421abce[]-y-yabc331abce[]+y+yacd321abce[]-y-y3-No4-NoSkhjdpbTj=hj=h or j>haabb241aabbcef-n+yabc351aabbcef-n+yacd331aabbcef+*+*aabb221abce+*+*abc331abce+y+yacd321abce-y-y5-No6-Okaabb221a[a]b[b]cef+y+yabc331a[a]b[b]cef+y+yacd321a[a]b[b]cef-y-yaabb221abce[]+*+*abc331abce[]+y+yacd321abce[]-y-y7-Ok8-Ok

总结上表:当jxk有k值时,不剔除T中重复的字符元,放宽查询条件,用“j=k or j>k”查询,但R1可能有冗杂的S;剔除T中重复的字符元,用j=k或用j=k or j>k查询都会出现遗漏。当jxk有h值时,不剔除T中重复的字符元,不可用j=h查询,可用j=h or j>h查询,但R1可能有冗杂的S;剔除T中重复的字符元,可用j=h或用j=h or j>h查询,也会有冗杂的S。当然,把“j=k or j>k”等改为“j>k-1”之类也是可以的。
4种可行的方案2、6、7、8查询后R1都会出现冗杂的S,从R1中选择基础句型时,应对S与T的字符元进行比较,剔除两种不合要求的S:如果S的任一字符元在T中未发现,该S为冗杂记录,放弃;如果S与T结构不符,也放弃。这里有一点小问题,在一些方案中aabb冗杂为abce的参考句型,如果aabb是固定的,通过结构比较可以剔除,如果是灵活的,如a#a#b#b,若用第2个字符元a再从T的开始字符元比较,不能剔除该S。所以,检查“无序协同”现象可靠的方法应该这样:用S的第1个字符元a同T的第1个字符元比较,成功,遇到#,记下T当前的位置i,用S的第2个字符元a同T的后续字符元比较,不成功,返回,从T的开始字符元进行比较,如果到i-1尚不成功,不合要求,放弃。
从R1中冗杂的S的程度及查询条件的简单程度来看,以2、7两个方案较优。方案7查询条件最简单,R1中冗杂的S最少。但h值不能完全反映S的字符元的多少,当关键词为T1时,从R1中确定“基础句型”,“aabb”得不到优先考虑。所以可以考虑把2、7两个方案结合起来,即数据库中同时给出k和h。用j=h查询得到R1,再按k值大小优选“基础句型”。
更进一步,对T进行分析,如果没有重复字符元,累计标示,用j=k查询,按k值大小优选“基础句型”;如果有重复字符元,剔除后,累计标示,用j=h查询,按k值大小优选“基础句型”:
 SkhjdpbTj=kj=haabb4221a[a]b[b]cef+yabc3331a[a]b[b]cef+yacd3321a[a]b[b]cef-yaabb4221abce-yabc33331abce+yacd3321abce-y

如果T3=“abccd”,k=5,有重复字符元,剔除c后为“abcd”,累计标示后,S1的j=2,用j=h查询,“aabb”会进入R1,是冗杂的。就是说,因为T3有1个字符元c重复,用j=h查询,由T3其它字符元a、b、d重复构成的基本句型,如:aad、bbad都会进入R1,由于语言分析中是以音节、单词、汉字为字符元,这种冗杂的量不大。
再分析利用重复倒排表标示后出现的各种情况:
 SkhjdpbTj=kj=k or j>kaabb482aabbcef-n+yabc352aabbcef-n+yacd332aabbcef+*+*aabb442abce+*+*abc332abce+y+yacd322abce-y-y9-No10-Okaabb442a[a]b[b]cef+y+yabc332a[a]b[b]cef+y+yacd322a[a]b[b]cef-y-yaabb442abce[]+*+*abc332abce[]+y+yacd322abce[]-y-y11-Ok12-OkSkhjdpbTj=hj=h or j>haabb282aabbcef-n+yabc352aabbcef-n+yacd332aabbcef+*+*aabb242abce-y+*abc332abce+y+yacd322abce-y-y13-No14-Okaabb242a[a]b[b]cef-n+yabc332a[a]b[b]cef+y+yacd322a[a]b[b]cef-y-yaabb242abce[]-y+*abc332abce[]+y+yacd322abce[]-y-y15-No16-Ok

方案10、11、12、14、16等5种是可行的,查询后都会出现冗杂的S。也可以在数据库中同时给出k和h,如果T没有重复字符元,累计标示,用j=h查询,按k值确定“基础句型”;如果T有重复字符元,剔除后,累计标示,用j=k查询,按k值确定“基础句型”:
 SkhjdpbTj=kj=haabb4242a[a]b[b]cef+yabc3332a[a]b[b]cef+yacd3322a[a]b[b]cef-yaabb4242abce-yabc3332abce+yacd3322abce-y

T3=“abccd”,k=5,有重复字符元,剔除c后为“abcd”,累计标示后,S1的j=4,用j=k查询,“aabb”会进入R1,是冗杂的。就是说,因为T3有1个字符元c重复,用j=k查询,由T3其它字符元a、b、d重复构成的基本句型,如:aad、bbad都会进入R1,由于语言分析中是以音节、单词、汉字为字符元,这种冗杂的量不大。
查询条件的选择受两方面影响:1.基本句型S某个字符元Pi出现m次,在倒排表的关键词Pi后,S的地址、j值的地址d、编号n相应地是出现m次,还是出现1次,如上所述,dpb=1表示倒排表中地址d或编号n出现1次;dpb=2,表示倒排表中地址d或编号n出现m次。当然,这个参数不是必要的,因为一般程序只会使用一种倒排表,且设计阶段已确定采用何种方案。2.待处理关键词T中是否有重复字符元,累记标示前是否被剔除。
更进一步,如果硬件条件好,在程序中同时有单一表和重复表,T3=abccd,其中c是重复的,累计标示时,c根据重复表标示,只标示1次,下表中用(cc)表示,而其它字符元a、b、d根据单一表各标示1次:
 SkhjdpbTj=kj=h or j>haabb4241+2(aa)(bb)cef+y+yabc3331+2(aa)(bb)cef+y+yacd3321+2(aa)(bb)cef-y-yaabb4221+2abce-y+*abc3331+2abce+y+yacd3321+2abce-y-yaabb4221+2ab(cc)d-y+*abc3331+2ab(cc)d+y+yacd3331+2ab(cc)d+y+y

用j=h or j>h查询有冗杂,用j=k似乎消除了冗杂,但仍不彻底,设有下列句型:
 4aab35aabb46aaabbb67aaaabbd78aaaaacd7

单一倒排表、重复倒排表为:
 关键词单一表关键词重复表a4.5.6,7,8a4,4,5,5,6,6,6,7,7,7,7,8,8,8,8,8b4,5,6,7b4,5,5,6,6,6,7,7c8c8d7,8d7,8

累记标示后:
 nSkjdpbTj=kSkjdpbTj=k4aab331+2(aa)(bb)cef+yaab331+2(aa)(bb)cd+y5aabb441+2(aa)(bb)cef+yaabb441+2(aa)(bb)cd+y6aaabbb661+2(aa)(bb)cef+naaabbb661+2(aa)(bb)cd+n7aaaabbd761+2(aa)(bb)cef-yaaaabbd771+2(aa)(bb)cd+n8aaaaacd761+2(aa)(bb)cef-yaaaaacd771+2(aa)(bb)cd+n

T1=“aabbcef”,标示后,S6进入R1是冗杂的。T4=“aabbcd”,标示后,S6、S7、S8进入R1,是冗杂的。(aa)(bb)是重复的,用重复表各标示1次,c、d用单一表各标示1次,S8的j=5+0+1+1=7,原因是:S8中a出现2次,但重复表中,关键词a后8出现了5次。要彻底消除冗杂,倒排表要用分组表,用dpb=3表示:
 关键词1组2组3组4组5组6组a4,5678b45,76c8d7,8

S7=aaaabbd,其中a出现4次,因此关键词a后的第4组给出句型编号7;b出现2次,因此关键词b后的第2组给出句型编号7;d出现1次,因此关键词d后的第1组给出句型编号7。为了节省空间,可将句型编号n或地址d分组连续存贮,在组之间插入一些标志,或者在关键词P后给出各组的起始位置、长度。
“基本原理”部分提到,语音输入中,将引文资料库重要语句与jxk合并,累计标示后,j=m的记录可能是引文。利用分组倒排表,按“向下兼容,向上平推”的方法能彻底消除冗杂,并实现“引文”与“参考句型”的同时查找。举例说明操作方法,流程参见附图3:
T5=“aaabb”,m=5。a出现3次,记为q=3;在倒排表a的3组找到句型6,将句型6的j值增加3;“向下兼容”,在2组找到句型4、5,将句型4、5的j值各增加2;“向上平推”,在4组找到句型7,将句型7的j值增加3,在5组找到句型8,将句型8的j值增加3。b出现2次,记为q=2;在2组找到句型5、7,将句型5、7的j值增加2;“向下兼容”,在1组找到句型4,将句型4的j值增加1;“向上平推”,在3组找到句型6,将句型6的j值增加2。程序中可设分组号为i,从i=1开始查找句型进行标示,当i<=q时,j=j+i;当i>q时,j=j+q。标示结果如下表,j=k的记录为“参考句型”,k>j>0的记录是广义的“容错句型”,但以k=j-1的记录意义较大。j=m的记录为“引文”。
 nSkjdpbTj=kj=k-1j=m4aab333(aaa)(bb)+5aabb443(aaa)(bb)+6aaabbb653(aaa)(bb)++7aaaabbd753(aaa)(bb)+8aaaaacd733(aaa)(bb)

用查询条件j=k or j=m,得到“参考句型”及“引文”记录集R1,可以按j值的降序排列,从j值最大的记录开始检查字符元结构的可比性。结构可比且j=m的记录可能是“引文”,读出对应的汉字串,供用户决定:是摘取其中对应T的文字C,还是根据链接读出上下文。如果不存在j=m的记录,在字符元结构相符的句型中优选k值大的句型,并考虑频率、文体倾向、语法等因素,作为基础句型,对T进行分析处理。
总结一下,倒排表可以有单一表、重复表、分组表,而jxk可以给出k值、或h值、或同时给出k和h值,通过不同的查询条件,形成多种方案得到R1。设g=k-j,即基本句型中字符元重复的次数,在jxk中,给出k和g字段,或h和g字段,乃至同时给出k和h和g,又可形成多种方案得到R1,但没有本质区别。R1中可能有冗杂,使用分组倒排表可以消除冗杂,但分组倒排表更复杂,而通过对S与T的字符元的进行比较,可以剔除R1中不合要求的记录,所以应用中,并非一定要使用分组倒排表,应根据基本句型S、待处理关键词T、硬件性能决定方案。基本句型数据库jxk中包含各种信息,比较大,不一定能完整地居留在内存中,可以考虑在内存中创建一个副表jxkcopy,其中有n或d之一和k、j等字段,用jxkcopy进行累记标示,查询需要的句型,再根据jxkcopy到jxk读取这部分句型的信息。也可考虑在内存中创建一个临时表jxktemp,其中有n或d之一和j字段,若T中的字符元在倒排表中涉及某个n或d,则在jxktemp产生一条记录,并进行累记标示,完成后,写入jxk,再进行查询。倒排参考句型语言分析方法,是按字符元建倒排表的,与一些搜索引擎按单词建倒排索引相似,为了减小倒排表的大小,可以借鉴目前使用的倒排表压缩技术。与一般的倒排方法相比,倒排参考句型语言分析方法的主要特点是:在jxk中设立k、j等字段,j=k,则T包含S的字符元,达到“质数代换字符串检索技术”中“逆检索”的效果;如果j=m,则S包含T的字符元,达到“质数代换字符串检索技术”中“正检索”的效果。如果S、T中有重复字符元,情况会复杂一些,但通过在jxk中给出h、对倒排表做调整、对T做分析、修改查询条件等方法也能处理。
3.倒排参考句型语音输入方法
上节说明了倒排参考句型语言分析的一般原理、方法,本节说明汉语语音输入中,倒排参考句方法的具体步骤、容错处理方法,其它语言、其它方面的应用也可以参考。先说明一点,在语音输入的音字转换中,频繁进行的是“音节比较”,不是“字符比较”,所以在建库、倒排、标示、转换等过程中,对每个音节,可用一个汉字或其它符号代表。如,用“副”代表“fu”、“里”代表“li”、“号”代表“hao”,称为“音节代字”。这样的好处是:用“号”同“副里号”匹配,比用“hao”同“fulihao”匹配,更便于定位,节省空间,提高速度。
A.语音输入中倒排参考句方法的步骤
1.汉语语音输入中,字符元是汉语的无调音节或有调音节,要权衡速度及正确率,所以基本句型的要适量。下表是语音输入jxk的模式,还可以增加引文链接等信息:
 编号拼音串kj汉字串语法信息文体关联词频率%45886fuli#hao3福利好名形130.015745893fuli#cha3福利差名形130.011388544hao#gongfu3好功夫形名16一身0.013798253yifang&shi3一方是主系82050.005398969yi&fangshi3以方式介宾82050.0079173561qianghua#guanli4强化管理动名140.0017

&表示从此处可插入其它词语,也就是该句型可以“跨音节协同”,如果查询后,98253是参考句型,设用户输入“yihefafangshi”,用yi从第一个音节扫描,匹配,但第二个音节不匹配,无效。再用98969进行处理,以yi从第一个音节扫描,匹配;&表示跳格,因此用fang比较he、fa,直到fang,匹配,接着用shi匹配,有效,处理成“以hefa方式”。
#表示“无序协同”,就是从此处可调换字符元秩序。如果查询后,qianghua#guanli是参考句型,用qiang从T的第1个音节开始匹配,发现匹配成功的字符元,继续用hua匹配,不成功,则结构不可比,放弃。若用hua匹配成功,#表示“无序”,记下当前T的位置i,用guan接着hua向后匹配,不成功,再返回T的第1个音节开始匹配,如果到i-1不成功,放弃。匹配成功,字符元结构有可比性。
2.语音输入按音节进行倒排,汉语有400多个无调音节,其中有“fu”;句型45886含有“fu”这个音节,在倒排表关键词“fu”后列有该基本句型的编号45886:
 音节句型编号fu11678,45886,45893,78253,88544,299555li45886,45893,78253,173561,204891yi98253,98969

3.设用户输入的拼音串T为“zhe|jia|gong|si|fu|li|hao|you|jin|tie”,累计标示,得到下表:
 编号拼音串kj汉字串语法信息文体关联词频率%88342hao#gongsi33好公司形名130.023745886fuli#hao33福利好名形130.015788544hao#gongfu33好功夫形名16一身0.013756894you#jintie33有津贴名词140.012778253you#fuli33有浮力动名89600.009345893tie#jiagong33铁加工名词5200.007345893fuli#cha32福利差名形130.0113173561qianghua#guanli41强化管理动名140.001798969yi&fangshi30以方式介宾82050.0079

在没有相同的字符元时,各记录的j值也就是基本句型S与T相同的字符元个数:45886的j值为3,“fu、li、hao”3个字符元与T相同;45893的j值为2,“fu、li”2个字符元与T相同;173561的j值为1,“li”1个字符元与T相同。
4.从“参考句型”确定“基础句型”,转换“音标串”为“文字串”的方法有多种,下面说明一种转换方案,供参考:
设用户语音输入后转换的拼音串T为上文的“zhejiagongsifulihaoyoujintie”,有10个字符元,m=10。累计标示后,k值和频率综合评价最高的参考句型依次是:“hao#gongsi、fuli#hao、hao#gongfu、you#jintie、you#fuli、tie#jiagong…”,相应的汉字为“好公司、福利好、好功夫、有津贴、有浮力”、“铁加工”…。可从中选择n个句型作为“基础句型”,就汉语来说,每个语句约8-15个汉字,每个基本句型约3-5个汉字,如果生成2-3个备选语句,估计n值为5-10即可。可以先定义一个字符数组:A[n][m],数组的元素应能存贮一个汉字,如果系统视汉字为2个字符,则需定义一个3维数组。作为例子,我们将n设为5,即定义字符数组:A[5][10],每1行对应1个基础句型,每1列对应T中的1个字符元。因为数组A[5][10]中元素是从0开始的,下文称评价最高的句型为u=0句型,其后为1、2、3、4句型;对T中的字符元,也按秩序称为i=0、1、2…字符元。
a.检查结构可比性,确定基础句型。
首先选取综合评价最高的u=0句型,检查该句型与T中相应字符元的结构是否可比,如果结构不可比,放弃该句型;如果有可比性,若T中的Pi同于0句型的Px,即Pi=Px,0句型字符元Px对应汉字Cx,即 P x &DoubleLeftRightArrow; C x , ]]>则令A[0][i]=Cx。再按同样方法,依次选取其它句型处理。
u=0为“hao#gongsi”,读取“hao”,同T进行匹配,i=6次成功,u=0句型中P=“hao”的对应汉字C=“好”,令A[0][6]=“好”;#指示“无序协同”,记录T当前位置I=6,用gong往后匹配,直到T的最后字符元,不成功,返回,从T的i=0字符元进行匹配,i=2次成功,“gong”的C=“公”,令A[0][2]=“公”;用si紧接匹配,成功,令A[0][3]=“司”。
u=1为“fuli#hao”,读取“fu”,同T进行匹配,i=4次成功,该句型中“fu”的C=“福”,令A[1][4]=“福”;用li紧接匹配,成功,令A[1][5]=“利”。#指示“无序协同”,T当前位置I=5,用hao往后匹配,i=6成功,“hao”的C=“好”,令A[1][6]=“好”。
“hao#gongfu”,读取“hao”,同T进行匹配,i=6次成功,u=2句型中“hao”的C=“好”,令A[2][6]=“好”;#指示“无序协同”,T当前位置I=6,用gong往后匹配到最后,不成功,返回,从T的i=0字符元进行匹配,i=2次成功,u=2句型中“gong”的C=“功”,令A[2][2]=“功”;用fu紧接匹配,不成功,说明“hao#gongfu”的字符元结构同T不可比,不能用作参考句型,将数组A的u=2行的元素清理为空,即令A[2][n]=“”。u值不增加1。
“you#jintie”,读取“you”,同T进行匹配,i=7次成功,u=2句型中“you”的C=“有”,令A[2][7]=“有”。#指示“无序协同”,T当前位置I=7,用jin往后匹配,i=8次成功,u=2句型中“jin”的C=“津”,令A[2][8]=“津”;用tie紧接匹配,成功,令A[2][9]=“贴”。
继续处理you#fuli”、“tie#jiagong”,字符数组A[5][10]成为:
 zhejiagongsifulihaoyoujintie012345678901234

b.检查句型之间的相容性,决定语句生成方案
入选的n个句型是字符元数j最大、频率高的句型,生成语句时,对它们采用的越多,T中的字符元会处理得越好,生成的语句可信度越高。但是,u个句型中可能存在“不相容”现象:两个句型的某个字符元P相同,但对应的转换信息C不相同,这两个句型不能用于生成同一个语句,在数组A中就是同1列中有不同的C。如:P=“gong”,在u=0句型中C=“公”,在u=4句型中C=“工”。所以需要检查句型之间的相容性,决定语句生成方案。
首先假定可用5个句型共同生成一个语句,这个方案为01234方案。
“zhe”所对应的列中,A[u][0]均为空,不修改方案。“jia”所对应的列中,A[0][1]、A[1][1]、A[2][1]、A[3][1]为空,仅有A[4][1]=“加”,不修改方案。“gong”所对应的列中,A[1][2]、A[2][2]、A[3][2]为空,A[0][2]=“公”,而A[4][2]=“工”,0句型与4句型不相容,修改方案为:0123与1234。
“si”所对应的列中,仅有A[0][3]=“司”,不修改方案。“fu”所对应的列中,A[0][4]、A[3][4]、A[4][4]为空,A[1][4]=“福”,而A[3][4]=“浮”,1句型与3句型不相容,句型生成方案修改为012、023与124、234。
“li”所对应的列中,A[0][5]、A[2][5]、A[4][5]为空,A[1][5]=“利”,而A[3][5]=“力”,1句型与3句型不相容,与“fu”列相同,不修改句型生成方案。
“hao”所对应的列中,A[2][6]、A[3][6]、A[4][6]为空,A[0][6]=“好”,A[1][6]=“好”,相容,不修改句型生成方案。“you”所对应的列中,A[2][7]=“有”、A[3][7]=“有”,值相同,不修改方案。“jin”所对应的列中,A[0][8]、A[1][8]、A[3][8]、A[4][8]为空,仅A[2][8]=“津”,不修改方案。“tie”所对应的列中,A[2][9]=“贴”,A[4][9]=“铁”,冲突,2句型与4句型不相容,修改方案。124、234两个方案修改为12、14、23、34,则共有6个句型生成方案013、023与12、14、23、34。
6个句型生成方案中,12、14、23、34方案仅利用2个基础句型,生成的语句可信度低,放弃;确定用013、023两个方案生成两个备选语句,其文体倾向决定于句型1、2。
c.按013方案,生成语句。
先定义一个字符数组B[m],如果编程中用“拼音代字”,可以这样定义,如果编程中用拼音处理,汉语中最长音节6个字母,可定义一个字符串数组B[6][m]。使B各个元素的初值等于T中相应的音节:zhe|jia|gong|si|fu|li|hao|you|jin|tie。如果A[0][m]不为空,则令B[m]=A[0][m],B成为“zhe|jia|公|司|fu|li|好|you|jin|tie”。如果A[1][m]不为空,则令B[m]=A[1][m],B成为“zhe|jia|公|司|福|利|好|you||jin|tie”。如果A[3][m]不为空,则令B[m]=A[3][m],B成为“zhe|jia|公|司|福|利|好|有|津|贴”。
至此,主干已经形成,但仍有字符元未处理,可利用生成该语句的基础句型0、1、3的关联词,以及n个之外的参考句型,综合利用系联、频率、语法、文体、知识系统等信息,对T继续处理。T中的未处理的“zhejia”,可在数据库中找到“折价”“这家”;“you”,数据库中高频词是“有”;“hao#gongsi”的关联词有量词“家”,音“jia”;综合各种因素,T可以处理为“这家公司福利好,有津贴”,输出语句1。其文体倾向决定于“fuli#hao”Ls=L1=13。
按023方案,将T转换为“zhejia公司浮力好,有津贴”,主干已经形成,T中的未处理的“zhejia”,可在数据库中找到“折价”“这家”,“hao#gongsi”的关联词有量词“家”,音“jia”,综合各种因素,T可以处理为“这家公司浮力好,有津贴”,输出语句2。其文体倾向决定于“you#fuli”Ls=L3=8960。
对于生成的语句,应该给予评分。在上面的举例中,两个语句的差别决定于“福利好”
“有浮力”。文体倾向,“浮力”是教育、机械、物理学词语,如果该文是商务、经济、公文类文件,将语句2的文体倾向Ls=L3=8960,同段、章、篇的文体倾向Lp进行比较,Ls orLp不会等于Lp。而由“福利好”决定的语句1的文体倾向,则会相符,Lsor Lp=Lp。另外,“福利好”的频率高,也应优先考虑。语音输入中,某基本句型如果出现1次,后文重复出现的比例很高,所以频率应动态调整。语法分析可以在生成语句的过程中进行,也可以在生成语句后,对语句进行评分;在汉语中,“这家公司浮力好,有津贴”是不通的,如果能通过语法规则分析出其不当,当然很好。此外,声调、重音、语调、语音停顿等也可用于辅助处理。不过,最可靠方法是,将“公司福利”作为一个词组收入jxk,累计标示后j=k=4,生成语句,计算可信度时评价会更高。
总之,在良好的句型数据库的基础上,考虑系联、结构信息、文体倾向、语法、频率、知识系统等多种因素及各因素的权重,设计一个良好的决策处理过程,是重要的,不仅仅是提高转换正确率,更高的要求是具有一定的容错、纠错能力。
B.容错处理
与标准语音相比,多数人的语音或多或少有差错。无论是用位标记、质数代换方法,还是用倒排参考句型方法来做语言分析,我们都希望有一定的容错、乃至纠错能力。如果累计标示后,j值能准确反映S与T的字符元交集的大小,0<j<k的句型,有部分字符元与T相同,称为容错句型。其数量可能很多,意义较大的是j=k-1、j=k-2且j值大的句型,查询条件可改为类似j>k-3andj>1,R1中即可包含这些容错句型。如果累计标示后,j值不能准确反映S与T的字符元交集的大小,参考句型、容错句型、冗杂句型之间不能通过j值明确划分,可以放宽查询条件,如将查询条件修改为类似j>k-3 and j>1或j>h-3 and j>1,则有意义的容错句型基本上进入R1。在考虑容错时,对R1中的S与T的字符元进行比较,目的是剔除两种不合要求的S:1.剔除与T结构不可比的S;2.剔除与T字符元相差大的记录S,可设置参数e记录S的字符元在T中未发现的个数,当e>2时,放弃该句型。位标记中,设W=W& Wn,如W中“1”的bit数接近Wn中“1”的bit数,可初步看作容错句型,这需要“位”记数的指令快才有实用价值。质数代换检索,由于消除公约数、因数分解缺乏有效的方法,不便于找出容错句型。这里根据产生错误的具体原因,提出一些针对性的方法。
产生错误可能是方言的原因,针对大的方言,可以专门编程。但标准语言的语音输入系统,也应该有一定的方言容错能力。如,说汉语的人相当多n、l不分,“君子兰”应该读“junzilan”,而读成“junzinan”,累计标示后,“junzilan”这个句型k=3,j=2,j=k-1,是容错句型,根据它,将“junzinan”处理成“君子兰”。在“位标记”中,建库时,可把n、l分为一组,“位标记逆检索”得到R1后,按“junzinan”质数代换“逆检索”,不能发现适当参考句型,按程序设定的方言容错规则,再用“junzilan”质数代换“逆检索”,找到“君子兰”;也可以在R1中,分别用nan、lan的质数与fang的质数的乘积,去进行两次“逆检索”,得到R2,再作处理。当然,建jxk及倒排表、位标记、质数代换时,把lan、nan均作nan处理,也是可以的;也可考虑,把“junzinan”对应“君子兰”当作一个句型处理。
错误的产生也可能是用户发音偶然模糊不清。如,读“儒家”时,发音不清,似“rujia”,又似“yujia”,第一个音介于ru、yu之间。如果用倒排法,可用“rujia”、“yujia”中的一个进行累计标示,则另一个j=k-1,为容错句型,当容错句型很多时,未必能找到想要的句型,可以考虑用ru、jia累计标示后,建立一个临时表temp1贮存j=k的记录,再置j=0,用yu、jia累计标示,得到临时表temp2,合并后,删去重复的句型,再选择j=k且值大的句型做参考句型;如果用“ru、yu、jia”同时去累计标示,其中由ru、ju构成的句型需要剔除。位标记中,可以用“ru、yu、jia”同时标记,得到Wt,但质数代换,需要用“rujia”、“yujia”的质数乘积分别进行“逆检索”。
非方言区的用户,也难免念错字。如,“心广体胖”的“胖”应“pan”,但常有人读成“pang”,可以把“xinguangtipang”、“xinguangtipang”分别对应“心广体胖”,作两个句型收入收据库,如果用户念成“xinguangtipang”,程序转换成“心广体胖”,但提醒用户有误。
容错句型,可能是用户仿造的语句、词语。如,用户仿“学而优则仕”造“演而优则唱”,拼音串为“yaneryouzechang”,累计标示后,“演唱”的j=k=2,T处理为“演eryouze唱”,而“学而优则仕”的k=5,j=3,j=j-2,k、j都比较大,按仿造语句处理,依据“eryouze”从“学而优则仕”提取“而优则”三字,将T处理为“演而优则唱”。在“位标记”及“质数代换”中,如用“演唱”处理后,分析发现“eryouze”没有可信的句型参照,可尝试用“eryouze”的位值和质数值对句型库做“正检索”,得到“学而优则仕”,从中提取“而优则”来进行处理。
英语等多音节语言,还可能因连读,造成音节划分复杂,如:a piece of paper,其发音可能是[|pi:s|v|pei|p]5个字符元,也可能是[|pi:|sv|pei|p.]5个字符元,都有必要列入句型库。如果其中的[sv]在快速发音时常被弱化而不清,可以按[|pi:|pei|p]4个字符元,再一次列入句型库。red paper,其发音可能是[red|pei|p]、[re|pei|p],均为3个字符元,也列入句型库。只有这样,当用户想输入“a small piece of red paper”,即使连读造成音变,乃至其中[sv]被弱化,不清晰,剔除该音节后,进行累计标示、逆检索后,也能找到参考句型,达到良好的效果。下表中的&指示此处可插入其它单词。

总之,大量的容错,需要按各种语言的语音学、方言学理论和实验效果进行处理,也需要cpu有足够的处理速度。
数据库累计标示后,也会出现类似下面的情况:“高校”是“高等院校”的缩略语,如需要分析的拼音串为“jiaqianggaoxiaoguanli”,“jiaqiangguanli”是“加强管理”,处理后为“加强gaoxiao管理”。如果句型库中没有拼音串为j=k=2的句型gaoxiao,但是有:
 编号拼音串kj汉字串语法信息94753gaodengyuanxiao42高等院校名词词组

作为可供选择的方案,可按gaoxiao,从第94753个句型中提取“高校”二字,处理成“加强高校管理”。在“质数代换”中,需要用“正检索”去完成。
附图说明
图1是语言分析建库倒排流程图
图2是用户具体语句分析流程图
图3是用分组倒排表累计标示流程图
具体实施方式
发明内容中说明了语音输入中的倒排参考句型分析方法,这里再说明一些其它方面的实施方法,并给出一段“倒排参考句型”的示意代码。
A.其它方面的实施方法
1.建立基本句型(含词语搭配、词组、短语、词语,下同)S的数据库,给出各基本句型的字符元数k、或剔除重复的字符元数h、或同时给出k和h。地址为d,或给出句型编号n。
对于机器翻译,字符元是汉字,而且准确是首要的,响应速度相对不重要,可尽量扩大基本句型的数量。下面是汉英机器翻译jxk的简单模式,其中必须有相应的英语句型作为对应信息,还可以有汉语结构信息、汉语语法信息、英语语法信息等:
 编号汉语句型kj英语句型汉语语法信息英语语法信息95864看&电视3watch TV动宾动宾

对于搜索引擎,大量的资料需要处理,响应速度很重要,而且只是对语句进行切分,重点是收入容易出错的句型及词语搭配,所以基本句型的数量要少。其中必须有汉字串的字符串结构信息:
 编号基本句型hj频率%2895以&方式30.0075

2.建立包含所有字符元的文件,在每个字符元Pi后列出包含该字符元Pi的所有基本句型编号n,或地址d,得到倒排表。倒排表有单一表、重复表、分组表等种类。
汉语机器翻译、搜索引擎按汉字进行倒排,下表在各汉字后列出基本句型编号n:
 汉字句型编号28901,45086,67872,75123,90025035984,77925,298955,354565

其他语言机器翻译可按单词进行倒排,下表在英语单词后列出地址d:
 英语单词地址watch00001520,00012640,00091580,00378C20walk0000AAC0,0005E20,000E1540,0029E160

3.基本句型数据库jxk中是给出k值或h值,还是同时给出k值、h值,以及倒排表的种类,对累计标示的方法有影响,而它们又会进一步影响查询条件和结果集R1中冗杂的程度。
如果是分组倒排表,需要检查T中每个字符元重复的次数,按“向下兼容”的方法进行累计标示,用j=k进行查询,R1中没有冗杂。
如果是单一倒排表,当jxk有k值时,不剔除T中重复的字符元,可用j=k or j>k查询。当jxk有h值时,不剔除T中重复的字符元,可用j=h or j>h查询;剔除T中重复的字符元,可用j=h或用j=h or j>h查询。这些方案,R1均有冗杂。当jxk同时给出k和h,如果T没有重复字符元,直接累计标示,用j=k查询,如果T有重复字符元,剔除后,累计标示,用j=h查询,冗杂的S数量比较少。
如果是重复倒排表,当jxk有k值时,不剔除T中重复的字符元,可用j=k or j>k查询;剔除T中重复的字符元,可用j=k或用j=k or j>k查询。当jxk有h值时,不剔除T中重复的字符元,可用j=h or j>h查询;剔除T中重复的字符元,可用j=h or j>h查询。这些方案,R1均有冗杂。当jxk同时给出k和h,T没有重复字符元,直接累计标示,用j=h查询,如果T有重复字符元,剔除后,累计标示,用j=k查询,冗杂的S数量比较少。
如果同时有单一倒排表、重复倒排表,累计标示时,T中重复的字符元根据重复表标示,不重复的字符元根据单一表标示,用j=h or j>h查询有冗杂,用j=k表示,会有少量的冗杂。
4.查询得到的记录集,泛称为“参考句型”,其中可能有冗杂的句型,还可能有字符元结构与T不可比的句型,需要剔除,并挑选k值或h值或j值大的句型,作为分析处理T的“基础句型”,其中k比h、j更能准确反映S字符元的多少。
对于搜索引擎,若有语句T=“以便于理解的方式”,标示后得到下表:
 编号基本句型khj频率%语法信息5694以方#理解4440.006名动2895以&方式3330.025介宾

用5694的第1个字符元“以”,从T的第1个字符元开始比较,成功;用5694的第2个字符元“方”与T后续字符元比较,不成功,结构不可比,放弃该句型。用2895的第1个字符元“以”从T的第1个字符元开始比较,成功;&表示此处可插入其它成分,因此,用“方”同T的第2个字符元比较,不成功,继续同3、4、5、6字符元比较,直到第7个字符元,成功;用“式”与T后续字符元比较,成功;2895与T字符元结构有可比性。依据2895,将T切分为“以|便于理解的|方式”,可以避免正向最大匹配法(FMM)切分为“以便|于|理解|的|方式”。
对于机器翻译,如果有汉语句子“我通常看一个小时的电视”,标示后得到下表:
 编号汉语句型khj英语对应句型汉语语法信息英语语法信息786532一个小时的555for an hour时间时间958634看&电视333watch TV动宾动宾456826通常222usually频率副词频率副词0128651111动词前动词前012866111me动词介词后动词介词后

可以将句子切分为:“我|通常|看|一个小时|的|电视”,句子的核心是动词,958634的汉语和英语均为动宾结构,可以首先提取其对应英语句型“watch TV”;“一个小时的”对应“for an hour”,汉语和英语均为时间词组,根据英语语法,时间状语放在谓语和宾语之后,得到“watch TV for an hour”;汉语的“我”位于动宾结构“看&电视”前,是主语,选择012865,翻译成英语主语形式I,根据英语语法,主语在谓语前,得到“I watch TV foran hour”;“通常”是频率副词,对应的英语为“usually”,英语频率副词通常在主语、谓语之间,得到“I usually watch TV for an hour”。就是说,机器翻译,除了句型的语法信息外,还需要良好的语法系统支持。
B.vc示意代码
下面代码,在vc上通过,作示意用。使用的是重复倒排表,不剔除T中重复的字符元,相当于方案9、10。
#include<iostream.h>
void main(){
   struct Juxing{charjs[10];int k,j;};//句型、j、k值
   Juxingjxk[3]={{"babb",4,0},{"abc",4,0},{"acd",3,0}};
      Juxing*jxdz=jxk;
      struct dpr{char zi;Juxing*dizhi[5];int kong;};//倒排表的1行
      dpr dpb[4]={{′a′,},{′b′,},{′c′,},{′d′,}};
      int n,m,i,r,kz;//n是jxk句型序号,m是字符序号,i是倒排表关键词序号,r是位置,kz是空位置。
      char gjc;
      for(i=0;i<4;i++){
         gjc=dpb[i].zi;//当前搜索字母
        for(n=0;n<3;n++){//n是当前句型编号
       for(m=0;m<5;m++){//m是s字符序号
          if(gjc==jxk[n].js[m]){
          kz=dpb[i].kong;dpb[i].dizhi[kz]=jxdz+n;
          dpb[i].kong=dpb[i].kong+1;};};};};
       for(i=0;i<4:i++){//输出倒排结果
        cout<<dpb[i].zi;
        for(r=0;r<5;r++){cout<<","<<dpb[i].dizhi[r];}
        cout<<endl;};
   char text[]="abbbcef";//待分析的T
        chartc;
        for(m=0;text[m]!=′\0′;m++){
        tc=text[m];//取得T的1个字符
        for(int i=0;i<4;i++){
         if(dpb[i].zi==tc){//如果找到字母
             for(int r=0;r<dpb[i].kong;r++){dpb[i].dizhi[r]->j++;};//标示
               break;};};};
        for(n=0;n<3;n++){//输出jxk标示结果
           cout<<jxk[n].js<<","<<jxk[n].k<<","<<jxk[n].j;
           cout<<endl;};
   }

倒排参考句型语言分析方法.pdf_第1页
第1页 / 共30页
倒排参考句型语言分析方法.pdf_第2页
第2页 / 共30页
倒排参考句型语言分析方法.pdf_第3页
第3页 / 共30页
点击查看更多>>
资源描述

《倒排参考句型语言分析方法.pdf》由会员分享,可在线阅读,更多相关《倒排参考句型语言分析方法.pdf(30页珍藏版)》请在专利查询网上搜索。

倒排参考句型语言分析方法是一种基于参考句型的语言分析方法,可用于自然语言处理、智能信息处理等方面。方法是建立语言的基本句型S的数据库,包含处理信息,给出S的字符元数k;给出字段j;句型或j的地址为d、或给出句型编号n。以所有字符元Pi作为关键词,对每个字符元Pi,列出包含该字符元Pi的S或其j值的地址d、或编号n,得到倒排表。设P为需要分析的句子T的字符元,根据倒排表P后的d、或n,对数据库相应S。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1