N-gram详解

文章目录

  • 一、什么是 N-gram?
  • 二、马尔可夫假设
  • 三、如何估计概率
  • 四、优缺点
  • PS:补充
  • 参考


一、什么是 N-gram?

在自然语言处理中,n-gram 是一种重要的文本表示方法。n-gram 是指给定文本中连续的 n n n 个项目,这些项目可以是声音、单词、字符或者像素等。n-gram 模型常常用于语言模型,以预测接下来的一个项目(比如一个单词)。

比如,我们需要计算 P ( w ∣ h ) P(w|h) P(wh),在给定历史 h h h 的情况下,某个单词 w w w 出现的概率。假设历史 h h h 是 “The water of Walden Pond is so beautifully”,我们想知道下一个单词是 “blue” 的概率:

P ( b l u e ∣ T h e w a t e r o f W a l d e n P o n d i s s o b e a u t i f u l l y ) P(blue|The \ water \ of \ Walden \ Pond \ is \ so \ beautifully) P(blueThe water of Walden Pond is so beautifully)

一种估算这种概率的方法是直接通过相对频率计数:取一个非常大的语料库,计算我们看到"The water of Walden Pond is so beautifully"这句话的次数,然后计算这句话后面接"blue"这个词的次数。这实际上是在回答这样一个问题:“在我们看到历史h的次数中,有多少次是接着出现词w的”,具体如下:
C ( T h e w a t e r o f W a l d e n P o n d i s s o b e a u t i f u l l y b l u e ) C ( T h e w a t e r o f W a l d e n P o n d i s s o b e a u t i f u l l y ) \frac{C(The \ water \ of \ Walden \ Pond \ is \ so \ beautifully \ blue)}{C(The \ water \ of \ Walden \ Pond \ is \ so \ beautifully)} C(The water of Walden Pond is so beautifully)C(The water of Walden Pond is so beautifully blue)

如果我们有足够大的语料库,我们可以计算这两个计数并根据上述公式估计概率。但是,即使是整个网络也不足以让我们对完整句子的计数进行良好的估计。这是因为语言具有创造性;新句子不断被创造出来,我们不能指望对像完整句子这样的大对象获得准确的计数。因此,我们需要更巧妙的方法来估计给定历史h的单词 w w w 的概率,或者整个单词序列 W W W 的概率。让我们从一些符号开始。首先,在本章中我们将继续提到单词,尽管在实践中我们通常是在像BPE(字节对编码)这样的标记上计算语言模型。为了表示特定随机变量Xi取值为 “the” 的概率,或者说 P ( X i = " t h e " ) P(X_{i} = "the") P(Xi="the"),我们将使用简化形式 P ( t h e ) P(the) P(the)。我们用 w 1 w_{1} w1 w n w_{n} wn w 1 : n w_{1:n} w1:n 表示 n n n 个单词的序列。因此,表达式 w 1 : n − 1 w_{1:n−1} w1:n1 表示字符串 w 1 , w 2 , … , w n − 1 w_{1}, w_{2}, \dots, w_{n−1} w1,w2,,wn1。对于序列中每个单词具有特定值的联合概率 P ( X 1 = w 1 , X 2 = w 2 , X 3 = w 3 , … , X n = w n ) P(X_{1} = w_{1}, X_{2} = w_{2}, X_{3} = w_{3}, \dots, X_{n} = w_{n}) P(X1=w1,X2=w2,X3=w3,,Xn=wn),我们将使用 P ( w 1 , w 2 , … , w n ) P(w_{1}, w_{2}, \dots, w_{n}) P(w1,w2,,wn)。那么,我们如何计算整个序列的概率,比如 P ( w 1 , w 2 , … , w n ) P(w_{1}, w_{2}, \dots, w_{n}) P(w1,w2,,wn)?我们可以做的一件事是利用概率的链式法则(chain rule of probability)来分解这个概率:
P ( X 1 . . . X n ) = P ( X 1 ) P ( X 2 ∣ X 1 ) P ( X 3 ∣ X 1 : 2 ) . . . P ( X n ∣ X 1 : n − 1 ) = Π k = 1 n P ( X k ∣ X 1 : k − 1 ) P(X_{1}...X_{n}) = P(X_{1})P(X_{2}|X_{1})P(X_{3}|X_{1:2})...P(X_{n}|X_{1:n-1}) \\ =\Pi^{n}_{k=1}P(X_{k}|X_{1:k-1}) P(X1...Xn)=P(X1)P(X2X1)P(X3X1:2)...P(XnX1:n1)=Πk=1nP(XkX1:k1)

