序列模型(语言处理 第二、三周)

2.1 词汇表征(Word Representation)

不用one-hot表示,而是用特征化的表示来表示每个词
在这里插入图片描述
如果我们能够学习到一个300维的特征向量,或者说300维的词嵌入,通常我们可以做一件事,把这300维的数据嵌入到一个二维空间里,这样就可以可视化了。常用的可视化算法是t-SNE算法

在这里插入图片描述

2.2 使用词嵌入(Using Word Embeddings)

结一下,这是如何用词嵌入做迁移学习的步骤。

第一步,先从大量的文本集中学习词嵌入。一个非常大的文本集,或者可以下载网上预训练好的词嵌入模型,网上你可以找到不少,词嵌入模型并且都有许可。

第二步,你可以用这些词嵌入模型把它迁移到你的新的只有少量标注训练集的任务中,比如说用这个300维的词嵌入来表示你的单词。这样做的一个好处就是你可以用更低维度的特征向量代替原来的10000维的one-hot向量,现在你可以用一个300维更加紧凑的向量。尽管one-hot向量很快计算,而学到的用于词嵌入的300维的向量会更加紧凑。

第三步,当你在你新的任务上训练模型时,在你的命名实体识别任务上,只有少量的标记数据集上,你可以自己选择要不要继续微调,用新的数据调整词嵌入。实际中,只有这个第二步中有很大的数据集你才会这样做,如果你标记的数据集不是很大,通常我不会在微调词嵌入上费力气。


词嵌入在语言模型、机器翻译领域用的少一些,尤其是你做语言模型或者机器翻译任务时,这些任务你有大量的数据。在其他的迁移学习情形中也一样,如果你从某一任务A迁移到某个任务B,只有A中有大量数据,而B中数据少时,迁移的过程才有用。所以对于很多NLP任务这些都是对的,而对于一些语言模型和机器翻译则不然。

2.3 词嵌入的特性(Properties of Word Embeddings)

余弦相似度可以作为一种衡量两个词嵌入向量间相似度的办法

嵌入矩阵

在这里插入图片描述
差不多这个意思就是把原来那个大大的矩阵里面。我们需要的那一列,然后给提取出来,通过矩阵相乘的运算,提取出来我们哪一列,从o变成e。

词嵌入

如何学习一个神经语言模型来得到更好的词嵌入
建立网络的过程:
在这里插入图片描述

预测词的方法:
在这里插入图片描述

可以是左右的四个,上一个,附近的一个。

2.6 Word2Vec

这是一种简单而且计算时更加高效的方式来学习这种类型的嵌入。

假设在训练集中给定了一个这样的句子:“I want a glass of orange juice to go along with my cereal.”,在Skip-Gram模型中,我们要做的是抽取上下文和目标词配对,来构造一个监督学习问题。

Skip-Gram模型。它把一个像orange这样的词作为输入,并预测这个输入词,从左数或从右数的某个词,预测上下文词的前面一些或者后面一些是什么词。

在这里插入图片描述
重新学softmax
不是很理解这个skip-gram

softmax教学
教学2

都是只看前半部分就够了,
softmax是个非常常用而且比较重要的函数,尤其在多分类的场景中使用广泛。他把一些输入映射为0-1之间的实数,并且归一化保证和为1,因此多分类的概率之和也刚好为1。


使用这个算法会遇到一些问题,首要的问题就是计算速度。尤其是在softmax模型中,每次你想要计算这个概率,你需要对你词汇表中的所有10,000个词做求和计算

这里有一些解决方案,如分级(hierarchical)的softmax分类器和负采样(Negative Sampling)

这个就叫做分级softmax分类器
在这里插入图片描述

2.7 负采样(Negative Sampling)

在这里插入图片描述

生成这些数据的方式是我们选择一个上下文词(上图编号2所示),再选一个目标词(上图编号3所示),这(上图编号4所示)就是表的第一行,它给了一个正样本,上下文,目标词,并给定标签为1。然后我们要做的是给定几次,比如K次(上图编号5所示),我们将用相同的上下文词,再从字典中选取随机的词,king、book、the、of等,从词典中任意选取的词,并标记0,这些就会成为负样本(上图编号6所示)。出现以下情况也没关系,就是如果我们从字典中随机选到的词,正好出现在了词距内,比如说在上下文词orange正负10个词之内。

