一种基于词频的skip语言模型的训练方法与流程

文档序号:12484921阅读:来源:国知局

技术特征:

1.一种基于词频的skip语言模型的训练方法,其特征在于,包括以下步骤:

S1.收集语料,收集用于语言模型训练的中文句子,形成语料库;

S2.中文句子分词:将语料库中每个中文句子切分成一个一个单独的词语,词语之间用空格分隔;

S3.生成学习集corpus:将语料库中所有的中文句子生成训练需要的标准输入格式;

S4.统计学习集corpus中的词汇和词频,生成中文词汇表wt,即遍历所有语料库中的中文句子,列举其中出现的所有词汇和标点,统计这些词汇和标点的出现数量,形成中文词汇表wt;

S5.统计中文词汇表wt中短语和短语出现的次数,生成1-n元中文短语表pt0,即按照n-gram方式,根据选择n值的不同,列举所有n元短语并统计每个短语出现的次数,生成中文短语表pt0;

S6.设定选择性跳过标准k,根据中文词汇表wt中的词频统计结果进行k的判断,当词汇的出现次数k不大于i的所有词汇数量之和占全部词汇数量的60%以上时,取k=i;

S7.根据步骤S6中k对中文句子进行选择性跳过处理,生成skip短语表pt1;

S8.将skip短语表pt1和中文短语表pt0合并,生成新的1-n元中文短语表pt2;

S9.根据步骤S8中生成的中文短语表pt2进行语言模型的训练,得到skip-ngram语言模型。

2.根据权利要求1所述的一种基于词频的skip语言模型的训练方法,其特征在于:所述步骤S2的具体步骤为:

S21.准备中文词典:在互联网上下载尽可能全面的词典文件,读取词典中所有词汇存储到set集合中,取词典中最长词汇的字数L作为最大匹配字数;

S22.进行正向最大匹配分词,获得分词结果Rf:读入语料库中的一个中文句子,首先从句首截取L个汉字串,在词典中搜索,如果词典中存在该词汇,分出该词汇,在已分出的词汇后面截取L个汉字串,继续在词典中搜索,直到中文句子被扫描完为止;如果词典中不存在该词汇,去除第L个汉字,对剩下的L-1个汉字串,继续在词典中搜索,直到切分出一个词或剩余字串的长度为零为止;

S23.进行逆向最大匹配分词,获得分词结果Rb:读入语料库中的一个中文句子,首先从句尾截取L个汉字串,在词典中搜索,如果词典中存在该词汇,分出该词汇,在已分出的词汇前面截取L个汉字串,继续在词典中搜索,直到中文句子被扫描完为止;如果词典中不存在该词汇,去除第L个汉字,对剩下的L-1个汉字串,继续在词典中搜索,直到切分出一个词或剩余字串的长度为零为止;

S24.根据词粒度选取分词结果:依照大颗粒度词越多越好、非词典词和单字词越少越好的原则,选取Rf和Rb中的一个结果作为最终分词结果。

3.根据权利要求1所述的一种基于词频的skip语言模型的训练方法,其特征在于:所述步骤S3的具体步骤为:

S31.tokenisation:遍历语料库中所有中文句子,在词汇和标点之间插入空格,添加句子起始标志“<s>”和结束标志“</s>”;

S32.truecasing:根据词典,将语料库中每句中文句子的字和词组都转换为没有格式的形式;

S33.cleaning:设置中文句子最大长度限制,将长语句和空语句删除。

4.根据权利要求1所述的一种基于词频的skip语言模型的训练方法,其特征在于:所述步骤S6的具体步骤为:

S61.统计中文词汇表wt中出现的总词汇数量s;

S62.初始化词汇出现次数i=1;

S63.计算词频比例r,即中文词汇表中出现次数不大于i的所有词汇的数量之和count(wi)与s的比例:

