构建NLP模型的输出层(就是"embedding"层)

Building the output layer of NLP model (is the "embedding" layer)

我正在浏览 Kaggle 中的一些笔记本,只是为了更深入地了解 NLP 的工作原理。我遇到了一个用于预测给定前提和假设之间关系的自然语言推理任务的笔记本。它为此任务使用预训练的 BERT 模型

我对 build_model() 函数有疑问:

max_len = 50

def build_model():
   bert_encoder = TFBertModel.from_pretrained("bert-base-multilingual-cased")
   input_word_ids = tf.keras.Input(shape=(max_len,), dtype=tf.int32, name="input_word_ids")
   input_mask = tf.keras.Input(shape=(max_len,), dtype=tf.int32, name="input_mask")
   input_type_ids = tf.keras.Input(shape=(max_len,), dtype=tf.int32, name="input_type_ids")
   
   embedding = bert_encoder([input_word_ids, input_mask, input_type_ids])[0] # confused about this line
   output = tf.keras.layers.Dense(3, activation='softmax')(embedding[:,0,:])
   
   model = tf.keras.Model(inputs=[input_word_ids, input_mask, input_type_ids], outputs=output)
   model.compile(tf.keras.optimizers.Adam(lr=1e-5), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
   
   return model 

我对这一行感到困惑:embedding = bert_encoder([input_word_ids, input_mask, input_type_ids])[0]

这个“嵌入”代表什么,为什么函数调用前面有一个[0]?为什么要用bert_encoder实例化这个“嵌入”?

提前致谢!

logits

您必须输入 [0] 才能让 torch.Tensor 进行计算。 您也可以尝试 output.logits 而不是 output[0]

ps。我用的是AutoModelForMaskedLM,不是TFBertModel。可能有点不同,但先尝试打印出你的 embedding = ]