BERT简介


说明:这几天整理了BERT模型相关资料,并总结如下,本文所提及BERT代码均来自 transformers

BERT模型简介

Bert的基本原理和框架

BERT是Bidirectional Encoder Representations from Transformers的首字母缩写,整体是自编码语言模型,使用Maksed LM任务和Next Sentence Prediction任务进行联合。

  • 任务一:Masked LM
    即在输入一句话的时候随机的选取一些词汇抹去,然后根据剩余的词汇来预测被抹去的几个词分别是什么。
    具体来说,BERT会随机选择(抹去)15%的词汇用于预测,对于原句中被抹去的词80%的采用[MASK]替换,10%的用任意词替换,剩下的10%保持不变。
  • 任务二:Next Sentence Prediction
    即给定一篇文章的两句话判断第二句话在文本中是否紧跟在第一句话后,在实际训练过程中从语料中随机选择50%正确句对和50%的错误句对。

BERT基本框架简图如下:
Bert论文中模型框架简图
在这个框架简图中对于每一个输入的[Token]在每一层都会有一个Transformer的Encode与之对应,非常容易让人误解为BERT中每一层都会有512个transformer(BERT限制句子最大长度为512),以及BERT在训练时会将每个句子padding到512。但其实对于Transformer的Attention模块来说是,在代码中表现为和句子的长度无关,并不会将所有的句子padding到512。(关于这块内容在后续Transformer在BERT中的应用里会有详细说明)

BERT的输入和输出

BERT模型的输入有三种,字向量、文本向量和位置向量

  • 字向量:该向量可以随机初始化,也可以利用word2vector等算法进行预训练以作为初始值
  • 文本向量:该向量的取值在模型训练过程中自动学习,用于刻画全局语义信息,并与单词/字的语义信息相互融合。
  • 位置向量:由于出现在文本不同位置的字/词所携带的语义信息存在差异,因此,BERT模型对于不同位置的字/词分别附加一个不同的向量以作区分,但是与Transformer不同之处在于这里的位置向量不是由三角函数给出,而是由模型在训练过程中自动学习。
    在这里插入图片描述

BERT模型Embedding层如下:

class BertEmbeddings(nn.Module):
    """Construct the embeddings from word, position and token_type embeddings.
    """

    def __init__(self, config):
        super().__init__()
        self.word_embeddings = nn.Embedding(config.vocab_size, config.hidden_size, padding_idx=config.pad_token_id)
        self.position_embeddings = nn.Embedding(config.max_position_embeddings, config.hidden_size)
        self.token_type_embeddings = nn.Embedding(config.type_vocab_size, config.hidden_size)

        # self.LayerNorm is not snake-cased to stick with TensorFlow model variable name and be able to load
        # any TensorFlow checkpoint file
        self.LayerNorm = BertLayerNorm(config.hidden_size, eps=config.layer_norm_eps)
        self.dropout = nn.Dropout(config.hidden_dropout_prob)

值得注意的是Bert模型限制了输入句子的最大长度(512),所以 self.position_embeddings的输入为从1到N的递增序列,N为句子长度且小于512.
self.token_type_embeddings的输入为句子标记,是一个取值为0或者1的向量

Transformer在BERT中的应用

BERT模型使用了Transformer的Encoder模块,原论文中作者分别用了12层和24层Transformer Encoder组装了两套BERT模型,分别是:

BERT_base: L=12, H=768, A=12, Total Parameters=110M
BERT_large: L=24, H=1024, A=16, Total Parameters=340M

其中层的数量(即Transformer Encoder模块的数量)为L,隐藏层的维度为H,自注意力头的个数为A,过滤器/前馈网络(Transformer Encoder端的feed-forward层)的维度为4H
Transformer的Encoder端结构如下图所示:
在这里插入图片描述
以下将详细介绍Transformer Encode端的各个子模块

  • 多头self-attention模块
    self-attention模块如下图所示:
    在这里插入图片描述
    Attention的输出为
    A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V
    其中K,Q,V是由X通过三个参数矩阵 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV相乘得到的。
    而多头的self-attention则由多组 W i Q , W i K , W i V W{^Q_i},W{^K_i},W{^V_i} WiQ,WiK,WiV相乘得到在讲结果拼接在一起送入一个全连接层。具体结构如下:
    在这里插入图片描述
    对应公式如下:
    M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , h e a d 2 , … … h e a d n ) W O w h e r e h e a d i = A t t e n t i o n ( X W i

03-08
### BERT在深度学习中的应用 #### BERT简介 BERT(Bidirectional Encoder Representations from Transformers)是一种用于自然语言处理的预训练模型。该模型旨在解决传统方法难以应对的语言理解和生成挑战,特别是在语境依赖性和深度双向表示方面[^2]。 #### 解决的关键问题 为了更好地理解词语的意义及其上下文关联,BERT引入了两项创新:一是解决了语境依赖性——即单词含义随其所处环境改变的现象;二是实现了深度双向表示——这意味着它能够同时考虑到前后的文本信息来增强对词汇的理解。这种能力使得BERT能够在多种复杂的NLP任务中表现出色。 #### 预训练策略 BERT采用了一种独特的预训练方式,主要包括两个部分: - **Masked Language Model (MLM)**: 通过对输入序列随机遮蔽一部分token,并尝试预测这些被隐藏起来的内容,以此强迫模型学会利用周围的上下文线索来进行推理。 - **Next Sentence Prediction (NSP)**: 让模型判断给定的一对句子之间是否存在连续的关系,这有助于提高其对于文档结构以及跨句逻辑连贯性的把握。 这两个阶段共同作用下,使BERT获得了强大的泛化能力和适应不同类型下游任务的能力[^3]。 #### 技术细节 从技术角度看,BERT构建于Transformer架构之上,后者以其高效的注意力机制闻名,允许网络有效捕获远距离之间的相互影响。此外,在实际操作层面,特殊字符如`[CLS]`和`[SEP]`分别用来指示每条记录开头及区分不同片段边界的位置[^4]。 ```python import torch from transformers import BertTokenizer, BertModel tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertModel.from_pretrained('bert-base-uncased') inputs = tokenizer("Hello world", return_tensors="pt") outputs = model(**inputs) last_hidden_states = outputs.last_hidden_state ``` 上述代码展示了如何加载并使用预训练好的BERT模型进行简单的文本编码过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值