机器学习面试题汇总与解析——NLP

本章讲解知识点

    1. 什么是 NLP
    1. 循环神经网络(RNN)
    1. RNN 变体
    1. Attention 机制
    1. RNN 反向传播推导
    1. LSTM 与 GRU
    1. Transformer
    1. Bert
    1. GPT
    1. 分词算法分类
    1. CBOW 模型与 Skip-Gram 模型


  • 本专栏适合于Python已经入门的学生或人士,有一定的编程基础。
  • 本专栏适合于算法工程师、机器学习、图像处理求职的学生或人士。
  • 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份面试题总结的正确打开方式。这样才方便背诵
  • 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。
  • 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。

  • 关于机器学习算法书籍,我强烈推荐一本《百面机器学习算法工程师带你面试》,这个就很类似面经,还有讲解,写得比较好。

  • 关于深度学习算法书籍,我强烈推荐一本《解析神经网络——深度学习实践手册》,简称 CNN book,通俗易懂。



1. 什么是 NLP

NLP(Natural Language Processing,自然语言处理)是一门研究如何使计算机能够理解、处理和生成人类自然语言的学科。它涉及到文本分析、语义理解、机器翻译、情感分析、问答系统等多个任务。

为了解决这些任务,NLP 使用了多种技术和方法,包括词嵌入(word embeddings)、循环神经网络(RNN)、卷积神经网络(CNN)、注意力机制(attention)、序列到序列模型(sequence-to-sequence)、预训练模型(如 BERT、GPT 等)等。


2. 循环神经网络(RNN)

细想 BP 算法,CNN (卷积神经网络)我们会发现,他们的输出都是只考虑前一个输入的影响而不考虑其它时刻输入的影响,比如简单的猫、狗、手写数字等单个物体的识别具有较好的效果。但是,对于一些与时间先后有关的,比如视频的下一时刻的预测,文档前后文内容的预测等,这些算法的表现就不尽如人意了。因此,RNN就应运而生了。

循环神经网络(Recurrent Neural Network,RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network)。

RNN 是一种特殊的神经网络结构,它是根据人的认知是基于过往的经验和记忆这一观点提出的。它与DNN、CNN不同的是:它不仅考虑前一时刻的输入,而且赋予了网络对前面的内容的一种记忆功能

代表性 RNN

  • 基本 RNN:循环网络的基本构成
  • LSTM:突破性进展的长短期记忆网络
  • GRU:新式的 Cell 模块单元
  • NTM:更大记忆体模型的探索

首先看一个简单的循环神经网络如下,它由输入层、一个隐藏层和一个输出层组成:

img

如果把上面有 WW 的那个带箭头的圈去掉,它就变成了最普通的全连接神经网络。

  • xx 是一个向量,它表示输入层的值;
  • ss 是一个向量,它表示隐藏层的输出值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量 ss 的维度相同);
  • UU 是输入层到隐藏层的权重矩阵
  • oo 也是一个向量,它表示输出层的值;
  • VV 是隐藏层到输出层的权重矩阵。

那么,现在我们来看看 WW 是什么。循环神经网络的隐藏层的值 ss 不仅仅取决于当前这次的输入 xx,还取决于上一次隐藏层的值 ss权重矩阵 WW 就是隐藏层上一次的值作为这一次的输入的权重。这个就是实现时间记忆功能的方法

我们给出这个抽象图对应的具体图:

img

我们从上图就能够很清楚的看到,上一时刻的隐藏层是如何影响当前时刻的隐藏层的。

如果我们把上面的图展开,循环神经网络也可以画成下面这个样子:

img

