【AI知识点】N-gram 模型

N-gram模型 是一种统计语言模型,用于根据前面 (N-1) 个词预测当前词。它广泛应用于自然语言处理(NLP)领域,尤其是在语言建模、机器翻译、拼写纠错、文本生成等任务中。N-gram 模型通过分析词语的共现频率,来建模一段文本中词语的相互关系。

1. N-gram 的定义

N-gram 是由 N 个连续的词或字符组成的序列。在文本中,N-gram 模型通过查看这些连续词的出现频率,来估计一个词在给定上下文中的概率。

根据 N 的值,N-gram 分为:

  • Unigram (1-gram):表示一个词的概率,即单词独立分布,不考虑上下文。
  • Bigram (2-gram):表示两个连续词的组合概率,考虑一个词的前一个词作为上下文。
  • Trigram (3-gram):表示三个连续词的组合概率,考虑两个词的上下文。
  • 4-gram、5-gram 等:以此类推。

例如,假设我们有句子“我喜欢吃苹果”:

  • Unigram:[“我”, “喜欢”, “吃”, “苹果”]
  • Bigram:[“我喜欢”, “喜欢吃”, “吃苹果”]
  • Trigram:[“我喜欢吃”, “喜欢吃苹果”]

2. N-gram 模型的工作原理

N-gram 模型的目标是根据前面的 N-1 个词来预测下一个词的出现概率。假设我们有一个词序列 w 1 , w 2 , . . . , w n w_1, w_2, ..., w_n w1,w2,...,wn,我们想要估计第 i i i 个词 w i w_i wi 在给定上下文(前面的 N − 1 N-1 N1 个词)的条件概率:

P ( w i ∣ w i − ( N − 1 ) , … , w i − 1 ) P(w_i | w_{i-(N-1)}, \dots, w_{i-1}) P(wiwi(N1),,wi1)

对于 Bigram模型(N=2),表示为:

P ( w i ∣ w i − 1 ) P(w_i | w_{i-1}) P(wiwi1)

对于 Trigram模型(N=3),表示为:

P ( w i ∣ w i − 2 , w i − 1 ) P(w_i | w_{i-2}, w_{i-1}) P(wiwi2,wi1)

更一般地,N-gram 模型的概率可以通过基于历史的条件概率估计:

P ( w 1 , w 2 , … , w n ) = ∏ i = 1 n P ( w i ∣ w i − ( N − 1 ) , … , w i − 1 ) P(w_1, w_2, \dots, w_n) = \prod_{i=1}^{n} P(w_i | w_{i-(N-1)}, \dots, w_{i-1}) P(w1,w2,,wn)=i=1nP(wiwi(N1),,wi1)


3. N-gram 模型的假设

N-gram 模型基于一个核心的马尔可夫假设(Markov Assumption):当前词只与前面 N-1 个词相关,忽略更远的上下文。这个假设简化了语言模型的构建,减少了复杂度,但也带来了某些局限性,因为现实中的语言通常有更远的上下文依赖。


4. N-gram 模型的计算方法

N-gram 模型通过统计文本中词语序列的频率来估计条件概率。具体步骤如下:

a. 收集N-gram频率

通过给定的语料库,计算每个 N-gram 组合出现的次数。例如,假设我们有如下简单句子:

“我 喜欢 吃 苹果”

  • Bigram:[“我喜欢”, “喜欢吃”, “吃苹果”]
  • Trigram:[“我喜欢吃”, “喜欢吃苹果”]

我们可以统计所有不同的N-gram组合及其出现次数。

b. 计算条件概率

假设我们要计算 Bigram 模型中 “吃” 在给定前一个词 “喜欢” 的条件概率:

P ( 吃 ∣ 喜欢 ) = 出现次数 ( 喜欢 吃 ) 出现次数 ( 喜欢 ) P(\text{吃} | \text{喜欢}) = \frac{\text{出现次数}(\text{喜欢 吃})}{\text{出现次数}(\text{喜欢})} P(喜欢)=出现次数(喜欢)出现次数(喜欢 )

