NLP(2)N-gram language Model (缺了一些平滑的方式介绍)

news2024/11/24 9:43:44

文章目录

  • N-gram Language Model
    • Trigram Example
    • 存在的问题
      • smoothing
        • Laplacian (add-one) smoothing
          • 案例 1
          • 案例 2
        • Add-k smoothing
        • Absolute Discounting
          • 案例
        • Interpolation

在这里插入图片描述
在自然语言处理(NLP)中,语言模型(Language Models)是用来预测文本序列中下一个单词或者字符的概率分布的模型。语言模型的主要目标是捕捉语言的统计规律,以此来生成自然语言。以下是一些常见的语言模型:

在这里插入图片描述

  • N-gram Language Model: 这是最早的语言模型之一,主要用于捕捉词序列中的n-1阶依赖关系。然而,N-gram模型对于长距离依赖的处理不佳,且模型大小随着n的增大而急剧增大。

  • Hidden Markov Model (HMM): HMM是一种统计模型,用于描述一个含有未知参数的马尔可夫过程。在NLP中,HMM常被用于词性标注和命名实体识别等任务。

  • Recurrent Neural Networks (RNNs): RNNs可以捕捉序列数据中的长距离依赖关系,尤其是LSTM和GRU等变体,在处理包含长序列的语言数据时表现出色。

  • Transformers and Attention Mechanisms: Transformers模型使用自注意力(Self-Attention)机制来捕捉输入序列中不同位置之间的依赖关系。最著名的Transformer模型是Google的BERT。

  • BERT (Bidirectional Encoder Representations from Transformers): BERT模型改变了语言模型的训练方式,使其能够同时考虑上下文中的前后信息。这让模型在许多NLP任务中都取得了显著的改进。

  • GPT (Generative Pretraining Transformer): GPT模型由OpenAI提出,是一种以Transformer为基础的生成式预训练模型。GPT在很多生成性任务,如文本生成,对话系统等方面表现优秀。

  • RoBERTa, ELECTRA, T5, BART: 这些都是在BERT和GPT的基础上提出的模型,通过不同的训练策略或模型结构,进一步提升了模型的性能。

这些模型在自然语言处理的许多任务中都取得了良好的效果,包括文本分类、命名实体识别、情感分析、文本生成、机器翻译等等。

N-gram Language Model

  • N-gram 语言模型基于马尔科夫假设

马尔科夫假设:

  • 马尔科夫假设是指一个词的出现仅依赖于它前面的几个词,而与更早的词或更晚的词无关。在N-gram模型中,这个“几个词”就是N-1个。例如,在一个2-gram(也被称为bigram)模型中,一个词的出现仅依赖于它前面的一个词。在3-gram(也被称为trigram)模型中,一个词的出现依赖于它前面的两个词,以此类推。
  • 马尔科夫假设使得N-gram模型的计算变得可行,因为它大大减少了需要计算的条件概率的数量。然而,这个假设也引入了一些限制,最明显的是它不能处理长距离的依赖关系

Trigram Example

在这里插入图片描述
P ( w i ∣ w i − 2 , w i − 1 ) = C ( w i − 2 , w i − 1 , w i ) C ( w i − 2 , w i − 1 ) P(w_i | w_{i-2}, w_{i-1}) = \frac{C(w_{i-2}, w_{i-1}, w_i)}{C(w_{i-2}, w_{i-1})} P(wiwi2,wi1)=C(wi2,wi1)C(wi2,wi1,wi)

  • 其中 C ( ⋅ ) C(\cdot) C() 代表的是当前序列的 频次

在这个例子中,我们执行几个简单的计算步骤看一下:

  • 要计算 P ( y e s   n o   n o   y e s ) P(yes~no~no~yes) P(yes no no yes) 这个概率,我们需要先计算第一个 yes 在当前 corpus 中的概率,由于我们当前的情景是 3-gram,因此需要在前面增加两个 <s><s> 然后我们统计在 corpus 中: C ( < s > < s > y e s ) C(<s> <s> yes) C(<s><s>yes) 的频次是 1
    在这里插入图片描述

  • C ( < s > < s > ) C(<s><s>) C(<s><s>) 的频次是 2
    在这里插入图片描述

  • 所以第一项 P ( y e s ∣ < s > < s > ) P(yes | <s><s>) P(yes<s><s>) 的概率是 1 2 \frac{1}{2} 21

  • 以此类推,我们重复这个过程直到 </s> 出现的 P ( < / s > ∣ n o   y e s ) P(</s> | no ~ yes) P(</s>no yes)

  • 然后将这些概率连乘起来就得到了整个序列的概率 P ( y e s   n o   n o   y e s ) P(yes~ no ~no ~yes) P(yes no no yes)
    在这里插入图片描述

