构建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
= ]
我正在浏览 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
= ]