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]

 

其實,明白這些之后就可以做一些特征組合進行操作了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM