用于情绪分析的 BERT 微调模型高度过拟合

Posted

技术标签:

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

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

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

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

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

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

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

【问题讨论】:

【参考方案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的原因。

以上是关于用于情绪分析的 BERT 微调模型高度过拟合的主要内容,如果未能解决你的问题,请参考以下文章

如何将微调过的 bert 模型的输出作为输入提供给另一个微调过的 bert 模型?

什么是过拟合?如何避免过拟合问题?

5. 过拟合及其避免

通过正则化解决过拟合问题

什么是过拟合,如何避免?

防止神经网络模型过拟合的6种方法及keras代码实现