【问题标题】:BERT fine tuned model for sentiment analysis highly over-fitting用于情绪分析的 BERT 微调模型高度过拟合
【发布时间】:2021-09-15 13:18:24
【问题描述】:

我正在尝试微调 BERT 预训练模型。我正在使用来自tensorflow_datasetsyelp_polarity_reviews 数据。我已经确定:

  1. 将预训练的 BERT 模型加载为KerasLayer tensorflow_hub
  2. 使用相同的tokenizervocab_filedo_lower_case 用于训练原始模型。
  3. 将数据集转换为tf.data.Dataset 对象并应用maptf.py_function 中包装我的python 函数的函数。
  4. 我还按照 BERT 的要求提供输入,即input_word_idsinput_maskinput_type_ids 在一个数组中。

在确保上述所有内容都正确实施后,训练模型时过度拟合严重。训练准确率高达约 99%,而验证准确率几乎不超过 50%。

我尝试了不同的optimizerserror functionslearning rates,甚至尝试了高低dropouts,我也尝试过改变火车数据的大小,但毕竟结果是没有更好的。

Here 是显示已执行代码的 colab 笔记本。

任何建议和帮助将不胜感激。

【问题讨论】:

    标签: python tensorflow bert-language-model


    【解决方案1】:

    我检查了您的 colab 代码,经过一些跟踪,验证集似乎存在问题。这当然是对的。错误是在测试数据集中加载了火车标签。

    elp_test, _ = train_test_split(list(zip(yelp['test']['text'].numpy(),
                                    yelp['test']['label'].numpy())), # < correction
                                    train_size=0.025, 
                                    random_state=36)
    

    现在,如果你运行模型,你会得到

    history = model.fit(data_train, 
                        validation_data=data_valid, 
                        epochs=1,
                        batch_size=256, 
                        verbose=2)
    915ms/step - loss: 0.3309 - binary_accuracy: 0.8473 - 
                 val_loss: 0.1722 - val_binary_accuracy: 0.9354
    

    【讨论】:

    • 谢谢,不仔细检查我觉得自己很笨。我改变了很多东西,但实际问题只是一个轻微的错字:(
    • 它发生了。你确实提到并尝试了很多东西,这么小的东西被跳过是正常的。我先把validation set for training和training set放到validation里,结果training score在50左右,这就是我怀疑validation set的原因。
    猜你喜欢
    • 2021-09-06
    • 2021-04-29
    • 2023-03-16
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 2020-06-03
    • 2021-11-19
    • 2021-07-22
    相关资源
    最近更新 更多