自然语言处理(11:RNN(RNN的前置知识和引入)

news/2025/3/29 20:55:33/

系列文章目录

第一章 1:同义词词典和基于计数方法语料库预处理

第一章 2:基于计数方法的分布式表示和假设,共现矩阵,向量相似度

第一章 3:基于计数方法的改进以及总结

第二章 1:word2vec

第二章 2:word2vec和CBOW模型的初步实现

第二章 3:CBOW模型的完整实现

第二章 4:CBOW模型的补充和skip-gram模型的理论

第三章 1:word2vec的高速化(CBOW的改进)

第三章 2:word2vec高速化(CBOW的二次改进)

第三章 3:改进版word2vec的学习以及总结

第四章 1:RNN(RNN的前置知识和引入)

第四章 2:RNN(RNN的正式介绍)


文章目录

目录

系列文章目录

文章目录

前言

一、概率和语言模型

1.概率视角下的word2vec

2.语言模型

3.将CBOW模型用作语言模型?

总结



前言

上一次我们学习了最后的改进版word2vec的学习以及总结,(链接在此                         自然语言处理(10:改进版word2vec的学习以及总结)-CSDN博客),且到目前为止,我们看到的神经网络都是前馈型神经网络。前馈是指网络的传播方向是单向的。具体地说,先将输入信号传 给下一层(隐藏层),接收到信号的层也同样传给下一层,然后再传给下一 层……像这样,信号仅在一个方向上传播。 虽然前馈网络结构简单、易于理解,但是可以应用于许多任务中。不过, 这种网络存在一个大问题,就是不能很好地处理时间序列数据(以下简称为 “时序数据”)。更确切地说,单纯的前馈网络无法充分学习时序数据的性质(模式)。于是,RNN(Recurrent Neural Network,循环神经网络)便应运而生。

接下来这几节我们将指出前馈网络的问题,并介绍RNN如何很好地解决这些问 题。然后,我们会详细解释RNN的结构。


一、概率和语言模型

1.概率视角下的word2vec

我们先复习一下word2vec的CBOW模型。这里,我们来考虑由单词 序列w1,w2,···,wT 表示的语料库,将第t个单词作为目标词,将它左右的 (第t−1个和第t+1个)单词作为上下文。

注:目标词是指中间的单词,上下文是指目标词周围的单词。

且CBOW模型所做的事情就是从上下文(wt−1和wt+1) 预测目标词(wt)。

下面,我们用数学式来表示“当给定wt−1和wt+1时目标词是wt的概率”,如下式所示:

CBOW模型对上式这一后验概率进行建模。这个后验概率表示“当给定wt−1和wt+1时wt发生的概率”。这是窗口大小为1时的CBOW模型。 顺便提一下,我们之前考虑的窗口都是左右对称的。这里我们将上下文限定为左侧窗口,比如下图所示的情况。

仅将左侧2个单词作为上下文的情况下,CBOW模型输出的概率如下式所示:

为啥这里上下文只用了左侧的呢?(即左侧2个单词,右侧0个单词。)这样设定的理由是提前考虑了后面要说的语言模型。

使用上式的写法,CBOW模型的损失函数可以写成下式。下式 是从交叉熵误差推导出来的结果(参考前几节,因为重复多次了,这里直接给结果)

CBOW模型的学习旨在找到使上式表示的损失函数(确切地说, 是整个语料库的损失函数之和)最小的权重参数。只要找到了这样的权重参 数,CBOW模型就可以更准确地从上下文预测目标词。 像这样,CBOW模型的学习目的是从上下文预测出目标词。为了达成 这一目标,随着学习的推进,(作为副产品)获得了编码了单词含义信息的 单词的分布式表示。

那么,CBOW模型本来的目的“从上下文预测目标词”是否可以用来做些什么呢?

P(w_{t}|w_{t-2},w_{t-1})表示的概率是否可以在一些实际场景中发挥作用呢?说到这里,就要提一下语言模型了。

2.语言模型

语言模型(language model)给出了单词序列发生的概率。具体来说, 就是使用概率来评估一个单词序列发生的可能性,即在多大程度上是自然的单词序列。比如,对于“you say goodbye”这一单词序列,语言模型给出高概率(比如0.092);对于“you say good die”这一单词序列,模型则给 出低概率(比如0.000 000 000 003 2)。 语言模型可以应用于多种应用,典型的例子有机器翻译和语音识别。比如,语音识别系统会根据人的发言生成多个句子作为候选。此时,使用语言模型,可以按照“作为句子是否自然”这一基准对候选句子进行排序。 语言模型也可以用于生成新的句子。因为语言模型可以使用概率来评价单词序列的自然程度,所以它可以根据这一概率分布造出(采样)单词。

现在,我们使用数学式来表示语言模型。这里考虑由m个单词w1,···, wm构成的句子,将单词按w1,···,wm的顺序出现的概率记为P(w1,···, wm)。因为这个概率是多个事件一起发生的概率,所以称为联合概率

使用后验概率(概率论中的基本知识)可以将这个联合概率分解成如下形式(看不懂的话,看看博主前几篇文章,或者问deepseek,放心,不难):(但是我回想起,这整个文章是一篇入门级,因此必须解释下,免不了内容多,还请见谅

与表示总和的Σ(sigma)相对,式(5.4)中的Π(pi)表示所有元素相乘的乘积。如上式所示,联合概率可以由后验概率的乘积表示。 上式的结果可以从概率的乘法定理推导出来。这里我们花一点时间来说明一下乘法定理,并看一下它的推导过程。

首先,概率的乘法定理可由下式表示:

上式表示的乘法定理是概率论中最重要的定理,意思是“A和B两个事件共同发生的概率P(A,B)”是“B发生的概率P(B)”和“B发生后A发生的概率P(A|B)”的乘积(这个解释感觉上非常自然)。

(当然,概率P(A,B)也可以分解为P(A,B)=P(B|A)P(A)。也就 是说,根据将A和B中的哪一个作为后验概率的条件,存在 P(A, B) = P(B|A)P(A)和P(A,B) = P(A|B)P(B)两种表示 方法。)

使用这个乘法定理,m个单词的联合概率P(w1,···,wm)就可以用后 验概率来表示。为了便于理解,我们先将式子如下变形:

这里,将w1,···,wm−1整体表示为A。这样一来,按照乘法定理,可以推 导出上述式子右边。接着,再对A(w1,···,wm−1)进行同样的变形:

像这样,单词序列每次减少一个,分解为后验概率。然后,重复这一过程, 就可以推导出式

如上式所示,联合概率P(w1,···,wm)可以表示为后验概率的乘积 Π P(wt|w1,···,wt−1)。这里需要注意的是,这个后验概率是以目标词左侧的全部单词为上下文(条件)时的概率,如下所示:

这里我们来总结一下,我们的目标是求P(wt|w1,···,wt−1)这个概率。 如果能计算出这个概率,就能求得语言模型的联合概率P(w1,···,wm)。

(由P(wt|w1,···, wt−1)表示的模型称为条件语言模型(conditional language model),有时也将其称为语言模型。)

3.将CBOW模型用作语言模型?

那么,如果要把word2vec的CBOW模型(强行)用作语言模型,该怎么办呢?可以通过将上下文的大小限制在某个值来近似实现,用数学式可以如下表示:

这里,我们将上下文限定为左侧的2个单词。如此一来,就可以用CBOW 模型(CBOW模型的后验概率)近似表示。

上式是使用2个单词作为上下文的例子,但是这个上下文的大小可以设定为任意长度(比如5或10)。不过,虽说可以设定为任意长度,但必须是某个“固定”长度。比如,即便是使用左侧10个单词作为上下文的CBOW模型,其上下文更左侧的单词的信息也会被忽略,而这会导致问题, 如下图中的例子所示:

在上图的问题中,“Tom在房间看电视,Mary进了房间”。根据该语境(上下文),正确答案应该是Mary向Tom(或者“him”)打招呼。这里要获得正确答案,就必须将“?”前面第18个单词处的Tom记住。如果CBOW模型的上下文大小是10,则这个问题将无法被正确回答。 那么,是否可以通过增大CBOW模型的上下文大小(比如变为20或 30)来解决此问题呢?的确,CBOW模型的上下文大小可以任意设定,但 是CBOW模型还存在忽视了上下文中单词顺序的问题。

关于上下文的单词顺序被忽视这个问题,我们举个例子来具体说明。比如,在上下文是2个单词的情况下,CBOW模型的中间层是那2个单词向量的和,如下图所示:

如上图的左图所示,在CBOW模型的中间层求单词向量的和,因此上下文的单词顺序会被忽视。比如,(you, say)和(say, you)会被作为相同的内容进行处理。

我们想要的是考虑了上下文中单词顺序的模型。为此,可以像图5-5中 的右图那样,在中间层“拼接”(concatenate)上下文的单词向量。但是,如果采用拼接的方法,权重 参数的数量将与上下文大小成比例地增加。显然,这是我们不愿意看到的。

那么,如何解决这里提出的问题呢?这就轮到RNN出场了。RNN具有一个机制,那就是无论上下文有多长,都能将上下文信息记住。因此,使用RNN可以处理任意长度的时序数据。下一节,我们就来感受一下RNN的魅力。


总结(下一节正式RNN)

word2vec是以获取单词的分布式表示为目的的方法,因此一般不会用于语言模型。这里,为了引出RNN的魅力,我们拓展了话题,强行将word2vec的CBOW模型应用在了语言模型上。 word2vec和基于RNN的语言模型是由托马斯·米科洛夫团队分别在2013年和2010年提出的。基于RNN的语言模型虽然也能获得单词的分布式表示,但是为了应对词汇量的增加、提高分布式表示的质量,word2vec被提了出来。


http://www.ppmy.cn/news/1583283.html

相关文章

在 PostgreSQL 中设置调试环境以更好地理解 OpenSSL API

1. 概述 本文将介绍如何设置一个 gdb 调试环境,以深入了解 TLS 连接并更好地理解 PostgreSQL 中使用的 OpenSSL API。 2. 使用调试符号构建 OpenSSL 首先,检出 OpenSSL 源代码并切换到您想要使用的版本。在本例中,我想使用 OpenSSL 3.0.2 …

NVIDIA NeMo 全面教程:从入门到精通

NVIDIA NeMo 全面教程:从入门到精通 文章目录 NVIDIA NeMo 全面教程:从入门到精通目录框架介绍NeMo的核心特点NeMo的架构NeMo与其他框架的比较NeMo的模型集合NeMo的工作流程NeMo 2.0的新特性 安装指南系统要求使用Docker容器安装步骤1:安装Do…

自由学习记录(47)

刚刚新建的 Color 属性,名字叫 Albedo,是创建的 Shader 可调参数之一。 元素含义Albedo这是你定义的一个公开颜色参数,名字叫 AlbedoReference(变量名)"_Albedo" 是这个变量在材质中可访问的名字Exposed 勾…

【多媒体交互】Unity+普通摄像头实现UI事件分析

在Unity中,通过普通摄像头实现UI点击事件的核心思路是:利用摄像头捕捉用户的手势或动作,结合坐标映射与事件系统触发UI交互。以下是具体实现方法与技术要点: 技术实现原理 手势识别与坐标映射 通过摄像头捕捉用户手势&#xff…

Sass (Scss) 与 Less 的区别与选择

Sass 与 Less 的区别与选择 1. 语法差异2. 特性与支持3. 兼容性4. 选择建议 在前端开发中,CSS预处理器如Sass(Syntactically Awesome Stylesheets)和Less被广泛使用,它们通过引入变量、嵌套规则、混合、函数等特性,使C…

AI小白的第七天:必要的数学知识(概率)

概率 Probability 1. 概率的定义 概率是一个介于 0 和 1 之间的数,表示某个事件发生的可能性: 0:事件不可能发生。1:事件必然发生。0 到 1 之间:事件发生的可能性大小。 例如,掷一枚公平的硬币&#xf…

C++ 多线程简要讲解

std::thread是 C11 标准库中用于多线程编程的核心类,提供线程的创建、管理和同步功能。下面我们一一讲解。 一.构造函数 官网的构造函数如下: 1.默认构造函数和线程创建 thread() noexcept; 作用:创建一个 std::thread 对象,但…

HTML5 拖放(Drag and Drop)学习笔记

一、HTML5 拖放简介 HTML5 拖放(Drag and Drop)是HTML5标准的一部分,允许用户抓取一个对象并将其拖动到另一个位置。拖放功能在现代网页中非常常见,例如文件上传、任务管理、布局调整等场景。 HTML5 拖放功能支持以下浏览器&…