自然语言处理(NLP)之跳字(元)模型<skip-gram>与连续词袋模型<continuous bag of words>

news2024/11/26 12:15:18

自然语言处理(Natural Language Processing, NLP)是AI里的一个非常重要的领域,比如现在很火爆的ChatGPT,首先就需要很好的理解输入内容的意思才能够做出合理的回复。

自然语言处理应用非常广泛,比如机器翻译、问题回答、文本语义对比、语音识别、自动文摘、写论文与判断论文是否抄袭等等,为了将这些应用做好,很关键的就是数学在其中的作用。

这节重点是讲解数学公式在损失函数中的推导,主要是掌握一些概率与微积分的相关知识,比如求导数与偏导数(梯度)。

NLP基本术语

在介绍模型之前,先熟悉一些常见的基本术语,这样在后续的实操中更清楚其中代表着的是什么。

1、自然语言:一套用来表达含义的复杂系统
2、词:自然语言中表达意思的基本单元
3、词向量:表示词的向量或说是词的表征,类似卷积神经网络中的特征值,也可说成词的特征向量,这个是很关键的东西,是计算机能够识别词的关键
4、词嵌入:将词映射成为实数域向量的技术(这个是为了解决独热编码存在的问题而提出的)
5、似然函数:描述样本数据出现的可能性的函数,是用来衡量模型参数的可能性,这个要跟“概率”区分开来,看起来比较像,其实是 截然不同的两个概念。概率是一种描述某件事情发生的可能性的概念,是用来衡量某件事情发生的可能性。给定输出x时,关于参数θ的似然函数L(θ|x)(在数值上)等于给定参数θ后求出变量X的概率:L(θ|x)=P(X=x|θ)。如果从深度学习领域来看,由公式我们可以给出更贴合的解释为, 概率是参数已知,求出的随机变量的结果。似然函数则相反,已知随机变量的输出结果,求参数的可能取值

为什么不使用独热编码

那在NLP中一般都不会选择使用独热码(One-Hot)向量,这是什么原因呢?

独热码就是长度为N的向量中,这个词的索引为i,在i位置为1,其余位置都为0的表达形式,这种结构我们最开始是在 MNIST数据集手写数字识别(一) 文章中介绍并应用过,对于这种分类任务没有问题,但用在NLP中,就有缺陷了,因为这样的编码方式不能表达出不同词之间的相似度。

为了解决上述的问题,就提出了词嵌入(word embedding),这节的两个模型就是来自word2vec工具,我们分别来介绍它

跳字模型(跳元模型)<skip-gram>

也有人叫做“跳字元模型”,当然意思都是一样,把词当作是元或字元,这个模型是通过基于某个词来生成它在文本序列周围的词。

举个例子:"the" "man" "loves" "his" "son",以"loves"为中心词,设背景窗口大小为2,生成与它距离不超过2个词的背景词"the" "man" "his" "son"的条件概率:

P("the","man","his","son" | "loves")

由于这些背景词的生成是相互独立的,所以可以改写成:

P("the" | "loves")*P("man" | "loves")*P("his" | "loves")*P("son" | "loves")

设中心词 在词典中的索引为c,背景词 在词典中的索引为o,给定中心词生成背景词的条件概率可以通过对向量做内积然后softmax运算得到:

假设给定一个长度为T的文本序列,时间步为t的词为,背景窗口大小为m,那么这个跳字模型的似然函数如下(给定任意中心词生成所有背景词的概率):

跳字模型的参数是每个词所对应的中心词向量和背景词向量。训练中我们通过最大似然函数来学习模型参数,或叫最大似然估计。等价于最小化下面这个损失函数:

如果使用随机梯度下降,那么每次迭代我们随机采样一个较短的子序列来计算有关该子序列的损失,然后计算梯度来更新模型参数。

梯度计算的关键是条件概率两边取自然对数,中心词向量与背景词向量的梯度如下推导:

两边取自然对数log

下面是对求梯度(偏导数)的推导过程,其中的一些详细细节步骤来自Aston Zhang大神的手写推导:

先将log整个那块用h(g(f(x)))来代替:

这三个组合起来就是

然后开始求梯度(其中索引i修改成j,防止分子分母约掉):

上述推导过程,涉及到常见的两种求导的结果(log在我们计算机中一般都表示自然对数,e为底):

logx的导数是1/x,e^x的导数不变,依然是e^x

它的计算需要词典中所有词以为中心词的条件概率。求其他词向量的梯度同理可得。

训练结束后,对于词典中的任意索引为i的词,我们均得到该词作为中心词和背景词的两组向量

在自然语言处理的应用中,跳字模型的中心词向量作为词的表征向量。

