首页 > 其他分享 >带你熟悉NLP预训练模型:BERT

带你熟悉NLP预训练模型:BERT

时间:2024-01-22 14:48:21浏览次数:26  
标签:NLP 训练 BERT 模型 任务 token 句子

本文分享自华为云社区《【昇思技术公开课笔记-大模型】Bert理论知识》,作者: JeffDing。

NLP中的预训练模型

语言模型演变经历的几个阶段
image.png

  1. word2vec/Glove将离散的文本数据转换为固定长度的静态词向量,后根据下游任务训练不同的语言模型
  2. ELMo预训练模型将文本数据结合上下文信息,转换为动态词向量,后根据下游任务训练不同的语言模型
  3. BERT同样将文本数据转换为动态词向量,能够更好地捕捉句子级别的信息与语境信息,后续只需对BERT参数进行微调,仅重新训练最后的输出层即可适配下游任务
  4. GPT等预训练语言模型主要用于文本生成类任务,需要通过prompt方法来应用于下游任务,指导模型生成特定的输出。

BERT模型本质上是结合了ELMo模型与GPT模型的优势。

  • 相比于ELMo,BERT仅需改动最后的输出层,而非模型架构,便可以在下游任务中达到很好的效果;
  • 相比于GPT,BERT在处理词元表示时考虑到了双向上下文的信息;

Bert介绍

image.png

2018年Google发布了BERT(来自Transformer的双向自编码器)预训练模型,旨在通过联合左侧和右侧的上下文,从未标记文本中预训练出一个深度双向表示模型。因此,BERT可以通过增加一个额外的输出层来进行微调,就可以达到为广泛的任务创建State-of-the-arts 模型的效果,比如QA、语言推理任务。

当时将预训练模应用于下游任务的策略通常有两种:基于特征的(feature-based)和基于微调(fine-tuning);前者比如ELMo,后者比如OpenAI GPT;

这两种策略在预训练期间具有相同的目标函数,在预训练期间,它们使用单向语言模型来学习一般的语言表示。但当前对预训练方法的限制(尤其是对基于微调的方法)是标准语言模型是单向(unidirectional)的,所以限制了在预训练阶段可选的模型结构体系。

比如GPT是从左到右的,每个token只能关注到前一个token的self-attention layers。这种局限对于句子级任务(sentence-level tasks)来说还不是很打紧,但是对于token-level tasks(比如QA)就很致命,所以结合两个方向的上下文信息至关重要。

Bert Input

第一步:Tokenization, 输入的句子经过分词后,首尾添加[CLS]与[SEP]特殊字符,后转换为数字id
image.png

第二步:Embedding, 输入到BERT模型的信息由三部分内容组成:

表示内容的token ids

表示位置的position ids

用于区分不同句子的token type ids

image.png

将三种信息分别输入Embedding层

image.png

如果出现输入是句子对的情况呢?

image.png

BERT Architecture

BERT由Encoder Layer堆叠而成,Encoder Layer的组成与Transformer的Encoder Layer一致:

自注意力层 + 前馈神经网络,中间通过residual connection和LayerNorm连接

image.png

BERT(Bidirectional Encoder Representation from Transformers)是由Transformer的Encoder层堆叠而成,BERT的模型大小有如下两种:

BERT BASE:与Transformer参数量齐平,用于比较模型效果(110M parameters)

BERT LARGE:在BERT BASE基础上扩大参数量,达到了当时各任务最好的结果(340M parameters)

BERT Output

BERT会针对每一个位置输出大小为hidden size的向量,在下游任务中,会根据任务内容的不同,选取不同的向量放入输出层

image.png

pooler output

例如,在诈骗邮件分类任务中,我们会将表示句子级别信息的[CLS] token所对应的向量,经过Bert Pooler放入classfier中,得到对spam/not spam分类的预测。

image.png

我们一般称[CLS]经过线性层+激活函数tanh的输出为pooler output,用于句子级别的分类/回归任务

sequence output

例如,在词性标注任务(POS Tagging)中,我们需要获得每一个token所对应的类别,因此需要将[CLS]和[SEP]中有实际意义的token输出,分别输入对应的classifier中。

image.png

我们一般称BERT输出的每个位置对应的vector为sequence output

BERT的不同下游任务

image.png

image.png

BERT预训练

BERT预训练任务有两种:Masked Language Modelling(MLM) 和 Next Sentence Prediction (NSP)。

MLM:随机遮盖输入句子中的一些词语,并预测被遮盖的词语是什么(完形填空)

