系列文章目录
第一章 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模型本来的目的“从上下文预测目标词”是否可以用来做些什么呢?
表示的概率是否可以在一些实际场景中发挥作用呢?说到这里,就要提一下语言模型了。
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被提了出来。