这是一个标准的 RNN 结构图,图中每个箭头代表做一次变换,也就是说箭头连接带有权值。左侧是折叠起来的样子,右侧是展开的样子,左侧中 hh 旁边的箭头代表此结构中的“循环“体现在隐层。 在展开结构中我们可以观察到,在标准的 RNN 结构中,隐层的神经元之间也是带有权值的。也就是说,随着序列的不断推进,前面的隐层将会影响后面的隐层。图中 oo 代表输出,yy 代表样本给出的确定值,LL 代表损失函数,我们可以看到,“损失“也是随着序列的推荐而不断积累的。 除上述特点之外,标准 RNN 的还有以下特点: 1、权值共享,图中的 WW 全是相同的,UUVV 也一样。 2、每一个输入值都只与它本身的那条路线建立权连接,不会和别的神经元连接。 3、隐藏状态可以理解为: h=f(+)h=f(现有的输入+过去记忆总结)

以上是 RNN 的标准结构 N VS N(N 个输入对应着 N 个输出),即输入和输出序列必须要是等长的

由于这个限制的存在,经典 RNN 的适用范围比较小,但也有一些问题适合用经典的 RNN 结构建模,如:

  • 计算视频中每一帧的分类标签。因为要对每一帧进行计算,因此输入和输出序列等长。
  • 输入为字符,输出为下一个字符的概率。这就是著名的 Char RNN(详细介绍请参考:The Unreasonable Effectiveness of Recurrent Neural Networks,Char RNN 可以用来生成文章,诗歌,甚至是代码)

3. RNN 变体

3.1 N VS 1

RNN 的标准结构 N VS N 在实际中并不能解决所有问题,有的时候,我们要处理的问题输入是一个序列,输出是一个单独的值而不是序列,例如我们输入为一串文字,输出为分类类别,那么输出就不需要一个序列,只需要单个输出。应该怎样建模呢?实际上,我们只在最后一个 hh 上进行输出变换就可以了。

img

这种结构通常用来处理序列分类问题。如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。

3.2 1 VS N

输入不是序列而输出为序列的情况怎么处理?我们可以只在序列开始进行输入计算:

img

还有一种结构是把输入信息作为每个阶段的输入(输入虽是序列,但不随着序列变化):

img

这种 1 VS N 的结构可以处理的问题有:

  • 从图像生成文字(image caption),此时输入的就是图像的特征,而输出的序列就是一段句子;
  • 从类别生成语音或音乐等。

3.3 N VS M

下面我们来介绍RNN最重要的一个变种:N vs M。这种结构又叫 Encoder-Decoder 模型,也可以称之为 Seq2Seq 模型。

原始的 N vs N RNN 要求序列等长,然而我们遇到的大部分问题序列都是不等长的,如机器翻译中,源语言和目标语言的句子往往并没有相同的长度。

为此,Encoder-Decoder结构先将输入数据编码成一个上下文向量 cc

img

得到 cc 有多种方式,最简单的方法就是把 Encoder 的最后一个隐状态赋值给,还可以对最后的隐状态做一个变换得到 cc,也可以对所有的隐状态做变换。

得到 cc 之后,就用另一个 RNN 网络对其进行解码,这部分 RNN 网络被称为 Decoder。具体做法就是将 cc 当做之前的初始状态输入到 Decoder 中:

img

还有一种做法是将 cc 当做每一步的输入:

img

由于这种 Encoder-Decoder 结构不限制输入和输出的序列长度,因此应用的范围非常广泛,比如:

  • 机器翻译。Encoder-Decoder 的最经典应用,事实上这一结构就是在机器翻译领域最先提出的;
  • 文本摘要。输入是一段文本序列,输出是这段文本序列的摘要序列;
  • 阅读理解。将输入的文章和问题分别编码,再对其进行解码得到问题的答案;
  • 语音识别。输入是语音信号序列,输出是文字序列。

4. Attention 机制

在 Encoder-Decoder 结构中,Encoder 把所有的输入序列都编码成一个统一的语义特征 cc 再解码,因此, cc 中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。如机器翻译问题,当要翻译的句子较长时,一个 cc 可能存不下那么多信息,就会造成翻译精度的下降。

Attention 机制通过在每个时间输入不同的 cc 来解决这个问题,下图是带有 Attention 机制的 Decoder:

img

每一个 cc 会自动去选取与当前所要输出的 yy 最合适的上下文信息。具体来说,我们用 aija_{ij} 衡量 Encoder 中第 jj 阶段的 hjh_j 和解码时第 ii 阶段的相关性,最终 Decoder 中第 ii 阶段的输入的上下文信息 cic_i 就来自于所有 hjh_jaija_{ij} 的加权和。

以机器翻译为例(将中文翻译成英文):

img

输入的序列是“我爱中国”,因此,Encoder 中的 h1h_1h2h_2h3h_3h4h_4 就可以分别看做是“我”、“爱”、“中”、“国”所代表的信息。在翻译成英语时,第一个上下文 c1c_1 应该和“我”这个字最相关,因此对应的 a11a_{11} 就比较大,而相应的 a12a_{12}a13a_{13}a14a_{14} 就比较小。c2c_2 应该和“爱”最相关,因此对应的 a22a_{22} 就比较大。最后的 c3c_3h3h_3h4h_4 最相关,因此 a33a_{33}a34a_{34} 的值就比较大。

至此,关于Attention模型,我们就只剩最后一个问题了,那就是:aija_{ij} 是怎么来的?

事实上,aija_{ij} 同样是从模型中学出的,它实际和 Decoder 的第 i1i-1 阶段的隐状态、Encoder 第 jj 个阶段的隐状态有关。