使用链式法则,我们可以得到:
P ( w 1 : n ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 : 2 ) . . . P ( w n ∣ w 1 : n − 1 ) = Π k = 1 n P ( w k ∣ w 1 : k − 1 ) P(w_{1:n})=P(w_{1})P(w_{2}|w_{1})P(w_{3}|w_{1:2})...P(w_{n}|w_{1:n-1}) \\ = \Pi^{n}_{k=1}P(w_{k}|w_{1:k-1}) P(w1:n)=P(w1)P(w2w1)P(w3w1:2)...P(wnw1:n1)=Πk=1nP(wkw1:k1)

我们可以通过相乘一系列的条件概率来估计整个单词序列的联合概率。但是,使用链式法则似乎并没有真正解决问题!我们不知道如何计算在给定一长串前面单词的情况下,一个单词的确切概率,也就是 P ( w n ∣ w 1 : n − 1 ) P(w_{n}|w_{1:n−1}) P(wnw1:n1)。正如之前提到的,我们不能简单地通过统计每个单词在某个语料库中出现在每个长字符串后面的次数来进行估计,因为语言是充满创造性的,任何特定的上下文可能之前都从未出现过!


二、马尔可夫假设

n-gram模型的基本想法是,与其根据一个词的整个上下文历史来计算其出现的概率,不如只考虑它前面的几个词。比如在bigram模型中,我们不再计算一个词在所有前面词语条件下的概率,而是通过只看前一个词的条件概率 P ( w n ∣ w n − 1 ) P(w_{n}|w_{n−1}) P(wnwn1) 来进行近似计算。简单来说,就是只关注紧邻的前一个词,而不是所有前面的词。例如,之前的例子:
P ( b l u e ∣ T h e w a t e r o f W a l d e n P o n d i s s o b e a u t i f u l l y ) P(blue|The \ water \ of \ Walden \ Pond \ is \ so \ beautifully) P(blueThe water of Walden Pond is so beautifully)

可以近似概率为:
P ( b l u e ∣ b e a u t i f u l l y ) P(blue|beautifully) P(bluebeautifully)

当我们使用bigram模型来预测下一个单词的条件概率时,我们做出以下近似:
P ( w n ∣ w 1 : n − 1 ) ≈ P ( w n ∣ w n − 1 ) P(w_{n}|w_{1:n-1}) \approx P(w_{n}|w_{n-1}) P(wnw1:n1)P(wnwn1)

上述的一个词的概率只取决于前一个词的假设被称为马尔可夫假设(Markov assumption)。马尔可夫模型是一类概率模型,它假设我们可以在不回溯太多的情况下预测未来某个单位的概率。我们可以将 bigram 模型(只考虑前一个词)推广到 trigram 模型(考虑前两个词),进而推广到 n-gram 模型(考虑前 n − 1 n-1 n1 个词)。下面我们来看一下这个 n n n 元模型用于近似序列中下一个词的条件概率的通用公式。这里我们用 N N N 表示 n-gram 模型的大小,所以,当 N = 1 N = 1 N=1 表示 unigram; N = 2 N=2 N=2 表示 bigram 模型; N = 3 N=3 N=3 表示 trigram 模型。然后,我们可以用以下方法来近似给定整个上下文的情况下一个词的概率:
P ( w n ∣ w 1 : n − 1 ) ≈ P ( w n − N + 1 : n − 1 ) P(w_{n}|w_{1:n-1}) \approx P(w_{n-N+1:n-1}) P(wnw1:n1)P(wnN+1:n1)

例如,根据单词的 bigram 假设,我们可以计算完整单词序列的概率:
P ( w 1 : n ) ≈ Π k = 1 n P ( w k ∣ w k − 1 ) P(w_{1:n}) \approx \Pi^{n}_{k=1}P(w_{k}|w_{k-1}) P(w1:n)Πk=1nP(wkwk1)


三、如何估计概率

我们如何估计 bigram 或 n-gram 的概率呢?一种直观的方法叫做 maximum likelihood estimation(MLE)。在 n-gram 模型中,我们通过从语料库中获取计数,然后对这些计数进行归一化,使它们介于0到1之间,从而得到参数的 MLE 估计。对于概率模型来说,归一化意味着将计数除以某个总计数,以确保结果概率在0到1之间,并且总和为1。

