当前位置: 首页 > 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看不到
出现频率极低的新组合
无法预测

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

http://www.xdnf.cn/news/286579.html

相关文章:

  • 慢sql处理流程和常见案例
  • Webug4.0靶场通关笔记16- 第20关文件上传(截断上传)
  • 数据结构——算法复杂度
  • 部署GM DC Monitor 一体化监控预警平台
  • Python 整理3种查看神经网络结构的方法
  • 3DGS-slam:splatam公式
  • 开源模型应用落地-qwen模型小试-Qwen3-8B-推理加速-vLLM(一)
  • Git 标签管理
  • 【STM32 学习笔记】GPIO输入与输出
  • Scrapy分布式爬虫实战:高效抓取的进阶之旅
  • 【NLP】30. 深入理解 In-Context Learning 的核心机制与策略
  • PrivKV: Key-Value Data Collection with Local Differential Privacy论文阅读
  • vue+element 导航 实现例子
  • HarmonyOS Device Connector(hdc)
  • linux 中inotify与inode的关系是什么?
  • PandasAI:对话式数据分析新时代
  • 实战设计模式之中介者模式
  • 基于Boost库、Jsoncpp、cppjieba、cpp-httplib等构建Boost搜索引擎
  • Lua 元表和元方法
  • 重名导致does not name a type
  • 青少年编程与数学 02-018 C++数据结构与算法 25课题、图像处理算法
  • 科学养生,开启健康生活新篇章
  • [machine learning] Transformer - Attention (四)
  • ModBus协议详解:从基础概念到C#实现RTU与TCP通讯
  • Spring Boot 集成 Solr 的详细步骤及示例
  • C# WPF 布局
  • 算法笔记.约数个数
  • 基于muduo库实现高并发服务器
  • Nginx核心功能2
  • Linux:权限的理解