【动手学习pytorch笔记】37.1 BERT_Model

该博客详细介绍了BERT模型的构建过程,包括输入处理、编码器的设计、掩蔽语言模型任务以及下一句预测任务。BERT模型使用词元、片段和位置嵌入,并通过Transformer编码器抽取序列信息。掩蔽语言模型用于预测被掩蔽的词元,而下一句预测任务则判断两个句子是否连续。整个模型在预训练阶段用于这两个任务,为下游任务提供强大的语义表示。

BERT模型

import torch
from torch import nn
from d2l import torch as d2l

模型输入

#@save

def get_tokens_and_segments(tokens_a, tokens_b=None):
    """获取输入序列的词元及其片段索引"""
    tokens = ['<cls>'] + tokens_a + ['<sep>']

    # 0和1分别标记片段A和B

    segments = [0] * (len(tokens_a) + 2)
    if tokens_b is not None:
        tokens += tokens_b + ['<sep>']
        segments += [1] * (len(tokens_b) + 1)
    return tokens, segments

两句话tokens_atokens_b

前面加上开始符和分隔符

segments是BERT三个编码token embedding、segment embedding、position embedding的segment embedding,标记是第几句话

BERT编码器

#@save
class BERTEncoder(nn.Module):
    """BERT编码器"""
    def __init__(self, vocab_size, num_hiddens, norm_shape, ffn_num_input,
                 ffn_num_hiddens, num_heads, num_layers, dropout,
                 max_len=1000, key_size=768, query_size=768, value_size=768,
                 **kwargs):
        super(BERTEncoder, self).__init__(**kwargs)
        self.token_embedding = nn.Embedding(vocab_size, num_hiddens)
  ​     self.segment_embedding = nn.Embedding(2, num_hiddens)
        self.blks = nn.Sequential()
        for i in range(num_layers):
            self.blks.add_module(f"{
     
     i}", d2l.EncoderBlock(
                key_size,
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值