2021-08-21

NLP笔记——BERT和GPT简单记录

一、BERT

  1. 在模型架构方面,到目前为止,和 Transformer 是相同的(除了模型大小,因为这是我们可以改变的参数)
    可以理解为:一个训练好的 Transformer 的 decoder 的栈

  2. 输入:1、token 是特殊的 [CLS],它的含义是分类(class的缩写)。

  3. 输出:与transformer输出类似

  4. 思考一个问题:(语境问题)如果我们使用 Glove 的词嵌入表示方法,那么不管上下文是什么,单词 “stick” 都只表示为同一个向量。一些研究人员指出,像 “stick” 这样的词有多种含义。为什么不能根据它使用的上下文来学习对应的词嵌入呢?这样既能捕捉单词的语义信息,又能 捕捉上下文的语义信息。于是,语境化的词嵌入模型应运而生。

  5. 一个重要的词嵌入模型:ELMo 模型:没有对每个单词使用固定的词嵌入,而是在为每个词分配词嵌入之前,查看整个句子,融合上下文信息。它使用在特定任务上经过训练的双向 LSTM 来创建这些词嵌入。

  6. 3个较流行的模型比较
    1)ULM-FiT:NLP 领域的迁移学习。ULM-FiT 提出了一些方法来有效地利用模型在预训练期间学习到的东西 - 这些东西不仅仅是词嵌入,还有语境化的词嵌入。ULM-FiT 提出了一个语言模型和一套流程,可以有效地为各种任务微调这个语言模型。
    2)Transformer:超越 LSTM。Transformer 论文和代码的发布,以及它在机器翻译等任务上取得的成果,开始让人们认为它是 LSTM 的替代品。这是因为 Transformer 可以比 LSTM 更好地处理长期依赖。
    3)OpenAI Transformer:预训练一个 Transformer Decoder 来进行语言建模
    3-1)这个模型包括 12 个 Decoder 层。因为在这种设计中没有 Encoder,这些 Decoder 层不会像普通的 Transformer 中的 Decoder 层那样有 Encoder-Decoder Attention 子层。不过,它仍然会有 Self Attention 层(这些层使用了 mask,因此不会看到 句子后来的token)。
    3-2)OpenAI Transformer 是由 Transformer 的 Decoder 堆叠而成的
    3-3)只需要 Transformer 的 Decoder 就可以了。Decoder 是一个很好的选择,用它来做语言建模(预测下一个词)是很自然的,因为它可以屏蔽后来的词 。当你使用它进行逐词翻译时,这是个很有用的特性。
    3-4)->关键:有了这个结构,我们可以继续在同样的语言建模任务上训练这个模型(OpenAI Transformer):使用大规模未标记的数据来预测下一个词。只需要把 7000 本书的文字扔给模型,然后让它学习。书籍非常适合这种任务,因为书籍的数据可以使得模型学习到相关联的信息。如果你使用 tweets 或者文章来训练, 模型是得不到这些信息的。
    3-5)应用:OpenAI Transformer的下游任务的迁移学习:句子分类任务(把电子邮件分类为 ”垃圾邮件“ 或者 ”非垃圾邮件“):

  7. 新的问题的出现: OpenAI Transformer 为我们提供了一个基于 Transformer 的可以微调的预训练网络。但是在把 LSTM 换成 Transformer 的过程中,有些东西丢失了。ELMo 的语言模型是双向的,但 OpenAI Transformer 只训练了一个前向的语言模型。我们是否可以构建一个基于 Transformer 的语言模型,它既向前看,又向后看(用技术术语来说 - 融合上文和下文的信息)。

  8. 解决方法:BERT 提出使用 mask,把需要预测的词屏蔽掉。-> Masked Language Model(MLM 语言模型):BERT 在语言建模任务中,巧妙地屏蔽了输入中 15%的单词,并让模型预测这些屏蔽位置的单词。

二、GPT

  1. 如GPT-2,是一个巨大的、基于 Transformer 的语言模型,它是在一个巨大的数据集上训练的,是只有 Decoder 的 Transformer 在语言建模。
  2. 应用:最著名的语言模型就是手机键盘,它可以根据你输入的内容,提示下一个单词。
  3. 与 BERT 的一个不同之处
    形象对比:机器人第一定律:机器人不得伤害人类,也不能因不作为而使人类受到伤害。
  4. 模型特点:
    4-1)GPT-2模型能够处理 1024 个 token。每个 token 沿着自己的路径经过所有的 Decoder 模块
    4-2)GPT-2模型只有一个输入的 token,因此只有一条活跃路径。token 在所有层中依次被处理,然后沿着该路径生成一个向量。
    4-3)GPT-2 的每一层decoder都保留了它自己对第一个 token 的解释
  5. 模型的过程:
    5-1)输入编码:每一行都是词的 embedding:这是一个数字列表,可以表示一个词并捕获一些含义。这个列表的大小在不同的 GPT-2 模型中是不同的。最小的模型使用的 embedding 大小是 768因此在开始时,我们会在嵌入矩阵查找第一个 token的 embedding。在把这个embedding 传给模型的第一个模块之前,我们需要融入位置编码,这个位置编码能够指示单词在序列中的顺序。训练好的模型中,有一部分是一个矩阵,这个矩阵包括了 1024 个位置中每个位置的位置编码向量。
    (注:,训练好的 GPT-2 包括两个权重矩阵。)
    5-2)在这些decoder层中向上流动:第一个模块现在可以处理 token,首先通过 Self Attention 层,然后通过神经网络层。一旦 Transformer 的第一个模块处理了 token,会得到一个结果向量,这个结果向量会被发送到堆栈的下一个模块处理。每个模块的处理过程都是相同的,不过每个模块都有自己的 Self Attention 和神经网络层。
    5-3)回顾 Self-Attention:它在处理某个词之前,将模型对这个词的相关词和关联词的理解融合起来(并输入到一个神经网络)。它通过对句子片段中每个词的相关性打分,并将这些词的表示向量加权求和。
    5-4)Self-Attention 沿着句子中每个 token 的路径进行处理,主要组成部分包括 3 个向量。
    (1)Query:Query 向量是当前单词的表示,用于对其他所有单词(使用这些单词的 key 向量)进行评分。我们只关注当前正在处理的 token 的 query 向量。
    (2)Key:Key 向量就像句子中所有单词的标签。它们就是我们在搜索单词时所要匹配的。
    (3)Value:Value 向量是实际的单词表示,一旦我们对每个词的相关性进行了评分,我们需要对这些向量进行加权求和,从而表示当前的词
    5-5)模型输出:可以选择最高分数token(top_k=1)输出当模型顶部的模块产生输出向量时(这个向量是经过 Self Attention 层和神经网络层得到的),模型会将这个向量乘以嵌入矩阵。
    我们可以选择最高分数的 token(top_k=1)。但如果模型可以同时考虑其他词,那么可以得到更好的结果。所以一个更好的策略是把分数作为单词的概率,从整个列表中选择一个单词(这样分数越高的单词,被选中的几率就越高)。一个折中的选择是把 top_k 设置为 40,让模型考虑得分最高的 40 个词。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值