例如,要计算给定前一个词 w n − 1 w_{n−1} wn1后出现某个词 w n w_{n} wn 的特定 bigram 概率,我们需要计算这个 bigram 的计数 C ( w n − 1 w n ) C(w_{n−1}w_{n}) C(wn1wn),然后用所有以相同第一个词 w n − 1 w_{n−1} wn1 开头的 bigram 计数之和来进行归一化:
P ( w n ∣ w n − 1 ) = C ( w n − 1 w n ) ∑ w C ( w n − 1 w ) P(w_{n}|w_{n-1})=\frac{C(w_{n−1}w_{n})}{\sum_{w}C(w_{n-1}w)} P(wnwn1)=wC(wn1w)C(wn1wn)

我们可以简化这个方程,因为以某个词 w n − 1 w_{n-1} wn1 开头的所有 bigram 计数之和,必须等于这个词 w n − 1 w_{n-1} wn1 的 unigram 计数:
P ( w n ∣ w n − 1 ) = C ( w n − 1 w n ) C ( w n − 1 ) P(w_{n}|w_{n-1})=\frac{C(w_{n−1}w_{n})}{C(w_{n-1})} P(wnwn1)=C(wn1)C(wn1wn)

举个例子🌰
我们来通过一个由三句话组成的小语料库举个例子。首先,我们需要在每句话的开头加上一个特殊符号<s>,这样可以为句子的第一个词提供 bigram 的上下文。同时,我们还需要在句子末尾加上一个特殊的结束符号</s>

<s> I am Sam </s>
<s> Sam I am </s>
<s> I do not like green eggs and ham </s>

以下是该语料库中一些 bigram 概率的计算:

P ( S a m ∣ a m ) = C ( a m S a m ) C ( a m ) = 1 2 = 0.5 P(Sam|am)=\frac{C(am \ Sam)}{C(am)}=\frac{1}{2}=0.5 P(Samam)=C(am)C(am Sam)=21=0.5

P ( d o ∣ I ) = C ( I d o ) C ( I ) = 1 3 = 0.33 P(do|I)=\frac{C(I \ do)}{C(I)}=\frac{1}{3}=0.33 P(doI)=C(I)C(I do)=31=0.33

P ( I ∣ < s > ) = C ( < s > I ) C ( < s > ) = 2 3 = 0.67 P(I|<s>)=\frac{C(<s>I)}{C(<s>)}=\frac{2}{3}=0.67 P(I<s>)=C(<s>)C(<s>I)=32=0.67

解释:
C ( < s > ) C(<s>) C(<s>),也就是 w n − 1 = w_{n-1}= wn1= <s> 的一共有三处,分别是 <s> I<s> Sam,以及 <s> I
其中, C ( < s > I ) C(<s>I) C(<s>I)一共有两处,所以,概率为 2 3 \frac{2}{3} 32

对于一般情况下的最大似然估计(MLE)n-gram参数估计:
P ( w n ∣ w n − N + 1 : n − 1 ) = C ( w n − N + 1 : n − 1 w n ) C ( w n − N + 1 : n − 1 ) P(w_{n}|w_{n-N+1:n-1})=\frac{C(w_{n-N+1:n-1} \ w_{n})}{C(w_{}n-N+1:n-1)} P(wnwnN+1:n1)=C(wnN+1:n1)C(wnN+1:n1 wn)


四、优缺点

优点

它考虑了词与词之间的顺序信息,从而能更好地捕捉到语义信息。

缺点

模型的数据稀疏性问题(随着n的增大,会出现许多从未在训练数据中出现过的n-gram),以及它无法捕捉到更长距离的依赖关系(超过n的范围)。

因此,在实际应用中,n-gram模型通常会与其他模型如词袋模型(Bag of Words)、TF-IDF等结合使用,以获得更好的效果。


PS:补充

处理 未见过的 n-gram(unseen n-grams)时的一些平滑技术。

Laplacian (Add-one) 平滑:

  1. Unigram
    对于单个词的概率计算,使用加一平滑的方法公式为:
    P a d d 1 ( w i ) = C ( w i ) + 1 M + ∣ V ∣ P_{add1}(w_i)=\frac{C(w_i)+1}{M+|V|} Padd1(wi)=M+VC(wi)+1

    这里, C ( w i ) C(w_i) C(wi)表示词 w i w_i wi在语料库中出现的次数, M M M是语料库中所有词的总数, ∣ V ∣ |V| V是词汇表的大小,也就是不同词的总数。加一平滑通过在每个词的计数中加1来避免某些词的概率为零的情况。

  2. Bigram
    对于两个连续词的概率计算,使用加一平滑的方法公式为:

    P a d d 1 ( w i ∣ w i − 1 ) = C ( w i − 1 , w i ) + 1 C ( w i − 1 ) + ∣ V ∣ P_{add1}(w_i|w_{i-1})=\frac{C(w_{i-1},w_i)+1}{C(w_{i-1})+|V|} Padd1(wiwi1)=C(wi1)+VC(wi1,wi)+1

    这里, C ( w i − 1 , w i ) C(w_{i-1}, w_i) C(wi1,wi)表示词对 ( w i − 1 , w i ) (w_{i-1}, w_i) (wi1,wi)在语料库中出现的次数, C ( w i − 1 ) C(w_{i-1}) C(wi1)表示词 w i − 1 w_{i-1} wi1出现的总次数。通过在词对的计数中加1,避免了某些词对组合的概率为零。

