2021-07-17bert选修补充

 过去NLP任务通常是一个任务一个模型,现在已经迈向,希望机器先总体了解人类语言以后再去解决各种NLP任务(先预训练一个模型,然后微调之后用在不同的任务上)

        pre-train:让机器解某个任务之前先训练一下。今天NLP领域的常见做法是:训练一个模型,模型是根据大量的文字(无标记,直接爬取的文字)训练出来的,它可以读懂人类文字 什么叫读懂?

        接下来针对要解决的任务,可以收集部分少量的资料,对模型进行微调fine-tune,让机器来解决不同的任务(不同的针对性资料对模型进行微调来解决不同的任务)

最知名的预训练模型就是BERT

什么是预训练模型

        预训练模型:把输入的每一个token表示成一个embedding vector,这个embedding vector包含了原来token的语义,意思相近的token会有相近的embedding,这些embedding中的某些维度可以看出跟语义的关联性

        在过去,没有ELMo和BERT之前,通常是一个token对应一个向量。问题是同样的token就会有同样的embedding,就会对应到同样的向量。例如知名的word2vec、Glove

        Embedding就是用一个低维的向量表示一个物体,这个Embedding向量的性质是能使距离相近的向量对应的物体有相近的含义,正是因为Embedding能够用低维向量对物体进行编码还能保留其含义的特点,所以其非常适合用于深度学习。由于我们熟知的one hot encoding、multi hot encoding是一种稀疏向量的编码方式,所以不适合用来深度学习进行特征表示,相反Embedding概括而言,就是一种高效的低维稠密的操作。

        词嵌入( word embedding):基于神经网络的分布表示又称为词向量、词嵌入,神经网络词向量模型与其它分布表示方法一样,均基于分布假说,核心依然是上下文的表示以及上下文与目标词之间的关系的建模。


keras中的Embedding和Word2vec的区别
        其实二者的目标是一样的,都是我们为了学到词的稠密的嵌入表示。只不过学习的方式不一样。

        Word2vec是无监督的学习方式,利用上下文环境来学习词的嵌入表示,因此可以学到相关词,但是只能捕捉到局部分布信息。

        而在keras的Embedding层中,权重的更新是基于标签的信息进行学习,为了达到较高的监督学习的效果,会将Embedding作为网络的一层,根据target进行学习和调整。比如LSTM中对词向量的微调。

        简单来说,Word2vec一般单独提前训练好,而Embedding一般作为模型中的层随着模型一同训练。

来源:https://blog.csdn.net/DBC_121/article/details/109319937?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162642279516780265436624%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162642279516780265436624&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-3-109319937.first_rank_v2_pc_rank_v29&utm_term=%E5%90%8C%E6%A0%B7%E7%9A%84embedding&spm=1018.2226.3001.4187

        如果英文词汇作为token,难以穷尽。改用字母作为token,通过看当前词汇的词根词缀判断新单词的含义,代表模型:FastText

        如果中文,把中文的每个字看做一个图像放进CNN,期待CNN能看到偏旁部首来判断含义

Contextualized word embedding考虑上下文的(eg. BERT  ELmo)

        看一整个句子,才得到对应的embedding,也就考虑了上下文的信息

这个cwe的模型长什么样?

        这个模型架构可以input一个序列,output一个序列,这个架构(模型)有多层,这个架构可以用LSTM(ELmo) 也可以用self-attention layers(BERT)

        随着模型越来越大,穷人适合的模型:让模型变小,其中著名的就是ALBERT,架构相同,它的所有参数都一样,而且表现还变好了一点点

 

         哪些模型用了哪些技术来压缩大小,参考资料如下

        self-attention的计算量是n方,n是sequence的长度,随着sequence的长度变长,可能会出现问题。reformer和longformer的出现就是为了减少self-attention的复杂度

NLP任务的分类,八种可能

输入:多个句子需要sep分隔符号

输出:

  1. 类别:CLS符号是产生与整个句子有关的embedding,或者把所有的embedding读入处理成一个类别
  2. 给每一个类别一个符号
  3. 从输入复制内容作为输出
  4. 用在s2s中,输出一个考虑了整体的sequence,把预训练模型当做decoder使用

