0

この優れたチュートリアルを実行しました: https://towardsdatascience.com/building-a-multi-label-text-classifier-using-bert-and-tensorflow-f188e0ecdc5d

モデルが作成されている場所を除いて、ほとんど理解できました。それを知り、TF2 bertに移行したいと思います。

  1. 彼が「基本的に、事前トレーニング済みのモデルをロードしてから、分類タスクのために最後のレイヤーをトレーニングします」と言うとき、彼は他のすべてのレイヤーを凍結し、最後のレイヤーを微調整しているということですか? これは、私が理解できない関連コード (TF1 内) です。
def create_model(bert_config, is_training, input_ids, input_mask, segment_ids,
             labels, num_labels, use_one_hot_embeddings):
"""Creates a classification model."""
model = modeling.BertModel(
    config=bert_config,
    is_training=is_training,
    input_ids=input_ids,
    input_mask=input_mask,
    token_type_ids=segment_ids,
    use_one_hot_embeddings=use_one_hot_embeddings)

output_layer = model.get_pooled_output()

hidden_size = output_layer.shape[-1].value

output_weights = tf.get_variable(
    "output_weights", [num_labels, hidden_size],
    initializer=tf.truncated_normal_initializer(stddev=0.02))

output_bias = tf.get_variable(
    "output_bias", [num_labels], initializer=tf.zeros_initializer())

with tf.variable_scope("loss"):
    if is_training:
        # I.e., 0.1 dropout
        output_layer = tf.nn.dropout(output_layer, keep_prob=0.9)

    logits = tf.matmul(output_layer, output_weights, transpose_b=True)
    logits = tf.nn.bias_add(logits, output_bias)
    
    # probabilities = tf.nn.softmax(logits, axis=-1) ### multiclass case
    probabilities = tf.nn.sigmoid(logits)#### multi-label case
    
    labels = tf.cast(labels, tf.float32)
    tf.logging.info("num_labels:{};logits:{};labels:{}".format(num_labels, logits, labels))
    per_example_loss = tf.nn.sigmoid_cross_entropy_with_logits(labels=labels, logits=logits)
    loss = tf.reduce_mean(per_example_loss)

    return (loss, per_example_loss, logits, probabilities)
  1. BERT の TF2 微調整チュートリアルを実行しましたが、どうすれば同じことを達成できますか? ステップ 1 が不要な他のモデルをトレーニングできます。
4

1 に答える 1

0

公式のバートの例を使用してください: https://www.tensorflow.org/tutorials/text/classify_text_with_bert

于 2021-02-18T06:09:05.490 に答える