通过计算这种条件概率,我们可以得到词语在特定上下文中的概率分布。

c. 平滑处理

由于实际语料库有限,一些词组合可能没有出现在训练语料中,导致某些 N-gram 的条件概率为零。为了解决这个问题,通常需要对 N-gram 模型进行平滑处理。常见的平滑方法包括:

  • 加1平滑(Laplace Smoothing):为每个N-gram组合都加上1,避免概率为零的情况。
  • Good-Turing 估计:调整低频词的概率,重新分配零概率的N-gram。

5. N-gram 模型的例子

示例1:Bigram 模型

假设我们有以下简单的句子语料库:

  • 句子1:我 喜欢 吃 苹果
  • 句子2:我 喜欢 吃 香蕉

我们要构建一个 Bigram 模型。首先,统计所有可能的词对及其出现频率:

  • P(喜欢 | 我) = 2/2 = 1
  • P(吃 | 喜欢) = 2/2 = 1
  • P(苹果 | 吃) = 1/2 = 0.5
  • P(香蕉 | 吃) = 1/2 = 0.5

接下来,我们可以根据这些概率预测某个句子的出现概率。例如,句子“我喜欢吃苹果”的概率为:

P ( 我喜欢吃苹果 ) = P ( 喜欢 ∣ 我 ) × P ( 吃 ∣ 喜欢 ) × P ( 苹果 ∣ 吃 ) = 1 × 1 × 0.5 = 0.5 P(我喜欢吃苹果) = P(喜欢 | 我) \times P(吃 | 喜欢) \times P(苹果 | 吃) = 1 \times 1 \times 0.5 = 0.5 P(我喜欢吃苹果)=P(喜欢)×P(喜欢)×P(苹果)=1×1×0.5=0.5

示例2:Trigram 模型

假设我们继续构建 Trigram 模型,我们需要统计三元词组的频率。例如:

  • P(吃 | 我, 喜欢) = 2/2 = 1
  • P(苹果 | 喜欢, 吃) = 1/2 = 0.5
  • P(香蕉 | 喜欢, 吃) = 1/2 = 0.5

因此,句子“我喜欢吃苹果”的概率为:

P ( 我喜欢吃苹果 ) = P ( 吃 ∣ 我 , 喜欢 ) × P ( 苹果 ∣ 喜欢 , 吃 ) = 1 × 0.5 = 0.5 P(我喜欢吃苹果) = P(吃 | 我, 喜欢) \times P(苹果 | 喜欢, 吃) = 1 \times 0.5 = 0.5 P(我喜欢吃苹果)=P(,喜欢)×P(苹果喜欢,)=1×0.5=0.5


6. N-gram 模型的优缺点

优点:

  • 简单易实现:N-gram 模型的基础是统计词语序列的出现频率,原理简单,易于实现。
  • 适用于大多数NLP任务:无论是拼写纠错、文本生成、机器翻译还是语言建模,N-gram 模型都能提供有效的解决方案。
  • 能够捕捉局部上下文信息:通过考虑前 N-1 个词,N-gram 模型能够捕捉句子中词语的局部依赖关系。

缺点:

  • 依赖大量数据:为了有效捕捉词语之间的关系,N-gram 模型需要大量的语料来学习更长的N-gram组合。随着N值的增加,数据稀疏性问题会变得严重,可能导致某些组合根本未出现,从而使模型无法处理这些情况。
  • 忽略长距离依赖:N-gram 模型基于马尔可夫假设,只考虑固定窗口内的上下文,而忽略了句子中词语之间的远距离依赖。对于一些语法复杂的语言结构,这种局部依赖的假设显得过于简单。
  • 平滑处理的局限性:尽管可以通过平滑方法缓解数据稀疏性问题,但这无法完全解决N-gram模型在长距离依赖中的不足。

