tensorflow - BERT微调模型上多类分类准确率低
问题描述
我有一个中国产品数据集,其中包含大约五万个项目和 1240 个类。并且我使用了三万五千个项目来微调 BERT-BASE,中文。但是我在数据集上的准确度非常低(准确度 0.4%,global_step = 32728)。我不知道我哪里错了。你可以帮帮我吗?
我修改了DataProcessor
,并创建了数据处理器,
class CustProcessor(DataProcessor):
def get_train_examples(self, data_dir):
return self._create_examples(
self._read_tsv(os.path.join(data_dir, "train.tsv")), "train")
def get_dev_examples(self, data_dir):
return self._create_examples(
self._read_tsv(os.path.join(data_dir, "dev.tsv")), "dev")
def get_test_examples(self, data_dir):
return self._create_examples(
self._read_tsv(os.path.join(data_dir, "test.tsv")), "test")
def get_labels(self):
# 这里返回的为具体的你的分类的类别
return ['图书杂志--工业技术--一般工业技术', ...]
我使用下面的这些超参数来训练模型。
export DATA_DIR=data
export BERT_BASE_DIR=vocab_file/chinese
python3 run_classifier.py --task_name=CUST
--do_train=true
--do_eval=true
--data_dir=$DATA_DIR/
--vocab_file=$BERT_BASE_DIR/vocab.txt
--bert_config_file=$BERT_BASE_DIR/bert_config.json
--init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt
--max_seq_length=128
--train_batch_size=32
--learning_rate=2e-5
--num_train_epochs=3.0
--output_dir=output/
这是bert配置文件,我需要更改它们吗?
{
"attention_probs_dropout_prob": 0.1,
"directionality": "bidi",
"hidden_act": "gelu",
"hidden_dropout_prob": 0.1,
"hidden_size": 768,
"initializer_range": 0.02,
"intermediate_size": 3072,
"max_position_embeddings": 512,
"num_attention_heads": 12,
"num_hidden_layers": 12,
"pooler_fc_size": 768,
"pooler_num_attention_heads": 12,
"pooler_num_fc_layers": 3,
"pooler_size_per_head": 128,
"pooler_type": "first_token_transform",
"type_vocab_size": 2,
"vocab_size": 21128
}
当我使用其他模型时,比如 SVM。它们的准确率约为 85%。但是 BERT 的准确率太低了。
解决方案
推荐阅读
- jquery - 通过使用 jQuery $.ajax 从 JSONBin.io 加载数据
- reactjs - ReactJS中根据屏幕大小占用内容空间
- apache-spark - 如何使用加盐技术连接具有倾斜数据的数据帧
- java - 在 Android webview 中更新图像需要更多时间(4-5 分钟)
- flutter - Flutter:左对齐扩展的小部件
- react-native - React Native Web 中的 Expo 深度链接
- c# - 如何在 Web API 中执行返回数据透视表的存储过程
- discord.py - 如何在 discord.py 中创建 Ticket 命令?
- pandas - 如何使用 dask libray 将镶木地板表(pyarrow)附加到现有的输出镶木地板文件?
- laravel - 如果列具有特定值,laravel 隐藏所有关系的结果