当前位置: 首页 > news >正文

N-Gram 模型

N-Gram 模型

  • 什么是N-Gram?
  • 为什么叫 N-Gram?
  • N-Gram怎么知道下一个词可能是什么?
  • N-Gram 能做什么?
  • N-Gram的问题

本文回答了四个问题:

  • 一、N-Gram是什么?
  • 二、N-Gram为什么叫N-Gram?
  • 三、N-Gram具体是怎么算的?
  • 四、N-Gram能用在什么地方?

什么是N-Gram?

N-gram,本质上就是一种“上下文预测”模型。我们可以简单地把它理解为

给你前面几个词,猜下一个词会是什么?

例如:

  • 打出“我爱”,接下来有可能是“你”、“北京” or “吃饭”。
    那下一个词可能是什么?
    总不能随便猜吧,我们可以通过历史数据来总结规律,看看以往的数据中,“我爱“后边最常出现的是什么,例如最常出现的是“你”,那我们就可以大胆的猜,在现在这个场景下,“我爱”后边就是“你”

N-Gram就是这样一种简单的,最基本,基于历史出现次数的,计算的下一个词出现的概率。

虽然N-Gram很基本,但是他是Transformer这类语言模型的开端。

一些想法】我是找transformer的原理的时候,突发奇想想了解一下整个语言模型的发展脉络,试图通过跟ChatGPT对话了解ChatGPT(及其老祖),师夷长技以制夷了属于是。

为什么叫 N-Gram?

Gram指代Grammer,语句中可拆分的最基本单位,在中文可以简单的认为就是一个字,一个Gram就是一个字,N指的是以多少个为一组进行统计,N-Gram就是看前边N-1个词预测当前词。
例如:

模型名称看几个词例子(预测“苹果”之前的部分)
Unigram看前 0 个(只管当前词)苹果
Bigram看前 1 个吃 苹果
Trigram看前 2 个爱 吃 苹果
4-gram看前 3 个我 爱 吃 苹果
Unigram: 只看当前词
苹果
Bigram: 看前一个词
吃 ->苹果
Trigram: 看前两个词
爱 + 吃 -> 苹果
4-gram: 看前三个词
我 + 爱 + 吃 -> 苹果

一些想法】自然而然就会想到为什么叫N-Gram,N的含义是什么,Gram的含义是什么,结果发现谜底就在谜面上,就是N-Gram实际上是通过N-1个Grammer来猜下一个Gram的,这个可能是因为N指代的是以N个Grammer为一组,那除去要猜的最后一个,自然就前提条件就是通过N-1个来猜咯。

N-Gram怎么知道下一个词可能是什么?

N-gram 模型本质上是一个 统计记忆模型

它从你提供的数据中“计数”:

  • “我 爱 你”出现了 50 次;
  • “我 爱 北京”出现了 20 次;
  • “我 爱 吃 苹 果 很”出现了 5 次;

然后当你输入“我 爱 ”,模型就在所有以“我 爱 ”开头的片段中,看接下来哪个词最常出现,就猜它是你要说的下一个词。

也就是说,N-Gram并没有没有理解语言,它只是看说这两个字之后,接下来最经常说哪个字
如果提供的文本中通篇只有**“我爱你”,而没有“我爱xxx”,那就可以认为一旦出现“我爱”,下一个字就一定是“你”了,“你”**的概率是100%。

用数学描述就是:

w n − 2 w_{n-2} wn2 w n − 1 w_{n-1} wn1接连出现的时候,接连出现 w n w_n wn的概率有多大
P ( w n ∣ w n − 2 , w n − 1 ) = Count ( w n − 2 , w n − 1 , w n ) Count ( w n − 2 , w n − 1 ) P(w_n \mid w_{n-2}, w_{n-1}) = \frac{\text{Count}(w_{n-2}, w_{n-1}, w_n)}{\text{Count}(w_{n-2}, w_{n-1})} P(wnwn2,wn1)=Count(wn2,wn1)Count(wn2,wn1,wn)

