更多参考: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模型的,不过在里面多加入了一些语言学规则而已。
相关推荐
在本项目中,我们将探讨如何使用Python实现N-gram模型,并特别关注Kneser-Ney平滑算法,这是一种改进的平滑技术,用于处理未在训练数据中出现过的n-gram情况。 首先,我们要理解N-gram的基本概念。N-gram是指连续的...
### 一种基于N-gram模型和机器学习的汉语分词算法 #### 概述 本文介绍了一种结合N-gram模型和机器学习技术的新型汉语分词算法。该算法旨在解决传统基于规则的汉语分词方法中存在的问题,尤其是对于未知词汇的处理...
一种基于N-gram模型和机器学习的汉语分词算法.pdf
这个压缩包文件集包含了用于执行多种NLP任务的资源,包括分词、n-gram模型构建、命名实体识别(NER)以及情感分析。接下来,我们将深入探讨这些知识点。 首先,**分词**是NLP的基础步骤,它涉及到将连续的文本序列...
N-gram模型可以被看作是一个分解文本的工具,通过滑动窗口的方式将连续的N个字符或词汇切割成一个个小的片段,每个片段被称为一个gram。 N-Gram算法的核心步骤包括: 1. **预处理**:首先,对原始文本进行预处理,...
在N-gram模型中,一个n-gram是一个包含n个连续单词的序列。例如,2-gram(bigram)由两个相邻的单词组成,如“please turn”,而3-gram(trigram)由三个单词组成,如“please turn your”。这些模型用于计算给定前n...
在自然语言处理领域,N-Gram模型是一种常用的语言模型,用于预测序列中下一个元素的概率。这里的"Bi-Gram"(二元语法)是N-Gram模型的一种特殊形式,它考虑了序列中相邻的两个元素之间的关系。这个压缩包文件"**N-...
实验报告主要涵盖了三个核心主题:中文分词、宋词生成以及n-gram模型,所有实现均采用Java编程语言。下面将分别对这三个方面进行详细解释。 **中文分词**是自然语言处理的基础步骤,旨在将连续的汉字序列切分成具有...
在这个NLP实验中,我们聚焦于三个核心概念:词频统计、句子生成以及n-gram模型在分词中的应用。 首先,词频统计是NLP的基础任务之一,它涉及计算文本中每个单词出现的次数。这项工作通常作为预处理步骤,为后续分析...
n-gram模型是用于建模和预测连续序列数据的一种统计方法,特别是在语言学中用于理解和生成文本。在哈工大的这门课程中,它被深入地讲解,适合初学者或希望巩固知识的学习者。 n-gram模型基于概率理论,它的基本思想...
在n-gram模型中,"n"代表了考虑的上下文长度,例如: - unigram模型只考虑当前的单词(n=1),即假设每个单词的出现独立于其它单词。 - bigram模型则考虑当前单词和它的前一个单词(n=2),认为当前单词的出现概率...
### 基于N-Gram的文本分类 #### 摘要与背景 本文献《基于n-gram的文本分类》由William B....未来的研究方向可能集中在进一步优化n-gram参数的选择、提高模型的泛化能力等方面,以便更好地应对实际应用中的挑战。
n-gram模型基于统计学原理,假设一个词出现的概率与其前面n-1个词有关。例如,如果n=2,我们称之为bigram模型,它考虑当前词和前一个词的关系;如果n=3,我们称之为trigram模型,考虑当前词、前一个词和前两个词的...