中文情感分类任务如何对bert语言模型微调,微调后的模型如何使用

要想在中文情感分类任务中完成bert语言模型的微调,需要有bert开源的代码,然后在bert开源数据中下载chinese_L-12_H-768_A-12,最后还要有中文情感数据,数据格式为(类别id\t句子)。如果bert代码和中文情感数据没有,可以在我分享的资源中下载。如果三者都有了按照以下操作即可完成微调,并对微调后的模型进行使用。

run_classifier.py中找到

processors = {
      "cola": ColaProcessor,
      "mnli": MnliProcessor,
      "mrpc": MrpcProcessor,
      "xnli": XnliProcessor,
      "intentdetection":IntentDetectionProcessor,
      "emotion":EmotionProcessor,  #新加上这一行,emotion是在运行时用来调用的方法名,EmotionProcessor是你自己声明的类。
}


然后在该文件中增加一个class,这个类名和你刚刚声明的那个“emotion":EmotionProcessor, 保持一致:

class EmotionProcessor(DataProcessor):
  """Processor for the MRPC data set (GLUE version)."""

  def get_train_examples(self, data_dir):
    """See base class."""
    return self._create_examples(
        self._read_tsv(os.path.join(data_dir, "fine_tuning_train_data.tsv")), "train") #此处的名字和文件夹中的训练集的名字要保持一致

  def get_dev_examples(self, data_dir):
    """See base class."""
    return self._create_examples(
        self._read_tsv(os.path.join(data_dir, "fine_tuning_val_data.tsv")), "dev")

  def get_test_examples(self, data_dir):
    """See base class."""
    return self._create_examples(
        self._read_tsv(os.path.join(data_dir, "fine_tuning_test_data.tsv")), "test")

  def get_labels(self):
    """See base class."""
    return ["0", "1","2","3","4","5","6"] #七分类则从0到6

  def _create_examples(self, lines, set_type):
    """Creates examples for the training and dev sets."""
    examples = []
    for (i, line) in enumerate(lines):
      if i == 0:
        continue
      guid = "%s-%s" % (set_type, i)
      if set_type == "test":
        label = "0"
        text_a = tokenization.convert_to_unicode(line[0])
      else:
        label = tokenization.convert_to_unicode(line[0])
        text_a = tokenization.convert_to_unicode(line[1])
      examples.append(
          InputExample(guid=guid, text_a=text_a, text_b=None, label=label))
    return examples


最后直接调用即可,运行的命令如下:

python run_classifier.py \
  --task_name=emotion \#同第一段代码最后一行
  --do_train=true \
  --do_eval=true \
  --data_dir=data \ #把中文情感数据解压到同一级的文件夹中,此处是该文件夹名字data
  --vocab_file=chinese_L-12_H-768_A-12/vocab.txt \ #中文数据要微调的原始bert模型,这个自行下载,和run_classifier.py放同一级的路径
  --bert_config_file=chinese_L-12_H-768_A-12/bert_config.json \
  --init_checkpoint=chinese_L-12_H-768_A-12/bert_model.ckpt \
  --max_seq_length=128 \
  --train_batch_size=32 \
  --learning_rate=2e-5 \
  --num_train_epochs=3.0 \
  --output_dir=output #生成文件所在的文件夹
(上面的注释自己去掉)


大概9个小时,最后文件夹中会有三个文件 后缀分别为:index / meta / 00000-of-00001,
分别将这个改成bert_model.ckpt.index / bert_model.ckpt.meta / bert_model.ckpt.data-00000-of-00001,再在同一个文件夹中放入chinese_L-12_H-768_A-12中的vocab.txt和bert_config.json 即最后该文件夹中有5个文件。然后像调用chinese_L-12_H-768_A-12一样将文件夹名改成自己的文件夹名即可。
bert-serving-start -model_dir output -num_worfer=3 即可调用微调后的语言通用模型。

你可能感兴趣的:(BERT,情感分析)