按照huggangingface上的说明文档,进行一 一 学习的

dmis-lab/biobert-v1.1 · Hugging Face

BERT (huggingface.co)

BertConfig:

包含BERT模型所有配置参数的类。它定义了模型的大小,例如隐藏层的数量、注意力头的数量等。

BertTokenizer:

负责将文本转换为模型可以理解的token(词或子词单元)的类。

BertTokenizerFast:

BertTokenizer的快速版本,使用Rust来提高tokenization的速度。

TFBertTokenizer:

TensorFlow版本的BERT tokenizer,用于在TensorFlow框架中使用BERT。

Bert specific outputs:

指的是BERT模型执行不同任务时返回的特定输出结构。

BertModel:

BERT模型的核心类,可以输出多种格式的隐藏状态,用于不同的任务。

import torch
from transformers import AutoTokenizer, AutoModel
'''AutoModel.from_pretrained加载的是一个未经修改的BERT模型,其标准输出通常只包含最后一层的隐藏状态'''
'''最后一层的隐藏状态,就是嵌入向量(embedding vector)的进一步处理,这些向量现在不仅包含了每个 token 的信息,还融合了整个句子的上下文信息 '''
tokenizer = AutoTokenizer.from_pretrained("dmis-lab/biobert-v1.1")
model = AutoModel.from_pretrained("dmis-lab/biobert-v1.1")
inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
outputs = model(**inputs)
last_hidden_states = outputs.last_hidden_state
# print(last_hidden_states)
print(last_hidden_states.shape)
'''
last_hidden_states 是一个三维的张量(Tensor),其维度通常是 [batch_size, sequence_length, hidden_size]
batch_size 是输入的句子数量。例子中,因为只有一个句子,所以这个维度是 1。
sequence_length 是分词后句子的长度。这包括特殊的开始和结束 token,比如 [CLS] 和 [SEP]。
hidden_size 是模型中每个隐藏状态的维度。对于 BERT 和 BioBERT 这类模型,这通常是一个较大的数字,如 768。
'''
# 降维,转成二维
max_hidden_state, _ = torch.max(last_hidden_states, dim=1)

# 将 max_hidden_state 转换成一维向量
one_dim_max_hidden_state = max_hidden_state.squeeze()

print(one_dim_max_hidden_state)

  

BertForPreTraining:

一个特别为BERT预训练设计的类,包含了MLM(掩码语言模型)和NSP(下一句预测)的头部,可以直接用于BERT的预训练。

from transformers import AutoTokenizer, BertForPreTraining

tokenizer = AutoTokenizer.from_pretrained("dmis-lab/biobert-v1.1")
model = BertForPreTraining.from_pretrained("dmis-lab/biobert-v1.1")

inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
outputs = model(**inputs)

# seq_relationship_logits 和 prediction_logits 是BERT模型在预训练阶段的关键组成部分
'''
prediction_logits通常是与掩码语言模型(MLM)任务相关的
prediction_logits包含了模型对于每个输入token的所有可能vocab词汇的预测分数
'''
prediction_logits = outputs.prediction_logits
print('prediction_logits',prediction_logits)

'''
seq_relationship_logits是与下一句预测(NSP)任务相关的
NSP任务是BERT模型在预训练阶段的一部分,模型需要预测第二句话是否是第一句话的后续
seq_relationship_logits tensor([[ 0.0281, -0.3480]], grad_fn=<AddmmBackward0>)
第一个logit(例子中是0.0281)代表模型认为第二句话是第一句话的逻辑续句的可能性。
第二个logit(例子中是-0.3480)代表模型认为第二句话与第一句话不相关的可能性。
如果第一个logit经过softmax后的概率大于第二个logit,那么模型预测第二个句子是第一个句子的后续;如果第二个logit的概率大,那么模型预测第二句话与第一句话不相关
在对话系统中判断回答是否与前一个问题相关,或者在文本分类任务中用来理解文本中句子间的逻辑关系
'''
seq_relationship_logits = outputs.seq_relationship_logits
print('seq_relationship_logits',seq_relationship_logits)

  

BertLMHeadModel:

一个包含语言模型头部(通常是线性层)的BERT模型,用于根据上下文生成或预测下一个token。

BertForMaskedLM:

专门用于执行MLM任务的BERT模型,这个模型添加了一个头部,专门用于预测掩码位置的token。

BertForNextSentencePrediction:

用于执行NSP任务的BERT模型,这个模型可以预测第二个句子是否是第一个句子的逻辑后继。

BertForSequenceClassification:

这个类在BERT基础上添加了一个分类头部,用于序列级别的分类任务,例如情感分析。

posted on 2023-12-31 00:40  黑逍逍  阅读(67)  评论(0编辑  收藏  举报