用于情绪分析的 BERT 微调模型高度过拟合
Posted
技术标签:
【中文标题】用于情绪分析的 BERT 微调模型高度过拟合【英文标题】:BERT fine tuned model for sentiment analysis highly over-fitting 【发布时间】:2021-09-15 13:18:24 【问题描述】:我正在尝试微调 BERT 预训练模型。我正在使用来自tensorflow_datasets
的yelp_polarity_reviews
数据。我已经确定:
-
将预训练的 BERT 模型加载为
KerasLayer
tensorflow_hub
。
使用相同的tokenizer
、vocab_file
和do_lower_case
用于训练原始模型。
将数据集转换为tf.data.Dataset
对象并应用map
在tf.py_function
中包装我的python 函数的函数。
我还按照 BERT 的要求提供输入,即input_word_ids
,
input_mask
和 input_type_ids
在一个数组中。
在确保上述所有内容都正确实施后,训练模型时过度拟合严重。训练准确率高达约 99%,而验证准确率几乎不超过 50%。
我尝试了不同的optimizers
、error functions
、learning 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 微调模型高度过拟合的主要内容,如果未能解决你的问题,请参考以下文章