存在的问题

N-gram 在许多简单应用中表现得很好,但它也有一些显著的缺点:

在这里插入图片描述

  • 数据稀疏问题: N-gram 模型的性能很大程度上取决于训练数据的质量和数量。如果训练数据中没有出现过某个特定的 N-gram,模型就无法预测它。这就是所谓的数据稀疏问题,也是 N-gram 模型的一个主要限制。

  • 长距离依赖问题: N-gram 模型基于马尔可夫假设,即下一个词的出现只依赖于前面的 N-1 个词。这使得模型在处理长距离依赖关系时效果不佳。例如,对于一个长句子,句首的词可能会影响句尾的词,但如果 N 值设置得较小,这种依赖关系就无法被模型捕获。

  • 计算和存储需求: 随着 N 的增大,需要计算和存储的 N-gram 的数量会呈指数级增长。这使得 N-gram 模型对计算资源和存储空间的需求很高,特别是对于大规模的语料库。

  • 无法学习语义信息: N-gram 是一种基于统计的模型,它无法学习词语之间的深层次语义关系。例如,它无法理解同义词或反义词这样的语义信息。

  • 无法处理未知词: 对于训练数据中未出现过的词,N-gram 模型无法处理。这在处理实际文本数据时是一个常见问题,因为语言中总会有新词出现。

smoothing

  • 对于 N-gram 来说,最严中的问题就是 未知词 问题,因为 N-gram 的最终的概率值取决于连乘的概率项,而有的项可能为 0,当这种情况出现,整个句子的概率就会为 0, 因此我们需要进行处理。
    在这里插入图片描述

Laplacian (add-one) smoothing

在这里插入图片描述

  • unigram 的场景下,我们对当前词 w_i 的频次 +1,在分母上我们则加上整个 词表 的大小
    在这里插入图片描述

  • bigram 的场景下,分子依然 +1,分母依然加整个 词表 的大小

案例 1

在这里插入图片描述

  • 注意:这里的词表 V中包含了最后一个结束字符 </s> 但是没有包含开始字符 <s>,原因是:
    • 在计算过程中我们几乎总要计算 P ( < / s > ∣ w i − 1 w i − 2 . . . . ) P(</s> | w_{i-1} w_{i-2}....) P(</s>wi1wi2....) ,因为我们需要得到 </s> 来表示句子的预测过程结束了,但是我们不会计算 P ( < s > ∣ . . . . ) P(<s>|....) P(<s>∣....) 因为这没有意义。
      在这里插入图片描述
案例 2

在这里插入图片描述

  • 当我们计算 P ( a t e ∣ c h e e s e ) P(ate | cheese) P(atecheese) 我们发现 C ( c h e e s e   a t e ) C(cheese ~ate) C(cheese ate) 频次为 0,但是由于这时候我们进行了平滑,因此并不会导致概率为 0

Add-k smoothing

在这里插入图片描述
在这里插入图片描述

  • 这里选择 k=0.1,计算出的 smoothed_probability 就是平滑后的概率,计算出平滑后的概率之后我们分别用这些 smoothed_probability 去乘 counts 的总和 20,这样我们可以得到对于任意一个单词,他们的实际有效 count 是多少。
  • 例如对于 improperty 来说,实际有效是 7.8 次,而相较于他自己原本的 counts 略微小了一点,但是对于其他的词,例如 outbreak 经过平滑后的 effective_count1.063 比实际的 counts 略大一些。

Absolute Discounting

在这里插入图片描述
Absolute Discounting是一种处理数据稀疏问题的平滑技术,广泛应用于N-gram语言模型中。它的基本思想是对训练数据中出现过的N-gram的计数进行绝对减值(一般为一个常数)然后将减少的这部分计数分配给训练数据中未出现过的N-gram。

举个例子,假设我们有一个bigram(2-gram)语言模型,在训练集中, eat apple 的计数是10,那么在absolute discounting下,我们可能将这个计数减少到 9,并将减少的这一计数分配给训练集中未出现过的bigram,如 eat banana

这种做法的好处在于,它为那些在训练数据中未出现过的N-gram提供了一些非零的概率,从而使模型能够更好地处理那些在测试数据中可能出现但在训练数据中未出现的N-gram,有效地缓解了数据稀疏问题。

案例

在这里插入图片描述

  • 在这个例子中, d=0.1 代表所有非零的情况都将实际的 counts - 0.1,图中一共有 5 个非零的词,因此一共得到了 0.5 个富裕的 point
  • 图中一共有 20 的词, 因此平均分配给他们,所以他们的 effective_counts = (5 * 0.1)/ 2 = 0.25
  • 0.25effective_counts 反推到 smoothed_probability 计算得到其平滑结果是 0.013

