bert模型

BERT官方Github地址:https://github.com/google-research/bert ,其中对BERT模型进行了详细的介绍,更详细的可以查阅原文献:https://arxiv.org/abs/1810.04805 。

BERT本质上是一个两段式的NLP模型。第一个阶段叫做:Pre-training,跟WordEmbedding类似,利用现有无标记的语料训练一个语言模型。第二个阶段叫做:Fine-tuning,利用预训练好的语言模型,完成具体的NLP下游任务。

Google已经投入了大规模的语料和昂贵的机器帮我们完成了Pre-training过程,这里介绍一下不那么expensive的fine-tuning过程。

回到Github中的代码,只有run_classifier.py和run_squad.py是用来做fine-tuning 的,其他的可以暂时先不管。这里使用run_classifier.py进行句子分类任务。

代码解析:

从主函数开始,可以发现它指定了必须的参数:

if __name__ == "__main__":
  flags.mark_flag_as_required("data_dir")
  flags.mark_flag_as_required("task_name")
  flags.mark_flag_as_required("vocab_file")
  flags.mark_flag_as_required("bert_config_file")
  flags.mark_flag_as_required("output_dir")
  tf.app.run()

从这些参数出发,可以对run_classifier.py进行探索:

data_dir:指的是我们输入数据的文件夹目录。

task_name:是用来选择processor的。

processors = {
      "cola": ColaProcessor,
      "mnli": MnliProcessor,
      "mrpc": MrpcProcessor,
      "xnli": XnliProcessor,
  }
  processors = {
        "ner": NerProcessor
    }

继续查看,以ner为例,可以发现这个processor就是用来对data_dir中输入的数据进行预处理的。

class NerProcessor(DataProcessor):
    def get_train_examples(self, data_dir):
        return self._create_example(
            self._read_data(os.path.join(data_dir, "train.txt")), "train"
        )

    def get_dev_examples(self, data_dir):
        return self._create_example(
            self._read_data(os.path.join(data_dir, "dev.txt")), "dev"
        )

    def get_test_examples(self, data_dir):
        return self._create_example(
            self._read_data(os.path.join(data_dir, "test.txt")), "test")

    def get_labels(self):
        return ["O", "B-PER", "I-PER", "B-ORG", "I-ORG", "B-LOC", "I-LOC", "X", "[CLS]", "[SEP]"]

 

另外,label在get_labels()设定,如果是二分类,则将label设定为[“0”,”1”],同时_create_examples()中,给定了如何获取guid以及如何给text_a, text_b和label赋值。

主要修改的是:

  • get_labels()中设置4分类的标签[‘0’, ‘B-PER’, ‘I-PER’,’ B-ORG’]
  • _create_examples()中提取文本赋给text_a和label,并做一个判断,当文件名是test.tsv时,只赋给text_a,label直接给0
  • guid则为自动生成

对于这个fine-tuning过程,我们要做的只是:

 

  • 准备好一个8G显存左右的GPU,没有也不用担心,可以使用谷歌免费的GPU

  • 准备好train.txt, dev.txt以及test.txt

  • 新建一个跟自己task_name对应的processor,用于将train.txt, dev.txt以及test.txt中的数据提取出来赋给text_a, text_b, label

  • bert模型_第1张图片

下载好Pre-training模型,将do_train设置为true,先训练好自己的模型。完成之后,将do_predict设置为truej进行预测。

这里主要讲使用,原理细节还需仔细探索。。。

 

你可能感兴趣的:(深度学习)