7. N-gram 模型的应用

a. 语言模型

N-gram 模型常用于语言模型中,根据前面词语预测下一个词。它是早期自然语言处理任务中常见的语言建模方法。

b. 机器翻译

在机器翻译中,N-gram 模型被用于评估候选翻译的质量,通过比较翻译中N-gram的出现情况来判断译文的流利度。

c. 拼写纠错

N-gram 模型可以用于拼写纠错,通过比较N-gram的频率来判断词语组合是否合理,从而纠正拼写错误。

d. 文本生成

在文本生成任务中,N-gram 模型通过计算当前词语序列后续可能出现的词,来生成连贯的文本。


8. N-gram 模型的扩展

a. 基于神经网络的语言模型

为了克服N-gram模型在捕捉长距离依赖上的局限性,研究者们提出了基于神经网络的语言模型,尤其是循环神经网络(RNN)长短期记忆网络(LSTM)。这些模型通过引入记忆机制,能够有效地保留和利用更长的上下文信息,从而解决N-gram模型中的局部依赖问题。

  • RNN:可以处理序列数据,能够将前面所有的词信息传递到当前词,以此捕捉整个句子或文档的全局依赖。然而,RNN在处理非常长的文本时容易出现“梯度消失”问题,导致模型无法有效记住较早的词语信息。

  • LSTM:为了解决RNN的梯度消失问题,LSTM引入了记忆单元和门控机制,能够更好地捕捉长距离的上下文依赖。因此,LSTM在处理长文本时表现更加稳定和准确。

b. 基于Transformer的预训练语言模型

近年来,Transformer架构被广泛应用于自然语言处理任务中。与传统的RNN不同,Transformer使用自注意力机制,能够在一个句子中的所有词之间建立依赖关系,轻松处理长距离依赖。

  1. BERT(Bidirectional Encoder Representations from Transformers):

    • 双向上下文:BERT 是一种基于Transformer的预训练语言模型,能够从句子的前后两个方向同时建模词语的语义。相比于N-gram只关注固定的上下文窗口,BERT 可以更好地捕捉词语在不同上下文中的语义变化。
    • 动态词嵌入:与传统静态词嵌入模型不同,BERT根据上下文生成动态的词向量。因此,同一个词在不同的句子中可能会有不同的向量表示,这帮助模型更好地理解多义词和复杂句子结构。
  2. GPT(Generative Pretrained Transformer):

    • 单向上下文:GPT是一种基于Transformer的生成模型,通过从左到右逐步生成词语,能够用于文本生成任务。与BERT不同,GPT是单向建模,只考虑当前词之前的词作为上下文。
    • 优秀的文本生成能力:GPT擅长生成流畅的自然语言,广泛应用于对话系统、文本补全、自动写作等任务。

c. 基于深度学习的语言模型的优点

  • 长距离依赖捕捉:通过神经网络模型(尤其是Transformer架构),可以捕捉句子中的长距离依赖关系,不像N-gram那样只能依赖于固定的上下文窗口。
  • 动态建模:这些模型能够根据上下文生成动态的词嵌入,不再是固定的N-gram序列,能够更好地处理复杂的语言现象,如多义词、词义变化等。
  • 可扩展性强:通过在大规模语料上进行无监督预训练,这些模型可以轻松适应各种下游任务,如文本分类、情感分析、机器翻译、问答系统等。

9. N-gram 模型与现代语言模型的对比

特性N-gram 模型基于神经网络的模型(RNN/LSTM)Transformer 模型(BERT/GPT)
依赖范围固定的 N-1 词可以捕捉长距离依赖能捕捉长距离依赖并且考虑全局关系
上下文考虑只考虑前 N-1 个词可以结合整个序列信息双向/全局注意力机制,灵活建模
处理多义词和上下文语义无法处理能部分处理动态词嵌入,能够很好处理上下文
计算复杂度低,易于实现高,尤其是长文本的处理相对较高,但并行化处理效果好
数据需求需要大量数据平滑处理需要大量数据进行训练需要大规模语料进行预训练
应用场景语言建模、拼写纠错、文本生成语言建模、情感分析、序列预测自然语言理解、问答、生成任务