如何对预训练模型做微调

微调整个模型:两个部分,预训练模型(训练过的参数)+特定任务(随机参数) ,

训练后的模型往往非常大,很多参数需要存下来,所以提出了adaptor的概念

只调adaptor的部分,预训练模型是不变的,此时只需要存原来模型中不需要调的部分+每一个预训练模型中的adaptor

注意颜色变化,变化的才训练(调参) 

weighted features 

 怎么得到预训练好的模型?如何训练一个预训练模型:

        目标:这个预训练的模型,输入一排向量,输出一排向量,且输出的向量是Contextualized word embedding考虑上下文的

        方法:自监督学习(用部分输入预测另外一部分输入,输入和输出对不是人工标注的)

         如何得到这种输入输出的关系?做一个模型去预测下一个输入的token时,必须一个一个输入w,一个一个预测h,直接输入的话模型就会偷看到答案,以至于什么都学不到

        language model其实就是在做predict next token这件事,预训练模型其实就是一个LM(语言模型)。用什么样的神经网络架构训练LM,来预测下一个token?最早:用LSTM(著名:ULMFiT)现在使用:self-attention(著名LM使用sa的例子:GPT、GPT-2、Megatron、turing NLG)但是要小心,要控制attention的范围,因为每一个位置都可以attention其他位置(不能偷看答案)

        predict next token做预测的时候,考虑了它左边的信息来生成embedding,但是右边呢?

        ELMO考虑了右边,左到右的LSTM的输出+右到左的LSTM的输出,连接起来,这样考虑了两边,但是这只是简单拼接,两个方向的考虑都是不完整的句子

         能不能在处理左侧内容的时候就考虑到右侧内容,反之同理?BERT可以做到这件事

BERT如何做到同时考虑两侧内容?

        它把输入的token盖住,两种方法盖住

  1. MASK:用特殊token替换
  2. random token:随机token替代

        根据盖住部分对应输出的embedding,去预测被盖起来的token是什么。

        BERT用的是transformer(是没有限制的sa,每一个token都可以atten到其他token),就解决了同时考虑所有token的问题,同时因为预测内容是被MASK起来了所以不用担心偷看到

CBOW与BERT

CBOW:word2vec的一种训练方法,用两侧内容预测t位置的token,这种方法的模型非常简单不能看很长的内容,有固定的的窗口,只能看窗口大小的上下文

BERT:预测被盖起来的地方,给多少输入就可以看多长的上下文。这是一个复杂的模型。

BERT遮盖的内容如何决定?

遮盖的内容是随机决定的,但是遮盖方法决定了机器能不能学到东西,一下是两种复杂的遮盖方法:

  1. WWM whole word masking:一次遮住一整个word(提前处理好,哪些是一整个word)
  2. Phrase-level&entity-level:一次遮住好几个word&先把实体找出来,把实体找出来。这就是ERNIE模型

SpanBert:一次遮住一排token就结束了,长度是由概率决定的。这个模型提出了span boundary objective(SBO)通过两边的token预测指定位置的内容,在coreference结合

XLNET:

        XL:transformer-XL,它可以维度读取信息,可以用relative positional embedding

        认为BERT有问题:认为遮盖会导致依赖预测,而无法学到一些内容。(其实BERT的MASK随机盖住就不会有这种问题)

        XLnet的运作可以从两种观点来看:

  1. 从LM语言模型:就是从predict next token来看,只能看到左侧。XLnet是把输入的token顺序随机打乱,用各式各样不同的信息去预测一个token,可以学到很多的dependency从属关系
  2. 从bert:bert看整个句子来预测mask的内容。XLnet用部分内容预测mask,用哪些部分是随机的。

        XLnet不像bert一样给mask的内容,而是只给位置附加信息。这里就涉及到一个特殊的神经网络架构

bert不擅长做生成任务(生成任务只能看左侧,右边还没生成出来),只限于自回归模型(由左至右生成的)

bert不适合做s2s的预训练模型(因为缺乏生成的能力)

如果要做需要s2s model 的NLP任务,那么bert只能当做encoder,decoder部分就没有pre-train到

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值