<mrow> <mi>r</mi> <mo>=</mo> <mfrac> <mrow> <mi>c</mi> <mi>o</mi> <mi>u</mi> <mi>n</mi> <mi>t</mi> <mrow> <mo>(</mo> <msub> <mi>w</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> </mrow> <mi>s</mi> </mfrac> <mo>;</mo> </mrow>

S64.进行判定:当r≤60%时,i=i+1,转到步骤S62;当r>60%时,取k=i,结束。

5.根据权利要求1所述的一种基于词频的skip语言模型的训练方法,其特征在于:所述步骤S7的具体步骤为:

S71.首先从步骤S5得到的pt0中抽取所有n元短语;

S72.初始化短语表pt1,对所有n元短语中首尾词汇以外的词汇w进行跳过判断,当词汇w的词频Nw满足Nw≥k时,词汇w为高频词汇,不适合被跳过,保留词汇w不做处理;当词汇w的词频Nw满足Nw<k时,词汇w为低频词汇,适合被跳过,则删除词汇w并将剩下的低阶短语,添加到短语表pt1中;

S73.按照步骤S71和步骤S72完成所有中间词汇的选择性跳过处理,统计新短语出现的次数,生成新的skip短语表pt1。

6.根据权利要求1所述的一种基于词频的skip语言模型的训练方法,其特征在于:所述步骤S9的具体步骤为:

S91.定义词汇w的历史计数:N1+(gw)=|{wi:count(wiw)>0}|;

N1+(gw)表示语料库中词汇w在多少个词汇后面出现过,符号“g”代表出现在w之前出现过的任意一个词汇;

定义词序列的历史计数:

<mrow> <msub> <mi>N</mi> <mrow> <mn>1</mn> <mo>+</mo> </mrow> </msub> <mrow> <mo>(</mo> <msubsup> <mi>gw</mi> <mrow> <mi>i</mi> <mo>-</mo> <mi>n</mi> <mo>+</mo> <mn>2</mn> </mrow> <mi>i</mi> </msubsup> <mo>)</mo> </mrow> <mo>=</mo> <mo>|</mo> <mo>{</mo> <msub> <mi>w</mi> <mrow> <mi>i</mi> <mo>-</mo> <mi>n</mi> <mo>+</mo> <mn>1</mn> </mrow> </msub> <mo>:</mo> <mi>c</mi> <mi>o</mi> <mi>u</mi> <mi>n</mi> <mi>t</mi> <mrow> <mo>(</mo> <msub> <mi>w</mi> <mrow> <mi>i</mi> <mo>-</mo> <mi>n</mi> <mo>+</mo> <mn>1</mn> </mrow> </msub> <msubsup> <mi>w</mi> <mrow> <mi>i</mi> <mo>-</mo> <mi>n</mi> <mo>+</mo> <mn>2</mn> </mrow> <mi>i</mi> </msubsup> <mo>)</mo> </mrow> <mo>&gt;</mo> <mn>0</mn> <mo>}</mo> <mo>|</mo> <mo>;</mo> </mrow>

表示词序列在多少个词汇后面出现过,

遍历pt2表中的1-n元短语,利用上述公式计算pt2中每个词汇和短语的历史计数N1+

S92.使用历史计数代替n-gram语言模型训练中的原始计数,定义一元文法的概率计算公式为:

<mrow> <msub> <mi>p</mi> <mrow> <mi>K</mi> <mi>N</mi> </mrow> </msub> <mrow> <mo>(</mo> <mi>w</mi> <mo>)</mo> </mrow> <mo>=</mo> <mfrac> <mrow> <msub> <mi>N</mi> <mrow> <mn>1</mn> <mo>+</mo> </mrow> </msub> <mrow> <mo>(</mo> <mi>g</mi> <mi>w</mi> <mo>)</mo> </mrow> </mrow> <mrow> <munder> <mo>&Sigma;</mo> <msub> <mi>w</mi> <mi>i</mi> </msub> </munder> <msub> <mi>N</mi> <mrow> <mn>1</mn> <mo>+</mo> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>gw</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> </mrow> </mfrac> <mo>;</mo> </mrow>

推广到n元文法有:

<mrow> <msub> <mi>p</mi> <mrow> <mi>K</mi> <mi>N</mi> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>w</mi> <mi>i</mi> </msub> <mo>|</mo> <msubsup> <mi>w</mi> <mrow> <mi>i</mi> <mo>-</mo> <mi>n</mi> <mo>+</mo> <mn>2</mn> </mrow> <mrow> <mi>i</mi> <mo>-</mo> <mn>1</mn> </mrow> </msubsup> <mo>)</mo> </mrow> <mo>=</mo> <mfrac> <mrow> <msub> <mi>N</mi> <mrow> <mn>1</mn> <mo>+</mo> </mrow> </msub> <mrow> <mo>(</mo> <msubsup> <mi>gw</mi> <mrow> <mi>i</mi> <mo>-</mo> <mi>n</mi> <mo>+</mo> <mn>2</mn> </mrow> <mi>i</mi> </msubsup> <mo>)</mo> </mrow> </mrow> <mrow> <munder> <mo>&Sigma;</mo> <msub> <mi>w</mi> <mi>i</mi> </msub> </munder> <msub> <mi>N</mi> <mrow> <mn>1</mn> <mo>+</mo> </mrow> </msub> <mrow> <mo>(</mo> <msubsup> <mi>gw</mi> <mrow> <mi>i</mi> <mo>-</mo> <mi>n</mi> <mo>+</mo> <mn>2</mn> </mrow> <mrow> <mi>i</mi> <mo>-</mo> <mn>1</mn> </mrow> </msubsup> <mo>)</mo> </mrow> </mrow> </mfrac> <mo>;</mo> </mrow>