NSP:预测两个句子是不是上下文的关系

image.png

Masked Language Model(MLM)

Masked Language Modelling(MLM) 捕捉词语级别的信息

在输入中随机遮盖15%的token(即将token替换为[MASK])

将[MASK]位置对应的BERT输出放入输出层中,预测被遮盖的token

image.png

在将[MASK]位置所对应的BERT输出放入输出层后,本质上是在进行一个多分类任务

image.png
image.png

为了使得预训练任务和推理任务尽可能接近,BERT在随机遮盖的15%的tokens中又进行了进一步的处理:

80%的概率替换为[MASK]

10%的概率替换为文本中的随机词

10%的概率不进行替换,保持原有的词元

image.png

Next Sentence Prediction(NSP)

Next Sentence Prediction (NSP) 捕捉句子级别信息,简单来说是一个针对句子对的分类问题,判断一组句子中,句子B是否为句子A的下一句(IsNext or NotNext)

image.png

image.png

Bert微调

在下游任务中,我们使用少量的标注数据(labelled data)对预训练Transformer编码器的所有参数进行微调,额外的输出层将从头开始训练。

image.png

 

点击关注,第一时间了解华为云新鲜技术~

 

标签:NLP,训练,BERT,模型,任务,token,句子
From: https://www.cnblogs.com/huaweiyun/p/17979972

相关文章

  • 开源资源:华为盘古大模型
    华为盘古大模型的官方介绍地址:https://www.mindspore.cn/largeModel/pangu盘古大模型的开源代码和开源权重(模型参数)的地址:(鹏城实验室的启智平台)https://openi.pcl.ac.cn/PCL-Platform.Intelligence/PanGu-Alpha开源代码:开源的模型参数文件:(在开源的代码git仓库的READM......
  • 软件生命周期模型
    ......
  • 大模型时代的对话系统
    在当今的大模型时代,对话系统已经成为了人工智能领域的研究热点。随着深度学习技术的不断发展,大模型在对话系统中的应用也越来越广泛。这些大模型能够处理海量的数据,从中提取出更加丰富和准确的信息,从而提高了对话系统的智能水平和交互体验。然而,随着大模型的普及,对话系统也面临着新......
  • 预训练对话大模型深度解读
    预训练对话大模型是自然语言处理领域的一项革命性技术,它通过大规模预训练语料库的利用,实现了对自然语言的高效理解和生成。本文将深入探讨预训练对话大模型的原理、实现方法及其在现实生活中的应用,帮助读者理解这一技术的前沿和潜力。一、预训练对话大模型的原理预训练对话大模型的......
  • 【OpenVINO】基于 OpenVINO C++ API 部署 RT-DETR 模型
     RT-DETR是在DETR模型基础上进行改进的,一种基于DETR架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,在前文我们发表了《基于OpenVINO™PythonAPI部署RT-DETR模型|开发者实战》,在该文章中,我们基于OpenVINO™PythonAPI向大家展示......
  • 针对特定领域较小的语言模型是否与较大的模型同样有效?
    经过2023年的发展,大语言模型展示出了非常大的潜力,训练越来越大的模型成为有效性评估的一个关键指标,论文《AComparativeAnalysisofFine-TunedLLMsandFew-ShotLearningofLLMsforFinancialSentimentAnalysis》中,作者全面分析了微调大语言模型(llm)及其在金融情绪分析中......
  • 【Qt之模型视图】5. Qt库提供的视图便捷类
    1.前言Qt提供了一些便捷的视图类,如QListWidget提供项目列表,QTreeWidget显示多级树结构,QTableWidget提供单元格项的表格。每个类都继承了QAbstractItemView类的行为,QAbstractItemView类实现了项目选择和标题管理的通用行为。这三个类使用起来方便,但适合于少量数据的存储与显示(存......
  • 并发编程之进程通信(生产消费模型)
    什么是生产者消费者模式生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当......
  • 阿里发布通义千问!1行代码,免费对话GPT大模型
    大家好,这里是程序员晚枫,今天给大家分享一个好用的东西......
  • 【译】大型语言模型的直观解释
    原作:史蒂夫·纽曼引子:我没有深入研究数学,而是解释了“为什么”它们被构建为“预测下一个单词”引擎,并提出了为什么它们会出现概念性错误的理论。 有很多文章解释了ChatGPT等大型语言模型(LLMs)的工作原理。然而,他们往往会深入研究那些与大多数用户无关的细枝末叶。了解“t......