背景技术
在打字的过程中,经常需要对已输入的文字进行修改,如删除个别的词句或插入个别的词句,这样,就需要根据新插入的词或词句生成新的整句。传统的输入法在句子中间插入词或句子与在其他场合输入时的处理方式并没有什么不同。目前比较常用的为最大概率法。下面以拼音输入法为例进行详细说明。
在拼音输入法中,一个汉语拼音串可以对应多个候选词。如“dajia”这个拼音串对应的候选词可以有:大家、打架、大甲、打假、大加等等。为了提高用户的输入体验,在设计输入法软件的时候需要为候选词进行一个合理的排序,一般是按照候选词的词频进行排序,如从“大家”到“大加”,词频逐渐减小。
最大概率法实现整句预测的基本原理是:对应用户输入的一串拼音串,一般存在着多种候选词语的组合方案,通常先找出对应这个拼音串可能出现的所有候选词,然后在这些候选词的组合中找到一个概率最大的组合方案作为最后的整句生成结果。
例如输入“womendoushipingfanren”拼音串,经过音节划分后的音节序列为“wo’men’dou’shi’ping’fan’ren”,根据这个音节序列,查询该输入法下的拼音词典,得到图1所示的词组结构。其中,每一条弧线代表一个词。
从图1中可以看出,每一条弧线对应着一个或多个候选词,从上到下按照词频从高到低排序,而且每一条弧线都隐含有词频信息(图中没有标出),词频信息指的是拼音串所对应的所有候选词中词频最大的词的词频,图1虚线框中的词即为词频最大的词。在目前的输入法中,只给用户提供一个候选整句信息,只有词频最高的词才有效,也就是说词频排在第二位以后的词,比如:窝,门,斗士等,不会在最后的候选整句结果中出现。因此图1可以简化为图2。
根据图2所示,利用两点间最短路径算法求出概率最大的一条路径,即最有可能的候选词组合方案,作为最后的整句生成结果,并作为候选词窗口的第一位输出,在图2中以虚线标出。但是使用该方法,只能选择词频最高的词,如果第一候选词不正确,用户要重新选择每个词组,准确率不高。
发明内容
有鉴于此,本发明的主要目的在于提供一种整句生成方法及装置,能简单高效地生成整句,并能提高选词的准确率。
为达到上述目的,本发明的技术方案是这样实现的:
一种整句生成的装置,该装置包括:
用于截取光标两侧上下文并对所截取的上下文分别进行分词的模块;
用于对当前拼音输入划分音节并获取每个音节候选词的模块;
用于在输入法词表中查询各音节的全部候选词、各候选词词频、上下文单个词词频、各候选词与上下文的共现词频的模块;
用于分别计算各音节候选词的条件概率并对每个音节选取条件概率最大的确定为候选词的模块;以及
用于组成整句输出的模块。
一种整句生成的方法,该方法包括:
A、截取光标两侧上下文,并对所截取的上下文分别进行分词;
B、对当前拼音输入划分音节,获取每个音节的候选词;
C、在词表中查询各音节的全部候选词、各候选词词频、上下文单个词词频、各候选词与上下文的共现词频;
D、分别计算各音节候选词的条件概率,对每个音节选取条件概率最大的确定为候选词,组成整句输出。
步骤A中根据缓冲区大小,截取光标两侧上下文,且遇到标点结束截取。步骤A中所述分词为将上下文根据输入法词表分别划分为若干个词。所述方法还包括:根据输入法词表,采用原始文本训练,存储共同出现的词的共现词频。
所述原始文本训练步骤包括:选取若干文本并扫描;对扫描结果进行分词;统计分词结果,存储单个词、各词组的共现词频;其中,共现词频词组中包含的词的个数,根据缓冲区的大小确定。
其中,A表示光标两侧上下文的单个词,B表示所述候选词;P(B)表示所述候选词出现的条件概率;a和b为0~1之间的数,且a与b之和小于1;fAB、fA以及fB分别表示A、B两个词的共现词频、A词的词频以及B词的词频;F表示所构成整句中的所有词的词频总和,N表示所构成整句中的总的词数。
本发明所提供的整句生成方法及装置,在根据候选词生成整句时,考虑到当前候选词位置两侧的上下文,这样能充分利用输入上下文的信息,生成的候选结果准确率更高,从而提高了用户的输入体验。
具体实施方式
本发明的基本思想是:对原始文本进行训练,使其包含共现词词频。通常,输入法都会带有自己的词表、划分词组的方式即分词方法,根据原始文本训练每个词出现的次数,即词频。本发明在原始文本训练过程中,除了统计单个词的词频,还要各种词组共同出现的频率,即共现词词频,并将统计结果保存在词表中备用。当用户输入文本时,选择当前拼音输入的候选词中与上下文组成整句概率最大的,与上下文生成整句输出。
本发明所述装置如图3所示,该装置包括:分词模块、统计模块、查询模块、左缓冲区、右缓冲区,其中,
分词模块用于根据输入法词表将文件划分为若干词组;
统计模块用于统计单个词、共现词的词频,将统计结果存入词表;
查询模块用于从词表中查询当前拼音输入的各候选词的词频、各候选词与上下文词组的共现词频;
左、右缓冲区分别用于存储当前拼音输入的上、下文;实际应用中,也可以将分别存储上、下文的缓冲区命名为前、后缓冲区等等,只要功能相同即可,基于此,本发明将分别存储上、下文的缓冲区统称为第一缓冲区和第二缓冲区;每次进行插入词汇的操作,对上一次缓冲区的内容进行覆盖;
整句输出模块用于计算当前拼音输入的每个候选词与上下文共现的条件概率,并选择条件概率最大的候选词与上下文构成整句输出。
采用本发明所述方法之前,根据原始文本对输入法进行训练,使其包含共现词词频,将共现词频保存在词表中。
原始训练的过程是:选取若干文本并扫描;对扫描结果进行分词;统计分词结果,存储单个词、共现词频;其中共现词频词组中包含的词的个数,根据缓冲区的大小确定。例如缓冲区存放1个词,那么只需训练两个词共现词频,如果缓冲区存放2个词,那么需要训练3个词的共现词频和两个词的共现词频,以此类推。
例如:当前光标所在位置两侧的内容是“现在|股市大涨”,这里,“|”代表光标。用户想在光标位置处插入“沪深”这个词,如图4所示,有以下步骤:
步骤1:获取光标两侧上下文,对上下文分词,并将分词结果放入缓冲区。
从光标两侧获取文本内容,获取文本的长度根据用户的需要确定,例如,设定为十个字、二十个字等等,只要不超过缓冲区能够容纳的范围即可。并且,遇到标点符号则停止,本例中取缓冲区存放两个字。
然后,将所获得的上下文内容分别传送到分词模块,由分词模块根据输入法词表对所获取的上下文分别进行分词,并将上文的分词结果放入左缓冲区,下文分词结果放入右缓冲区。对应前述例子,将“现在”这个词存放左缓冲区,将“股市”这个词存放到右缓冲区。
步骤2:对当前拼音输入划分音节,获取每个音节的候选词,并在词表中查询各音节的全部候选词、各候选词词频、上下文单个词词频、各候选词与上下文的共现词频。
根据候选词的上下文,由分词模块对“hu’shen”划分音节后,对应的词输出情况如图5所示:查询模块从左、右缓冲区分别调取上下文,并在词表中寻找各候选词的词频、各候选词与上下文分别共现的共现词频,将查询结果传送到整句输出模块。
本例中,查询模块根据上下文,查找“护身”、“沪深”、“护身股市”、“现在护身”、“现在沪深”、“沪深股市”的词频,并传送到整句输出模块。将“现在”、“hushen”、“股市”分别标记为A、B、C,其中“hushen”的对应的候选词,分别标记为B1、B2、B3等等。
步骤3:确定每个音节的候选词,并输出整句。
计算每个音节的全部候选词与上下文构成整句的概率,选择与上下文构成整句概率最大的候选词输出。
整句中B出现的概率可根据如下公式计算:
其中,P(B)表示各候选词出现的条件概率,a和b是0~1之间的数,并且a和b之和要小于1,根据原始文本的训练经验或者选取最大概率情况下的候选词的最优化方法得出a、b的值,fAB、fA、fB分别表示AB两个词共现词频、A词的词频、B词的词频,F表示所构成整句中的所有词的词频总和,N表示所构成整句中的总的词数。本实施例中,a取0.85,b取0.12。如果A词在原始文本中没有出现,则词频计为0,如果A词、B词两个词没有共现,则共现的词频也计为0。fAB、fA、fB均从词表中查找,F是指A词、B词、C词的总的词频,N在此处取3。对各候选词B的每个候选项B1、B2,分别计算PB1、PB2,选择概率大的输出。
如果两个词共同出现过,那么,该两个词之间存在条件概率,这两个词的概率乘积要大于没有共同出现过的两个单独词。从词表知,“沪深”和“股市”存在共现词频,而“护身”和“股市”不存在共现词频,则“沪深”与“ 股市”的概率乘积要大于“护身”和“股市”之间的概率乘积,从而选择“沪深”作为当前拼音输入的最终选项,整句输出模块输出“现在沪深股市”。
下面再举一个例子,说明当缓冲区存放多个词时的情况。
本例中,当前光标所在位置两侧的内容是“周末我们去|十三陵水库游玩”,用户想输入“北京市昌平区”两个词,缓冲区存放两个词,那么,整句生成方法包括:
步骤601:获取光标两侧上下文,对上下文分词,并将分词结果放入缓冲区。
将“周末”、“我们”、“去”、“十三陵”、“水库”、“游玩”,分别标记为词D、E、H、L、M和S。左缓冲区按照句子原来的顺序依次存放“我们”、“去”;右缓冲区依次存放“十三陵”、“水库”。
步骤602:对当前拼音输入划分音节,获取每个音节的候选词,并在词表中查询各音节的全部候选词、各候选词词频、上下文单个词词频、各候选词与上下文的共现词频。
对“beijingshichangpingqu”的划分结果为“beijingshi”、“changpingqu”、标记为词J、词K,查找上下文中的单个词词频、各候选词的词频,即词D、E、H、L、M和S的词频fD、fE、fH、fL、fM和fS,词J、词K候选词各有两个分别为J1“北京市”、J2“背景是”、K1“昌平区”、K2“长平区”,词频分别为fJ1、fK1、fJ2、fK2,以及计算中需要的上下文共现词频fEH、fHJ1、fHJ2、fJ1K1、fJ1K2、fK1L、fK2L、fEHJ1、fEHJ2、fHJ1K1、fHJ1K2、fHJ2K2、fHJ2K2、fJ1K1L、fJ1K2L、fJ2K1L、fJ2K2L、fK1LM、fK2LM。
步骤603:确定每个音节的候选词,并输出整句。
计算每个音节的各候选词与上下文构成整句的概率,选择与上下文构成整句概率最大的各候选词组成整句输出。
此时,计算每个各候选词出现的条件概率的公式,以词J为例,为:
fEHJ为词J与缓冲区中上文词E、词H共现词频,fEH为缓冲区中的词E和词H共现词频,fJ为词J的词频;此时的总词数N为缓冲区的词加上当前要输入的词,即N为6;F即为根据不同候选词所选6个词的总词频;a、b的取值同实施例一。
根据公式(2),分别计算当前拼音输入的各个候选词与缓冲区中的上下文构成整句的条件概率PJ1、PJ2、PK1、PK2,选择概率最大的候选词J1、K1组合输出,得到“北京市昌平区”输出。
类似的,当缓冲区中存放多个词,当前的光标处需要插入多个词的时候,要预先训练相应个数的词的共现频率,并计算欲插入词的每个候选词在整句输出时的条件概率,以其中条件概率最大的构成整句输出,该输出结果可能在语意上不完全是一句话,但是避免了对词汇的一个一个的选择过程,大大提高了用户输入的满意度。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。