那么如何选取K?Mikolov等人推荐小数据集的话,K从5到20比较好。如果你的数据集很大,K就选的小一点。对于更大的数据集K就等于2到5,数据集越小K就越大。那么在这个例子中,我们就用K=4。
在这里插入图片描述

所以不使用一个巨大的10,000维度的softmax,因为计算成本很高,而是把它转变为10,000个二分类问题,每个都很容易计算,每次迭代我们要做的只是训练它们其中的5个,一般而言就是K+1个,其中K个负样本和1个正样本。这也是为什么这个算法计算成本更低,因为只需更新K+1个逻辑单元,K+1个二分类问题,相对而言每次迭代的成本比更新10,000维的softmax分类器成本低。

如何选取负样本,即在选取了上下文词orange之后,你如何对这些词进行采样生成负样本?

既不用经验频率,也就是实际观察到的英文文本的分布,也不用均匀分布,他们采用以下方式:
在这里插入图片描述
在这里插入图片描述

2.8 GloVe 词向量(GloVe Word Vectors)

不太懂啊、、、、
emmm感觉没用啊。

2.9

在这里插入图片描述

我们可以这样构建一个分类器,取这些向量(上图编号2所示),比如是300维度的向量。然后把它们求和或者求平均,这里我画一个大点的平均值计算单元(上图编号3所示),你也可以用求和或者平均。这个单元(上图编号3所示)会得到一个300维的特征向量,把这个特征向量送进softmax分类器,然后输出 y ^ \hat y y^。这个softmax能够输出5个可能结果的概率值,从一星到五星,这个就是5个可能输出的softmax结果用来预测 y y y的值。

这个算法有一个问题就是没考虑词序,尤其是这样一个负面的评价,“Completely lacking in good taste, good service, and good ambiance.”,但是good这个词出现了很多次,有3个good,如果你用的算法跟这个一样,忽略词序,仅仅把所有单词的词嵌入加起来或者平均下来,你最后的特征向量会有很多good的表示,你的分类器很可能认为这是一个好的评论,尽管事实上这是一个差评,只有一星的评价。

在这里插入图片描述
我们有一个更加复杂的模型,不用简单的把所有的词嵌入都加起来,我们用一个RNN来做情感分类。我们这样做,首先取这条评论,“Completely lacking in good taste, good service, and good ambiance.”,找出每一个one-hot向量,这里我跳过去每一个one-hot向量的表示。用每一个one-hot向量乘以词嵌入矩阵E,得到词嵌入表达e,然后把它们送进RNN里。RNN的工作就是在最后一步(上图编号1所示)计算一个特征表示,用来预测 y ^ \hat y y^,这是一个多对一的网络结构的例子,我们之前已经见过了。有了这样的算法,考虑词的顺序效果就更好了,它就能意识到"things are lacking in good taste",这是个负面的评价,“not good”也是一个负面的评价。而不像原来的算法一样,只是把所有的加在一起得到一个大的向量,根本意识不到“not good”和 “good”不是一个意思,"lacking in good taste"也是如此,等等。

如果你训练一个这样的算法,最后会得到一个很合适的情感分类的算法。由于你的词嵌入是在一个更大的数据集里训练的,这样效果会更好,更好的泛化一些没有见过的新的单词。比如其他人可能会说,“Completely absent of good taste, good service, and good ambiance.”,即使absent这个词不在标记的训练集里,如果是在一亿或者一百亿单词集里训练词嵌入,它仍然可以正确判断,并且泛化的很好,甚至这些词是在训练集中用于训练词嵌入的,但是可以不在专门用来做情感分类问题的标记的训练集中。

2.10 词嵌入除偏(Debiasing Word Embeddings)

现在机器学习和人工智能算法正渐渐地被信任用以辅助或是制定极其重要的决策,因此我们想尽可能地确保它们不受非预期形式偏见影响,比如说性别歧视、种族歧视等等。本节视频中我会向你展示词嵌入中一些有关减少或是消除这些形式的偏见的办法。
在这里插入图片描述

一、对于性别歧视这种情况来说,我们能做的是,因为它们的性别不同,然后将,然后将这些值取平均(上图编号2所示),将这些差简单地求平均。

二、中和步骤,所以对于那些定义不确切的词可以将其处理一下,避免偏见。
在这里插入图片描述

三、均衡步

第三周 序列模型和注意力机制(Sequence models & Attention mechanism)

3.1 基础模型(Basic Models)

基本的seq2seq模型以及image to sequence模型或者说图像描述模型

seq2seq 是一个 Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列, Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。

