常见NLP问题整理

NLP常见问题

1.LSTM与RNN的区别,RNN与LSTM,GRU的解释/LSTM门控、作用、各个门的激活函数选择原因

RNN与LSTM的区别

1)RNN没有细胞状态;LSTM通过细胞状态记忆信息。
2)RNN激活函数只有tanh;LSTM通过输入门、遗忘门、输出门引入sigmoid函数并结合tanh函数,添加求和操作,减少梯度消失和梯度爆炸的可能性。
3)RNN只能够处理短期依赖问题;LSTM既能够处理短期依赖问题,又能够处理长期依赖问题。

原文链接:https://blog.csdn.net/hfutdog/article/details/96479716


RNN与LSTM的解释

  • RNN,中文称作循环神经网络, 它一般以序列数据为输入, 通过网络内部的结构设计有效捕捉序列之间的关系特征, 一般也是以序列形式进行输出.

  • 因为RNN结构能够很好利用序列之间的关系, 因此针对自然界具有连续性的输入序列, 如人类的语言, 语音等进行很好的处理, 广泛应用于NLP领域的各项任务, 如文本分类, 情感分析, 意图识别, 机器翻译等.

  • RNN优势:模型结构简单,计算量低,参数比LSTM,GRU少。 RNN缺点:无法处理过长序列,会产生梯度异常导致梯度消失或者梯度爆炸,同时时序依赖网络,无法并行计算。

  • LSTM也称长短时记忆结构, 它是传统RNN的变体, 与经典RNN相比能够有效捕捉长序列之间的语义关联, 缓解梯度消失或爆炸现象. 同时LSTM的结构更复杂, 它的核心结构可以分为四个部分去解析:遗忘门,输入门,细胞状态,输出门

  • LSTM优点:可以有效减缓长序列导致的梯度消失和爆炸,不能完全解决。缺点:计算量大,参数多,训练效率低。

  • bilstm:内部没有改变lstm的结构,只是将lstm使用两次,并且不同方向,最后再将两个方向的输出拼接作为最终输出。


    GRU的解释

  • GRU也称门控循环单元结构, 它也是传统RNN的变体,同LSTM一样可以缓解梯度消失和爆炸问题。并且比LSTM结构简单,核心结构:更新门,重置门。优点:计算复杂多比LSTM低,同时有LSTM的优点。缺点:无法根治梯度消失和爆炸, 无法并行。


对于基本RNN来说,它能够处理一定的短期依赖,但无法处理长期依赖问题。但RNN无法处理长句子,这是因为当序列较长时,序列后部的梯度很难反向传播到前面的序列,比如10个元素以前,这就产生了梯度消失问题。

RNN的结构图如下:

从图中可见,RNN本时刻的隐藏层信息只来源于当前输入和上一时刻的隐藏层信息,没有记忆功能。为了解决RNN的长期依赖也即梯度消失问题 ,产生了LSTM.

遗忘门结合上一隐藏层状态值和当前输入x,通过sigmoid函数(σ \sigmaσ),决定舍弃哪些旧信息。sigmoid值域为(0, 1),当其值接近于0时丢弃一部分信息,当其值接近于1时保持信息
原文链接:https://blog.csdn.net/hfutdog/article/details/96479716

因为最后的结果是由多个函数作用并结合RNN所没有的求和操作(除了加偏置之外的求和)得来的,所以在反向传播过程中不容易产生梯度消失问题

2.RNN与transformer的区别

RNN

主要特点是:
1.顺序处理:句子必须逐字处理
2.RNN指的是一个序列当前的输出与之前的输出也有关,具体的表现形式为网络会对前面的信息进行记忆,保存在网络的内部状态中,并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包含输入层的输出还包含上一时刻隐藏层的输出
3.它采取线性序列结构不断从前往后收集输入信息,因此无法并行化计算

Transformer————————————————

