【发布时间】:2021-11-09 03:42:22
【问题描述】:
我正在使用 BERT 训练一个二进制文本分类模型,如下所示:
def create_model():
text_input = tf.keras.layers.Input(shape=(), dtype=tf.string, name='text')
preprocessed_text = bert_preprocess(text_input)
outputs = bert_encoder(preprocessed_text)
# Neural network layers
l1 = tf.keras.layers.Dropout(0.1, name="dropout")(outputs['pooled_output'])
l2 = tf.keras.layers.Dense(1, activation='sigmoid', name="output")(l1)
# Use inputs and outputs to construct a final model
model = tf.keras.Model(inputs=[text_input], outputs=[l2])
return model
此代码是从 tfhub 上的示例中借用的:https://tfhub.dev/tensorflow/bert_en_uncased_L-12_H-768_A-12/4。
我想从倒数第二层提取特征嵌入,并将它们用于示例之间的比较、聚类、可视化等。这应该在 dropout 之前(上面模型中的 l1)还是 dropout 之后(上面模型中的 l2)完成?
我想弄清楚这个选择是否会产生重大影响,或者无论哪种方式都可以?例如,如果我在 dropout 后提取特征嵌入并计算两个示例之间的特征相似性,这可能会受到哪些节点被随机设置为 0 的影响(但也许这没关系)。
【问题讨论】:
标签: tensorflow neural-network embedding bert-language-model dropout