bert pytorch 序列标注_手把手教你用Pytorch-Transformers——部分源码解读及相关说明(一)...

本文详细介绍了 PyTorch-Transformers 库中的 Bert 模型,包括 BertConfig、BertModel、BertPooler、BertForSequenceClassification 和 BertForTokenClassification 的工作原理和关键代码。BertModel 包含 embeddings、encoder 和 pooler,用于处理输入序列。BertPooler 通过第一个 token 表征整个句子。BertForSequenceClassification 和 BertForTokenClassification 分别用于文本分类和序列标注任务。文章还涵盖了基本的 tokenization 过程,如 BasicTokenizer、WordpieceTokenizer 和 BertTokenizer 的使用方法。
摘要由CSDN通过智能技术生成

简介

Transformers是一个用于自然语言处理(NLP)的Python第三方库,实现Bert、GPT-2和XLNET等比较新的模型,支持TensorFlow和PyTorch。本文介对这个库进行部分代码解读,目前文章只针对Bert,其他模型看心情。

手把手教你用PyTorch-Transformers是我记录和分享自己使用 Transformers 的经验和想法,因为个人时间原因不能面面俱到,有时间再填

本文是《手把手教你用Pytorch-Transformers》的第一篇,主要对一些源码进行讲解

目前只对 Bert 相关的代码和原理进行说明,GPT2 和 XLNET 应该是没空写了

Model相关

BertConfig

BertConfig 是一个配置类,存放了 BertModel 的配置。比如:

vocab_size_or_config_json_file:字典大小,默认30522

hidden_size:Encoder 和 Pooler 层的大小,默认768

num_hidden_layers:Encoder 的隐藏层数,默认12

num_attention_heads:每个 Encoder 中 attention 层的 head 数,默认12

BertModel

实现了基本的Bert模型,从构造函数可以看到用到了embeddings,encoder和pooler。

下面是允许输入到模型中的参数,模型至少需要有1个输入: input_ids 或 input_embeds。

input_ids 就是一连串 token 在字典中的对应id。形状为 (batch_size, sequence_length)。

token_type_ids 可选。就是 token 对应的句子id,值为0或1(0表示对应的token属于第一句,1表示属于第二句)。形状为(batch_size, sequence_length)。

Bert 的输入需要用 [CLS] 和 [SEP] 进行标记,开头用 [CLS],句子结尾用 [SEP]

两个句子:

tokens:[CLS] is this jack ##son ##ville ? [SEP] no it is not . [SEP]

token_type_ids:0   0  0    0    0     0       0   0   1  1  1  1   1   1

一个句子:

tokens:[CLS] the dog is hairy . [SEP]

token_type_ids:0   0   0   0  0     0   0

attention_mask 可选。各元素的值为 0 或 1 ,避免在 padding 的 token 上计算 attention(1不进行masked,0则masked)。形状为(batch_size, sequence_length)。

position_ids 可选。表示 token 在句子中的位置id。形状为(batch_size, sequence_length)。形状为(batch_size, sequence_length)。

head_mask 可选。各元素的值为 0 或 1 ,1 表示 head 有效,0无效。形状为(num_heads,)或(num_layers, num_heads)。

input_embeds 可选。替代 input_ids,我们可以直接输入 Embedding 后的 Tensor。形状为(batch_size, sequence_length, embedding_dim)。

encoder_hidden_states 可选。encoder 最后一层输出的隐藏状态序列,模型配置为 decoder 时使用。形状为(batch_size, sequence_length, hidden_size)。

encoder_attention_mask 可选。避免在 padding 的 token 上计算 attention,模型配置为 decoder 时使用。形状为(batch_size, sequence_length)。

encoder_hidden_states 和 encoder_attention_mask 可以结合论文中的Figure 1理解,左边为 encoder,右边为 decoder。

如果要作为 decoder ,模型需要通过 BertConfig 设置 is_decoder 为 True

def __init__(self, config):

super(BertModel, self).__init__(config)

self.config=config

self.embeddings=BertEmbeddings(config)

self.encoder=BertEncoder(config)

self.pooler=BertPooler(config)

self.init_weights()def forward(self, input_ids=None, attention_mask=None, token_type_ids=None, position_ids=None,

head_mask=None, inputs_embeds=None, encoder_hidden_states=None, encoder_attention_mask=None):

...

BertPooler

在Bert中,pool的作用是,输出的时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值