总结

N-gram模型是一种简单有效的语言建模方法,通过统计词语之间的共现频率来预测句子中词语的顺序和组合。尽管其实现简单、计算效率高,但它也存在着无法捕捉长距离依赖、数据稀疏性等局限性。随着自然语言处理技术的发展,基于神经网络和Transformer架构的语言模型逐渐取代了N-gram模型,成为处理语言任务的主流方法。这些现代语言模型能够更好地捕捉复杂语义和上下文信息,提升了机器对自然语言的理解和生成能力。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

mdm监管锁系统功能说明

普通用户后台功能说明 设备管理 设备列表 添加的设备列表 点击序列号可以进入设备详细信息 可以修改设备使用人的姓名 手机号 分组等 还可以导出报表 设备信息 展示了一些设备信息和可以下发指令 指令说明 指令分为异步和非异步 下发指令是和手机设备有交互,一…

使用默认不可变的Rust变量会踩什么坑

讲动人的故事,写懂人的代码 Rust的变量真的是名不副实。名字中明明有个“变”字,却默认不可变。还美其名曰“不可变变量”。要想让变量名副其实,还必须费心额外加个mut关键字,并必须称其为“可变变量”,才能与前者区分…

【AI人工智能】文心智能体,陪爸妈去旅游,国庆假期不容错过,旅游搭子首选

文章目录 背景创作灵感陪爸妈去旅游简介角色与目标思考路径个性化开场白调优 智能体体验总结和感受 背景 文心智能体平台,开启新一轮活动,超级创造营持续百日活动。 在AI 浪潮席卷的今天,如雨后春笋般丛生的 AI 应用,昭告着时代风…

MySQL优化实战 解决CPU100%

问题表象 在24年初有一个日经问题困扰着我们,每到正点03分DB的CPU开始打满,持续1分钟又恢复正常水平。但由于日常业务交付压力较大且权限限制没有登录DB主机的权限,大家也就得过且过一直没有去认真排查。直到某天我来兴趣了也有时间了&#…

基于51单片机的家用防火防盗控制系统设计

本设计基于51单片机的家用防火防盗控制系统,该系统通过模块间的协同作用实现了对烟雾与天然气浓度的监测、温度监测、人体红外监测、通信传输、声光报警等功能。利用按键模块设置报警的阈值,将处理后的信息与阈值进行对比。判断气体浓度和温度是否超过阈…

酒店智能门锁SDK接口pro[V10] 门锁校验C#-SAAS本地化-未来之窗行业应用跨平台架构

一、代码 int 酒店标识_int Convert.ToInt32(酒店标识);StringBuilder 锁号2024 new StringBuilder(8);//信息 "未知返回值:" bufCard_原始;GetGuestLockNoByCardDataStr_原始(酒店标识_int, bufCard_原始.ToString(), 锁号2024);StringBuilder 退…

C++语言学习(4): identifier 的概念

1. 什么是 identifier identifier 中文意思是标识符,在 cppreference 中明确提到,identifier 是任意长度的数字、下划线、大写字母、小写字母、unicode 字符 的序列: An identifier is an arbitrarily long sequence of digits, underscores…

nginx打包部署前端vue项目全过程【保姆级教程】

🤹‍♀️潜意识起点:个人主页 🎙座右铭:得之坦然,失之淡然。 💎擅长领域:前端 是的,我需要您的: 🧡点赞❤️关注💙收藏💛 是我持…

Python字符串string方法大全及使用方法[1]以及FastAPI框架文件上传的处理-client使用postman

一、Python字符串string方法大全及使用方法[1] 1. Python字符串string方法大全及意义解释 #将字符串的第一个字符转换为大写 capitalize() #返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。 center(width, fillchar) #返…