其他平滑方法:

  • Absolute discounting(绝对折扣法):通过从每个非零计数中减去一个常数来重新分配概率质量。

  • Kneser-Ney:一种更复杂的平滑方法,特别适用于处理低频n-gram,考虑了n-gram的出现背景。

这些平滑技术的目的是确保模型能够合理地处理未见过的n-gram,从而提高语言模型在新数据上的表现。


如果觉得这篇文章有用,就给个👍和收藏⭐️吧!也欢迎在评论区分享你的看法!


参考

  • N-gram Language Models by Daniel Jurafsky & James H. Martin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/57699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI服务器HBA卡的国产PCIe4.0/5.0 switch信号完整性设计与实现,支持定制(二)

表 &#xff12; 展示了 &#xff30;&#xff23;&#xff22; 板所选介质材料 &#xff30;&#xff33;&#xff32;&#xff14;&#xff10;&#xff10;&#xff10;&#xff21;&#xff35;&#xff33;&#xff17;&#xff10;&#xff13; &#xff0c; &#xff3…

FreeRTOS实时操作系统(2)

前言&#xff1a;FreeRTOS内容较多&#xff0c;分篇发布&#xff0c;较为基础&#xff0c;旨在梳理知识&#xff0c;适合入门的同学 &#xff08;基于正点原子STM32F103开发板V2&#xff09; &#xff08;对于本篇&#xff0c;若有疑问&#xff0c;欢迎在评论区留言&#xf…

萤石设备视频接入平台EasyCVR私有化视频平台变电站如何实现远程集中监控?

一、方案背景 随着城市经济的发展和电力系统的改造&#xff0c;变电站的数量和规模逐渐增加&#xff0c;对变电站的安全管理和监控需求也越来越高。视频监控系统作为重要的安全管理手段&#xff0c;在变电站中起到了关键的作用。 目前青犀视频研发的萤石设备视频接入平台EasyC…

[网络协议篇] UDP协议

文章目录 1. 简介2. 特点3. UDP数据报结构4. 基于UDP的应用层协议5. UDP安全性问题6. 使用udp传输数据的系统就一定不可靠吗&#xff1f;7. 基于UDP的主机探活 python实现 1. 简介 User Datagram Protocol&#xff0c;用户数据报协议&#xff0c;基于IP协议提供面向无连接的网…

Spring AOP原理

&#xff08;一&#xff09;Spring AOP原理 Spring AOP是基于动态代理来实现AOP的&#xff0c;但是在讲之前我们要来先认识一下代理模式 1.代理模式 其实代理模式很好理解&#xff0c;简单来说就是&#xff0c;原本有一个对象&#xff0c;然后来了另一个对象&#xff08;我们称…

26.Redis主从架构

Redis主从架构 redis主从架构搭建&#xff0c;配置从节点步骤&#xff1a; 1、复制一份redis.conf文件 2、将相关配置修改为如下值&#xff1a; port 6380 pidfile /var/run/redis_6380.pid # 把pid进程号写入pidfile配置的文件 logfile "6380.log" dir /usr/local/…

3D-IC——超越平面 SoC 芯片的前沿技术

“3D-IC”&#xff0c;顾名思义是“立体搭建的集成电路”&#xff0c;相比于传统平面SoC&#xff0c;3D-IC引入垂直堆叠芯片裸片&#xff08;die&#xff09;和使用硅通孔&#xff08;TSV&#xff09;等先进封装技术&#xff0c;再提高性能、降低功耗和增加集成度方面展现了巨大…

同世界,共北斗|遨游通讯亮相第三届北斗规模应用国际峰会!

10月24日&#xff0c;第三届北斗规模应用国际峰会在湖南省株洲市隆重开幕&#xff0c;此次峰会以“同世界&#xff0c;共北斗”为主题&#xff0c;旨在加速北斗系统的市场化进程、促进其产业化布局及国际化拓展。全国政协副主席、农工党中央常务副主席杨震讲话并宣布开幕&#…

window7虚拟机VMware与主机共享文件

