【AI知识点】N-gram 模型

news2024/10/10 3:21:58

更多AI知识点总结见我的专栏:【AI知识点】
AI论文精读、项目和一些个人思考见我另一专栏:【AI修炼之路】
有什么问题、批评和建议都非常欢迎交流,三人行必有我师焉😁

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.coloradmin.cn/o/2200871.html

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

相关文章

虚拟机没有网络怎么解决

CentOS7为例 进入虚拟网络编辑器 1.更改设置 2.选中NAT模式点击3点击移除网络 4添加网络,随便选一个 5.点开NAT设置,记住网关 6.DHCP设置,注意虚拟机设置ip必须在起始ip和结束ip范围内 进入虚拟机网络适配器,自定义选中第4步操作…

Tailwind Css的使用

1.Tailwind Css是什么 官网解释:Tailwind CSS 的工作原理是扫描所有 HTML 文件、JavaScript 组件以及任何 模板中的 CSS 类(class)名,然后生成相应的样式代码并写入 到一个静态 CSS 文件中。 我的理解是利用Tailwind CSS 提供的…

Element-快速入门

什么是 Element 在现代前端开发中,组件化的思想日益盛行,Element组件库作为一款流行的UI组件库,特别适用于基于Vue.js的项目,它为开发者提供了丰富的组件和良好的开发体验。 想要使用Element的组件库,我们需要完成下面…

基于opencv的人脸闭眼识别疲劳监测

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝,拥有2篇国家级人工智能发明专利。 社区特色…

基于函数计算FC 部署 ComfyUI实现AI生图 的优势

基于函数计算FC 部署 ComfyUI实现AI生图 的优势 部署ComfyUI实现AI生图使用函数计算FC 一键部署ComfyUI 绘画平台的优势有哪些? 在文章开始之前,先来看一下基于函数计算FC 部署 ComfyUI实现AI生图 的大概步骤,整个基础部署操作比较简单。即便…

《Programming from the Ground Up》阅读笔记:p181-p216

《Programming from the Ground Up》学习第10天,p181-p216总结,总计34页。 一、技术总结 第10章主要讲计算机是如何计算的,如十进制、二进制、八进制、十六进制以及浮点数和负数的表示。属于比较基础的内容,如果有一定基础&…

ai免费写论文是原创吗?分享5款ai写作免费一键生成助手

在当今的学术研究和写作领域,AI技术的应用越来越广泛,尤其是在论文写作方面。许多AI写作工具声称能够一键生成高质量的论文,并且保证原创性。然而,这些工具是否真的能生成完全原创的论文,仍然是一个值得探讨的问题。 …

【函数】4.函数的单调性

本节课没有笔记示例,自己做好笔记! 复合函数的单调性 最值 没讲 提醒我

【引领未来办公新风尚 —— 搭贝臻选,您的全能企业管理神器】

在这个瞬息万变的商业时代,每一分效率的提升都可能是超越竞争的关键。搭贝低代码平台匠心打造的“搭贝臻选”应用,集CRM营销管理、销售管理、采购管理、库存管理、财务管理、工单管理、人事管理及办公OA于一体,全方位赋能您的企业&#xff0c…

单片机闪存,闪存缓冲取,闪存延迟

一、启用闪存预取缓冲区(FLASH_PrefetchBufferCmd (FLASH_PrefetchBuffer_Enable);) 闪存预取缓冲区的作用: 在微控制器中,闪存是用于存储程序代码和常量数据的非易失性存储器。当微控制器执行程序时,需要从闪存中读取…

响应速度相关知识

在讨论 Android 性能问题的时候,卡顿、响应速度、ANR 这三个性能相关的知识点通常会放到一起来讲,因为引起卡顿、响应慢、ANR 的原因类似,只不过根据重要程度,被人为分成了卡顿、响应慢、ANR 三种,所以我们可以定义广义…

加快rollback事务回滚速度

背景: 运行一个长事务会话SQL,取消运行或者kill会话,回滚时间较长的情况。 影响到其它业务运行,需要尽快回滚的场景。 1.可以通过kill会话对应的操作系统进程,能够使用到并行恢复,会加快回滚速度。&…

汽车宣传动画渲染怎么做?云渲染加速汽车动画渲染

在汽车行业,宣传动画已成为展示新车型和技术创新的重要工具。高质量的渲染不仅能够吸引观众的眼球,还能有效传达汽车的性能和美学。随着技术的发展,云渲染技术为汽车宣传动画的渲染提供了新的可能性,大大提高了渲染效率和质量。 第…

一些零散的和编译相关的语法/flash-attn涉及语法扫盲

#pragma once:一个编译指令,用于防止头文件被多次包含。当编译器遇到#pragma once时,它会确保该头文件在一个编译单元(一个.cpp文件及其包含的所有文件)中只会被包含一次。即使该文件被间接包含多次,编译器…

JavaWeb的小结03

第2章-第3节 一、知识点 Cookie、Session、Filter过滤器、Listener。 二、目标 理解Cookie和Session的区别。 掌握Cookie和Session的基本用法。 理解Filter过滤器的作用。 三、内容分析 重点 理解Cookie和Session的区别。 掌握Cookie和Session的基本用法。 理解Filter过…

minio简单使用

文章目录 简介官方地址Linux下载安装安装服务启动关闭帮助命令 java开发minio依赖包新建项目pom配置文件配置类Service测试类运行测试 Api使用前言针对桶的操作查看某个桶是否存在创建一个桶返回桶列表删除一个桶 针对文件的操作上传文件到桶中(本地文件上传)上传文件到桶中(基…

(Linux驱动学习 - 9).设备树下platform的LED驱动

一.platform相关结构体与函数 1.匹配列表 - struct of_device_id struct of_device_id {char name[32];char type[32];/* compatible 很重要,需要与设备树节点的 compatible 属性一致,才能匹配 */char compatible[128]; const void *data; }; …

dfs 判重Sequence one——hdu 2610

目录 前言 搜索算法判重 map判重 set判重 Sequence one 问题描述 输入 输出 数据范围 样例 问题分析 重构dfs参数 递减,不重复 去重的优化 最终代码 前言 搜索算法判重 搜索算法判重有很多种方法,常见的有两种,map判重和set判重…

模运算和快速幂

文章目录 模运算快速幂 模运算 模运算是大数运算中的常用操作。如果一个数太大,无法直接输出,或者不需要直接输出,则可以对它取模,缩小数值再输出。取模可以防止溢出,这是常见的操作。 取模运算一般要求a和m的符号一…

VCI_VBDSP使用教程-服务站

VCI_VBDSP使用教程-服务站 VBDSP软件压缩包请点击下载:(备注:将VBDSP软件压缩包做一个下载连接,放到此处) 教程视频:https://www.bilibili.com/video/BV19eHpeeEiz/?spm_id_from333.999.0.0&vd_source224b4434f72960113bc97…