NLP相关题解

1、请你说说RNN的原理

RNN是一类以序列数据为输入,在序列的演进方向进行递归,且所有节点单元按照链式连接的递归神经网络。RNN对具有序列特性的数据非常有效,能够挖掘数据中的时序信息以及语义信息。(RNN是什么)
图片说明
图1 RNN节点单元示意图
以语义识别举例,对于句子“you play basketball”,上图中的x_t-1代表的就是you这个单词的向量,x代表的是play这个单词的向量,x_t+1代表的是basketball这个单词的向量,以此类推。对于展开图来说,其中W作为每个时间点之间的权重矩阵一直没有变,而RNN之所以能够解决序列数据问题,是因为可以“记住”每一时刻的信息,每一时刻的隐藏层不仅由该时刻的输入层决定,还由上一时刻的隐藏层决定。网络在t时刻接收到输入x_t之后,隐藏层的值是s_t,输出值是o_t,而s_t的值不仅取决于x_t,还取决于s_t-1,公式如下:

2、请你说说CNN,RNN,LSTM,Transformer之间的优缺点

CNN概念:
传统意义上的多层神经网络是只有输入层、隐藏层、输出层,其中隐藏层的层数按需决定。而卷积神经网络CNN,在传统的多层神经网络基础上,全连接层前面加入了部分连接的卷积层、激活层和池化层操作,使得实际应用场景中能够构建更加深层、功能更强大的网络。
CNN优点:
CNN主要用于识别位移、缩放及其它扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以能够避免显示的特征抽取,隐式地从训练数据中进行学习。另外,CNN局部权重共享的结构可以使得网络并行学习,较好的处理高维数据,更接近于实际的生物神经网络,
CNN缺点:
(1)当网络层数太深时,采用反向传播调整内部参数会使得接近于输入层的变化较慢;(2)采用梯度下降进行迭代时很容易使得训练结果收敛于局部最优而非全局最优;
(3)池化层会丢失一定的有价值信息,忽略了局部与整体之间的关联性;
(4)特征提取的物理含义不是十分明确,导致可解释性一般。
RNN优点:
传统网络无法结合上下文去训练模型,导致对于序列特性数据场景的处理效果不佳,而RNN结构决定了其具有了短期记忆性,每一时刻隐藏层信息不仅由该时刻的输入层决定,还可以由上一时刻的隐藏层决定,做到挖掘数据张红的时序信息以及语义信息。
RNN缺点:
随着网络层数增加,RNN在长序列场景处理时会出现梯度消失或梯度爆炸的弊端(反向传播算法局限性导致)。
LSTM优点:
LSTM通过引入包含了遗忘门、输入门、输出门的cell状态的结构改善了RNN中存在的长期依赖问题,并且其表现通常比时间递归神经网络和隐马尔科夫模型更好,而LSTM本身也可以作为复杂的非线性单元构造更大型深度网络。
LSTM缺点:
梯度问题在LSTM中得到了一定程度的优化解决,但是并没有彻底搞定,在处理N量级的序列有一定效果,但是处理10N或者更长的序列依然会暴露,另外,每一个LSTM的单元节点都意味着有4个全连接层,如果时间序列跨度较大,并且网络较深,会出现计算量大和耗时偏多的问题。
Transformer优点:
(1)突破了RNN模型不能并行计算的限制;
(2)相比CNN,计算两个位置之间的关联所需要的操作次数不会随着距离的增长而增加;
(3)attention机制可以产生更具可解释性的模型,可以从模型中检查attention分布,各个attention head可以学会执行不同的任务。
Transformer缺点:
(1)局部信息的获取不如RNN和CNN强;
(2)位置信息编码存在问题,因为位置编码在语义空间中并不具备词向量的可线性变换,只是相当于人为设计的一种索引,所以并不能很好表征位置信息;
(3)由于transformer模型实际上是由残差模块和层归一化模块组合而成,并且层归一化模块位于两个残差模块之间,导致如果层数较多时连乘计算会使得顶层出现梯度消失问题。

3、LSTM解决了RNN的什么问题,如何解决

RNN是一类以序列数据为输入,在序列的演进方向进行递归,且所有节点单元按照链式连接的递归神经网络,RNN每一层的隐状态都由前一层的隐状态经过变换和激活函数得到。反向传播求导时最终得到的导数会包含每一步梯度的连乘,这会引起梯度爆炸或梯度消失。所以RNN很难处理"长程依赖",即无法学到序列中蕴含的间隔较长的规律。

