NLP相关知识点问答总结(二)

前言

这些知识点基本是本人在准备春招和秋招时做的笔记,东西比较杂,有的是自己总结,有的是参考网上博客,可能不是很准确,还望各位批评指正,多多交流。

问-31:GloVe相对于word2vec有哪些优缺点?

答:
优点:
1:统计全局信息: 考虑了全局的统计信息,在小数据集上也能有不错的效果,word2vec只使用局部的信息
2:训练速度更快: 从其实现上来说,更容易实现并行化,所以训练速度更快,相对于Co-Occurence Vector进行矩阵分解,速度要更快
3:可拓展性强: 如果加入新的语料,由于之前的全局信息都已经统计出来了,因此可以只统计新加语料进行增量训练
缺点:
1:静态词向量, 无法解决多义词问题
2:存储更耗内存, 相比之下,word2vec在这方面节省了很多资源

问-32:GloVe中的衰减函数用来干什么?

答:
使得在上下文窗口中离得远的两个单词获取较小的统计值,一般和其距离成反比

问-33:GloVe中采用了什么样的损失函数?

答:
采用最简单的mean square loss,因为其相当于是回归问题,因此GloVe本质是加权最小二乘回归模型

问-34:GloVe损失函数中的权重函数f,需要满足什么条件?

答:
1:非递减函数: 保证共现次数多的单词权重大于共现次数少的权重
2:f(0)=0: 当两个单词没有共现时,不用计入损失函数
3:函数值不能太大: 当共现次数太多时,其权重值也不能太大
if x else: f(x) = 1 如果共现次数超过一定的值之后,将其损失固定维1,防止其过大。

问-35:FastText的主要思路是什么?

答:
和word2vec很像,但是其利用了单词的内部信息,通过将单词拆分成以字母为单位的n-gram子词序列,通常可以将子词长度在3到6之间的所有子词和特殊子词的并集Gw取出,然后训练这些词向量。

问-36:FastText有哪些优缺点?

答:
优点:
1:训练速度更快: 不同单词可能会有相同的子序列,所以训练时可以共享权重,提升训练速度。预测的是标签。
2:缓解OOV问题: 因为即使不在训练集中的单词,也可能由已有的子序列组合而成。
3:考虑了词语内部结构信息:
缺点:
1:数据集小时容易过拟合:

问-37:FastText和word2vec最本质的区别是什么?

答:
1:前者使用了单词内部的结构信息
2:hierarchical softmax的使用不同
fasttext充分利用了h-softmax的分类功能,遍历分类树的所有叶节点,找到概率最大的label(一个或者N个)
Wordvec的目的是得到词向量,该词向量最终是在输入层得到,输出层对应的 h-softmax 也会生成一系列的向量,但最终都被抛弃,不会使用。

问-38:简述WordRank算法?

答:
一种词向量表示方法,其将词向量学习问题转换成一个排序问题。通过对单词向量和上下文向量的内积来对上下文向量进行排序,模型期望将与该单词更相关的上下文向量排在靠前的位置。

问-39:简述cw2vec算法?

一种基于汉字笔画 N-gram 的中文词向量表示方法。该方法根据汉字作为象形文字具有笔画信息的特点,提出了笔画 N-gram 的概念。有点类似fasttext,考虑了字或者词的内部信息,训练的时候也可以共享权重。

问-40:ELMO(Embedding from Language Models)算法的主要思想?

答:
先使用用语言模型训练神经网络,在使用word embedding 时,单词已经具备上下文信息,这个时候神经网络可以根据上下文信息对word embedding 进行调整,这样经过调整之后的word embedding 更能表达在这个上下文中的具体含义,这就解决了静态词向量无法表示多义词的问题

问-41:简述ELMO的两个阶段?

答:
1:预训练语言模型: 采用双向RNN(lstm),分别输入单词的上下文信息,预测目标单词
2:输出调整后的词向量: 从预训练网络中提取对应的单词的网络各层的word embedding作为新的特征补充到下游任务中。(不同层包含的主要信息不同)

问-42:ELMO有什么优缺点?

答:
优点:
1:解决了多义词问题: 由之前的静态词向量转化为动态词向量
2:适用范围更广,普适性强: 由于其由多层网络结构,每层结构学习到了不同的语义句法信息,所以可以适用更多任务。
3:可以缓解OOV问题: 模型的输入和输出采用字符级的CNN模型,
缺点:
1:特征抽取能力偏弱: 相比于Transfomer来说,LSTM的特征抽取能力还是较差
2:拼接方式的双向融合的特征融合能力偏弱: 只是一种猜测