一些想法】看起来很傻瓜是不是。。。这个就是最基本的通过历史数据简单的进行概率计算,,就像是破案一样,“你出现在现场的次数最多,所以我猜真凶一定是你!”,虽然看起来有点草率,但是在某些场景下还莫名的好用。当然因为语料有限,有可能会出现训练集没有出现 C o u n t ( w n − 2 , w n − 1 ) = 0 Count(w_{n-2}, w_{n-1}) = 0 Count(wn2,wn1)=0 C o u n t ( w n − 2 , w n − 1 , w n ) = 0 Count(w_{n-2}, w_{n-1}, w_{n}) = 0 Count(wn2,wn1,wn)=0的情况,为了避免这种情况(这样就算不出下一个词可能是什么了),会用到一个称为“平滑”的技术,当然这是后话,最主要的还是概率计算的思路。

N-Gram 能做什么?

虽然简单,但 N-gram 很有用,尤其在早期的语言处理任务中。

举几个场景:

  1. 输入法联想:你打出“今天”,它给你补“星期几”、“下雨”、“放假”,都是基于 N-gram 的预测。
  2. 拼写纠错:你输错一个词,它看上下文哪个词组合最常见,来猜你原本想输入什么。
  3. 语音识别:一个音可能对应多个词,N-gram 用上下文判断哪个词组合更合理。
  4. 搜索建议:你输入“如何提高”,它自动补“工作效率”、“记忆力”,都是靠历史统计。

一些联想】我们接触到的最多的应该就是输入法联想了,还记得有一段时间流行过通过键入前两个或三个词,接下来不停的按输入法推荐的第一个词,直到出现句号,这背后其实就可能是N-Gram算法在发力,毕竟从使用的经验来看,真的是根据你平时的输入习惯来进行下一个词的提示。而且N-Gram的思路是真的简单,实现起来很快,计算量也低,结果也很可控。

N-Gram的问题

  • 只关注局部信息:它只能看到前 N 个词,如果重要信息在更前面就忽略了。
  • 缺少联想:如果某些词组很少出现(比如“我 爱 苏7 Ultra”),它可能根本没见过,就不会预测出来。
间隔很远
没见过
前文很重要的词
N-Gram看不到
出现频率极低的新组合
无法预测

一些想法】毕竟很简单的算法啦,要什么自行车,在一些特定场景能用,好用就行。

相关文章:

  • 基于Vue3开发:打造高性能个人博客与在线投票平台
  • Java---Object和内部类
  • 协程补充---viewModelScope 相关知识点
  • 蓝桥杯 19. 植树
  • 事务隔离(MySQL)
  • 5.4 - 5.5Web基础+c语言拓展功能函数
  • sqli-labs靶场11-17关(POST型)
  • 深度解析:从 GPT-4o“谄媚”到 Deepseek“物理腔”,透视大模型行为模式的底层逻辑与挑战
  • ns-3仿真_pcap抓取时间太长问题_log打印时间显示5s结束,pcap抓包抓到了10s
  • Kubernetes控制平面组件:Controller Manager详解
  • ByteArrayInputStream 类详解
  • 什么是“系统调用”
  • JS DAY3
  • STM32 PulseSensor心跳传感器驱动代码
  • 【实战教程】React Native项目集成Google ML Kit实现离线水表OCR识别
  • unity TMP字体使用出现乱码方框
  • 【QT】QT中的软键盘设计
  • Java开发者面试实录:微服务架构与Spring Cloud的应用
  • Java面试场景分析:从音视频到安全与风控的技术探讨
  • 查看并升级Docker里面Jenkins的Java17到21版本
  • 社区来电催生?多地回应:系为居民提供卫生健康服务
  • 力保夏粮丰收,粮食大省江苏多地党政主官到田间察看小麦长势
  • 魔都眼|西岸国际咖啡生活节:连接艺术、音乐与宠物
  • 特朗普称加总理将很快访美,白宫:不影响将加拿大打造成“第51个州”计划
  • 国铁集团:5月1日全国铁路预计发送旅客2250万人次
  • 体坛联播|欧冠巴萨3比3战平国米,柯洁未进入国家集训队