磁编码器磁铁要求和安装要求

总结来说, 磁铁需要是径向两极充磁、牌号N35、直径10mm、高度2.5mm的烧结钕铁硼磁铁。 磁铁的固定套必须是非导磁材料,比如铜、铝、塑料。 磁铁要距离电机轴至少2mm以上。 磁铁距离磁编码芯片0.5~3mm,最好1到2mm。 使用磁编码器的伺服&#…

css设置文本样式属性

目录 1.font-size:字体大小 案例:通过font-size属性设置字体的大小 1.代码 2.效果 2.font-family:字体的展现形式 案例:使用font-family属性设置字体的风格 1.代码实现 2.效果 3. font-weight:字体的粗细 案例:使用font-weight定义…

基于SSM+Vue技术的定制式音乐资讯平台

文未可获取一份本项目的java源码和数据库参考。 一、选题的背景与意义: 随着个人计算机的普及和互联网技术的日渐成熟,网络正逐渐成为人们获取信息及消费的主要渠道。然而在当前这个信息时代,网络中的信息种类和数量呈现爆炸性增长的趋势&a…

爱拼才会赢,甲骨文公司智算中心标配英伟达GPU10万颗

【科技明说 | 科技热点关注】 之前有有外媒消息,甲骨文宣布推出了多款智算集群,可通过甲骨文云基础设施提供AI训练服务,其中最顶级的一款配备了超过10万块的NVIDIA Blackwell GPU。 它一共使用了多达131072万块B200 GPU加速卡&…

单链表及其代码实现

目录 前言单链表1.1 单链表的定义1.2单链表代码实现1.2.1 头文件1.2.2 函数实现文件1.2.3 测试文件1.2.4 野指针问题 总结 前言 本文介绍单链表,主要是创销、增删改查代码实现。 注:文章中函数命名采取STL库。 单链表 1.1 单链表的定义 单链表是链线…

北京市大兴区启动乐享生活 寻味大兴 美食嘉年华 系列促销费活动

北京市大兴区启动乐享生活 寻味大兴 系列促销费活动 区商务局副局长 兰莉 致开幕辞 区餐饮行业协会会长 董志明 介绍活动内容 2024年9月30日,由大兴区商务局主办、大兴区餐饮行业协会承办,并得到高米店街道和大兴绿地缤纷城大力支持的“乐享生活 寻味大…

OceanBase—02(入门篇——对于单副本单节点,由1个observer扩容为3个observer集群)——之前的记录,当初有的问题未解决,目前新版未尝试

OceanBase—02(入门篇——对于单副本单节点,由1个observer扩容为3个observer集群)——之前的记录,有的问题未解决,新版未尝试 1、前言—安装单副本单节点集群1.1 docker安装OB 2、查看现有集群情况2.1 进入容器&#x…

SOMEIP_ETS_147: SD_Send_triggerEventUINT8_Eventgroup_2

测试目的: 验证DUT在Tester订阅事件组后,能够响应Tester触发的triggerEventUINT8方法,并将TestEventUINT8事件发送到订阅请求中端点选项指定的IP地址和端口。 描述 本测试用例旨在确保DUT能够正确处理事件组的订阅请求,并且在T…

VSOMEIP代码阅读整理(1) - 网卡状态监听

一. 概述 ​ 在routing进程所使用的配置文件中,存在如下配置项目: {"unicast" : "192.168.56.101",..."service-discovery" :{"enable" : "true","multicast" : "224.244.224.245&q…

在2核2G服务器安装部署MySQL数据库可以稳定运行吗?

阿里云2核2G服务器可以安装MySQL数据库吗?当然可以,并且可以稳定运行MySQL数据库,目前阿里云服务器网aliyunfuwuqi.com使用的就是阿里云2核2G服务器,在云服务器上安装MySQL数据库,可以稳定运行。 目前阿腾云用于运行M…