本发明涉及一种缩略词组扩展方法,尤其涉及一种基于马尔可夫语言模型的缩略词组扩展方法。
背景技术
代码中的方法名、变量名等程序员在编写代码时定义的名称,往往是有意义的,也从一定程度上反映了相关代码的逻辑、业务等。但程序员在编写代码时会使用简洁的缩写,导致可读性变差,不论是人工还是自动化分析代码时都会造成一定的困扰。因此如何把这些缩写的变量名等还原成缩写前的词,从而挖掘出更有价值的信息,对理解程序逻辑业务有非常大的意义。
技术实现要素:
本发明的目的在于针对现有技术的局限和不足,提供一种基于马尔可夫语言模型的缩略词组扩展方法。
本发明的目的是通过以下技术方案来实现的:一种基于马尔可夫语言模型的缩略词组扩展方法,包括以下步骤:
(1)数据准备:从业务文档中抽取出独立词及其对应扩展词的映射关系,独立词包括标准词和缩略词,其中一个标准词的扩展词是其自身,而一个缩略词可以对应多个扩展词,扩展词可以是任意独立词或独立词组;从独立词到扩展词的映射关系称为扩展表,记为d:w→e,其中
(2)利用正则表达式,在明确书写的分词位置,对缩略词组进行切割,得到原型词序列lp=<p1,p2,...,pn>,其中明确书写的分词位置是指除字母和数字之外的符号出现的位置(例如空格、下划线、中划线等),以及字母和数字直接相邻的位置(例如“a0”中“a”与“0”之间的位置);
(3)将lp中不属于可扩展集v的原型词pi(即d(pi)=φ)认为是复合词,通过独立词边界状态模型对复合词pi进行切割,将切割所得序列替换pi在lp中的位置,得到新的序列
所述独立词边界状态模型的训练具体为:通过隐马尔可夫模型对构成独立词的字符序列进行建模,使用维特比算法求最大似然解的方式自动识别复合词中各个独立词的分割点,从而将复合词切割为独立词;
(4)对步骤(3)得到的序列
(5)通过单词序列概率模型计算每个扩展词序列le∈ep的概率,根据概率对扩展词序列排序并输出,概率最大的即为缩略词组的最合理的扩展词序列;
所述单词序列概率模型的训练具体为:根据业务环境中得到的相关文档准备语料库,利用语料库提供的句子,学习得到单词序列的马尔可夫语言模型,通过该模型评估扩展词序列中相邻单词间的依存概率,从而评估产生的扩展词序列的合理性。
进一步地,所述步骤(1)中,扩展表的内容通过人工统计或者网络爬虫等自动化的方式获取。
进一步地,所述步骤(3)中,独立词边界状态模型的训练方法和使用方法具体为:
首先,对于一个由n个字符构成的复合词w=<o1,o2,...,on>,欲将其切割为多个独立词的序列,假设正确的切割序列为
基于以上定义,利用可扩展集v,使用集合{<w,s(w)>|w∈v}作为训练集,训练一个隐马尔可夫模型mv,其中每个训练样本<w,s(w)>中,独立词w的字符序列作为观测序列,s(w)作为隐藏状态序列;关于使用观测序列和隐藏状态序列样本,训练隐马尔可夫模型的方法,在此不做赘述;如此得到的隐马尔可夫模型mv即为步骤(3)中所指的独立词边界状态模型;
在获得独立词边界状态模型mv之后,对于一个待切割的复合词
进一步地,所述步骤(5)中,单词序列概率模型的训练方法具体为:
通过马尔可夫语言模型评估单词间的依存概率来进行评估;根据业务环境中得到的相关文档准备语料库,利用语料库提供的句子,学习得到模型来评估产生的扩展词序列的合理性;
在马尔可夫语言模型中,对于一个长度为t的句子l={l1,l2,...,lt},其中li∈w(i=1..t)为句子l中第i个单词,假设句子中任意单词li出现概率p(li|li-1li-2...l1)只与前面n个单词有关(n通常取1~3)即:
p(li|li-1li-2...l1)=p(li|li-1li-2...li-n)
基于语料库中全部的句子,通过统计句子中单词序列的计数估算转移概率:
其中count(li-n...li-1li)表示单词序列li-n...li-1li在全部语料中出现的次数,count(li-n...li-1)代表上一个单词序列的前缀li-n...li-1在全部语料中出现的次数;但由于数据集的数据有限性,上述公式的分子及分母有可能会出现0,显然对于预测一个未知的单词概率等于0是不合理的,因此,本发明采用加一平滑算法来计算转移概率,通过如下公式估算转移概率:
其中|w|是独立词的总数,
基于上述估算公式得到马尔可夫语言模型,对于长度为t的扩展词序列le=<e1e2...et>∈ep的概率支持度s(le)为:
长度越长的扩展词序列,使用上述公式计算得到的概率支持度倾向于越小,相互比较时缺乏公平性;为消除这一影响,使用以下公式计算扩展词序列的归一化概率支持度snorm(le):
其中|le|表示序列le的长度。
进一步地,为所述步骤(5)训练单词序列概率模型之前,可选择预先对语料库中所有单词做词根化和词形还原处理,忽略基于同一单词词根的不同词性、不同时态和不同单复数形式的单词差别;如果这么做,在所述步骤(4)的最后,需要相应地对所得扩展词序列集合ep中每个扩展词序列中每个单词,进行相同的词根化和词形还原处理,从而匹配在步骤(5)将要使用的单词序列概率模型。
本发明的有益效果是:本发明主要提出了一种将程序中的变量名、方法名等缩略词组还原的方法,并通过独立词边界状态模型将复合词切割成独立词,以及利用单词序列概率模型来评估扩展结果,以此来提高缩略词扩展的准确度。
附图说明
图1是本发明方法整体流程示意图;
图2是缩略词组预处理的示意图;
图3是复合词切割的示意图;
图4是隐马尔可夫模型的示意图;
图5是缩略词组展开的示意图;
图6是概率计算的示意图。
具体实施方式
下面结合附图详细描述本发明,本发明的目的和效果将变得更加明显。
本发明提供的一种基于马尔可夫语言模型的缩略词组扩展方法,整体流程如图1所示,其中包括以下步骤:
(1)数据准备:根据不同的业务需求,通过人工统计或者网络爬虫等自动化的方式从相关业务文档中抽取出对应的独立词以及对应扩展词(相同的独立词在不同上下文中可能对应不同的扩展词),记录在扩展表中;
(2)模型训练
2.1独立词边界状态模型:本模型主要用于切割复合词。切割复合词的一种简单算法是把每两个相邻字母都作为可能的切割点,然后逐一验证哪一种分割可以展开,缺点是切割方式的可能性非常多,以及并没有显而易见的比较方案,决定哪一种分割最好。本发明则是首先通过隐马尔可夫模型对构成独立词的字符序列进行建模,使用维特比算法求最大似然解的方式自动识别复合词中各个独立词的分割点。具体算法模型如下:
假设对于一个由n个字符构成的复合词w=<o1,o2,...,on>,欲将其切割为多个独立词的序列,假设正确的切割序列为
如图4所示,例如对于独立词wapple=<o1=a,o2=p,o3=p,o4=l,o5=e>。o1的位置编码为0,o2,o3,o4的位置编码为1,o5的位置编码为2,因此对应的状态序列s(wapple)=<s1=0,s2=1,s3=1,s4=1,s5=2>。
利用扩展表中包含的可扩展词集v,使用集合{<w,s(w)>|w∈v}作为训练集,可以训练用于预测位置编码的隐马尔科夫链模型mv,其中训练样本<w,s(w)>中w作为观测状态,s(w)作为隐状态。
2.2单词序列概率模型:算法需要对产的扩展词序列进行合理性评估,通常情况下是每个单词分别考虑合理性,本发明通过马尔可夫语言模型评估单词间的依存概率来进行评估。根据业务环境中得到的相关文档准备语料库,利用语料库提供的句子,学习得到模型来评估产生的扩展词序列的合理性。
在马尔可夫语言模型中,假设句子中任意单词出现概率只与前面n个单词有关(n通常取1~3);也就是说,对于一个长度为t的句子l={l1,l2,...,lt},其中li∈w(i=1..t)为句子l中第i个单词,假设:
p(li|li-1li-2...l1)=p(li|li-1li-2...li-n)
基于语料库中全部的句子,通过统计句子中单词序列的计数可以估算转移概率:
其中count(vi-n...vi-1vi)表示单词序列vi-n...vi-1vi在全部语料中出现的次数,count(vi-n...vi-1vi)代表上一个单词序列的前缀vi-n...vi-1vi在全部语料中出现的次数。但由于数据集的数据有限性,上述公式的分子及分母有可能会出现0,显然对于预测一个未知的单词概率等于0是不合理的,因此,本发明采用加一平滑算法来计算转移概率,通过如下公式估算转移概率:
其中|w|是独立词的总数,
基于上述估算公式所得估算迁移概率
(3)缩略词组展开
3.1如图2所示,利用正则表达式,在明确书写的分词位置,对缩略词组进行切割,得到原型词序列lp=<p1,p2,...,pn>,其中明确书写的分词位置是指除字母和数字之外的符号出现的位置(例如空格、下划线、中划线等),以及字母和数字直接相邻的位置(例如“a0”中“a”与“0”之间的位置);
3.2将lp中不属于扩展表中独立词的原型词pi(即d(pi)=φ)认为是复合词,通过独立词边界状态模型对复合词pi进行切割,具体切割方法为:
对于待切割的复合词
将切割所得序列替换pi在lp中的位置,得到新的序列
3.3对步骤3.2得到的序列
3.4最后计算扩展词序列的概率,如图5所示,对于3.3得到的扩展词序列集合ep中的每一个扩展词序列le=<e1e2...et>∈ep,通过单词序列概率模型来计算该扩展词序列的概率支持度为:
长度越长的扩展词序列,使用上述公式计算得到的概率支持度倾向于越小,相互比较时缺乏公平性;为消除这一影响,使用以下公式计算扩展词序列的归一化概率支持度:
其中|le|表示序列le的长度。
根据归一化概率支持度对扩展形式序列排序并输出,概率支持度最大的序列为最合理的缩略词组扩展词序列。