连续词袋模型<continuous bag of words>(CBOW)

连续词袋模型跟跳字模型很像,不同点在于连续词袋模型是基于某个中心词在文本序列前后的背景词来生成的该中心词,比如上面例子中的"loves"为中心词生成背景词"the" "man" "his" "son",这里就是通过背景词"the" "man" "his" "son"来生成 "loves"这个中心词。

那这里的条件概率就跟上面跳字模型相反

P("loves"|"the","man","his","son")

由于背景词有多个,所以将这些背景词向量取平均,然后后面的推导就跟跳字模型一样。

假定中心词在词典中索引是c,背景词是,在词典中索引为,那么给定这些背景词生成中心词的条件概率为:

其中这里的两组向量分别是背景词和中心词,跟跳字模型相反。

我们简化下公式,设定,且,简写成:

给定一个长度为T的文本序列,设时间步t的词为,背景窗口大小为m,连续词袋模型的似然函数是由背景词生成任一中心词的概率:

训练连续词袋模型跟跳字模型基本是一样的,这里的连续词袋模型的最大似然估计等价于最小化损失函数:

然后跟跳字模型一样的公式推导,我们最终可以得到有关任一背景词向量的梯度:

有关其的词向量的梯度同理可得,跟跳字模型不一样的地方就是,一般都使用连续词袋模型的背景词向量作为词的表征向量。

小结:需要明白公式的意义与推导,两个模型之间的共同点与不同点,以及对术语的熟悉,为后面的NLP打好基础。LaTeX公式的输入还是比较繁琐,比较耗时,不过呈现的效果还是很不错的,值得。

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

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

相关文章

整合Swagger2

整合Swagger2 1、Swagger介绍 前后端分离开发模式中&#xff0c;api文档是最好的沟通方式。 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 1、及时性 (接口变更后&#xff0c;能够及时准确地通知相关前后端开发人员…

Java企业开发学习笔记(4)采用Java配置类管理Bean

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【http://t.csdn.cn/1fwEO】 文章目录一、采用Java配置类管理Bean1.1 创建子包1.2 创建杀龙任务类1.3 创建勇敢骑士类1.4 创建Spring配置类1.5 创建测试类1.6 运行测试类二、课堂练习2.1 创建救美任务类和救美骑士类2…

BERT模型系列大全解读

前言 本文讲解的BERT系列模型主要是自编码语言模型-AE LM&#xff08;AutoEncoder Language Model&#xff09;&#xff1a;通过在输入X中随机掩码&#xff08;mask&#xff09;一部分单词&#xff0c;然后预训练的主要任务之一就是根据上下文单词来预测这些单词&#xff0c;从…

阅读笔记7——Focal Loss

一、提出背景 当前一阶的物体检测算法&#xff0c;如SSD和YOLO等虽然实现了实时的速度&#xff0c;但精度始终无法与两阶的Faster RCNN相比。是什么阻碍了一阶算法的高精度呢&#xff1f;何凯明等人将其归咎于正、负样本的不平衡&#xff0c;并基于此提出了新的损失函数Focal L…

JUC并发编程(上)

✨作者&#xff1a;猫十二懿 ❤️‍&#x1f525;账号&#xff1a;CSDN 、掘金 、个人博客 、Github &#x1f389;公众号&#xff1a;猫十二懿 学习地址 写在最前 JUC&#xff08;Java Util Concurrent&#xff09;学习内容框架&#xff1a; #mermaid-svg-r5jN6ICeVruSjU0I …

MySQL一隐式转换

我相信90%以上的同学们在平时开发时&#xff0c;或多或少都被隐式转换&#xff08;CONVERT_IMPLICIT&#xff09;坑过&#xff0c;甚至测出bug前你都浑然不知。你还别不信&#xff0c;“无形之刃&#xff0c;最为致命&#xff01;” mysql> SELECT * from t_user; ---------…

【LeetCode】剑指 Offer 11. 旋转数组的最小数字 p82 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/ 1. 题目介绍&#xff08;11. 旋转数组的最小数字&#xff09; 把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;我们称之为数组的旋转。 给你一个可能存在 重复 元素值…

关于微前端,你想知道的都在这!

更多请关注微前端专题 https://codeteenager.github.io/Micro-Frontends/ 介绍 微前端官网&#xff1a;https://micro-frontends.org/ 问题&#xff1a;如何实现多个应用之间的资源共享&#xff1f; 之前比较多的处理方式是npm包形式抽离和引用&#xff0c;比如多个应用项目之…

浅谈Redisson实现分布式锁的原理