主要特点是:
1.非顺序处理:句子是整体处理,而不是逐字处理,可以并行化计算
2.单个的Transformer Block主要由两部分组成:多头注意力机制(Multi-Head Attention)和前馈神经网络(Feed Forward),Transformer Block代替了LSTM和CNN结构作为了我们的特征提取器,使得Transformer不依赖于过去的隐藏状态来捕获对先前单词的依赖性,而是整体上处理一个句子,以便允许并行计算,减少训练时间,并减少由于长期依赖性而导致的性能下降

img

3.bert的MLM中,15%mask中又80%替换mask,10%随机替换,为什么要这样?BERT的mask会带来什么缺点吗?

**优点:**1)被随机选择15%的词当中以10%的概率用任意词替换去预测正确的词,相当于文本纠错任务,为BERT模型赋予了一定的文本纠错能力;2)被随机选择15%的词当中以10%的概率保持不变,缓解了finetune时候与预训练时候输入不匹配的问题(预训练时候输入句子当中有mask,而finetune时候输入是完整无缺的句子,即为输入不匹配问题)。

如此操作的原因为:这希望为模型增加不同的扰动,有替换的、有[MASK]的,大部分还是不变的,这样不会过于依赖[MASK]标签。同时告诉模型,输入数据不是完全正确的,可能是随机替换的。

这样做的目的是,encoder不知道哪些词是需要被预测的,哪些词是被替换的。所以它被迫保持每个输入token的上下文分布式表示。不然encoder就会记住这个mask就是某个单词了。

**缺点:**针对有两个及两个以上连续字组成的词,随机mask字割裂了连续字之间的相关性,使模型不太容易学习到词的语义信息。

它假设所预测的(mask掉的)token是相互独立的,它假设预测的(屏蔽的)tokens是相互独立的。但是我们知道模型应该学习(屏蔽的)tokens之间的这种相关性来预测其中的一个token。

4.文本匹配怎么使用bert、文本分类怎么使用、序列标注怎么用?怎么用bert做搜索?怎么用bert做专有名词识别和重要性名词识别?

5.文本相似性有哪些度量方法?

  • 基于词向量
    余弦相似度,欧几里得距离
  • 基于字符的:编辑距离,共有ngram数(直接统计两个文本的共有字符数)
  • 基于概率统计的:杰卡德相似系数
  • 基于词嵌入模型的:word2vec/doc2vec,获得词向量,然后计算两个向量之间的距离

6.为什么bert能达到很好的效果?

  1. 网络结构:完全双向,层数深,可表征的函数空间足够大,不使用RNN而使用transformer,self-attention 克服了长距离依赖问题,理论上可以支持任意长度的文本,并且可以并行
  2. 预训练任务设计好:除了LM任务之外, 加了句子级别的任务,有利于句子语义的表示和学习。并且都是无监督任务,证明了一个非常深的模型可以显著提高NLP任务的准确率,而这个模型是从无监督语料中训练获得的。
  3. 训练语料大,训练充分
  4. 取决于Transformer的一个Attention机制,即Self-Attention,注意力机制很好地找出了文本序列的语义相关度,在语义层面上,能够提取到更关键的特征

7.word2vec的原理、损失函数。Word2vec和fasttext的区别、fasttext原理,fasttext的改进

从宏观上描述了DNN的一个结构,从输入(大致带过分词,词表构建,one-hot等过程),到隐层,到输出层。然后详细讲了两种训练结构,即CBoW和Skip-Gram,但是当时这两种方法被我说反了。(当时并无觉察)讲完两种训练方法后,大致介绍了下训练时候词表大小过大,输出层过大的优化方法,即:hierarchical softmax和negative sampling。

8.word2vec方法有哪些?cbow,skipram区别?对生僻词谁更好?估计word2vec的参数量?

  • CBOW模型中input是context(周围词)而output是中心词,训练过程中其实是在从output的loss学习周围词的信息也就是embedding,但是在中间层是average的,一共预测V(vocab size)次就够了。