利用上述公式计算pt2中每个词汇和短语的计数概率;

S93.根据步骤S91和步骤S92,利用Kneser-Ney平滑算法公式对pt2中每个词汇和短语进行概率计算,即计算语言模型的概率,得到语言模型概率表,即语言模型文件;

计算语言模型的概率的公式如下:

<mfenced open = "" close = ""> <mtable> <mtr> <mtd> <mrow> <msub> <mi>p</mi> <mrow> <mi>K</mi> <mi>N</mi> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>w</mi> <mi>i</mi> </msub> <mo>|</mo> <msubsup> <mi>w</mi> <mrow> <mi>i</mi> <mo>-</mo> <mi>n</mi> <mo>+</mo> <mn>1</mn> </mrow> <mrow> <mi>i</mi> <mo>-</mo> <mn>1</mn> </mrow> </msubsup> <mo>)</mo> </mrow> <mo>=</mo> <mfrac> <mrow> <mi>max</mi> <mo>{</mo> <mi>c</mi> <mrow> <mo>(</mo> <msubsup> <mi>w</mi> <mrow> <mi>i</mi> <mo>-</mo> <mi>n</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>i</mi> </msubsup> <mo>)</mo> </mrow> <mo>-</mo> <mi>D</mi> <mo>,</mo> <mn>0</mn> <mo>}</mo> </mrow> <mrow> <munder> <mo>&Sigma;</mo> <msub> <mi>w</mi> <mi>i</mi> </msub> </munder> <mi>c</mi> <mrow> <mo>(</mo> <msubsup> <mi>w</mi> <mrow> <mi>i</mi> <mo>-</mo> <mi>n</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>i</mi> </msubsup> <mo>)</mo> </mrow> </mrow> </mfrac> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <mo>+</mo> <mfrac> <mi>D</mi> <mrow> <mi>c</mi> <mrow> <mo>(</mo> <msubsup> <mi>w</mi> <mrow> <mi>i</mi> <mo>-</mo> <mi>n</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>i</mi> </msubsup> <mo>)</mo> </mrow> </mrow> </mfrac> <msub> <mi>N</mi> <mrow> <mn>1</mn> <mo>+</mo> </mrow> </msub> <mrow> <mo>(</mo> <msubsup> <mi>w</mi> <mrow> <mi>i</mi> <mo>-</mo> <mi>n</mi> <mo>+</mo> <mn>1</mn> </mrow> <mrow> <mi>i</mi> <mo>-</mo> <mn>1</mn> </mrow> </msubsup> <mi>g</mi> <mo>)</mo> </mrow> <msub> <mi>p</mi> <mrow> <mi>K</mi> <mi>N</mi> </mrow> </msub> <mrow> <mo>(</mo> <msub> <mi>w</mi> <mi>i</mi> </msub> <mo>|</mo> <msubsup> <mi>w</mi> <mrow> <mi>i</mi> <mo>-</mo> <mi>n</mi> <mo>+</mo> <mn>2</mn> </mrow> <mrow> <mi>i</mi> <mo>-</mo> <mn>1</mn> </mrow> </msubsup> <mo>)</mo> </mrow> </mrow> </mtd> </mtr> </mtable> </mfenced>

其中D(0≤D≤1)是一个固定数值,计算公式如下:

<mrow> <mi>D</mi> <mo>=</mo> <mfrac> <msub> <mi>N</mi> <mn>1</mn> </msub> <mrow> <msub> <mi>N</mi> <mn>1</mn> </msub> <mo>+</mo> <mn>2</mn> <msub> <mi>N</mi> <mn>2</mn> </msub> </mrow> </mfrac> <mo>;</mo> </mrow>

其中Ni是精确计数为i的n元短语的个数。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1