5-transformers 操作篇.pdf

5-transformers 操作篇.pdf_第1页
5-transformers 操作篇.pdf_第2页
5-transformers 操作篇.pdf_第3页
transformers操作篇来自:AiGC面试宝典宁静致远2024年01月28日13:201.如何利用transformers加载Bert模型?可以看到,包括import在内的不到十行代码,我们就实现了读取一个预训练过的BERT模型,来encode我们指定的一个文本,对文本的每一个token生成768维的向量。如果是二分类任务,我们•transformers操作篇•1.如何利用transformers加载Bert模型?•2.如何利用transformers输出Bert指定hidden_state?•3.BERT获取最后一层或每一层网络的向量输出•致谢importtorchfromtransformersimportBertModel,BertTokenizer#这里我们调用bert-base模型,同时模型的词典经过小写处理model_name='bert-base-uncased'#读取模型对应的tokenizertokenizer=BertTokenizer.from_pretrained(model_name)#载入模型model=BertModel.from_pretrained(model_name)#输入文本input_text="Hereissometexttoencode"#通过tokenizer把文本变成token_idinput_ids=tokenizer.encode(input_text,add_special_tokens=True)#input_ids:[101,2182,2003,2070,3793,2000,4372,16044,102]input_ids=torch.tensor([input_ids])#获得BERT模型最后一个隐层结果withtorch.no_grad():last_hidden_states=model(input_ids)[0]#Modelsoutputsarenowtuples"""tensor([[[-0.0549,0.1053,-0.1065,...,-0.3550,0.0686,0.6506],[-0.5759,-0.3650,-0.1383,...,-0.6782,0.2092,-0.1639],[-0.1641,-0.5597,0.0150,...,-0.1603,-0.1346,0.6216],...,[0.2448,0.1254,0.1587,...,-0.2749,-0.1163,0.8809],[0.0481,0.4950,-0.2827,...,-0.6097,-0.1212,0.2527],[0.9046,0.2137,-0.5897,...,0.3040,-0.6172,-0.1950]]])shape:(1,9,768)"""扫码加查看更多接下来就可以把第一个token也就是[CLS]的768维向量,接一个linear层,预测出分类的logits,或者根据标签进行训练。2.如何利用transformers输出Bert指定hidden_state?Bert默认是十二层,但是有时候预训练时并不需要利用全部利用,而只需要预训练前面几层即可,此时该怎么做呢?下载到bert-base-uncased的模型目录里面包含配置文件config.json,该文件中包含output_hidden_states,可以利用该参数来设置编码器内隐藏层层数3.BERT获取最后一层或每一层网络的向量输出{"architectures":["BertForMaskedLM"],"attention_probs_dropout_prob":0.1,"hidden_act":"gelu","hidden_dropout_prob":0.1,"hidden_size":768,"initializer_range":0.02,"intermediate_size":3072,"max_position_embeddings":512,"num_attention_heads":12,"num_hidden_layers":12,"type_vocab_size":2,"vocab_size":30522}•transformer最后一层输出的结果last_hidden_state:shape是(batch_size,sequence_length,hidden_size),hidden_size=768,它是模型最后一层输出的隐藏状态pooler_output:shape是(batch_size,hidden_size),这是序列的第一个token(classificationtoken)的最后一层的隐藏状态,它是由线性层和Tanh激活函数进一步处理的,这个输出不是对输入的语义内容的一个很好的总结,对于整个输入序列的隐藏状态序列的平均化或池化通常更好。hidden_states:这是输出的一个可选项,如果输出,需要指定config.output_hidden_states=True,它也是一个元组,它的第一个元素是embedding,其余元素是各层的输出,每个元素的形状是(batch_size,sequence_length,hidden_size)attentions:这也是输出的一个可选项,如果输出,需要指定config.output_attentions=True,它也是一个元组,它的元素是每一层的注意力权重,用于计算self-attentionheads的加权平均值•获取每一层网络的向量输出##最后一层的所有token向量outputs.last_hidden_state##cls向量知识星球outputs.pooler_output##hidden_states,包括13层,第一层即索引0是输入embedding向量,后面1-12索引是每层的输出向量hidden_states=outputs.hidden_statesembedding_output=hidden_states[0]attention_hidden_states=hidden_states[1:]

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

发表评论取消回复

参与评论可获取积分奖励  
微风舍
实名认证
内容提供者

微风舍,风起于青萍之末,浪成于微澜之间,舍是漏舍,唯吾德馨。

确认删除?
回到顶部