skipgram是用中心词预测周围词,预测的时候是一对word pair,等于对每一个中心词都有K个词作为output,对于一个词的预测有K次,所以能够更有效的从context中学习信息,但是总共预测K*V词。

  • skipgram胜出✌️

9.word2vec训练有哪些trick?trick就是负采样和分层softmax。


负采样

自然语言处理领域中,判断两个单词是不是一对上下文词(context)与目标词(target),如果是一对,则是正样本,如果不是一对,则是负样本。

采样得到一个上下文词和一个目标词,生成一个正样本(positive example),生成一个负样本(negative example),则是用与正样本相同的上下文词,再在字典中随机选择一个单词,这就是负采样(negative sampling)。

比如给定一句话“这是去上学的班车”,则对这句话进行正采样,得到上下文“上”和目标词“学”,则这两个字就是正样本。

负样本的采样需要选定同样的“上”,然后在训练的字典中任意取另一个字,“梦”、“目”,这一对就构成负样本。

训练需要正样本和负样本同时存在

10.word2vec训练后的词之间的相似性不准什么原因?怎么解决

11.词向量有哪些方法?word2vec \glove\ fasttext,他们之间区别?embedding层矩阵分解+参数共享 + SOP + 工程细节

word2vec是NNLM的一个较为典型的代表,其利用了DNN的方法来训练获取到词向量,而且词向量是中间产物,这个思路最早是Bengio提出,Google Brain提出的word2vec让词向量火了起来。而GloVe是采用词频统计信息,利用一些数学方法逐步优化得来,它没有神经网络的结构,所以词向量训练的速度相对更快。

12.LSTM的方向传播、LSTM与GRU的区别?假设输入是维,LSTM的参数量为多少?

https://blog.csdn.net/lreaderl/article/details/78022724?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

标准LSTM和GRU的差别并不大,但是都比tanh要明显好很多,
使用LSTM的原因之一是解决RNN Deep Network的Gradient错误累积太多,以至于Gradient归零或者成为无穷大,所以无法继续进行优化的问题。GRU的构造更简单:比LSTM少一个gate,这样就少几个矩阵乘法。在训练数据很大的情况下GRU能节省很多时间

13.梯度消失,梯度爆炸产生原因?/缓解方法/解决方法

什么是梯度消失

    • 根据反向传播算法和链式法则, 梯度的计算可以简化为以下公式:

其中sigmoid的导数范围在[0.0.25]中,长序列的处理中,这样的公式连乘,如果w小于0,会导致结果无限小接近0,产生梯度消失。如果w设为大于1,会产生梯度爆炸。

危害

如果发生了梯度消失,权重无法更新,训练就会失败。如果发生了梯度爆炸,会导致网络参数过大,导致溢出。

缓解方法为何?

LSTM缓解了RNN,不代表LSTM就不会发生梯度消失和爆炸。

LSTM中,使用遗忘门,输入门,细胞状态和输出门,决定了每个节点保留,更新,删除哪些信息。最后的输出增加了求和操作,这样让网络不容易发生梯度消失。

解决方法:

CNN中权值共享?/CNN中各种模块名词解释/卷积层、pooling层、dense层细扣

权值共享:就是给定一个输入,用同样的卷积核做卷积,卷积核中的参数是不变的。这就是权值共享。

好处:减少计算量。减少参数量

14.CNN中池化层的作用/CNN˙中怎么做的卷积?卷积的优势?为什么做池化?都有哪些池化层?/卷积层参数量计算

池化层的作用

池化的特点之一就是它输出一个固定大小的矩阵,这对分类问题很有必要。例如,如果你用了1000个滤波器,并对每个输出使用最大池化,那么无论滤波器的尺寸是多大,也无论输入数据的维度如何变化,你都将得到一个1000维的输出。这让你可以应用不同长度的句子和不同大小的滤波器,但总是得到一个相同维度的输出结果,传入下一层的分类器