问-43:简述GPT模型?

答:
GPT是“Generative Pre-Training”的简称,生成式的预训练。
采用两阶段过程:利用语言模型进行预训练;通过Fine-tuning的模式解决下游任务(两个阶段的模型结构需要一样)。

问-44: GPT和ELMO的区别有哪些?

答:
1:特征提取器不同: 前者使用Transformer后者RNN
2:采用单向模型: 虽然GPT也是以语言模型为目标的预训练任务,但是其只是用了单词的前文信息,是单向的模型,限制了其应用场景,如阅读理解,完形填空等需要知道上下文的任务中。
3:应用于下游时方法不同: ELMO不用管下游任务的网络结构只提供提取到的特征,GPT则需要下游任务的网络结构和其本身一样,然后将预训练后的参数载入进去,再根据自己的任务对模型进行fine-tuning。(和图像领域很像)针对不同的下游任务,只需要在输入部分进行不同的修改即可。

问-45:Bert模型简述?

答:
BERT的全称为Bidirectional Encoder Representations from Transformers,即双向Transformer的Encoder。Bert模型算是Transformer模型(encoder)的一种堆栈,不同的是把其改造成双向模型,同时完成单词补全(Masked model)和句子关系预测(sentence prediction)两个任务,提高了模型的特征提取能力。

问-46:Bert模型的优缺点?

答:
优点:
1:效果好,普适性强, 能适用更多NLP任务
2:多任务模型, 既能学习到词语级特征(Masked model),又能学习到句子级特征(sentence prediction)
3:双向语言模型,能够学习到更多的上下文信息
4:对于下游任务既可以适用fine-tunning,也可以模型结构不一样,加入新的任务特征
缺点:
1:需要有大规模的语料数据和算力
2:无法捕捉超过输入长度范围以外的依赖关系(transformer xl segment level recurrence)
3:输入的segement按照tokens的数量划分,容易造成上下文碎片化(context fragmentation)(transformer xl )
4:由于Mask符号的存在,造成训练和测试的数据不一致(XLNET permutation model),虽然bert进行了缓解操作,一些不mask,一些不替换,但是并没有很好地解决。、
5:是AE(auto enconding)模型,不利于文本生成式任务,而AR(auto regression)模型如GPT模型则有利于文本生成式任务。
6:因为条件独立性假设,模型无法学习到被mask掉的各个token之间的关系。
7:NSP任务过于简单,只对部分模型

问-47:ELMO,GPT和Bert三者之间的关系?

答:
三者之间有很多相近的地方,也有很多不同点。
相同点:
1:都是两阶段模型,预训练->下游任务
2:自动从大规模语料中抽取语义信息
不同点:
1:是否为双向模型: ELMO和Bert都采用双向模型,但是GPT采用单向模型
2:特征提取器不同: Bert和GPT的特征提取器是Transfomer,但ELMO使用的是RNN
3:是否采用fine-tunning: ELMO和Bert的下游训练任务的网络结构可以和第一阶段不同,但是GPT必须是一样的网络结构进行fine-turnning。(Bert两者都可使用)
4:是否是多任务型: Bert同时学习两个任务

问-48:如何评价Bert模型?

答:
首先Bert模型是一个里程碑式的成果,这可以由其在各项NLP任务中取得的效果可知。但是我并认为其有太多的创新点,应该说其是一个集大成者。
下面说说它的优点及来源:
1:双向语言模型: 这个在ELMO中已经有用到,可以说是借鉴了它的思想,mask操作并没有全部进行mask,而是有一部分进行了替换,一部分保持不变,模型也无法知道哪些词是被mask的,使得训练数据更加接近真实情况下的输入,迫使模型在每一个词上都学习到一个全局语境下的表征,这才是其解决一词多义的最重要特性。
2:编码器使用transformer: GPT也同样采用Transformer(Decoder)
3:Masked Model: 算是有些创新,但是其本质还是和CBOW一样,通过上下文来预测目标单词
4:Sentence Prediction: 相当于多任务型首次使用,但是加入了这个机制只会在特定的任务中有所提升,对NLP任务影响不大
由此可见,bert实际上是结合了多个模型的优点,将其集成在一起,但是这也算是其最大的创新,使用有限的资源获取最大的收益。

问-49:Bert和GPT的特征提取器有什么区别?

