首页 > 解决方案 > 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 的准确率太低了。

标签: tensorflowbert-toolkit

解决方案


推荐阅读