但是这种方法的缺点在于:他对于概率为 0 的情况进行分配是平均的,但显然在数据集中对所有未出现的情况取平均是不合理的,一种改进的方法是:重新分配这些 points 的时候,按照他们的 频次 进行权重分配

在这里插入图片描述

  • Katz Backoff 中,如果一个 N-gram 在训练数据中存在,那么其概率就通过经过一定折扣的频率来计算。然而,如果该 N-gram 在训练数据中不存在,我们就回退到一个低阶的模型。例如,如果一个三元组(trigram)在训练数据中未见过,那么我们就回退到相应的二元组(bigram)模型,如果二元组也未见过,我们甚至可以回退到一元组(unigram)模型。

  • 回退到低阶模型的概率分布是基于未被高阶模型使用的概率质量来重新分配的。这种方法使得未在训练数据中见过的 N-gram 能够得到非零概率,从而缓解了数据稀疏性问题。

  • 在上面的例子中当 C ( w i − 1 , w i ) > 0 C(w_{i-1}, w_i) > 0 C(wi1,wi)>0 的时候,采用的是 bigram 的方式进行

(未完。。。。)

Interpolation

在这里插入图片描述

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

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

相关文章

机器鸟实现扇动翅膀功能

1. 功能说明 本文示例将实现机器鸟扇动翅膀的功能。 2. 结构说明 鸟类的翅膀主要由肩关节、肘关节、腕关节组成&#xff0c;本样机利用组合机构设计机器鸟的扑翼机构。 拥有两个关节的机器鸟扑翼机构结构图 单侧翅膀 双翅 尾部 整机 3. 电子硬件 在这个示例中&#xff0c;我们…

使用Optuna进行PyTorch模型的超参数调优

Optuna是一个开源的超参数优化框架&#xff0c;Optuna与框架无关&#xff0c;可以在任何机器学习或深度学习框架中使用它。本文将以表格数据为例&#xff0c;使用Optuna对PyTorch模型进行超参数调优。 Optuna可以使用python pip安装&#xff0c;如pip install Optuna。也可以使…

【Spring】— 动态SQL :<foreach>元素、<bind>元素

目录 <foreach>元素<bind>元素 <foreach>元素 MyBatis中已经提供了一种用于数组和集合循环遍历的方式&#xff0c;那就是使用<foreach>元素。假设在一个用户表中有1000条数据&#xff0c;现在需要将id值小于100的用户信息全部查询出来&#xff0c;就可…

MFC(十三)多个对话框

设置向导模式 1.打开类视图&#xff0c;右键项目--->类向导-->添加Cpropsheet类&#xff0c;命名为mypropsheet CPropertySheet 是 MFC 的一个类&#xff0c;用于创建包含多个属性页的对话框。它可以使用内置的向导模式&#xff0c;向用户显示“下一步”和“上一步”按…

unity创建urp的方法

Unity里URP项目的介绍和创建 URP(Universal Render Pipeline)通用渲染管线&#xff0c;是Unity在2019.3版本之后推出的一种新的渲染管线。 对比起默认的渲染管线&#xff0c;他的使用上会产生了一些变化&#xff0c;包括了摄像机的使用、Shader的编写等。 传统的渲染管线在渲染…

采用动态规划来处理有向无环图最短路径问题,c++实现

采用动态规划来处理有向无环图最短路径问题&#xff0c;c实现 需求描述实现思路代码实现 需求描述 如图&#xff0c;在一个无环有向图中&#xff0c;找到起点0到终点的最短路径 实现思路 设s1,s2,…, st 是一条最短路径假设s1&#xff0c;s2&#xff0c;已求出&#xff0c;则…

JS 事件循环机制、调用栈、堆、主线程、宏任务队列、微任务队列、缓存管理之间的关系

一、事件循环机制 你是否想过&#xff0c;在控制台执行代码时&#xff0c;为什么能立即得到响应&#xff1f; 实际上&#xff0c;底层有一套模型机制叫 事件循环&#xff0c;换句话说&#xff0c;它是一个”死循环“&#xff0c; 里面负责监听&执行我们写的 JS 代码&#…

spring+springMVC+mybatis实现的物业管理系统

本系统借用了前辈的页面框架来实现了一个物业管理系统&#xff0c;使用到的主要技术有&#xff1a;SSM框架&#xff0c;MySql 8.0数据库&#xff0c;tomcat 8.0&#xff0c;使用maven进行依赖管理&#xff0c;前端页面使用的是jsp。整个系统分为用户端和管理员端。 用户端功能有…

Vue.js 中的权限控制是什么?如何进行权限控制?