1.Redisson简介 Redis 是最流行的 NoSQL 数据库解决方案之一&#xff0c;而 Java 是世界上最流行&#xff08;注意&#xff0c;我没有说“最好”&#xff09;的编程语言之一。虽然两者看起来很自然地在一起“工作”&#xff0c;但是要知道&#xff0c;Redis 其实并没有对 Java…

windows共享文件夹(目录)(SMB服务)

SMB服务&#xff0c;文件共享服务&#xff0c;俗称文件夹&#xff08;目录&#xff09;、打印机等共享 一、创建共享用户 windos系统中&#xff0c;文件夹共享需要设置指定用户与密码&#xff0c;通过输入用户和密码进行连接&#xff0c;在设置共享时系统中有Everyone所有人设…

【Linux学习笔记】1.Linux 简介及安装

前言 本章介绍Linux及其安装方法。 Linux 简介 Linux 内核最初只是由芬兰人林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统&#xff0c;是一个基于 POSIX 和 UNIX 的多…

【基础语法】JavaScript 全栈体系(四)

JavaScript 基础 第五章 类型转换 一、为什么需要类型转换&#xff1f; JavaScript是弱数据类型&#xff1a; JavaScript也不知道变量到底属于那种数据类型&#xff0c;只有赋值了才清楚。 坑&#xff1a; 使用表单、prompt 获取过来的数据默认是字符串类型的&#xff0c;此…

JVM及其内存模型

目录儿一、JVM1.1 为什么需要JVM&#xff1f;1.2 JVM内存模型1.3 堆&#xff08;Heap&#xff09;1.4 方法区&#xff08;Method Area&#xff09;1.5 虚拟机栈(JVM Stack)1.6 本地方法栈(Native Stack)1.7 程序计数器&#xff08;PC Register&#xff09;一、JVM JVM是Java V…

I-Cache 和 D-Cache

定义ICache和DCache是一种内存&#xff0c;虽然目前接触了好几种内存&#xff0c;寄存器&#xff0c;DDR等&#xff0c;它们在物理上的工作原理虽然不同&#xff0c;但是访问属性却很像。在速度上CPU > 寄存器 > Cache > SRAM &#xff1e;&#xff30;&#xff33;&…

100种思维模型之六顶帽思维模型-018

工作中&#xff0c;经常开会&#xff0c;开会于工作当然无可厚非。 可是&#xff0c;现实中的会议&#xff0c;往往存在效率低&#xff0c;效果不佳的问题。如&#xff0c;连续开一天的研究讨论会&#xff0c;最后没能讨论出个所以然&#xff0c;又或者会议有了决策&#xff0c…

QT_dbus(ipc进程间通讯)

QT_dbus(ipc进程间通讯) 前言&#xff1a; 参考链接&#xff1a; https://www.cnblogs.com/brt3/p/9614899.html https://blog.csdn.net/weixin_43246170/article/details/120994311 https://blog.csdn.net/kchmmd/article/details/118605315 一个大型项目可能需要多个子程序同…

《计算机网络:自顶向下方法》实验5:ARP协议分析 Wireshark实验

实验13:ARP协议分析 1 What is the 48-bit Ethernet address of your computer? 00:d0:59:a9:3d:68 2 What is the 48-bit destination address in the Ethernet frame? Is this the Ethernet address of gaia.cs.umass.edu? (Hint: the answer is no). What device has …

推荐算法—widedeep原理知识总结代码实现

wide&deep原理知识总结代码实现1. Wide&Deep 模型的结构1.1 模型的记忆能力1.2 模型的泛化能力2. Wide&Deep 模型的应用场景3. Wide&Deep 模型的代码实现3.1 tensorflow实现3.2 pytorch实现今天&#xff0c;总结一个在业界有着巨大影响力的推荐模型&#xff0c…

设计模式.工厂模式.黑马跟学笔记

设计模式.工厂模式4.创建型模式4.2 工厂模式4.2.1 概述4.2.2 简单工厂模式4.2.2.1 结构4.2.2.2 实现4.2.2.4 优缺点4.2.2.3 扩展4.2.3 工厂方法模式4.2.3.1 概念4.2.3.2 结构4.2.3.3 实现4.2.3.4 优缺点4.2.4 抽象工厂模式4.2.4.1 概念4.2.4.2 结构4.2.4.2 实现4.2.4.3 优缺点4…

C语言进阶(六)—— 结构体

1. 结构体基础知识1.1 结构体类型的定义struct Person{char name[64];int age; };typedef struct _PERSON{char name[64];int age; }Person;注意&#xff1a;定义结构体类型时不要直接给成员赋值&#xff0c;结构体只是一个类型&#xff0c;编译器还没有为其分配空间&#xff0…