答:
本质上他们都使用的是Transformer。但是在论文中GPT作者说的是采用了Transformer的decoder,而Bert里面采用的是其encoder。在GPT中采用的decoder又和transformer的不太一样,因为它不包含encoder-decoder-self-attention层,但是它包含了Mask操作,在GPT中通过Mask操作,使得模型根据前面已有的单词去预测后面的单词,所以它是单向模型。正是由于这个Mask操作,使得Transformer的decoder无法进行加速的并行运算,但是encoder可以,所以bert会更快一些,同时由于没有mask,保证了其双向的特性。

问-50:机器翻译的难点有什么?

答:
1:译文的选择: 由于一次多义,近义词的原因,在进行翻译的时候如何选择合适的单词是一个问题
2:语序的调整: 不同的语言有不同的语序特点,主谓宾等语义要素的位置不太一样,根据源语言语序输出符合语法的目标语言语序是一大难点。
3:数据稀疏: 大量的双语对照资源对于有些语言对来说很少,如何根据少量的语料训练出能够实用的模型是一个挑战
4:没有标准答案: 这点在很多自然语言任务中都有,即使是真人去完成这个任务,都不可能百分之百一样。
5:缺乏背景知识或常识信息: 在各个语言和文化中,有很多约定俗成但是又不太符合各种规则的现象,如中国的成语,不能仅仅依靠其字面意思去进行翻译。
6:词义随着时代发生变化: 如小姐一词,不同时代有点不一样
7:网络用词变化快,数量多: 网络用词出现数量很多,而且在一个时期内变化比较快

问-51:机器翻译经历的几个阶段?

答:
1:基于规则的翻译: 通过专家构建规则,利制定好的规则进行机器翻译。1954年IBM做出第一个基于规则的英俄互译系统。1966年的ALPAC报告,认为当时的机器翻译遇到了难以解决的语义障碍。典型系统:加拿大开发的一款天气预报系统。
1.5:基于中间语言的翻译基于事例的翻译
2:基于统计的翻译: 由于仅依赖双语平行语料,大大降低了进入机器翻译研究的门槛;但因为数学模型过于复杂,很难实现。典型系统:在14年之前,大家所熟悉的Google翻译都是基于统计机器翻译
3:神经网络机器翻译: 相比统计机器翻译而言,神经网络翻译从模型上来说相对简单,它主要包含两个部分,一个是编码器,一个是解码器。编码器是把源语言经过一系列的神经网络的变换之后,表示成一个高维的向量。解码器负责把这个高维向量再重新解码(翻译)成目标语言。Sutskever et al., 2014, Bahdanau etal., 2014

问-52:机器翻译的评价方法?

答:
1:人工评价: 信,达,雅 ,人工评测指标: HTER(手动计算达到人工翻译的目标所需要的最少编辑距离)
2:BLEU: 基于n-gram(n元语法)的评价方法,自己的译文中出现的单词数和参考译文中的数量是否一样。精确度的衡量
3:METEOR: METEOR标准于2004年由lavir发现在评价指标中召回率的意义后提出的
4:NIST: Bleu的一种变体,赋予少见的n-gram更高的权重。
5:TER: (Translation Edit Rate)计算机器翻译与人工参考译文之间的编辑距离 (Edit distance)

问-53:BLEU方法的优缺点?

答:
优点:
1:n-gram共现统计,考虑了更长的匹配信息
2:基于精确度
缺点:
1:各个词和n-gram被平等对待,显然一句话中,不同词的重要程度是不一样的
2:只看重精确度,不看重召回率
3:存在常用词干扰(可以用截断的方法解决)
4:短句得分较高(即使引入了brevity penalty,也还是不够)
5:没有考虑到语义,语序信息。有些语句单词全部一样,但是意思却完全相反。

问-54:METEOR的优缺点?

答:
优点:
1:unigram 共现统计
2:基于F值,考虑到了召回率
3:考虑同义词、词干
缺点:
1:参数较多,有四个需要自己设置的参数
2:需要外部知识源,比如:wordNet,如果是wordNet中没有的语言,则无法用METEOR评测。

问-55:机器翻译有哪些开源的项目?其SOTA值是多少?

答:
1:Open-NMT
哈佛大学自然语言研究组,使用框架pytorch,也有tf版本。编写yaml配置文件。
“Neural Machine Translation by Jointly Learning to Align and Translate” Bahdanau et al. ICLR 2015
“Effective Approaches to Attention-based Neural Machine Translation” Luong et al. EMNLP 2015
2:neural monkey
使用框架tensorflow
Neural Monkey: An Open-source Tool for Sequence Learning:2017-The Prague Bulletin of Mathematical Linguistics
3:Fairseq
这个翻译模型由Facebook AI实验室在2017年提出,和以往以RNN为基础的翻译模型相比,采用了以cnn为主的模型结构。
根据语言对的不同,bleu 值大致在30左右,高的可以达到40以上如en-fr等语言对

