N-Gram 模型

本文介绍了N-Gram模型在汉语语言模型中的应用原理及其优缺点,探讨了二元和三元模型如何通过最大似然估计计算句子概率,并讨论了数据稀疏问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

N-Gram是大词汇连续语音识别中常用的一种语言模型。在语音识别中,对中文而言,我们称之为汉语语言模型(CLM, Chinese Language Model)。汉语语言模型利用上下文中相邻词间的搭配信息,在需要把连续无空格的拼音、笔划,或代表字母或笔划的数字,转换成汉字串(即句子)时,可以计算出具有最大概率的句子,从而实现到汉字的自动转换,无需用户手动选择,避开了许多汉字对应一个相同的拼音(或笔划串,或数字串)的重码问题。

该模型基于假设–第N个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。常用的是二元的Bi-Gram和三元的Tri-Gram模型。

对于一个句子T,如何计算其出现的概率呢?假设T由词序列W1,W2,W3,…Wn组成,则P(T)=P(W1W2W3…Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)。

补充下概率相关的知识:
P(B|A)=P(AB)/P(A),即P(AB)=P(B|A)P(A),P(A)>0;
P(A1A2…An)=P(A1)P(A2|A1)…P(An|A1A2…An),P(An|A1A2…An)>0.

但是N-Gram方法存在两个致命的缺陷:一是参数空间过大,不实用;另外一个是数据稀疏严重。

为了解决这个问题,我们引入了马尔科夫假设:一个词的出现仅仅依赖于它前面出现的有限的一个或者几个词。

如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为bi-Gram(二元模型),句子的概率为:
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)
=(3437/13748)(1087/3437)(786/1215)(860/3256)(19/938)(120/213)=0.000154171

ps:网上很多资料中,没有词与词频这张表,造成文章表意不清楚。


还有一个问题,就是数据稀疏,假设词表中有20000个词,如果使用bi-Gram那可能的N-Gram就有400000000个,如果是tri-Gram那可能的N-Gram就有8000000000000个!!那么对于其中很多词对的组合,在语料库中都没有出现,根据最大似然估计得到的概率将为0,最后的结果是,该模型只能算可怜兮兮的几个句子,而大部分的句子的概率为0。因此,要进行数据平滑(Data Smoothing),数据平滑的目的有两个:一是让所有的N-Gram概率之和为1,而是使所有的N-Gram的概率均不为0。

这里提及的最大似然估计方法和数据平滑概念将在后期继续概括。

内容概要:本文详细探讨了基于MATLAB/SIMULINK的多载波无线通信系统仿真及性能分析,重点研究了以OFDM为代表的多载波技术。文章首先介绍了OFDM的基本原理和系统组成,随后通过仿真平台分析了不同调制方式的抗干扰性能、信道估计算法对系统性能的影响以及同步技术的实现与分析。文中提供了详细的MATLAB代码实现,涵盖OFDM系统的基本仿真、信道估计算法比较、同步算法实现和不同调制方式的性能比较。此外,还讨论了信道特征、OFDM关键技术、信道估计、同步技术和系统级仿真架构,并提出了未来的改进方向,如深度学习增强、混合波形设计和硬件加速方案。; 适合人群:具备无线通信基础知识,尤其是对OFDM技术有一定了解的研究人员和技术人员;从事无线通信系统设计与开发的工程师;高校通信工程专业的高年级本科生和研究生。; 使用场景及目标:①理解OFDM系统的工作原理及其在多径信道环境下的性能表现;②掌握MATLAB/SIMULINK在无线通信系统仿真中的应用;③评估不同调制方式、信道估计算法和同步算法的优劣;④为实际OFDM系统的设计和优化提供理论依据和技术支持。; 其他说明:本文不仅提供了详细的理论分析,还附带了大量的MATLAB代码示例,便于读者动手实践。建议读者在学习过程中结合代码进行调试和实验,以加深对OFDM技术的理解。此外,文中还涉及了一些最新的研究方向和技术趋势,如AI增强和毫米波通信,为读者提供了更广阔的视野。
### N-gram模型概述 N-gram模型是一种基于统计的语言模型,用于预测给定前缀下某个单出现的概率。该模型的核心思想是假设当前仅依赖于其前面的 \(n-1\) 个[^1]。具体来说,对于一个长度为 \(n\) 的序列,N-gram 模型会估计条件概率 \(P(w_n|w_{n-1}, w_{n-2}, ..., w_1)\),即在已知前 \(n-1\) 个的情况下,下一个 \(w_n\) 出现的可能性。 #### 基本概念 N-gram 模型的主要特点是通过滑动窗口的方式提取文本中的连续片段,并将其视为独立事件进行建模。常见的 N-gram 类型包括 Uni-gram (单字/)、Bi-gram (双字/) 和 Tri-gram (三字/)[^2]。这些模型广泛应用于自然语言处理任务中,例如机器翻译、语音识别和文本分类等。 #### 实现方式 N-gram 模型可以通过多种技术实现。传统的方法通常涉及构建频率表并利用最大似然估计法计算概率分布。然而,在实际应用中,由于数据稀疏性问题(某些组合可能从未出现在训练集中),平滑技术被引入以提高模型性能。常用的平滑策略有加一平滑(Laplace smoothing)、Kneser-Ney 平滑等[^3]。 随着深度学习的发展,基于神经网络的语言模型逐渐取代了传统的 N-gram 方法。这类新模型不仅考虑上下文中固定数量的先前汇,还能捕捉到更复杂的模式特征。 ```python from collections import defaultdict, Counter def build_ngrams(text, n=2): words = text.split() ngrams = zip(*[words[i:] for i in range(n)]) return [" ".join(ng) for ng in ngrams] text = "this is an example sentence to demonstrate bigrams" bigrams = build_ngrams(text, n=2) print(bigrams) ``` 上述代码展示了如何简单地生成二元组(Bigram)列表。此函数接受一段字符串输入,并返回由相邻两个单组成的列表形式表示的大规模短语集合。 #### 应用场景 在自然语言处理领域,N-gram 模型有着广泛的用途。它可以用来评估子流畅度、纠正拼写错误或者推荐关键[^4]。此外,当面对大规模未标记的数据集时,这种无需额外指导即可完成的任务显得尤为重要——因为这意味着减少了人为干预的需求同时提高了效率。 尽管如此,值得注意的是,单纯依靠历史信息来进行预测存在局限性;比如无法很好地应对长距离依赖关系等问题。因此,在现代实践中,人们往往倾向于采用更加先进的架构如循环神经网络(RNNs) 或者变压器(Transformers) 来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值