BERT模型内部结构解析

BERT强大的特征抽取能力在各方面的应用如火如荼的展开,今日准备要对BERT输出的特征进行组合,以期能具有更好地变现,现在对model对象做详细的分析。

直观上,我们能够利用bert的信息有:1)pool out [CLS];2)encoder layer;3)hidden state first output

我们加载bert的过程如下:

model = modeling.BertModel(config=bert_config,
                           is_training=self.__is_training,
                           input_ids=self.input_ids,
                           input_mask=self.input_masks,
                           token_type_ids=self.segment_ids,
                           use_one_hot_embeddings=False)

无论你是通过什么方法得到的,这个model对象就是我们要解析的,通过debug我们得知,它有如下成员:

 

 讲一下个人的理解,请批评指正:

all_encoder_layers: 经过transformer_model函数返回每个block的结果,即对应bert的12个Transformer层,均是原始高维数据。如果要分析不同层抽取何种特征,可以分析这个得出一些结论

embedding_table: vocab表,用于构建字符embedding向量

embedding_output: embedding结果

sequence_output: 是bert最后一层的输出,需要验证一下all_encoder_layers最后一层的输出有何区别

   维度为[Batch_szie, seq_length, hidden_size],这和一开始词向量的维度是一样的,只不过这个结果是经过Transformer Encoded提取特征之后的,包含重要的信息,也是bert想得到的结果

pooled_output: 一般分类任务需要的特征,pooled_output是取sequence_output的第一个切片然后线性投影获得,这个位置就是[CLS]

 

其实,明白这些之后就可以做一些特征组合进行操作了

 

posted @   今夜无风  阅读(5154)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示