【NLP基础知识-bert向量化】BERT模型输出pooler_output和last_hidden_state详解和用法
本次修炼方法请往下查看
🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注:微信公众号,发送 pandas 即可获取
🎇 相关内容视频讲解 B站
🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验。
🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100% 。
📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。
下滑查看解决方法
🎯 1. 基本介绍
BERT(Bidirectional Encoder Representations from Transformers)
是一种预训练语言表示模型,由Google在2018年提出。它通过使用Transformer架构的编码器部分,能够捕捉到文本的双向上下文信息。BERT模型在自然语言处理(NLP)领域取得了革命性的进展,为各种下游任务提供了强大的基础。
1.1 BERT的关键特点
双向上下文理解:与传统的单向语言模型不同,BERT能够同时考虑左右两边的上下文。
预训练任务:BERT通过Masked Language Model(MLM)和Next Sentence Prediction(NSP)任务进行预训练。
1.2 BERT模型的输出
pooler_output:
这是通过将最后一层的隐藏状态的第一个token(通常是[CLS] token)通过一个线性层和激活函数得到的输出,常用于分类任务。
last_hidden_state:
这是模型所有层的最后一个隐藏状态的输出,包含了整个序列的上下文信息,适用于序列级别的任务。
💡 2. bert向量化使用方法
2.1 bert模型输出介绍
加载bert模型输出解释如下所示,相关的代码实践如下所示:
import tensorflow as tf
from transformers import BertTokenizer, TFBertModel, BertModel
# 加载BertTokenizer和BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
bert_model = TFBertModel.from_pretrained('bert-base-chinese')
# 定义输入文本
text = '这是一个测试句子'
# 对输入文本进行分词和填充
encoded_input = tokenizer(text, padding=True, uncation=True, return_tensors='tf')
# 获取Bert模型的embedding结果
output = bert_model(encoded_input, output_hidden_states=True, output_attentions=True)
# 输出结果
print(output)
# print(output.get_shape())
其中每个输出部分的解释如下所示:
last_hidden_state:
shape是(batch_size, sequence_length, hidden_size),hidden_size=768,它是模型最后一层输出的隐藏状态,序列标注通常用。pooler_output:
shape是(batch_size, hidden_size),这是序列的第一个token (cls) 的最后一层的隐藏状态,它是由线性层和Tanh激活函数进一步处理的,这个输出不是对输入的语义内容的一个很好的总结,对于整个输入序列的隐藏状态序列的平均化或池化可以更好的表示一句话。通常用来做下游分类任务使用hidden_states:
这是输出的一个可选项,是一个元组,它的第一个元素是embedding,其余元素是12层transformer各层的输出,每个元素的形状是(batch_size, sequence_length, hidden_size),共计13个元素,最后一个元素是last_hidden_state。attentions:
它也是一个元组,含有12个元素,包含每的层注意力权重,用于计算self-attention heads的加权平均值
2.2 输出的具体用法
last_hidden_state
的输出如下所示,其中第一个红色圈就是cls的embedding,最后一个就是seq的embedding,
- 取用cls的embedding可以用:output[0][:,0,:]
- 用来做分类的向量具体操作方法如下所示, output[1],取到的东西是pooler_output
- 通常取到的bert的embdedding向量的方法如下所示, output[0],其中一般在后面接一个池化层将其转为[batch_size, 768]的数据shape:
🔍 3. 注意事项
- 根据任务的需求选择适合的BERT模型版本,例如bert-base-uncased或bert-large-cased。
- 在使用BERT时,注意[CLS]和[SEP]等特殊标记的使用,它们在模型的输入和输出中扮演重要角色。
- BERT模型计算量大,对于大规模数据集或实时应用,可能需要使用GPU加速。