池化还能降低输出结果的维度,(理想情况下)却能保留显著的特征。最大池化效果总是好于平均值池化。

池化的再一个作用:抗扰动。每次选出滤波窗口中最大的元素,至于这个元素的位置,不重要。

CNN的不足

卷积运算和池化会丢失局部区域某些单词的顺序信息,因此纯CNN的结构框架不太适用于PoS Tagging和Entity Extraction等顺序标签任务

CNN的参数都有哪些

池化策略(最大值,平均值),通道个数,核大小,滤波器个数,激活函数,输入值词向量的维度,类型(word2vec,glove)

15.Transformer了解吗?bert原理?bert预训练?

BERT原理

BERT是利用了Transformer的Encoder部分,重点是预训练pre-training**,创新点是将**双向 Transformer 用于语言模型。

BERT训练方法

是基于两个任务来训练bert,任务一是MLM,mask LM,这是为了训练双向特征,随机mask掉句子中一些词,然后训练模型来预测mask掉的词。策略为:mask15%的词被mask,然后将masked token 位置输出的final hidden vectors送入softmax,来预测masked token。

详细为:80%被mask,10%被随机替换,10%被保留。原因为:Transformer encoder不知道它将被要求预测哪些单词或哪些单词已被随机单词替换,因此它被迫保持每个输入token的分布式上下文表示

任务2是NSP,在 BERT 的训练过程中,模型接收成对的句子作为输入,并且预测其中第二个句子是否在原始文档中也是后续句子。
在训练期间,50% 的输入对在原始文档中是前后关系,另外 50% 中是从语料库中随机组成的,并且是与第一句断开的。

如此训练模型,使得模型具备理解长序列上下文的联系的能力

16.BERT的输入有哪些?

输入包括三个embedding的求和,分别是:

  1. Token embedding 表示当前词的embedding,每个句子有个句子整体的embedding项对应给每个单词

  2. Segment Embedding 表示当前词所在句子的index embedding

  3. Position Embedding 表示当前词所在位置的index embedding,这是因为NLP中单词顺序是很重要的特征,需要在这里对位置信息进行编码

bert的输入部分是个线性序列,两个句子通过分隔符分割,最前面和最后增加两个标识符号,开头是CLS,结尾是SEP,把单词对应的三个embedding叠加,就形成了Bert的输入。

三个输入总结:token embeddings表示的是词向量,第一个单词是CLS,可以用于之后的分类任务,segment embeddings用来区别两种句子,因为预训练不光做LM还要做以两个句子为输入的分类任务,position embeddings表示位置信息。位置编码是 Transformer 架构本身决定的,因为基于完全注意力的方法并不能像 CNN 或 RNN 那样编码词与词之间的位置关系,但是正因为这种属性才能无视距离长短建模两个词之间的关系。因此为了令 Transformer 感知词与词之间的位置关系,我们需要使用位置编码给每个词加上位置信息。

17.其中CLS的作用

BERT在文本前插入一个CLS,并将该符号对应的输出向量作为整篇文本的语义表示,用于文本分类,可以理解为:与文本中已有的其它字/词相比,这个无明显语义信息的符号会更“公平”地融合文本中各个字/词的语义信息

具体来说,self-attention是用文本中的其它词来增强目标词的语义表示,但是目标词本身的语义还是会占主要部分的,因此,经过BERT的12层,每次词的embedding融合了所有词的信息,可以去更好的表示自己的语义。

而[CLS]位本身没有语义,经过12层,得到的是attention后所有词的加权平均,相比其他正常词,可以更好的表征句子语义

https://blog.csdn.net/weixin_40920183/article/details/115154033

原文链接:https://blog.csdn.net/yangfengling1023/article/details/84025313

18.BERT中双向的含义

