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]
其實,明白這些之后就可以做一些特征組合進行操作了