Vue.js 中的权限控制是什么&#xff1f;如何进行权限控制&#xff1f; 在现代 Web 应用程序中&#xff0c;权限控制是一个重要的话题。Vue.js 作为一种现代的前端框架&#xff0c;提供了一些有用的工具和技术来实现权限控制。本文将介绍 Vue.js 中的权限控制的概念、作用以及如…

一文教你认清云渲染的优势和劣势

在当今数字化时代&#xff0c;云渲染作为一项创新的技术方案&#xff0c;正逐渐成为许多行业中的热门话题。与传统的本地渲染相比&#xff0c;云渲染具备许多独特的优势和劣势。本文将深入探讨云渲染的各项特点&#xff0c;帮助您全面了解这一技术&#xff0c;并为您提供有关云…

js+canvas实现劈腿关系图

【我愿称多对一 一对多关系为劈腿关系】 【仓库地址】gitgithub.com:yyccmmkk/rl.git 【显示所有线路细节】 【合并线路】 【合并同一个目标点线路】 【合并同一个出发点线路】 【数据结构】 原始数据只需要提供节点自身id 父点节id&#xff0c;劈腿关系图自动处理 [{id:z…

基于CSDN上海城市开发者社区第一次线下沙龙的筹备经验分享

引言 由于时间较为紧张、邹老师行程安排紧凑等因素影响&#xff0c;结合实际情况&#xff0c;改茶话会为聚餐&#xff0c;所以在举办线下沙龙的时候一定要根据实际情况来斟酌活动形式。本次活动是和哈士奇&#xff0c;哈哥一起筹备&#xff0c;也得到了哈哥的大力支持&#xff…

如何进行物联网开发可以快速完成产品研发?

物联网产品的研发与开发过程&#xff0c;是一个不断探索、创新、实践的过程&#xff0c;需要很长的周期&#xff0c;在这个过程中&#xff0c;项目团队往往需要投入大量的人力、物力和时间。同时&#xff0c;物联网产品研发过程中还涉及到大量的专业技术和知识&#xff0c;需要…

从git上拉取项目

目录 一、前期准备&#xff0c;获取git下载链接 二、idea下载 2.1.打开git下载界面 2.2.进入下载界面 2.3.下载前期配置 2.4.输入账号密码 2.5.下载完成后idea打开 2.6.下载完成后文件目录展示 三、命令行下载 3.1.打开所需要下载的项目路径 3.2.进入黑窗口 …

【算法系列之数组I】leetcode54.螺旋矩阵

704. 二分查找 力扣题目链接 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 输入: nums [-1,0,3,5,9,12], target 9…

【618备战巡礼】“三高”之第一高--如何打造高可用系统 | 京东云技术团队

前言 我们经常会说互联网“三高”&#xff0c;那什么是三高呢&#xff1f;我们常说的三高&#xff0c;高并发、高可用、高性能&#xff0c;这些技术是构建现代互联网应用程序所必需的。对于京东618备战来说&#xff0c;所有的中台系统服务&#xff0c;无疑都是围绕着三高来展开…

一文说清DC-DC BUCK电路(非常详细)

目录 摘要 BUCK原理 DC-DC芯片框图 自举电容 输出电感 输出电容和纹波 损耗 总结 摘要 DC-DC BUCK&#xff0c;是硬件工程师工作中使用频率非常高的电路&#xff0c;可以这么说&#xff0c;只要板子不是迷你型的&#xff0c;十有八九都有DC-DC。因此&#xff0c;对它的…

Win10安装mac虚拟机

参考文章 按照上面的参考文章进行了安装并完成了安装&#xff0c;结合安装过程中遇到的问题&#xff0c;进行一个总结。 要想在win10上安装mac虚拟机&#xff0c;需要准备三样东西&#xff1a; &#xff08;1&#xff09;虚拟机平台&#xff1a;用来装载mac虚拟机 &#xf…

【分布族谱】学生t分布,及其与正态分布、卡方分布的关系

文章目录 简介正态分布与卡方分布用scipy来验证三者关系 简介 1908年&#xff0c;戈塞特在酿酒厂工作&#xff0c;由于酒厂禁止员工发表酿酒相关的研究成果&#xff0c;所以他以Student为笔名发表了有关t分布的研究&#xff0c;故而这个著名的分布被命名为学生分布。 如果有两…

计算机基础--->操作系统(3)【内存管理】

文章目录 内存管理内存管理主要做什么&#xff1f;什么是内存碎片&#xff1f;常见内存管理方式虚拟内存什么是虚拟内存&#xff1f;虚拟内存的作用&#xff1f;没有虚拟内存的问题什么是虚拟地址和物理地址&#xff1f; 分段机制分页机制转址旁路缓存&#xff08;TLB、快表&am…