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

N-gram详解

文章目录

  • 一、什么是N-gram?
  • 二、N-gram的种类
  • 三、优缺点
  • PS:补充


一、什么是N-gram?

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


二、N-gram的种类

根据项目个数的不同,n-gram模型可以被分为不同的种类:

  • n = 1 n=1 n=1时,称为unigram。比如对于句子 “I love dogs”,unigram就是 “I”, “love”, “dogs”
    P ( w i ) = C ( w i ) M P(w_i)=\frac{C(w_i)}{M} P(wi)=MC(wi)

    M M M: 语料库中的单词总数

    e.g.: C ( b a r k s ) M \frac{C(barks)}{M} MC(barks)

  • n = 2 n=2 n=2时,称为bigram。对于同样的句子,bigram就是 “I love”, “love dogs”
    P ( w i ∣ w i − 1 ) = C ( w i − 1 , w i ) C ( w i − 1... ) P(w_i|w_{i-1})=\frac{C(w_{i-1},w_{i})}{C(w_{i-1 ...})} P(wiwi1)=C(wi1...)C(wi1,wi)

    C ( w i − 1 . . . ) C(w_{i-1}...) C(wi1...): 是指以 w i − 1 w_{i-1} wi1 作为第一个词的所有二元词组的总数。在计算二元词组的概率时,我们需要考虑的是 w i − 1 w_{i-1} wi1 作为第一个词出现的次数,而不仅仅是 w i − 1 w_{i-1} wi1这个词在整个语料库中出现的次数。

  • n = 3 n=3 n=3时,称为trigram。如 “I love dogs” 的trigram为 “I love dogs”。

  • 以此类推,你可以得到更高的n-gram模型。
    P ( w i ∣ w i − n + 1 , . . . , w i − 1 ) = C ( w i − n + 1 , . . . , w i ) C ( w i − n + 1 , . . . , w i − 1 ) P(w_i|w_{i-n+1},...,w_{i-1})=\frac{C(w_{i-n+1},...,w_i)}{C(w_{i-n+1},...,w_{i-1})} P(wiwin+1,...,wi1)=C(win+1,...,wi1)C(win+1,...,wi)


三、优缺点

优点

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

缺点