同样还是拿上面的机器翻译举例,a1ja_{1j} 的计算(此时箭头就表示对 hh'hjh_j 同时做变换):

img

a2ja_{2j} 的计算:

img

a3ja_{3j} 的计算:

img

以上就是带有 Attention 的 Encoder-Decoder 模型计算的全过程,就是反向传播更新参数时学到的,具体如何更新参数,这里不表。aija_{ij} 代表神经元的权重 ww,权重越大注意力越强。


5. RNN 反向传播推导

https://zybuluo.com/hanbingtao/note/541458 (使用最新 IE 浏览器打开)


6. LSTM 与 GRU

https://zybuluo.com/hanbingtao/note/581764 (使用最新 IE 浏览器打开)

我们挑重点内容讲解:

6.1 LSTM

通过 RNN 反向传播推导我们知道,普通 RNN 处理“长依赖”问题存在梯度消失的情况。幸好 LSTMs 这种特殊的 RNNs 是没有这个问题的。Long Short Term Memory networks(以下简称 LSTMs),一种特殊的RNN网络,该网络设计出来是为了解决长依赖问题。

所有循环神经网络都具有神经网络的重复模块链的形式。 在标准的RNN中,该重复模块将具有非常简单的结构,例如单个 tanh 层。标准的 RNN 网络如下图所示

img

LSTMs 也具有这种链式结构,但是它的重复单元不同于标准 RNN 网络里的单元只有一个网络层,它的内部有四个网络层。LSTMs 的结构如下图所示。

img

在解释 LSTMs 的详细结构时先定义一下图中各个符号的含义,符号包括下面几种

img

图中黄色类似于 CNN 里的激活函数操作,粉色圆圈表示点操作,单箭头表示数据流向,箭头合并表示向量的合并(concat)操作,箭头分叉表示向量的拷贝操作

6.2 LSTMs 的核心思想

LSTMs 的核心是细胞状态,用贯穿细胞的水平线表示。

细胞状态像传送带一样。它贯穿整个细胞却只有很少的分支,这样能保证信息不变的流过整个 RNNs。细胞状态如下图所示

img

LSTM 网络能通过一种被称为门的结构对细胞状态进行删除或者添加信息。

门能够有选择性的决定让哪些信息通过。其实门的结构很简单,就是一个 sigmoid 层和一个点乘操作的组合。如下图所示

img

因为 sigmoid 层的输出是 0-1 的值,这代表有多少信息能够流过 sigmoid 层。0 表示都不能通过,1 表示都能通过。

一个LSTM里面包含三个门来控制细胞状态。这三个门分别称为忘记门、输入门和输出门。下面一个一个的来讲述。

LSTM 的第一步就是决定细胞状态需要丢弃哪些信息。这部分操作是通过一个称为忘记门的 sigmoid 单元来处理的。它通过查看 ht1h_{t-1}xtx_t 信息来输出一个 0-1 之间的向量,该向量里面的 0-1 值表示细胞状态 Ct1C_{t-1} 中的哪些信息保留或丢弃多少。0 表示不保留,1 表示都保留。忘记门如下图所示。

img

下一步是决定给细胞状态添加哪些新的信息。这一步又分为两个步骤,首先,利用 ht1h_{t-1}xtx_t 通过一个称为输入门的操作来决定更新哪些信息。然后利用 ht1h_{t-1}xtx_t 通过一个 tanh 层得到新的候选细胞信息 Ct~\tilde{C_t},这些信息可能会被更新到细胞信息中。这两步描述如下图所示。

img

下面将更新旧的细胞信息 Ct1C_{t-1},变为新的细胞信息 CtC_{t}。更新的规则就是通过忘记门选择忘记旧细胞信息的一部分,通过输入门选择添加候选细胞信息 C~t\tilde C_{t} 的一部分得到新的细胞信息 CtC_{t}。更新操作如下图所示

img

更新完细胞状态后需要根据输入的 ht1h_{t-1}xtx_t 来判断输出细胞的哪些状态特征,这里需要将输入经过一个称为输出门的 sigmoid 层得到判断条件,然后将细胞状态经过 tanh 层得到一个 -1~1 之间值的向量,该向量与输出门得到的判断条件相乘就得到了最终该 RNN 单元的输出。该步骤如下图所示

img

6.3 LSTM 变式——GRU

之前描述的 LSTM 结构是最为普通的。在实际的文章中 LSTM 的结构存在各种变式,虽然变化都不会太大,但是也值得一提。

一种比其他形式变化更为显著的 LSTM 变式是由 Cho, et al. (2014) 提出的门循环单元(GRU)。它将忘记门和输入门合并成一个新的门,称为更新门。GRU 还有一个门称为重置门。如下图所示:

img

其中重置门为上图中前面那个门,决定了如何将新的输入信息与前面的记忆相结合。更新门为上图中后面那个门,定义了前面记忆保存到当前时间步的量。由于该变式的简单有效,后来被广泛应用。

6.4 LSTM 的门为何有效

仔细去思考,就会发现 LSTM 和 ResNet 的思想是一致的,网络深度导致梯度消失,那就把上层的信息直接向下传。


7. Transformer

参考文章:https://zhuanlan.zhihu.com/p/496311359 图解Transformer(完整版)

https://zhuanlan.zhihu.com/p/82312421 十分钟理解 Transformer

重要内容我们还是要讲一下:

Self-Attention 是 Transformer 最核心的内容,其核心内容是为输入向量的每个单词学习一个权重

在 Transformer 的 encoder 中,数据首先会经过一个叫做 self-attention 的模块得到一个加权之后的特征向量 ZZ ,这个 ZZ 便是论文公式中的 Attention(Q,K,V)Attention(Q,K,V),即单词的对应输出:

Attention(Q,K,V)=softmax(QKTdk)V(.)Attention(Q,K,V)=softmax(\frac {QK^T} {\sqrt {d_k}})V \tag{.}

在 self-attention 中,每个单词有 3 个不同的向量,它们分别是 Query 向量(QQ),Key 向量(KK)和 Value 向量(VV),长度均是 64。它们是通过 3 个不同的权值矩阵由嵌入向量 XX 乘以三个不同的权值矩阵 WQW^QWKW^KWVW^V 得到,其中三个矩阵的尺寸也是相同的。均是 512 * 64;QQKKVV 这些向量的概念是很抽象,但是它确实有助于计算注意力。相较于 RNNs,transformer 具有更好的并行性。

其中,权值矩阵 WQW^QWKW^KWVW^V 是我们模型训练过程学习到的合适的参数。

下面演示了经过 self-attention 模块的计算过程:假如我们要翻译一个词组 Thinking Machines,其中 Thinking 的输入的 embedding vector 用 x1x_1 表示,Machines 的 embedding vector 用 x2x_2 表示。

img
  1. 如上文,将输入单词转化成嵌入向量;
  2. 根据嵌入向量得到 qqkkvv 三个向量;
  3. 为每个向量计算一个 scorescorescore=qkscore=q * k
  4. 为了梯度的稳定,Transformer 使用了 scorescore 归一化,即除以 dk=8\sqrt {d_k}=8(论文中使用 key 向量的维度是 64 维,其平方根=8,这样可以使得训练过程中具有更稳定的梯度);
  5. scorescore 施以 softmaxsoftmax 激活函数,使得最后的列表和为 1;这个 softmaxsoftmax 的分数决定了当前单词在每个句子中每个单词位置的表示程度。很明显,当前单词对应句子中此单词所在位置的 softmaxsoftmax 的分数最高,但是,有时候 attention 机制也能关注到此单词外的其他单词,这很有用。
  6. softmaxsoftmax 点乘 Value 值 vv ,得到加权的每个输入向量的评分 vv ;相当于保存对当前词的关注度不变的情况下,降低对不相关词的关注。
  7. 相加之后得到最终的输出结果 ;这会在此位置产生 self-attention 层的输出(对于第一个单词)。

整个计算过程用下图表示:

img
img

8. Bert

参考文章:https://blog.csdn.net/jiaowoshouzi/article/details/89073944 一文读懂 BERT(原理篇)

我们讲一下 BERT 的关键技术:

BERT 的关键技术创新是将流行的注意力模型 Transformer 的双向训练应用于语言建模。论文的结果表明,双向训练的语言模型比单向语言模型可以更深入地感知语言上下文环境。在论文中,研究人员详细介绍了一种名为 Masked LM (MLM) 的新技术,该技术能够使得模型进行双向训练。BERT 模型是由 Transformer 模型的 Encoder 部分组成的。

许多模型预测序列中的下一个单词(例如 The child came home from ___),这种定向方法本质上限制了上下文学习。为了克服这一挑战,BERT 使用了两种训练策略:

8.1 Masked Language Model(MLM)

分词是自然语言处理领域中的基础任务,是文本预处理的重要步骤。简单来说,就是将文本段落分解为基本语言单位,亦可称之为词元 ( token )

MLM 是 BERT 能够不受单向语言模型所限制的原因。简单来说就是以 15% 的概率用 mask token ([MASK])随机地对每一个训练序列中的 token 进行替换,然后预测出 [MASK] 位置原有的单词。然而,由于 [MASK] 并不会出现在下游任务的微调(fine-tuning)阶段,因此预训练阶段和微调阶段之间产生了不匹配(这里很好解释,就是预训练的目标会令产生的语言表征对 [MASK] 敏感,但是却对其他 token 不敏感)。因此 BERT 采用了以下策略来解决这个问题:

首先在每一个训练序列中以 15% 的概率随机地选中某个 token 位置用于预测,假如是第 i 个 token 被选中,则会被替换成以下三个 token 之一

  1. 80% 的时候是 [MASK]。如,my dog is hairy——>my dog is [MASK]

  2. 10% 的时候是随机的其他 token。如,my dog is hairy——>my dog is apple

  3. 10% 的时候是原来的 token。如,my dog is hairy——>my dog is hairy

再用该位置对应的 TiT_i 去预测出原来的 token(输入到全连接,然后用 softmax 输出每个 token 的概率,最后用交叉熵计算 loss)。该策略令到 BERT 不再只对 [MASK] 敏感,而是对所有的 token 都敏感,以致能抽取出任何 token 的表征信息。

那么为啥要以一定的概率使用随机词呢?这是因为 Transformer 要保持对每个输入 token 分布式的表征,否则 Transformer 很可能会记住这个 [MASK] 就是"hairy"。至于使用随机词带来的负面影响,文章中解释说,所有其他的 token(即非"hairy" 的 token)共享 15% * 10% = 1.5% 的概率,其影响是可以忽略不计的。Transformer 全局的可视,又增加了信息的获取,但是不让模型获取全量信息。

8.2 Next Sentence Prediction(NSP)

一些如问答、自然语言推断等任务需要理解两个句子之间的关系,而 MLM 任务倾向于抽取 token 层次的表征,因此不能直接获取句子层次的表征。为了使模型能够有能力理解句子间的关系,BERT 使用了 NSP 任务来预训练,简单来说就是预测两个句子是否连在一起。具体的做法是:对于每一个训练样例,我们在语料库中挑选出句子 A 和句子 B 来组成,50% 的时候句子 B 就是句子 A 的下一句(标注为 IsNext),剩下 50% 的时候句子 B 是语料库中的随机句子(标注为 NotNext)。接下来把训练样例输入到 BERT 模型中。


9. GPT

参考文章:https://blog.csdn.net/wsmrzx/article/details/128948002 GPT简明介绍

要说自然语言处理领域近年来最让人惊奇的作品,非 ChatGPT 莫属了。ChatGPT 是由 OpenAI 提出的一种基于 GPT(Generative Pre-trained Transformer)架构的聊天模型。GPT通过在大规模文本数据上进行预训练,学习出丰富的语言表示,然后可以在各种下游任务上进行微调。GPT(Generative Pre-trained Transformer)是一种基于 Transformer 架构的自然语言处理(NLP)模型,由OpenAI提出。

GPT 是由多个 Transformer 编码器(Transformer Encoder)组成的模型,如下图所示:

img

每个 Transformer 编码器包含多个自注意力(self-attention)层和前馈神经网络层(feed-forward neural network layer)。每个自注意力层都包含三个线性变换(Linear Transformation),即查询(Query)、键(Key)和值(Value)。

在输入序列经过第一个 Transformer 编码器之后,它的隐藏状态(hidden state)被送入下一个 Transformer 编码器,这样一直进行下去,直到最后一个 Transformer 编码器。

在模型的末尾,还有一个线性变换层和一个 softmax 激活函数,用于将最后一个 Transformer 编码器的隐藏状态映射为预测标签的概率分布。

GPT 的预训练过程包括两个阶段:无监督预训练和有监督微调。


10. 分词算法分类

参考文章:https://blog.csdn.net/wsmrzx/article/details/129157565 分词


11. CBOW 模型与 Skip-Gram 模型

11.1 前言

传统的 NLP 方法,如 HMM(隐马尔科夫模型)、CRF(条件随机场)、最大熵模型(MEM)等概率图模型都把文本看做一个有限状态机进行研究,因而无须对词汇进行量化处理。

随着深度神经网络的广泛应用,越来越多的研究者将关注点转向 NLP 与深度学习方法的结合。而面临的第一个问题就是如何将自然语言中使用的一系列字符转化为神经网络输入层所需的向量。 one-hot 表示法提出了一种简单编码的思路,对于一个大小为 N 的词典(包含了自然语言中所需要的字符和词汇),其中的每一个字符映射为一个 N x 1 的稀疏向量 vv,假设该字符在词表中的位置为 ii,则 vv 的第 ii 个元素为 1,其余元素为 0。

举个例子:

我们首先进行特征的整数编码:中国--0,美国--1,日本--2,并将特征按照从小到大排列

得到 one-hot 编码如下:

["中国", "美国", "日本", "美国"] ---> [[1,0,0], [0,1,0], [0,0,1], [0,1,0]]

img

one-hot 表示法面临以下两个问题,

  • 词表中的每个词向量相互正交。然而在实际的语言使用中,词汇之间是有语义相似性的(例如:good, excellent),one-hot 表示法无法体现这样的语义关系;
  • 内存开销庞大,计算复杂度高。需要说明的是,如果采用稀疏矩阵的表示方法(常用的有三元组法表示)词向量的存储并不会占据过多内存,而建立训练用的神经网络需要存储过多的训练参数,这个开销较大,另外在进行卷积层运算和优化算法时时间复杂度和空间复杂度较高。

从上面两个致命缺陷来看,似乎 one-hot 表示法一无是处,是否应该摒弃它并重新探索出一种新的表示法呢?基于 one-hot 模型做一些改进也许更为有效。这样的改进需要完成两个目的,一是使得新的词向量具备一定的语义相似性,二是减小内存存储。语义相似性在数学上并没有直观的定义,但我们可以假设两个词向量之间的线性相关性越高,相似性越强,减小内存的最直接思路就是减小词向量的维度。于是接下来的任务就明确起来,

  • 利用现存的文本信息,赋予 one-hot 向量语义信息(Word2Vec)
  • 将 one-hot 向量投影到更低维度的空间(Embeddings)

CBOW(连续词袋模型) 和 Ship-Gram 模型分别以两种相对的思路解决了上述两个问题。

11.2 Word2Vec 和 Embeddings

Word2Vec 是从大量文本语料中以无监督的方式学习语义知识的一种模型,它被大量地用在自然语言处理(NLP)中。那么它是如何帮助我们做自然语言处理呢?Word2Vec 其实就是通过学习文本来用词向量的方式表征词的语义信息,即通过一个嵌入空间使得语义上相似的单词在该空间内距离很近。Embedding 其实就是一个映射,将单词从原先所属的空间映射到新的多维空间中,也就是把原先词语或其他离散型变量映射到低维连续向量空间的表示。它是一种将高维离散型特征转化为低维连续型特征的技术。

我们从直观角度上来理解一下,cat 这个单词和 kitten(Kitten 侧重于代指刚出生不久的猫,而 Cat 侧重于统称所有的猫) 属于语义上很相近的词,而 dog 和 kitten 则不是那么相近,iphone 这个单词和 kitten 的语义就差的更远了。通过对词汇表中单词进行这种数值表示方式的学习(也就是将单词转换为词向量),能够让我们基于这样的数值进行向量化的操作从而得到一些有趣的结论。比如说,如果我们对词向量 kitten、cat 以及 dog 执行这样的操作:kitten - cat + dog,那么最终得到的嵌入向量(embedded vector)将与 puppy(puppy 主要指年龄小的狗狗) 这个词向量十分相近。

参考文章:https://zhuanlan.zhihu.com/p/95204186 写给小白的 Word2Vec 介绍

11.3 CBOW 模型与 Skip-Gram 模型

Word2Vec 算法有两种模型:CBOW(Continuous Bag-of-Words)和Skip-gram。CBOW 模型通过上下文预测目标词语,而 Skip-gram 模型通过目标词语预测上下文。

CBOW 模型在特定窗口内给定上下文词的情况下预测当前词。输入层包含上下文单词,输出层包含当前单词。隐藏层包含我们要表示输出层上存在的当前单词的维数

img

Skip Gram 可在给定当前单词的情况下预测特定窗口内的周围上下文单词。输入层包含当前单词,输出层包含上下文单词。隐藏层包含我们要表示输入层中当前单词的维数。

img


面试题

1. LSTM 与 Transformer 的区别⭐⭐⭐⭐⭐

参考回答

  1. Transformer 中抛弃了传统的 CNN 和 RNN,整个网络结构完全是由 Attention 机制组成,前后没有“时序”,可以实现并行计算,更高效;而 LSTM 是传统的 RNN 改进结构,有时序的概念,不能并行计算

  2. LSTM 引入三个控制门,拥有了长期记忆,更好的解决了 RNN 的梯度消失和梯度爆炸的问题;而 Transformers 依然存在顶层梯度消失的问题。