文件管理器》计算机网络右键》属性》高级共享设置——全部启用 新建文件夹》右键》属性》共享》选择可以共享的用户——我这里选的是所有用户 点击高级共享》权限》保存设置——设置文件权限 文件管理器》计算机网络》右键》属性》————查看虚拟机计算机名称 主机访问 主机…

构建安全基石:网络安全等级保护定级指南

在数字化时代&#xff0c;网络安全已成为企业与个人不可忽视的重要课题。网络安全等级保护定级指南&#xff0c;作为国家指导网络安全保护的重要文件&#xff0c;为各类机构提供了精准的安全防护蓝图。本文旨在深度解析网络安全等级保护定级指南的精髓&#xff0c;助力建构全面…

HarmonyOS 5.0应用开发——Navigation实现页面路由

【高心星出品】 文章目录 Navigation实现页面路由完整的Navigation入口页面子页面 页面跳转路由拦截其他的 Navigation实现页面路由 Navigation&#xff1a;路由导航的根视图容器&#xff0c;一般作为页面&#xff08;Entry&#xff09;的根容器去使用&#xff0c;包括单页面&…

基于FPGA的以太网设计(五)

之前简单介绍并实现了ARP协议&#xff0c;今天简单介绍一下IP协议和ICMP协议。 1.IP协议 IP协议即Internet Protocol&#xff0c;是网络层的协议。 IP协议是TCP/IP协议族的核心协议&#xff0c;其主要包含两个方面&#xff1a; IP头部信息。IP头部信息出现在每个IP数据报中…

将 el-date-picker获取的时间数据转换成时间戳

在Vue.js中使用Element UI的el-date-picker组件时&#xff0c;你可以获取用户选择的日期并将其转换为时间戳。el-date-picker通常返回的是一个Date对象或一个格式化后的字符串&#xff08;取决于你如何配置它&#xff09;。下面是一个示例&#xff0c;展示了如何将el-date-pick…

Spring Cloud OAuth认证中心

在微服务架构中&#xff0c;由于不同的业务会拆分成不同的微服务&#xff0c;传统的单体项目一般是通过过滤器进行拦截校验&#xff0c;而微服务显然不可能分发到各个服务进行用户认证&#xff0c;这就需要由一个统一的地方来管理所有服务的认证信息&#xff0c;实现只登录一次…

松脂醇-落叶松脂素还原酶(pinoresinol-lariciresinol reductase, PLR)克隆与鉴定-文献精读71

菘蓝中松脂醇-落叶松脂素还原酶编码基因IiPLR2的克隆与功能分析 摘要 松脂醇-落叶松脂素还原酶(pinoresinol-lariciresinol reductase, PLR)是植物中木脂素生物合成的关键酶&#xff0c;能连续催化两步反应分别生成落叶松脂素和开环异落叶松脂素。落叶松脂素等木脂素类成分是…

Unity SpriteEditor 中的图集处理功能

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 因为unity不只能做3d&#xff0c;还有2d游戏需要大量编辑处理图片素材&#xff0c;所以需要了解Sprite&#xff08;精灵&…

KPaaS 集成平台低代码在跨境电商行业的应用

在全球化的经济浪潮中&#xff0c;跨境电商行业蓬勃发展&#xff0c;机遇与挑战并存。随着业务规模的不断扩大和市场竞争的日益激烈&#xff0c;跨境电商企业面临着诸多复杂的业务管理和技术难题。KPaaS 业务集成扩展平台以其低代码的创新特性&#xff0c;为跨境电商行业带来了…

头歌——人工智能(机器学习 --- 决策树2)

文章目录 第5关&#xff1a;基尼系数代码 第6关&#xff1a;预剪枝与后剪枝代码 第7关&#xff1a;鸢尾花识别代码 第5关&#xff1a;基尼系数 基尼系数 在ID3算法中我们使用了信息增益来选择特征&#xff0c;信息增益大的优先选择。在C4.5算法中&#xff0c;采用了信息增益率…

银河麒麟相关

最近安装了银河麒麟server版本&#xff0c;整理下遇到的一些小问题 1、vmware安装Kylin-Server-V10-SP3-General-Release-2303-X86_64虚拟机完成后&#xff0c;桌面窗口很小&#xff0c;安装vmwaretools后解决&#xff0c;下载地址http://softwareupdate.vmware.com/cds/vmw-de…

leetcode-71-简化路径

题解&#xff1a; 1、以"/"作为分隔符对字符串进行分割得到数组names; 2、初始化一个栈stack&#xff08;python中的栈使用列表实现&#xff09;&#xff1b; 3、遍历数组names&#xff1b;如果当前元素为".."且栈不为空&#xff0c;则将弹出栈顶元素&a…