BERT中“双向”表示在MLM任务中,模型在处理某一个词时,它能同时利用前面的词和后面的词两部分信息,它不是在给定所有前面词的条件下预测最可能的当前词,而是随机遮掩一些词,并利用所有没被遮掩的词进行预测。[MASK]通过attention均结合了左右上下文的信息,这体现了双向

19.看过哪些bert的改进方法XLNet?BERT与GPT的区别?elmo了解吗?

BERT采用的是Transformer架构中的Encoder模块;

GPT采用的是Transformer架构中的Decoder模块;

ELMo采用的双层双向LSTM模块。
  • ELMO是基于双向RNN的语言模型,将同一个词的前向隐层状态和后向隐层状态拼接在一起,可以作为该单词的Contextualized word embedding。

  • ELMo算法过程为:

    1. 先在大语料上以language model为目标训练出bidirectional LSTM模型;

    2. 然后利用LSTM产生词语的表征;

    3. 模型目标为预测下一个单词

      其中高层的LSTM的状态可以捕捉语境和语义方面的特征,而底层的LSTM可以捕捉词语方面的特征。

  • ELMO模型训练完会得到三个向量:词语特征,句法特征,语义特征,三者拼接构成下游任务的输入。

  • ELMO优点: 根据上下文动态调整word embedding,因为可以解决一词多义问题;
    **ELMO缺点:**1、使用LSTM特征抽取方式而不是transformer,2、使用向量拼接方式融合上下文特征融合能力较弱。

  • GPT:.
    **优点:**使用transformer提取特征
    **缺点:**使用单项的语言模型,即单向transformer.

  • BERT可以用作特征抽取,将新的embedding应用到下游任务。也可以基于BERT进行微调,对于特定任务进行一个整体的训练。

  • BERT是基于Transformer的Encoder构建的,而GPT是基于Transformer的Decoder构建的。这就导致GPT类似于传统的语言模型,即一次只输出一个单词进行序列预测,也就是下一词预测。

  • 因为Decoder部分与RNN思想还是比较类似的,尤其是其中Masked attention部分,能够屏蔽来自未来的信息,因此GPT是单向的模型,无法考虑语境的下文

    XLNet介绍

    XLNet是一种广义的自回归预训练方法。(AR语言模型)

    自回归语言模型:上下文单词预测下一个单词的一种模型。但是在这里,上下文单词被限制在两个方向,要么向前,要么向后。

    AR语言模型的优点是擅长NLP生成任务。因为在生成上下文时,通常是正向的,GPT就是AR语言模型,缺点是只能使用前向上下文或者后向上下文,但是不能同时使用前向和后向上下文

20.介绍预训练语言模型?

ELMo,BERT,Transforler-XL,XLNET,ERNIE,RoBERTa,ALBERT,ELECTRA。。。笔者从BERT的mask LM以及NSP任务出发讲解了BERT后续各大预训练的改进。
各大预训练语言模型可能不能从头到尾讲起,笔者线是介绍了BERT,然后从BERT的预训练任务出发,比如介绍了ERNIE中对mask LM的改进,ALBERT中将NSP任务替换为SOP任务等。。