模型的数据稀疏性问题(随着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详解

文章目录 一、什么是N-gram?二、N-gram的种类三、优缺点PS:补充 一、什么是N-gram? 在自然语言处理中,n-gram是一种重要的文本表示方法。n-gram是指给定文本中连续的n个项目,这些项目可以是声音、单词、字符或者像素等。n-gram模型常常用于…...

电路中的电源轨及地的区别和处理

电源轨 VCC 通常代指正电源供电轨。在大多数数字和模拟电路中,VCC代表电路中的正电源端。VCC提供电路所需的正电压,通常是用来驱动晶体管、集成电路。 VDD 相对与VCC的正电源供应,VDD更常用于表示数字电路中的正电源引脚。VDD常见于集成电…...

k8s可以部署私有云吗?私有云部署全攻略

k8s可以部署私有云吗?K8S可以部署私有云。Kubernetes是一个开源的容器编排引擎,能够自动化容器的部署、扩展和管理,使得应用可以在各种环境中高效运行。通过使用Kubernetes,企业可以在自己的数据中心或私有云环境中搭建和管理容器…...

编辑器资源管理器

解释 EditorResMgr 是一个用于在 Unity 编辑器中加载资源的管理器。它通过 Unity 编辑器的 API (AssetDatabase) 进行资源加载,但仅在开发和编辑模式下可用,不能在最终发布的游戏中使用。这种工具通常用来在开发过程中快速加载编辑器中的资源&#xff0…...

高性能数据分析利器DuckDB在Python中的使用

DuckDB具有极强的单机数据分析性能表现,功能丰富,具有诸多拓展插件,且除了默认的SQL查询方式外,还非常友好地支持在Python、R、Java、Node.js等语言环境下使用,特别是在Python中使用非常的灵活方便。 安装 pip insta…...

IAR全面支持旗芯微车规级MCU,打造智能安全的未来汽车

中国上海,2024年10月18日 — 在全球汽车电子快速发展的今天,IAR与苏州旗芯微半导体有限公司(以下简称“旗芯微”)联合宣布了一项激动人心的合作——IAR Embedded Workbench for Arm 9.60.2版本现已全面支持旗芯微车规级MCU&#x…...

**深入浅出:TOGAF中的应用架构**

摘要: 在企业架构(EA)领域,TOGAF(The Open Group Architecture Framework)是一个广泛应用的框架。本文将带你深入了解TOGAF中的应用架构,帮助你理解其核心概念和实际应用。无论你是初学者还是有…...

Pytorch学习--DataLoader的使用

一、DataLoader简介 DataLoader官网 重要参数:画红框的参数 dataset: 作用:表示要加载的数据集。DataLoader通过该参数从数据集中读取数据。类型:Dataset,即PyTorch定义的Dataset类,用于封装数据并提供数据索引的功…...

代购系统界的“数据大厨”:定制API数据处理,烹饪出美味佳肴

在这个代购的盛宴中,每一位代购者都是一位大厨,他们用数据作为食材,用代码作为烹饪技巧,烹饪出一道道令人垂涎的美味佳肴。今天,就让我们走进代购界“数据大厨”的厨房,看看他们是如何定制API数据处理&…...

二十、Innodb底层原理与Mysql日志机制深入剖析

文章目录 一、MySQL的内部组件结构1、Server层1.1、连接器1.2、查询缓存1.3、分析器1.4、优化器1.5、执行器 2、存储引擎层 二、Innodb底层原理与Mysql日志机制1、redo log重做日志关键参数2、binlog二进制归档日志2.1、binlog日志文件恢复数据 3、undo log回滚日志4、错误日志…...

数据库设计与管理的要点详解

目录 前言1 数据库设计的基础:清晰的事实表1.1 确保数据的一致性和完整性1.2 优化查询性能 2 权限问题与数据问题的区分2.1 确认权限问题2.2 确认数据问题 3 视图与存储过程的合理使用3.1 视图的作用与应用3.2 存储过程的应用与优化 4 数据库操作日志的设计4.1 确保…...

国家科技创新2030重大项目

国家科技创新2030重大项目涵盖多个领域,例如:量子信息、人工智能、深海空间站、天地一体化信息网络、大飞机、载人航天与月球探测、脑科学与类脑研究、健康保障等,这些项目旨在解决制约我国经济社会发展的重大科技瓶颈问题,提升国…...

如何使用 Flutter Local Notifications 插件

如何使用 Flutter Local Notifications 插件 local_notificationsNo longer in development -Flutter plugin for creating notifications项目地址:https://gitcode.com/gh_mirrors/lo/local_notifications 项目介绍 Flutter Local Notifications 是一个为 Flutter 应用程序…...

【openEuler/Centos】yum安装软件报Error: GPG check FAILED【分析根因弄明白,亲测有效不浪费时间】

yum安装软件报Error: GPG check FAILED 环境信息:cat /etc/openEuler-release openEuler release 22.03 (LTS-SP1) 报错信息 The downloaded packages were saved in cache until the next successful transaction. You can remove cached packages by executin…...

实现vuex源码,手写

实现vuex源码,手写 Vuex 是专门为 Vue.js 应用程序开发的状态管理模式 库,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 第一步:定义初始化Store类 创建文件夹store/vuex.js 1…...

使用 Python 和 Pandas 处理 Excel 数据:合并单元格示例

引言 在数据处理过程中,我们经常会遇到需要从 Excel 文件中提取和处理数据的情况。本文将通过一个简单的示例,介绍如何使用 Python 的 Pandas 库来读取 Excel 文件,处理其中的合并单元格,并将结果输出到新的 Excel 文件中。(这里的合并是列1提取一个数据,列2提取两个数据…...

Python poetry 虚拟环境

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、Poetry是什么?二、使用步骤1.安装poetry2、初始化poetry3、创建虚拟环境 启动和退出虚拟环境poetry 常用指令总结 一、Poetry是什么? P…...

面试官:你会如何设计QQ中的网络协议?

引言 在设计QQ这道面试题时,我们需要避免进入面试误区。这意味着我们不应该盲目地开展头脑风暴,提出一些不切实际的想法,因为这些想法可能无法经受面试官的深入追问。因此,我们需要站在前人的基础上,思考如何解决这类…...

JVM—类的生命周期

目录 类的生命周期 加载阶段 连接阶段 验证阶段 准备阶段 解析阶段 初始化阶段 面试题1 面试题2 类的生命周期 类的生命周期描述了一个类加载、使用、卸载的整个过程,整体可以分为以下五个阶段。 1. 加载 2. 连接,其中又分为验证、准备、解析三…...

SELinux中的安全标记与强制访问控制

SELinux的安全标记和强制访问控制是如何实现的? SELinux(Security Enhanced Linux)是一个由美国国家安全局(NSA)开发的Linux内核模块,它实现了强制访问控制(MAC)。SELinux通过为系统…...

Diablo Edit2:暗黑破坏神2角色存档编辑器的深度技术解析与实战应用

Diablo Edit2:暗黑破坏神2角色存档编辑器的深度技术解析与实战应用 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit Diablo Edit2是一款功能强大的暗黑破坏神2角色存档编辑器&#xff0…...

链式队列:高效实现O(1)入队出队

引言在之前的文章中,我们系统学习了栈结构(顺序栈和链栈)。栈是"后进先出"(LIFO)的结构,而今天要讲解的队列(Queue)则是"先进先出"(FIFO&#xff0c…...

别再用笨方法转置了!Matlab里rot90函数帮你3秒搞定矩阵旋转(附多维数组实战)

别再用笨方法转置了!Matlab里rot90函数帮你3秒搞定矩阵旋转(附多维数组实战) 在数据处理和图像预处理中,矩阵旋转是一个常见但容易被低估的操作。许多Matlab用户习惯性地使用转置操作符或复杂的循环结构来实现矩阵旋转&#xff0c…...

手把手教你用Cadence仿真12位SAR ADC:从电路图到FFT频谱分析(含Simc 18mmrf工艺)

12位SAR ADC全流程仿真指南:从Cadence搭建到Matlab频谱解析 在模拟集成电路设计中,逐次逼近型模数转换器(SAR ADC)因其优异的能效比和中等精度特性,成为物联网设备、可穿戴设备和传感器接口的首选方案。本文将基于Simc 18mmrf工艺&#xff0…...

3分钟掌握PPT演示时间管理的终极方案:智能悬浮计时器

3分钟掌握PPT演示时间管理的终极方案:智能悬浮计时器 【免费下载链接】ppttimer 一个简易的 PPT 计时器 项目地址: https://gitcode.com/gh_mirrors/pp/ppttimer 在演讲、汇报、教学等场景中,时间管理是成功的关键因素。PPTTimer作为一款专为Wind…...

5分钟掌握RePKG:Wallpaper Engine资源提取与格式转换的终极秘籍

5分钟掌握RePKG:Wallpaper Engine资源提取与格式转换的终极秘籍 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 你是否曾经面对Wallpaper Engine中的PKG资源包感到无从下…...

Python 爬虫进阶技巧:JSON 数据多层嵌套解析取值技巧

前言 在现代网络数据采集场景中,JSON(JavaScript Object Notation)已成为前后端数据交互的核心格式,绝大多数动态网页、API 接口均采用多层嵌套 JSON 结构传输数据。对于爬虫开发者而言,基础的 JSON 取值仅能应对简单数据结构,而面对深度嵌套、数组嵌套、混合嵌套等复杂…...

5分钟掌握拼多多数据采集:Scrapy-Pinduoduo爬虫实战指南

5分钟掌握拼多多数据采集:Scrapy-Pinduoduo爬虫实战指南 【免费下载链接】scrapy-pinduoduo 拼多多爬虫,抓取拼多多热销商品信息和评论 项目地址: https://gitcode.com/gh_mirrors/sc/scrapy-pinduoduo 想要获取拼多多平台的热销商品信息和用户评…...

株洲彩钢板厂家

彩钢板 彩色涂层钢板 以冷轧/镀锌钢板为基材,表面脱脂、磷化后,辊涂彩色有机涂层(聚酯、氟碳等),再烘烤成型。二、主要分类(3大类)1. 彩钢压型板(单板/彩钢瓦)• 结构&a…...

Lumberjack 暗色主题:提升开发效率的配色方案与多平台配置指南

1. 项目概述:一个为开发者打造的暗色系主题 如果你和我一样,每天有超过一半的时间都泡在代码编辑器里,那么一个顺眼的主题就不仅仅是“好看”而已,它直接关系到你的工作效率和眼睛的舒适度。今天要聊的这个项目, Drru…...