LSTM引入了包含遗忘门、输入门、输出门的cell状态结构,公式如下:

而对于LSTM模型而言,求解有

在LSTM迭代过程中,针对而言,每一步的可以自主的选择在[0, 1]之间,或者大于1,因为是可训练学习的,那么整体也就不会一直减小,使得远距离梯度不至于完全消失,也就能够解决RNN中存在的问题。

4、讲一下Transformer?以及它比RNN优势在哪里?

(1)Transformer整体结构:


图 1 整体结构图
Transformer基于现有的seq-2-seq模型,使用编码器-解码器结构,编码器将输入序列(x1, x2, … , xn) 转换为一个连续的表达z = (z1, z2, … , zn),然后解码器再基于该表达生成输出序列(y1, y2, … , yn)。


(2)编码器

图2 编码器结构图

由6层组成,每一层包含两个子层,第一层是多头自注意层(multi-head self-attention),第二层是一个简单的全连接前馈网络。在每个子层后,都接了一个残差归一化层(LN)。为了方便残差链接,模型中的所有子层,包括嵌入层,输出向量维度均为512.。

(3)解码器


图3 解码器结构图
解码器同样由6层组成,每一层包含3个子层,第一层是“masked multi-head self-attention”层,输入仅包含当前位置之前的词语信息,第二层是“multi-head self-attention”层,输入包含编码器的输出信息,第三层是全连接前馈网络,每个子层后同样加入了LN层。
(4)输出
解码器的输出被输入到一个线性层中,转化为一个超长向量,再输入到softmax层中转化为改了,最后运用如贪婪搜索等策略选择输出的词语。
(5)优势


现有的RNN相关模型只能够按方向依次计算,时刻t的计算依赖于时刻t-1的结果,限制了模型的并行能力且无法处理长期依赖,而LSTM的门机制结构虽然一定程度上解决了长期依赖的问题,但是对于特别长期的依赖仍然没有得到解决。Transformer方法首先使用Attention机制,将序列中的任意两个位置之间的距离值转为一个常量;另外其不是类似于RNN的顺序结果,所以能够具有好的并行性,符合现在的GPU框架。

5、LSTM的概念,LSTM有哪些变种以及BPTT(基于时间的反向传播)

LSTM是在标准RNN基础上做了改进,解决RNN训练过程中的梯度消失问题,结构上主要是增加了控制门单元:遗忘门、输入门、输出门,而门控单元组合来的cell状态,类似于信息传送带,可以保证LSTM在长序列场景下的信息保持。
(1)MOGRIFIER LSTM (ICLR 2020)
通过新增的门机制与LSTM的相融合,是的当前输入跟隐藏状态得到充分的交互,经过这个过程得到新的输入和新的隐藏状态,然后再输入到LSTM,每一轮的输入都是通过上一轮的输入跟上一轮的隐藏状态计算得到,每一轮的隐藏状态都是通过上一轮的隐藏状态跟上一轮的输入计算得到,所以LSTM的最终轮得到的输入和隐藏状态二者不会相互独立,获得更好的上下文相关表达。
(2)GRU
作为LSTM的另一种变体,GRU比LSTM的网络结构更加简单,模型中只有两类门,分别是更新门和重置门,更新门用于控制前一时刻的状态信息被代入到当前状态中的程度,更新门的值越大说明前一时刻的状态信息带入越多。重置门控制前一状态有多少信息被写入到当前的候选集上,重置门越小,前一状态的信息被写入的越少。

① BPTT(基于时间的反向传播)
循环神经网络中的反向传播技术称为BPTT,和时间序列密切相关,其推导过程如下:

首先有:

然后利用交叉熵公式来计算每个t时刻的损失值情况:

通常把每次输入的一个序列看成一个训练样本,所以将每一时刻的交叉熵值求和视为这个样本的总误差,有:

以上过程可如图所示:

接下来通过总误差来计算U, V, W这些参数的梯度,然后用随机梯度下降法更新参数(以E3为例)。

首先有参数V梯度计算:


该部分计算仅依赖当前时刻的隐藏层状态和当前时刻的输出。

参数W, U的梯度计算有:


可视化如图:

以上推导中,是第t个时刻的输入;是第t个时刻隐藏层的状态;是第t个时刻的输出(如果想要预测下一个词是什么,可以认为有计算方式为,其中f为非线性函数如tanh或relu;U, W, V, 是循环网络的参数,所有时刻共享,可以实现减少参数量的作用。

6、说说LSTM中的各个门

LSTM指的是长短期记忆神经网络,主要常见于深度学习领域中时间序列数据的处理和预测当中,应用领域包括语音识别、机器翻译等等。
传统的同类型工具rnn在长序列场景处理时会出现梯度消失或梯度爆炸的弊端,而LSTM通过包含遗忘门、输入门、输出门的cell状态解决了这个问题。
(1)遗忘门:
LSTM的结构是具有重复模块的链式状态,而每一个重复模块都包含多个神经网络层处理,使得时序场景中的长期信息得到最好的保持。
遗忘门是一个sigmoid层,决定了上一时刻的单元状态有多少保留到当前时刻,计算公式:

是遗忘门的权重矩阵,是遗忘门的偏置项,σ 是 sigmoid 函数,是上一时刻LSTM的输出值,是当前时刻网络的输入值。
(2)输入门:
决定当前时刻存储什么新信息,包含了一个sigmoid网络层和一个tanh网络层。
首先tanh层创建一个状态向量,然后sigmoid层为中的每个值输出为一个介于0和1的结果,来决定更新哪些状态值,以及更新程度。

更新状态
(3)输出门:
输出值取决于当前状态,输出门有sigmoid和tanh两层处理,sigmoid层用来确定状态的哪部分需要输出,这部分和通过tanh层处理后的状态相乘得到最后想要输出的信息。


7、什么是wide&deep

概念:对于一个深度学习模型来说,拟合能力和泛化能力是评价其性能的基本要素,对应到个性化推荐领域中,可以理解为记忆性和泛化性,也就是既能学习到特征与目标之间的直接相关性,又能够学习到训练样本中没有出现的特征组合。例如,模型可以通过训练数据知道用户喜欢看“泰坦尼克号”和“罗马假日”,同时基于泛化性可以推理出用户喜欢爱情片。Wide&deep模型的提出正是基于这一思想,通过巧妙地将广义线性模型和深度模型进行强强联合,平衡了记忆性和泛化性。
结构:wide&deep模型整体结构如图所示:

Wide模型部分进行一维或二维这些低阶特征交互,deep模型部分将自动学习高维交互特征,该基础模型是将两个部分的模型同时训练,并将其结果的加权求和,进而得到最终的预测结果:
$$
其中δ表示sigmoid函数,a_(lf)表示神经网络最后一层激活值。该预测结果为0,表示用户点击;结果为1,表示未点击。
Deep模型:
Deep模型是一个前馈神经网络,此处模型自动生成隐性特征向量,无需人工合成。由于深度神经网络模型的输入是连续、密集的特征,因此对于在线学习平台等稀缺的高维分类单元,首先需要将其转化为低维稠密向量,也就是embedding,为了实现这种端到端的训练,首先随机初始化embedding向量,假设嵌入层的输出为:a_0=[e_1, e_2, … , e_m]

其中,e_i表示第i个特征集的嵌入,m表示特征集的个数,将a_0输入到深度神经网络中进行训练,并在模型的训练过程中逐渐修改该向量的值,即将向量作为参数参与模型的训练。其前向传播的过程为:\displaystyle a_(l+1)=δ(W_(l)a_(l)+b_(l))
其中,l为神经网络的深度,δ称为激活函数,a_(l+1)表示的是第l层的输出,W_(l)表示模型第l层的权重,b_(l)表示模型当前层的偏置。通过计算后得到一个真实值的特征向量,并将其输入到激活函数中进行预测,函数公式为:.
其中,|H|为隐藏层的层数。
Wide模型:
Wide使用逻辑回归的方法,预测学习者的特征与推荐是否关联,并能很好的学习稀疏特征。通过wide模型中的交叉特征转换,达到记忆特征的目的:y=w_(T)x+b。
其中y表示预测值,即内容被推荐给用户的概率。X=[x_1, x_2, … , x_d]表示一个d维的特征向量,w=[w_1, w_2, … , w_d]为模型的参数,即各种内容特征对内容能否推荐出去的影响权重,b表示偏置。目标函数为:y=sigmoid(y_wide)。
该目标函数用来预测用户点击内容的最终输出,当用户点击时,输出为0,当用户没有点击时,输出为1,特征集包括原始输入特征以及交叉特征。
基于wide&deep模型的推荐系统,是联合训练wide和deep两个模型,将两个模型的优点进行整合。首先,该模型不再进行预训练;其次,不仅可以进行低阶与高阶的特征交互,更重要的是可以自动进行特征交叉。最后,特征嵌入的 引入避免了特征工程的一些麻烦。该模型在与单个模型进行试验比较,性能提升很多。
缺点:
(1)自动交叉特征表现在特征与特征之间的亲密联系,但是用户与内容之间的特征交互表现不明显;
(2)深度模型的深度的增加,会带来梯度消失,梯度爆炸等问题,从而使得高维特征的提前较为困难。


8、请你说说SeqToSeq

Seq2Seq提出于2014年,该技术主要为了解决传统的固定大小输入问题。最早由两篇文章独立地阐述了该主要思想,分别是Google Brain团队的《Sequence to Sequence Learning with Neural Networks》和Yoshua Bengio团队的《Learning Phrase Representation using RNN Encoder-Decoder for Statistical Machine Translation》
最基础的Seq2Seq模型包含了三个部分,即Encoder、Decoder以及连接两者的中间状态向量,Encoder通过学习输入,将其编码成一个固定大小的状态向量S,继而将S传给Decoder,Decoder再通过对状态向量S的学习来进行输出。

图中每一个box代表了一个RNN单元,通常是LSTM或者GRU。
Encoder是一个RNN,它会遍历输入的每一个Token(词),每个时刻的输入是上一个时刻的隐状态和输入,然后会有一个输出和新的隐状态。这个新的隐状态会作为下一个时刻的输入隐状态。每个时刻都有一个输出,对于seq2seq模型来说,我们通常只保留最后一个时刻的隐状态,认为它编码了整个句子的语义。Encoder处理结束后会把最后一个时刻的隐状态作为Decoder的初始隐状态。
Decoder也是一个RNN,它每个时刻输出一个词。每个时刻的输入是上一个时刻的隐状态和上一个时刻的输出。一开始的隐状态是Encoder最后时刻的隐状态,输入是特殊的。然后使用RNN计算新的隐状态和输出第一个词,接着用新的隐状态和第一个词计算第二个词,...,直到遇到,结束输出。

但需要注意的是,早期的 seq2seq 有本质的问题,即RNN本身对于长距离的依赖关系有一定的捕捉能力,但由于序列模型是通过门控单元使得信息保持流动,并且选择性地传递信息。但这种方式在文本长度越来越长的条件下,捕捉依赖关系的能力越来越低,因为每一次递归都伴随着信息的损耗,所以有了Attention机制来增强对我们所关注的那部分依赖关系的捕捉。

因此后续研究人员补充了Attention思想: 当输入句子很长的时候,encoder的效果会很差,利用隐状态(context向量)来编码输入句子的语义实际上是很困难的。为了解决这个问题,Bahdanau等人提出了注意力机制(attention mechanism)。于是在Decoder进行t时刻计算的时候,除了t-1时刻的隐状态,当前时刻的输入,注意力机制还可以参考Encoder所有时刻的输入。

延伸考点

早期的 seq2seq 有什么问题?


  • 提示:长距离依赖关系的捕获存在缺陷。
  • 改进:attention(参见上文)


9、请你说说对NLP的了解

NLP(Natural Language Processing,自然语言处理)。自然语言处理,就是让计算机理解自然语言。自然语言处理的研究分支包括很多很多,下面简单介绍几个重要分支:

机器翻译(Machine Translation)

机器翻译(MT)将文本从一种语言转换翻译为另一种语言。

自动问答/对话(Question Answering/ Dialogue)

也可以成为对话机器人。系统将用户意图 (user intent) 作为输入,与知识库交互,并预测系统的下一个动作 (action)。
值得一提的是,“图灵测试”指的就是该任务:人与黑箱对话,来回x 个回合,如果人分不清对面是人还是机器,那么就说明通过了图灵测试。

文本分类(Text Classification)

文本分类问题将句子或者文档分配到特定的类别,通常我们将文本划分到特定的主题类别。AG’s news 是比较常用的文本分类数据集,要求根据新闻标题和简介判断新闻的类别。
这跟图片分类的区别就是输入不是图片,而是文本信息。

延伸考点

面试官会顺着你的介绍,挑一个你最熟悉的继续提问,比如你做过机器翻译吗?主要用的啥方法?
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务