这个结构最重要的地方在于输入序列和输出序列的长度是可变的,可以用于翻译,聊天机器人,句法分析,文本摘要等。

学习seq2seq(sequence to sequence)模型,从机器翻译到语音识别,它们都能起到很大的作用,从最基本的模型开始。之后你还会学习集束搜索(Beam search)和注意力模型(Attention Model),一直到最后的音频模型,比如语音。

在这里插入图片描述

翻译模型:首先,我们先建立一个网络,这个网络叫做编码网络(encoder network)(上图编号1所示),它是一个RNN的结构, RNN的单元可以是GRU 也可以是LSTM。每次只向该网络中输入一个法语单词,将输入序列接收完毕后,这个RNN网络会输出一个向量来代表这个输入序列。之后建立一个解码网络,,它以编码网络的输出作为输入,之后它可以被训练为每次输出一个翻译后的单词,一直到它输出序列的结尾或者句子结尾标记,这个解码网络的工作就结束了。我们把每次生成的标记都传递到下一个单元中来进行预测,

在这里插入图片描述

3.2 选择最可能的句子(Picking the most likely sentence)

在这里插入图片描述
语言模型、机器翻译模型是下面这样的
用绿色(上图编号2所示)表示encoder网络,用紫色(上图编号3所示)表示decoder网络。你会发现decoder网络看起来和刚才所画的语言模型几乎一模一样,机器翻译模型其实和语言模型非常相似,不同在于语言模型总是以零向量(上图编号4所示)开始,而encoder网络会计算出一系列向量(上图编号2所示)来表示输入的句子。有了这个输入句子,decoder网络就可以以这个句子开始,而不是以零向量开始,所以我把它叫做条件语言模型(conditional language model)。相比语言模型,输出任意句子的概率,翻译模型会输出句子的英文翻译(上图编号5所示)


这个模型和之前的语言模型一个主要的区别就是,相比之前的模型随机地生成句子,在该模型中你要找到最有可能的英语句子,最可能的英语翻译,但是可能的句子组合数量过于巨大,无法一一列举,所以我们需要一种合适的搜索算法,让我们在下节课中学习集束搜索。

3.3 集束搜索(Beam Search)

集束搜索算法首先做的就是挑选要输出的英语翻译中的第一个单词。
在这里插入图片描述

集束搜索算法会有一个参数B,叫做集束宽(beam width)。在这个例子中我把这个集束宽设成3,这样就意味着集束搜索不会只考虑一个可能结果,而是一次会考虑3个。

了执行集束搜索的第一步,你需要输入法语句子到编码网络,然后会解码这个网络,这个softmax层(上图编号3所示)会输出10,000个概率值,得到这10,000个输出的概率值,取前三个存起来。

让我们看看集束搜索算法的第二步,已经选出了in、jane、september作为第一个单词三个最可能的选择,集束算法接下来会针对每个第一个单词考虑第二个单词是什么
在这里插入图片描述
为了评估第二个词的概率值,当决定单词in后面是什么,解码器的第一个输出 y < 1 > {y^{ < 1 > }} y<1>,我把 y < 1 > {y^{ < 1 > }} y<1>设为单词in(上图编号3所示),然后把它喂回来,这里就是单词in(上图编号4所示),因为它的目的是努力找出第一个单词是in的情况下,第二个单词是什么。这个输出就是 y < 2 > {y^{ < 2 > }} y<2>(上图编号5所示),有了这个连接(上图编号6所示),就是这里的第一个单词in(上图编号4所示)作为输入,这样这个网络就可以用来评估第二个单词的概率了,在给定法语句子和翻译结果的第一个单词in的情况下。

在这里插入图片描述

第二步,由于我们一直用的集束宽为3,并且词汇表里有10,000个单词,那么最终我们会有3乘以10,000也就是30,000个可能的结果,你要做的就是评估这30,000个选择。按照第一个词和第二个词的概率,然后选出前三个,这样又减少了这30,000个可能性,又变成了3个,减少到集束宽的大小。

集束搜索算法会保存这些结果,然后用于下一次集束搜索。

提醒一下因为我们的集束宽等于3,每一步我们都复制3个,同样的这种网络来评估部分句子和最后的结果,每个网络的第一个单词不同,所以不需要初始化30,000个网络副本,只需要使用3个网络的副本就可以快速的评估softmax的输出。

如果集束宽等于1,只考虑1种可能结果,这实际上就变成了贪婪搜索算法

