bert使用

1. transformer资料

transformers(以前称为pytorch-transformers和pytorch-pretrained-bert)

提供用于自然语言理解(NLU)和自然语言生成(NLG)的BERT家族通用结构(BERT,GPT-2,RoBERTa,XLM,DistilBert,XLNet等),包含超过32种、涵盖100多种语言的预训练模型

2.使用

import numpy as np
import torch 

下载transformers包

!pip install transformers

下载分词器和模型

from transformers import BertTokenizer,BertModel

model_name = 'hfl/chinese-bert-wwm'

导入分词器

 导入配置文件

tokenizer = BertTokenizer.from_pretrained(model_name)
model_config = BertConfig.from_pretrained(model_name)
model_config.output_hidden_states = True
model_config.output_attentions = True
bert_model = BertModel.from_pretrained(model_name, config = model_config)

 输入文本

input_text = "我爱伟大的祖国"

    input_ids:是单词在词典中的编码

    token_type_ids:区分两个句子的编码(上句全为0,下句全为1)

    attention_mask:指定 对哪些词 进行self-Attention操作

input_text='我们'
inputs = tokenizer(input_text,padding='max_length',max_length=50,return_tensors="pt")
print(inputs)
outputs = bert_model(**inputs)
print(len(outputs))
print(outputs.keys()
print(outputs['last_hidden_state'].shape)
print(outputs['pooler_output'].shape)
print(outputs['last_hidden_state'].shape)
print(len(outputs['hidden_states']))
print(len(outputs['attentions']))
padding
  • True'longest':填充到批次中最长的序列(如果仅提供单个序列,则不填充)。

  • 'max_length':填充到参数指定的最大长度,max_length或者如果未提供该参数,则填充到模型的最大可接受输入长度。

  • False'do_not_pad'(默认):无填充(即,可以输出具有不同长度序列的批次)

将input_id转化回token

tokenizer.convert_ids_to_tokens(inputs['input_ids'])

Bert最终输出的结果维度为:last_hidden_state, pooled_output, hidden_states, attentions

以输入序列为19为例:

   last_hidden_state:torch.Size([1, 19, 768])#(batchsize,sequence_length,hidden_state)通常用于命名实体识别

    pooled_output:torch.Size([1, 768])#通常用于句子分类
   

    (hidden_states):tuple, 13 * torch.Size([1, 19, 768])
        隐藏层状态(包括Embedding层),取决于 model_config 中的 output_hidden_states

    (attentions):tuple, 12 * torch.Size([1, 12, 19, 19])#每一层的注意力权重,用于计算self_attention heads的加权平均值
        注意力层,取决于 model_config 中的 output_attentions

2. 遮蔽语言模型 Masked Language Model

BERT以训练遮蔽语言模型(Masked Language Model)作为预训练目标。

    具体来说就是把 输入的语句中的字词 随机用 [MASK] 标签覆盖,然后 训练模型 结合被覆盖的词的 左侧 和 右侧上下文进行预测。

    可以看出,BERT 的做法 与 从左向右语言模型只通过左侧语句预测下一个词的做法相比,遮蔽语言模型 能够生成同时融合了左、右上下文的语言表示。

    这种做法能够使 BERT 学到字词更完整的语义表示。

你可能感兴趣的:(bert,人工智能,深度学习)