N-Gram模型的建立方法与流程

文档序号:14403259阅读:2451来源:国知局
本发明具体涉及一种n-gram模型的建立方法。
背景技术
::随着国家经济技术的发展和人们生活水平的提高,自然语言处理技术也已经得到了长足的发展。自然语言处理技术的产生可以追溯到20世纪50年代,它是一门集语言学、数学、计算机科学和认知科学等于一体的综合性交叉学科。随着文字和语音数据规模的不断增加,人们迫切需要实用的自然语言处理技术来帮助人们打破语言屏障,便于交流和沟通。与此同时,随着我国综合国力日益强大,中文信息处理在近几年来愈发收到广泛关注。汉语作为全世界使用量第一多的通用语言,其语言结构具有自身独特性。现阶段有许多基于统计语言模型的工具,最典型的平台有irstlm和srilm。srilm是著名的约翰霍普金斯夏季研讨会(johnshopkinssummerworkshop)的产物,诞生于1995年,由sri实验室的andreasstolcke负责开发维护。更确切的说,srilm并不是因为机器学习而诞生的。它主要是为语音识别而开发的,用来构建和应用统计语言模型,用于语音识别,统计标注和切分以及机器翻译。srilm最核心,最重要的模块是n-gram模块,被用来计算语言模型的困惑度。irstlm是意大利trentofbk-irst实验室开发的语言模型训练工具包,其开发的目的是处理较大规模的训练数据,譬如google提供给ldc的训练好的语言模型是在海量单语语料库(8trillion-wordtexts)的基础上训练的。在大规模语言模型的训练和使用上,irstlm较srilm有较大的优势,其内存消耗仅是srilm的一半。n-gram模型是大词汇连续语音识别中常用的一种统计语言模型,利用上下文中相邻词间的搭配信息,统计词频,计算出具有最大概率的句子(文本纠错),或者进行文本拼写检查。n-gram基于马尔科夫假设:第n个词的出现只与前面n-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。在拼写检查的应用中,n-gram模型由于存在数据的稀疏性,需要加上平滑算法才能表现出良好的效果。平滑技术(smoothing)是用来解决这类零概率问题的。其基本思想可以形象的比喻为“劫富济贫”,即提高低概率或零概率,降低高概率,使统计语言模型可求。其中,有回退(backoff)和插值(interpolate)两种方法来实现平滑。与此同时,随着网络文本数据的不断增加,模型训练需要的语料规模也在不断扩大。通常在单节点模式下,训练一次模型需要几小时到十几小时不等。开源工具包srilm和irstlm以c++作为开发语言,其n-gram模型的建立流程已经非常完善,且速度表现也较好。但是,在面对大数据量或者海量数据的情况下,该模型的拓展性不强,严重制约了该模型的应用。技术实现要素:本发明的目的在于提供一种在海量数据中拓展性也较强,而且查询速度较快的n-gram模型的建立方法。本发明提供的这种n-gram模型的建立方法,包括如下步骤:s1.获取原始语料;s2.对步骤s1获取的原始语料进行分词;s3.对步骤s2得到的分词结果进行词频统计;s4.对n-gram模型进行平滑处理,从而得到最终的n-gram模型。步骤s1所述的获取原始语料,具体为通过python爬虫在互联网上进行文本信息的查找,从而获取原始语料。步骤s2所述的分词,具体为采用dict字典文件进行分词。步骤s3所述的单词统计,具体为采用sparkrdd编程进行原始语料的词频统计。步骤s4所述的平滑处理,为采用基于witten-bell平滑的平滑处理。所述的基于witten-bell平滑的平滑处理,具体为采用如下步骤进行处理:a.采用如下公式计算条件概率和回退率:若为一元文法数,则:条件概率回退率若为n元文法数,则:条件概率回退率b.采用步骤a得到的条件概率和回退率,构建平滑后最终的n-gram模型。步骤s4所述的对n-gram模型进行平滑处理,具体为采用分布式平台对每一个文法数的条件概率和回退率进行计算,从而提高数据处理的效率。所述的n-gram模型的建立方法,还包括如下步骤:s5.利用hbase数据库存储每一个文法数的条件概率和回退率,从而提高n-gram模型在应用时的数据读取效率。本发明提供的这种n-gram模型的建立方法,通过建立witten-bell平滑对n-gram模型进行平滑,同时采用分布式平台计算建模过程中的参数,并采用hbase数据库对计算的参数进行存储和读取,因此本发明方法在应对海量训练语料的情况下,其拓展性非常好,而且方法的建模速度和查询速度均较快。附图说明图1为本发明方法的方法流程图。图2为本发明方法的分词及统计结果文件示意图。图3为本发明方法在size-up中的仿真实验效果图。图4为本发明方法在scale-up中的仿真实验效果图。具体实施方式如图1所示为本发明方法的方法流程图:本发明提供的这种n-gram模型的建立方法,包括如下步骤:s1.通过python爬虫在互联网上进行文本信息的查找,获取原始语料;s2.采用dict文件等类似工具,对步骤s1获取的原始语料进行分词;完成之后,文本中每一句话的中文词汇都被下划线所分隔开;s3.采用sparkrdd编程对步骤s2得到的分词结果进行单词统计;其结果如图2所示:每一行都是分词之后的一个ngram句子(最大为5-gram)。例如(你_看,1)是一个2-gram,括号中的文字被称为2元文法数(2-gram),后半部分的1代表该2元文法数在所有文本信息里统计出来的词频;s4.对n-gram模型进行平滑处理,从而得到最终的n-gram模型;采用基于witten-bell平滑的平滑处理,具体包括如下步骤:a.采用如下公式计算条件概率和回退率:若为一元文法数,则:条件概率回退率若为n元文法数,则:条件概率回退率式中c(w1)为一元文法数的单词词频;c(*)为语料所有一元文法数的词频总和;n(w1)为一元文法数的后接单词分支数;为n元文法数(wi-n+1wi-n+2..wi)的频数;为n-1元文法数(wi-n+1wi-n+2..wi-1)的频数;为n元文法数(wi-n+1wi-n+2..wi)的后接单词分支数;为n-1元文法数(wi-n+1wi-n+2..wi-1)的后接单词分支数。b.采用步骤a得到的条件概率和回退率,构建平滑后最终的n-gram模型;在步骤a的计算过程中,可以采用分布式平台对每一个文法数的条件概率和回退率进行计算,从而提高数据处理的效率;s5.利用hbase数据库存储每一个文法数的条件概率和回退率,从而提高n-gram模型在应用时的数据读取效率。hbase的表结构为单列簇,设名称为wb_para。其中单列簇有两列,分别存储条件概率和回退率。rowkey为1~n文法数。同时在写入hbase时使用bulkload写入机制,进一步提高写入速度。bulkload作为一种海量数据导入hbase的方式,不同于传统方式,比如tableoutputformat形式。bulkload使用keyvalue方法将rdd转换成hbase表数据形式,保存为hfile,并最终load到hbase中进行存储并使用。在具体实施时,在只考虑5-gram及以下的情况时,去具体实施方式如下:s1.首先爬虫找互联网中海量文本信息,并存储在hdfs上;s2.通过dict文件做分词。完成对文本信息中语句的划分。完成之后,文本中每一句话的中文词汇都被下划线所分隔开。如附图2中的(你_看,1),这就是一个2-gram;s3.在分词之后,通过rdd编程完成分布式的wordcount步骤(词频统计)。如附图2所示。每一行都是一个分词之后的ngram句子(最大为5-gram)。例如(你_看,1)是一个2-gram,括号中的文字被称为2元文法数,后半部分的1代表该2元文法数在所有文本信息里统计出来的词频;s4.求得分词后每一个文法数的条件概率和回退率,这也是witten-bell平滑算法的两个关键参数。本发明采用rdd编程完成分布式模型构建。其算法步骤如下。s4.1算法输入数据为wordcount词频统计后的文本数据,存储在hdfs上。我们将1~5-gram和2~5-gram分开存储在两个文本文件中;s4.2初始化sparkcontext,分布读取1~5-gram和2~5-gram的两个文本文件,并将两个文本文件的数据转化为tuple元组,分别转化为新的rdd1和rdd2;s4.32~5-gram的rdd2做combinebykey操作,目的是将具有相同父文法数的文法数整合在一起,记为list。再计算list的长度,存入tuple,记为rdd3。这个长度数据就是每个文法数后接不同单词的数目(分支数)。5-gram作为最长文法数,分支数为0;s4.4,将词频的rdd1和rdd3做map整合成新的rdd4,rdd4的tuple为(文法数,词频,分支数)。计算每个文法数的条件概率和回退率,形成新的rdd5。s5.将rdd5做排序,使用bulkload方式将每个文法数的条件概率和回退率存入hbase。为了能够更直白的说明本发明方法的优势,下面结合实例和实验结果图进行说明:wordcount词频统计后,得到1~5-gram文法数词频文本文件。比如(b,2),(a_b,2),(b_a_b_a_c,1)等等。同时生成一个2~5-gram文法数词频的文本文件。初始化rdd,1~5-gram文本文件初始化为rdd1,2~5-gram文本文件初始化为rdd2,rdd2做map操作转换为rdd3,每一个元素为(父文法数,文法数)。比如(b_a_b,1)变为(b_a,b_a_b),将rdd3做combinebykey得到(父文法数,list(文法数)),比如(b_a,list(b_a_b,b_a_c))。计算list长度,最终rdd3的tuple转变为(父文法数,分支数),比如(b_a,2)。将rdd1和此时的rdd3整合为rdd4,rdd4的每一个元素为(文法数,词频,分支数),比如(b_a,2,2)。利用下述平滑公式,分别计算1-gram文法数和2~5-gram文法数的条件概率和回退率。unigram(一元文法数):其中c(*)为一元文法数的总个数。n-gram(n元文法数):其中c(w1)为一元文法数的单词词频;c(*)为语料所有一元文法数的词频总和;n(w1)为一元文法数的后接单词分支数;为n元文法数(wi-n+1wi-n+2..wi)的频数;为n-1元文法数(wi-n+1wi-n+2..wi-1)的频数;为n元文法数(wi-n+1wi-n+2..wi)的后接单词分支数;为n-1元文法数(wi-n+1wi-n+2..wi-1)的后接单词分支数;计算结果取对数,将结果采用bulkload方式写入hbase做存储。本方案对基于witten-bell平滑的ngram模型的构建,可以达到和自然语言处理工具irstlm相同的结果。并且,当文本数据量非常大时,在分布式环境的前提下,本方案拓展性非常好。实验环境的分布式平台由四个节点组成,总内存大小为128g,每个节点都搭配4核处理器。输入数据为6g原始语料,经过wordcount词频统计后增大为35g。实验结果如附图3和附图4所示。图3为size-up比较实验。size-up实验主要比较的是,在各节点相同内存下,不同大小数据集,作业的效率。从附图中可以看出,首先分布式多节点的环境下,本方案相较于单节点环境效率提高明显。图4为scale-up比较实验。scale-up公式定义为:f=t1/tn,t1为一个节点,tn为2~4个节点,用于比较集群的拓展性。从附图中可以看出,分布式环境中,随着节点的增多,集群的拓展性较好。比如,相较于单节点,两个节点的分布式环境实验运行时间减少了1.7倍到2倍之间,四个节点的分布式环境相较于单节点运行时间减少了3.2倍到4倍之间。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1