3.4 改进集束搜索(Refinements to Beam Search)

在这里插入图片描述

在这里插入图片描述
记录的是概率的对数(这样不会导致越长的句子越有优势吗??)

这里的结果依旧是很小的数,但是通过log就可以变大,不会影响他们的排序。


对于目标函数(this objective function),还可以做一些改变,可以使得机器翻译表现的更好。如果参照原来的目标函数(this original objective),如果有一个很长的句子,那么这个句子的概率会很低,因为乘了很多项小于1的数字来估计句子的概率。所以如果乘起来很多小于1的数字,那么就会得到一个更小的概率值,所以这个目标函数有一个缺点,它可能不自然地倾向于简短的翻译结果,它更偏向短的输出,因为短句子的概率是由更少数量的小于1的数字乘积得到的,所以这个乘积不会那么小。顺便说一下,这里也有同样的问题,概率的 l o g log log值通常小于等于1,实际上 l o g log log在的这个范围内,所以加起来的项越多,得到的结果越负,所以对这个算法另一个改变也可以使它表现的更好,也就是我们不再最大化这个目标函数了,我们可以把它归一化,通过除以翻译结果的单词数量(normalize this by the number of words in your translation)。这样就是取每个单词的概率对数值的平均了,这样很明显地减少了对输出长的结果的惩罚(this significantly reduces the penalty for outputting longer translations.)。

在这里插入图片描述
如何选择束宽B???
B越大,你考虑的选择越多,你找到的句子可能越好,但是B越大,你的算法的计算代价越大,因为你要把很多的可能选择保存起来。最后我们总结一下关于如何选择束宽B的一些想法。接下来是针对或大或小的B各自的优缺点。如果束宽很大,你会考虑很多的可能,你会得到一个更好的结果,因为你要考虑很多的选择,但是算法会运行的慢一些,内存占用也会增大,计算起来会慢一点。而如果你用小的束宽,结果会没那么好,因为你在算法运行中,保存的选择更少,但是你的算法运行的更快,内存占用也小。

3.5 集束搜索的误差分析(Error analysis in beam search)

束搜索算法是一种近似搜索算法(an approximate search algorithm),也被称作启发式搜索算法(a heuristic search algorithm),它不总是输出可能性最大的句子,它仅记录着B为前3或者10或是100种可能。那么如果束搜索算法出现错误会怎样呢?

模型有两个主要部分,一个是神经网络模型,或说是序列到序列模型(sequence to sequence model),我们将这个称作是RNN模型,它实际上是个编码器和解码器( an encoder and a decoder)。另一部分是束搜索算法,以某个集束宽度B运行。

在这里插入图片描述

反正两种情况,比较两个y, y ∗ , 和 y ^ {y^*},和\hat y yy^
在这里插入图片描述

3.6 Bleu 得分(选修)(Bleu Score (optional))

BLEU得分做的就是,给定一个机器生成的翻译,它能够自动地计算一个分数来衡量机器翻译的好坏。

在这里插入图片描述

我们把每一个单词的记分上限定为它在参考句子中出现的最多次数。在参考1中,单词the出现了两次,在参考2中,单词the只出现了一次。而2比1大,所以我们会说,单词the的得分上限为2。有了这个改良后的精确度,我们就说,这个输出句子的得分为2/7,因为在7个词中,我们最多只能给它2分。所以这里分母就是7个词中单词the总共出现的次数,而分子就是单词the出现的计数。我们在达到上限时截断计数,这就是改良后的精确度评估(the modified precision measure)。

到目前为止,我们都只是关注单独的单词,在BLEU得分中,你不想仅仅考虑单个的单词,你也许也想考虑成对的单词,我们定义一下二元词组bigrams的BLEU得分。bigram的意思就是相邻的两个单词。
在这里插入图片描述
总概率:

在这里插入图片描述
在这里插入图片描述
最后,我们将这些组合一下来构成最终的BLEU得分。 P n {P_n} Pn就是元词组 n n n这一项的BLEU得分,也是计算出的元词组改良后的精确度,按照惯例,为了用一个值来表示你需要计算 P 1 {P_1} P1 P 2 {P_2} P2 P 3 {P_3} P3 P 4 {P_4} P4。然后将它们用这个公式组合在一起,就是取平均值。按照惯例BLEU得分被定义为, exp ⁡ ( 1 4 ∑ n = 1 4 P n ) \exp (\frac{1}{4}\sum\limits_{n = 1}^4 {{P_n}} ) exp(41n=14Pn),对这个线性运算进行乘方运算,乘方是严格单调递增的运算。


