BERT - BERT 模型综述

1. BERT的两个任务

(1)Pre-Training 预训练

Masked LM (MLM)

  • 让模型预测被隐藏(Mask)掉的token。

例如:输入"我喜欢吃[MASK]",Label是"我喜欢吃苹果",

模型需要预测出"苹果"。这种任务的设计是为了让模型学习到语言的内在结构和词汇之间的关系。通过这种方式,模型可以理解在特定的上下文中,哪些词汇是合理的、合适的。

Next Sentence Prediction (NSP)

  • 让模型判断两句是否是上下文。

例如:语料是"今天天气很好,我去公园玩",判断句子A:"今天天气很好"与句子B:"我去公园玩"是否是上下文。

这个任务的目的是让模型能够理解句子之间的逻辑关系和语义连贯性。在实际的语言使用中,句子之间往往存在因果、转折、递进等各种关系,通过NSP任务,模型可以学习到这些关系,从而更好地处理文本序列。

(2)Fine-Tuning 微调

BERT经过预训练之后,根据不同的下游任务进行微调。不同的下游任务有不同的应用场景和目标,通过微调,可以将BERT模型在预训练阶段学到的知识迁移到具体的任务上,使其更好地适应特定的任务需求。例如:

  • 文本分类:可以用于判断文本的类别,如新闻分类、情感分析等。通过在预训练的基础上添加一个分类层,并使用标注好的文本分类数据进行微调,模型可以学习到如何根据文本的内容将其归类到不同的类别中。

  • 机器翻译:虽然BERT本身不是专门用于机器翻译的模型,但在一些情况下,也可以通过微调来辅助机器翻译任务。例如,可以将BERT作为编码器的一部分,对源语言文本进行编码,然后与解码器结合,生成目标语言的翻译结果。

  • NER(命名实体识别):用于识别文本中的命名实体,如人名、地名、组织名等。通过在预训练模型的基础上添加一个序列标注层,并使用标注好的NER数据进行微调,模型可以学习到如何识别和标注文本中的命名实体。

2. 数据集的构建

(1)MLM数据集

以15%的概率对数据进行处理,具体处理方式如下:

**- 80%的概率使用[MASK]替换token。**例如在句子"我喜欢吃苹果"中,以15%的概率选择一个词,假设选择"苹果",那么有80%的概率将其替换为[MASK],得到"我喜欢吃[MASK]"。

**- 10%的概率使用随机的token替换当前的token。**仍然以"苹果"为例,有10%的概率将其替换为其他随机的词,比如"香蕉"等。

**- 10%的概率保持不变。**也就是说,有10%的概率"苹果"仍然保持为"苹果"。

这种数据处理方式是为了让模型在学习过程中能够更好地适应各种情况,包括预测被掩盖的词、识别错误的词以及理解正常的文本序列。

(2)NSP数据集

构建一些句子对,其中:

  • 50%是正样本,即正确的上下文句子。例如"今天天气很好,我去公园玩"中的两个句子就是正样本,它们之间存在逻辑上的连贯性。

  • 50%是负样本,即随机组合的句子对。例如将"今天天气很好"和"我昨天去了图书馆"组合在一起作为负样本,这两个句子之间没有直接的上下文关系。通过这种方式,模型可以学习到如何区分句子之间的上下文关系。

3. Representation

BERT(Bidirectional Encoder Representations from Transformers)模型处理输入文本时的嵌入(Embedding)机制。

输入格式

BERT的输入格式是"[CLS]Sentence1[SEP]Sentence2[SEP]"。

例如对于两个句子"今天天气很好"和"我去公园玩",输入格式就是"[CLS]今天天气很好[SEP]我去公园玩[SEP]"。

各种Embedding
  • Token Embeddings:每个Token的Embedding。Token Embedding是将文本中的单词、字符等转换为向量表示的过程,这些向量能够捕捉到单词的语义信息。

  • Segment Embeddings:用于区分句子1和句子2。它的shape是(2,d_model),其中d_model是模型的维度。Segment Embedding的作用是在模型中区分不同的句子,因为BERT是基于Transformer架构的,它需要明确地知道哪些token属于同一个句子,哪些属于不同的句子。

  • Position Embeddings:Token位置的Embedding,shape是(seq_len,d_model)。Position Embedding的作用是让模型能够感知到token在句子中的位置信息,因为在自然语言中,词序对于理解句子的含义非常重要。

最终的输入向量

最终的输入向量是Token Embedding + Segment Embedding + Position Embedding。通过将这三种Embedding相加,模型可以同时获取到token的语义信息、句子的区分信息以及位置信息,从而更好地理解和处理文本。

4. 关于模型大小

以处理模型参数时使用的数值精度系数: float 16 为例

  1. 推理和存储时的系数为2

    • 当使用float 16精度时,每个参数占用2个字节(16位)的存储空间。

    • 对于一个拥有60亿(6B,即6,000,000,000)参数的模型,如果使用float 16精度,那么总的存储空间需求为:

      6,000,000,000 参数×2 字节/参数=12,000,000,000 字节=12 GB

    • 这意味着在推理(模型部署和使用阶段)和存储时,模型的大小可以显著减小,从而减少内存和存储的需求。

  2. 训练时的系数为20

    • 在训练阶段,可能需要更高的数值精度来避免数值不稳定和梯度下溢的问题,因此可能会使用更高的精度,如float 32(32位浮点数)。

    • 如果使用float 32精度,每个参数占用4个字节(32位)的存储空间。

    • 对于同样的60亿参数模型,如果使用float 32精度,总的存储空间需求为:

      6,000,000,000 参数×4 字节/参数=24,000,000,000 字节=24 GB

    • 但是,由于训练过程中涉及到大量的中间计算和优化操作,实际的存储需求可能会更大。例如,如果考虑到梯度、优化器状态等额外的存储需求,总的存储空间可能会达到:

      6,000,000,000 参数×20 字节/参数=120,000,000,000 字节=120 GB

相关推荐
ahead~9 分钟前
【大模型原理与技术-毛玉仁】第五章 模型编辑
人工智能·深度学习·机器学习
小天才才1 小时前
前沿论文汇总(机器学习/深度学习/大模型/搜广推/自然语言处理)
人工智能·深度学习·机器学习·自然语言处理
l木本I1 小时前
大模型低秩微调技术 LoRA 深度解析与实践
python·深度学习·自然语言处理·lstm·transformer
顽强卖力2 小时前
第二十八课:深度学习及pytorch简介
人工智能·pytorch·深度学习
要努力啊啊啊2 小时前
使用 Python + SQLAlchemy 创建知识库数据库(SQLite)—— 构建本地知识库系统的基础《一》
数据库·人工智能·python·深度学习·自然语言处理·sqlite
wufeil2 小时前
基于功能基团的3D分子生成扩散模型 - D3FG 评测
深度学习·分子生成·药物设计·ai辅助药物设计·计算机辅助药物设计
Andrew_Xzw3 小时前
数据结构与算法(快速基础C++版)
开发语言·数据结构·c++·python·深度学习·算法
deephub15 小时前
提升模型泛化能力:PyTorch的L1、L2、ElasticNet正则化技术深度解析与代码实现
人工智能·pytorch·python·深度学习·机器学习·正则化
Q同学16 小时前
Qwen3开源最新Embedding模型
深度学习·神经网络·llm
红衣小蛇妖18 小时前
神经网络-Day46
人工智能·深度学习·神经网络