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

  • Post author:
  • Post category:其他




前言

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



问-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<M : f(x) = (x/M)^a M=100代表其出现频率 a = 3/4

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)


将和单词数量以及隐藏状态相关的嵌入矩阵,分解成较小的两个矩阵的乘积,从而将隐藏层和词典大小分割开来,使得

隐藏层节点的大小以及词典大小

的拓展不再受限制。有点类似卷积神经网络中的两个3

3卷积核可以替换一个5

5的卷积核,既能取得不错的效果 ,还能降低模型参数数量,提高训练速度。

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项目,用于进行文本分类的



版权声明:本文为weixin_43791511原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。