21.其他问题

  1. 注意力机制有哪些种类?本身原理上起了什么作用?写attention公式
  2. 传统的机器学习方法了解吗?深度学习和传统机器学习的优劣?了解哪些分类器?
  3. 讲一个自己熟悉的机器学习的模型和算法
  4. crf具体定义?什么是马尔可夫随机场?讲讲你对crf的理解?crf和hmm的区别知道吗,为什么ner任务用crf而不是hmm?crf具体如何预测?
  5. 生成式模型和判别式模型的区别
  6. SVM理解/SVM核函数、核函数作用、SVM遇到线性不可分怎么办/SVM与LR的区别
  7. LR的损失函数
  8. 介绍一下HMM

    HMM的几个要素,即:初始概率,状态转移矩阵,发射矩阵,这三个要素,然后我主要讲了下这三个要素的运算过程,提及了一下维特比算法。

  9. CART树的原理,决策树中熵的计算公式,分裂点有哪几种方式?
  10. 时间复杂度/空间复杂度
  11. 激活函数比较,为什么逻辑回归用sigmoid,多分类逻辑回归是否也用sigmoid

    tanh将结果压缩在[-1,1]之间,sigmoid将结果压缩在[0,1]之间

  12. 了解哪些损失函数(回归,分类),回归问题主要用哪些损失函数?数据不平衡的损失函数有哪些?交叉熵是什么原理?
  13. 优化算法SGD/Adam/momentum对比/Adam优点
  14. dropout原理?dropout是训练中的,那在预测的时候,是使用dropout训练出的权重还是要乘以keep-prib呢,为什么?
  15. 常用的语言库:tensorflow,pytorch
  16. 怎么判断过拟合,一般怎么解决?防止过拟合,drop out实际怎么操作
  17. 怎么做数据增强?样本不均衡怎么解决,影响了原本样本分布怎么办?数据不平衡如何解决?如何解决冷启动问题?

    样本不均衡,可以过采样或者欠采样。不能直接重复采样,会导致过拟合。

    欠采样:假设A、B两个类别,现实生活中占比接近10:1,但是类B的重要性又远高于A类,现有A类样本15万条,B类样本1万条,典型的机器学习样本不均衡问题,典型的欠抽样方法就是,把A:B配成了1:1

    样本不均衡使用数据增强可以解决,另外损失函数中有个weight参数可以解决(如果正例少,损失函数的w就提高)

  18. 谈一谈模型压缩的相关知识,三大角度:蒸馏,剪枝,量化
  19. 归一化了解过哪些?
  20. N个样本,N很大,怎么做抽样?
  21. batchsize大或小有什么问题

    过大:模型收敛快,但是错过极小值。过小:训练慢

  22. NLP的前景,了解最新的NLP方法吗?

    自然语言存在变化性,和不确定性,即语义的抽取对神经网络来说是很难的,在英文,人脑可以通过词形来建立词与词之间的关系,但是语义不确定性很强,比如歧义,一词多义,词序等等都会影响语义。而

    23.CNN和全连接层有什么区别?异同点?全连接层有什么作用?

    CNN就是去除了部分层的全连接层

    24.如何避免过拟合?欠拟合?/如何解决过拟合,欠拟合?/为什么会产生过拟合?
    25.介绍L1,L2正则化,原理,用途,优劣势
    26.Fcore,recall的区别,作用/Precision/ROC曲线上每个点含义/AUC的理解,auc衡量的是什么能力、知道哪些模型评价指标/AUC和F1的区别,分别用在什么场景、实现求AUC的算法/四分类用auc评价指标合理吗
    27.如何评价模型的好坏?(计算P/R/AUC),什么是召回率,精确度,准确度?

项目中相关问题

  1. 明确任务:任务类型是什么?任务背景是什么?情况如何?

  2. 明确行动:决定某种行动方式

  3. 说明结果:结果怎么样?难点是什么?如何解决的?项目其他尝试?做的不好的地方?可以怎么改进?

  4. 你有什么想问的吗?答:团队构成,目前的业务,未来的规划

  5. 项目中如何优化性能,做了哪些尝试

  6. 这个项目,传统的方法是什么?

  7. 为什么选择实习,而不是在学校做研究?

    跟着项目做研究可以把理论用到实际中,还有在公司实习的好处就是有数据, 因为数据决定了机器/深度学习结果的上限,算法只是无限接近这个上限

  8. 为什么选择这种模型?有尝试过其他模型吗?项目的评价体系是什么?

  9. 分类模型怎么构建?

  10. 已经训好的模型,放到新的数据上怎么提高性能,模型不允许fintuing

  11. 调参经验
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值