问-56:简述Transformer-XL?

答:
Transformer-XL,XL意思是extra long,这个XL就是相比于原始的transformer或者bert来说,它能捕获更长距离的依赖关系,结合了Transformer和RNN的优点。
主要创新点:
1:片段级循环神经网络:segment-level recurrence
其引入了一个记忆模块或者cell,缓存上一个segment的隐藏状态,用于当前隐藏状态的生成(注意力机制),这样就可以增长其依赖距离。
2:相对位置编码:relative positional encoding scheme
代替transformer里的绝对位置编码,是可训练的位置嵌入。在memory的循环计算过程中,避免时序混淆,位置编码可重用。原来的绝对位置编码,对于不同句中的相同位置的词,其位置编码是相同的,即使像bert那样加入segement编码,也无法解决这个问题。
因此,片段级循环机制有利于捕捉更长距离的依赖,相对位置编码的提出用于实现片段循环机制,解决可能在不同片段中出现的时序混乱问题。也可以简单的理解Transformer-XL=Transformer + RNN,即segment-wise的RNN模型,但是RNN模型的组件是Transformer的Encoder模块。

问-57:简述XLNET?

答:
Bert模型能够表现的很好,但是长距离依赖关系的学习能力较弱,且由于mask的原因,导致训练阶段和测试阶段出现不一致。AR模型可以方便捕获更长的依赖关系,但是却不如bert的AE方式带来的对深层次双向信息的学习能力(不管有没有带mask)。如何结合这两个模型的优点,同时尽量克服其缺点?XLNET使用以下几点来完成:
1:排列组合语言模型(permutation language model,PLM)
主要解决的问题是mask问题和双向学习问题。通过对输入序列进行随机排列,可以保证输入的信息不包含mask符合,同时也能让模型在预测当前词的时候可以看到其两边的信息,保证模型的双向性。论文中 Permutation 具体的实现方式是通过直接对 Transformer 的 Attention Mask 进行操作。
2:双流自注意力机制(Two-stream self-attention)
主要解决的问题是排列组合后位置信息和内容信息割裂的问题。在模型中同时包含两个自注意流,一个是包含内容的自注意力流(content self-attention stream),一个是只有位置信息作为注意力机制中query输入的流(query self-attention stream)。这样就能利用 Query Stream 在对需要预测位置进行预测的同时,又不会泄露当前位置的内容信息
具体就是有两个隐藏状态hx和gx,当计算hx时,q,k,v都是上一层的h,但是当计算第i个gx时,query值使用的是上一层的第i个gx,k和v使用的是上层位置对应的hx,这样做的目的就是不让计算该位置的时候,直接看到这个位置的信息,因为就是根据最后一层的gx来预测当前位置的信息。
3:借鉴Transformer-XL的两个机制
片段级循环神经网络:segment-level recurrence:解决长距离依赖问题,依赖长度和缓存的segement片段个数M以及每个segement的token数量N成线性关系。
相对位置编码机制:relative positional encoding scheme:解决可能的位置信息混乱问题,通过可学习的位置编码,来解决固定的绝对编码信息所带来的问题。主要有两个编码Relative Position Encoding,Relative Segment Encodings(准备两个向量,S+ 和 S- 分别表示在一句话内和不在一句话内)。
4:部分预测 Partial Prediction
解决的是误差积累,模型收敛速度变慢问题。原因是在AR系统中,从第一个token开始,一直预测到最后一个token,但是在预测的起始阶段上下文信息较少,可能会对分布产生误导。因此这里就只预测序列(排列后的)后面一部分的token,使得前面的都当做上下文。使用一个超参数K来控制,使得序列后面1/K的词用于预测。注意,K 越大,上下文越多,模型预测得就越精确。
总的来说相比于bert,XLNET可以处理更长的文本信息,同时适合于生成式任务,解决了bert中因为mask而导致的预训练和测试输入信息不一致的问题。

问-58:XLNET和Transformer-XL之间的区别?