了解一下
我们实际上会用额外的一个叫做BP 的惩罚因子(the BP penalty)来调整这项。
BP的意思是“简短惩罚”( brevity penalty)。 事实表明,如果你输出了一个非常短的翻译,那么它会更容易得到一个高精确度。
因为输出的大部分词可能都出现在参考之中,不过我们并不想要特别短的翻译结果。因此简短惩罚(BP)就是一个调整因子,它能够惩罚输出了太短翻译结果的翻译系统。
BP的公式如上图所示。
如果你的机器翻译系统实际上输出了比人工翻译结果更长的翻译,那么它就等于1,其他情况下就是像这样的公式,惩罚所有更短的翻译

实践中,很少人会从零实现一个BLEU得分(implement a BLEU score from scratch),有很多开源的实现结果,你可以下载下来然后直接用来评估你的系统。

BLEU得分是一个有用的单一实数评估指标,用于评估生成文本的算法,判断输出的结果是否与人工写出的参考文本的含义相似。

3.7 注意力模型直观理解(Attention Model Intuition)

注意力详解
再看看吧

3.9语音识别(Speech recognition)

在这里插入图片描述
就是用CTC损失函数(CTC cost)来做语音识别

举个例子,比如你有一段10秒的音频,并且特征(features)是100赫兹的,即每秒有100个样本,于是这段10秒的音频片段就会有1000个输入,就是简单地用100赫兹乘上10秒。所以有1000个输入,但可能你的输出就没有1000个字母了,或者说没有1000个字符。这时要怎么办呢?CTC损失函数允许RNN生成这样的输出:ttt,这是一个特殊的字符,叫做空白符,我们这里用下划线表示,这句话开头的音可表示为h_eee_ _ 然后这里可能有个空格,我们用这个来表示空格,之后是 _ qqq_,这样的输出也被看做是正确的输出。下面这段输出对应的是"the q"。CTC损失函数的一个基本规则是将空白符之间的重复的字符折叠起来,再说清楚一些,我这里用下划线来表示这个特殊的空白符(a special blank character),它和空格(the space character)是不一样的..所以the和quick之间有一个空格符,所以我要输出一个空格,通过把用空白符所分割的重复的字符折叠起来,然后我们就可以把这段序列折叠成"the q"。这样一来你的神经网络因为有很多这种重复的字符,和很多插入在其中的空白符(blank characters),所以最后我们得到的文本会短上很多。于是这句"the quick brown fox"包括空格一共有19个字符,在这样的情况下,通过允许神经网络有重复的字符和插入空白符使得它能强制输出1000个字符

3.10触发字检测(Trigger Word Detection)

在这里插入图片描述
现在有一个这样的RNN结构,我们要做的就是把一个音频片段(an audio clip)计算出它的声谱图特征(spectrogram features)得到特征向量, 然后把它放到RNN中,最后要做的,就是定义我们的目标标签y。假如音频片段中的这一点是某人刚刚说完一个触发字,比如"Alexa",或者"小度你好" 或者"Okay Google",那么在这一点之前,你就可以在训练集中把目标标签都设为0,然后在这个点之后把目标标签设为1。假如在一段时间之后,触发字又被说了一次,比如是在这个点说的,那么就可以再次在这个点之后把目标标签设为1。这样的标签方案对于RNN来说是可行的,并且确实运行得非常不错。不过该算法一个明显的缺点就是它构建了一个很不平衡的训练集(a very imbalanced training set),0的数量比1多太多了。

里还有一个解决方法,虽然听起来有点简单粗暴,但确实能使其变得更容易训练。比起只在一个时间步上去输出1,其实你可以在输出变回0之前,多次输出1,或说在固定的一段时间内输出多个1。这样的话,就稍微提高了1与0的比例,这确实有些简单粗暴。在音频片段中,触发字刚被说完之后,就把多个目标标签设为1,这里触发字又被说了一次。说完以后,又让RNN去输出1。

说完以后,输出一堆1.

总结:所以总结一下我们对序列模型的学习。我们学了RNN,包括GRU和LSTM,然后在上一周我们学了词嵌入(word embeddings),以及它们如何学习词汇的表达(how they learn representations of words)。在这周还学了注意力模型(the attention model)以及如何使用它来处理音频数据(audio data)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值