更多参考:http://www.52nlp.cn/tag/n-gram
N-Gram是大词汇连续语音识别中常用的一种语言模型,对中文而言,我们称之为汉语语言模型(CLM, Chinese Language Model)。汉语语言模型利用上下文中相邻词间的搭配信息,在需要把连续无空格的拼音、笔划,或代表字母或笔划的数字,转换成汉字串(即句子)时,可以计算出具有最大概率的句子,从而实现到汉字的自动转换,无需用户手动选择,避开了许多汉字对应一个相同的拼音(或笔划串,或数字串)的重码问题。
该模型基于这样一种假设,第n个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。
在介绍N-gram模型之前,让我们先来做个香农游戏(Shannon Game)。我们给定一个词,然后猜测下一个词是什么。当我说“艳照门”这个词时,你想到下一个词是什么呢?我想大家很有可能会想到“陈冠希”,基本上不会有人会想到“陈志杰”吧。N-gram模型的主要思想就是这样的。
对于一个句子T,我们怎么算它出现的概率呢?假设T是由词序列W1,W2,W3,…Wn组成的,那么P(T)=P(W1W2W3Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)
补充知识:
但是这种方法存在两个致命的缺陷:一个缺陷是参数空间过大,不可能实用化;另外一个缺陷是数据稀疏严重。
为了解决这个问题,我们引入了马尔科夫假设:一个词的出现仅仅依赖于它前面出现的有限的一个或者几个词。
如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为bigram。即
P(T) = P(W1W2W3…Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)
≈P(W1)P(W2|W1)P(W3|W2)…P(Wn|Wn-1)
如果一个词的出现仅依赖于它前面出现的两个词,那么我们就称之为trigram。
在实践中用的最多的就是bigram和trigram了,而且效果很不错。高于四元的用的很少,因为训练它需要更庞大的语料,而且数据稀疏严重,时间复杂度高,精度却提高的不多。
那么我们怎么得到P(Wn|W1W2…Wn-1)呢?一种简单的估计方法就是最大似然估计(Maximum Likelihood Estimate)了。即P(Wn|W1W2…Wn-1) = (C(W1 W2…Wn))/(C(W1 W2…Wn-1))
剩下的工作就是在训练语料库中数数儿了,即统计序列C(W1 W2…Wn) 出现的次数和C(W1 W2…Wn-1)出现的次数。
下面我们用bigram举个例子。假设语料库总词数为13,748
P(I want to eat Chinese food)
=P(I)*P(want|I)*P(to|want)*P(eat|to)*P(Chinese|eat)*P(food|Chinese)
=0.25*1087/3437*786/1215*860/3256*19/938*120/213
=0.000154171
ps:网上很多资料中,表1,词与词频的张表是没有的,所以造成文章表意不清。
这里还有一个问题要说,那就是数据稀疏问题了,假设词表中有20000个词,如果是bigram那么可能的N-gram就有400000000个,如果是trigram,那么可能的N-gram就有8000000000000个!那么对于其中的很多词对的组合,在语料库中都没有出现,根据最大似然估计得到的概率将会是0,这会造成很大的麻烦,在算句子的概率时一旦其中的某项为0,那么整个句子的概率就会为0,最后的结果是,我们的模型只能算可怜兮兮的几个句子,而大部分的句子算得的概率是0. 因此,我们要进行数据平滑(data Smoothing),数据平滑的目的有两个:一个是使所有的N-gram概率之和为1,使所有的N-gram概率都不为0.有关数据平滑的详细内容后面会再讲到,这里不再赘述。
了解了噪声信道模型和N-gram模型的思想之后,其实我们自己就能实现一个音词转换系统了,它是整句智能输入法的核心,其实我们不难猜到,搜狗拼音和微软拼音的主要思想就是N-gram模型的,不过在里面多加入了一些语言学规则而已。
相关推荐
这是一篇关于自然语言处理的论文,介绍了汉语分词的n-gram算法,绝对值得推荐
一种基于N-gram模型和机器学习的汉语分词算法.pdf
一种基于N-gram模型和机器学习的汉语分词算法,不错的分词算法。
p数据包 用于分词,n-gram模型,情感分析等 p数据包 用于分词,n-gram模型,情感分析等
本项目利用python实现N-gram语言模型,采用的平滑算法是Kneser-Ney平滑。
针对哈萨克文文本中机构名构成特点,提出了一种基于N-gram语言模型的哈萨克文机构名可信度计算方法,并以机构名尾词为触发词,构建了一个哈萨克文机构名识别系统。系统分为训练和识别两个模块,识别过程是:首先从...
NLP实验,实现了词频统计,句子生成和n-gram模型进行分词
中文分词/宋词生成/n-gram模型/全部java源代码,课程设计报告。全部源代码,详细注释。
一种基于n-gram短语的文本聚类方法研究
n-gram tree一个使用N-Gram统计语言模型作预测的数,当找不到(即某一环节概率为0时)自动取用低阶的(N-1)-Gram模型,训练速度巨快,储存空间小。支持增量式训练。支持序列化后压缩再保存到本地,也可以读出(要不然...
资源包含文件:设计报告word+源码及数据+项目截图 通过分析页面发现,热点精选部分的数据是实时更新的,并且一直下拉刷新,就可以一直刷新出新的数据,这样就可以一次性爬出来目标数量的文章。这里遇到一个问题就是...
N-Gram(有时也称为N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理。另外一方面,N-Gram的另外一个作用是用来评估两个字符串之间...
基于n-gram频次的语法错误自动纠正方法,杨一枭,谭咏梅,针对冠词、介词错误、名词单复数错误、动词形式错误、主谓一致错误,本文提出了一种基于n-gram投票策略的语法错误自动纠正(Grammatic
第05章 n-gram语言模型 共78页.ppt 第06章 Markov模型 马尔科夫模型 共57页.ppt 第07章 句法分析技术 共61页.ppt 第08章1 问答系统基础 共24页.ppt 第08章2 问答式信息检索的理论与方法研究进展报告 共31页.ppt 相似...
NLP中的标记化和构建N-Gram模型该项目涉及创建一个标记化器形式的草稿,该标记器用于对自然语言处理中常见的词素(例如单词,名称,URL,标点,货币等)进行标记化。在要标记化的文本中,通常会忽略空格。 然后,...
针对基于汉语词的N-gram模型统计数据稀疏问题和应用域变化造成原统计模型识别性能降低,提出具有应用域适应能力的N-gram模型平滑算法。对两种应用域的语料进行了前、后向。到3元文法统计,采用隐马尔可夫模型(HMM)在...
使用N-Gram模型基于特征扩展的短文本分类
该程序基于Bi-Gram模型算法思想对一训练文本中的词汇建立语言模型,而后对测试文本中的语句进行预测出现概率
自然语言处理(Natural Language Processing),马尔科夫假设,根据给出的语料库(大量语法合法的文本),训练n-gram模型。根据训练出的模型,判断测试集中每个句子是不是语法合法的句子.。根据语料库训练n-gram模型。...
基于N-Gram的英文搜索引擎,朱鹏,谭咏梅,随着互联网的迅速发展,Web文本的规模和多样性等优点在语言研究、英语教学等任务中发挥着重要作用。本文尝试整合信息检索、词性标