答:
XLNET借鉴了Transformer-XL的两个最重要的特性,segement recurrence 和relative positional encoding。但是XLNET在这两个基础之上又添加了更重要的特性。
1:permutation language model:解决了mask问题造成的训练和测试的不同(很重要)
2:two-stream self-attention:解决了位置信息和内容信息的割裂问题
3:relative segement encoding:解决了不同句子内可能会造成的位置混乱的问题
4:partial prediction:算是不同点,主要解决收敛速度慢的问题

问-59:简述ALBERT?

答:
ALBert是谷歌在Bert模型上设计的一个精简模型,主要为了解决模型参数过大训练速度过慢的问题。主要技术创新点有如下三点:
1:embedding参数分解(Factorized Embedding Parameterization)
将和单词数量以及隐藏状态相关的嵌入矩阵,分解成较小的两个矩阵的乘积,从而将隐藏层和词典大小分割开来,使得隐藏层节点的大小以及词典大小的拓展不再受限制。有点类似卷积神经网络中的两个33卷积核可以替换一个55的卷积核,既能取得不错的效果 ,还能降低模型参数数量,提高训练速度。
2:跨层参数共享(Cross layer parameter sharing)
将各个层的参数进行共享,共享有三种,一种是仅仅共享FFN的参数,一种是共享注意力机制的参数,最后一种是共享所有参数。本模型默认采用的是最后一种。这样的好处是可以在增加模型层数的时候,不会使得参数数量急剧增加
3:句间连贯性损失(inter-sentence coherent loss)或句间连贯性预测任务SOP(sentence order prediction)
它和Bert里面的NSP(Next sentence prediction)不太一样,它的正样本还是两句连续的语句,但是负样本是把这两个语句的顺序进行颠倒,而不像Bert里面,随机在另一个文档中选择一个句子作为负样本。这样的目的是为了增加任务难度,输入内容都是同一主题,需要更好地捕捉到语义信息才能预测出该任务。在bert的NSP任务里面,其实就是主题一致性预测,任务难度低,所以在后续的研究中发现作用不大。
使用上述三个技术,既可以降低模型参数,提高训练速度,还能在原有Bert的基础上,提升效果。

问-60:简述ERNIE?

答:
在Bert之后,出现了很多和ERNIE同名的模型,其起名和动漫芝麻街里的动漫人物Bert的好友Ernie一样。这里简单讲述两个模型。
1:ERNIE-THU(清华大学)
引入了外部知识库到模型中去,同时在大规模语料库和知识图谱上预训练语言模型:
首先是识别输入文本中的实体,并将这些文本和知识图谱中已存在的实体进行对齐,采用知识嵌入算法(TransE),将得到的实体嵌入(entity embedding)同时作为模型的输入输入给模型。并在隐藏层中,对和实体对应的token进行融合
然后是预训练阶段,模型除了采用Bert的MLM和NSP外,还随机Mask掉一部分实体,并要求模型从知识图谱中找到正确的实体(Denoising Entity auto-encoder,DEA),这一点和百度的entity-mask有点像。百度是直接进行学习entityembedding,DEA的目的是给定实体序列和文本序列来预测对应的实体
2:ERNIE-Baidu
百度提出来的这个ERNIE主要是针对Bert在中文任务中表现不够好的改进。对于中文,Bert是使用基于字的处理,在进行掩盖的时候仅仅掩盖住一个单字。而由于Bert对每个被遮盖住的词有个独立性假设,因此Bert模型在应用于中文中的时候,能很简单地推测出字的搭配,但是并不会学到短语或者实体的语义信息(相对于英文天然的单词结构),而这对于理解一句话来说又是非常关键的。
因此其模型是在Bert的基础上,加入了海量语料中的实体,短语等先验知识,建模真实世界的语义关系。这里不是将知识向量直接丢进模型进行训练,而是在训练的时候将短语,实体等先验知识进行mask,强迫模型对其进行建模,学习他们的语义表示。
采用三种masking策略:
1>Basic-level masking: 进行单字的mask
2>Phrase-level masking: 输入仍然是单字,但是mask的是连续的短语
3>Entity-level masking: 首先进行实体识别,然后将识别出来的实体进行mask
3:其他类型
ERNIE2.0:也是百度提出来的,主要加了多任务学习,加入了任务嵌入的输入,可以以串行的方式进行持续学习 continual learning
ERNIE-Tiny: 也是百度的工作,主要是缩小了模型参数,直接截取了base模型的前几层进行下游任务的finetunne。
ERNIE-GEN: 也是百度的,主要是用于生成式的任务上。
ENRIE-Classification: 一个github项目,用于进行文本分类的

你可能感兴趣的:(学习笔记,自然语言处理,算法,机器学习,人工智能)