Bert注意力计算过程的维度变化分析

代码分析目标:了解Bert注意力计算过程中的维度变化

变量相关说明

变量 batch_size sequence_len self.num_attention_heads config.hidden_size
含义解释 单批次训练量 单序列长度 抽头个数 Bert隐层大小
符号定义 B S N H
取值举例 B: 32 S: 128 N: 8 H: 768

源码分析

# 注:取自 hugging face 团队实现的基于 pytorch 的 BERT 模型
class BERTSelfAttention(nn.Module):
    # BERT 的 Self-Attention 类
    def __init__(self, config):
        # 初始化函数
        super(BERTSelfAttention, self).__init__()
        # H必须能被N整除(bert内H为768)
        if config.hidden_size % config.num_attention_heads != 0:
            raise ValueError(
                "The hidden size (%d) is not a multiple of the number of attention "
                "heads (%d)" % (config.hidden_size, config.num_a
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer模型的预训练语言模型。它的核心是注意力机制,通过自注意力机制来编码和理解文本表示。 BERT注意力机制是通过计算输入序列中每个位置与其他位置之间的相关性来实现的。具体来说,BERT使用了多头自注意力机制,将输入序列分为多个子序列,并为每个子序列分配一个注意力头。每个注意力头都会计算每个位置与其他位置之间的相关性,并将这些相关性作为权重来加权计算每个位置的表示。 通过多头自注意力机制,BERT能够捕捉到输入序列中不同位置之间的依赖关系和语义信息。这使得BERT能够更好地理解文本的上下文和语义,并生成更准确的文本表示。 下面是一个示例代码,示了如何使用BERT注意力机制来编码文本表示: ```python import torch from transformers import BertModel, BertTokenizer # 加载预训练的BERT模型和分词器 model_name = 'bert-base-uncased' tokenizer = BertTokenizer.from_pretrained(model_name) model = BertModel.from_pretrained(model_name) # 输入文本 text = "Hello, how are you?" # 分词和编码 tokens = tokenizer.encode(text, add_special_tokens=True) input_ids = torch.tensor([tokens]) # 获取注意力掩码 attention_mask = torch.ones(input_ids.shape) # 使用BERT模型编码文本表示 outputs = model(input_ids, attention_mask=attention_mask) # 获取编码后的文本表示 encoded_text = outputs.last_hidden_state # 打印编码后的文本表示 print(encoded_text) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值