BERT在中文数据集上的fine tune全攻略.doc
《BERT在中文数据集上的fine tune全攻略.doc》由会员分享,可在线阅读,更多相关《BERT在中文数据集上的fine tune全攻略.doc(5页珍藏版)》请在三一文库上搜索。
1、BERT在中文数据集上的fine tune全攻略从11月初开始,Google Research就陆续开源了BERT的各个版本。Google此次开源的BERT是通过TensorFlow高级API tf.estimator进行封装(wrapper)的。因此对于不同数据集的适配,只需要修改代码中的processor部分,就能进行代码的训练、交叉验证和测试。奇点机智技术团队将结合利用BERT在AI-Challenger机器阅读理解赛道的实践表现以及多年的NLP经验积累,为大家奉上BERT在中文数据集上的fine tune全攻略。在自己的数据集上运行 BERTBERT的代码同论文里描述的一致,主要分为两
2、个部分。一个是训练语言模型(language model)的预训练(pretrain)部分。另一个是训练具体任务(task)的fine-tune部分。在开源的代码中,预训练的入口是在run_pretraining.py而fine-tune的入口针对不同的任务分别在run_classifier.py和run_squad.py。其中run_classifier.py适用的任务为分类任务。如CoLA、MRPC、MultiNLI这些数据集。而run_squad.py适用的是阅读理解(MRC)任务,如squad2.0和squad1.1。预训练是BERT很重要的一个部分,与此同时,预训练需要巨大的运算资源
3、。按照论文里描述的参数,其Base的设定在消费级的显卡Titan x 或Titan 1080ti(12GB RAM)上,甚至需要近几个月的时间进行预训练,同时还会面临显存不足的问题。不过所幸的是谷歌满足了Issues#2(https:/github/google-research/bert/issues/2)里各国开发者的请求,针对大部分语言都公布了BERT的预训练模型。因此在我们可以比较方便地在自己的数据集上进行fine-tune。下载预训练模型对于中文而言,google公布了一个参数较小的BERT预训练模型。具体参数数值如下所示:Chinese Simplified and Traditi
4、onal, 12-layer, 768-hidden, 12-heads, 110M parameters模型的下载链接:(https:/storage.googleapis/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip)对下载的压缩文件进行解压,可以看到文件里有五个文件,其中bert_model.ckpt开头的文件是负责模型变量载入的,而vocab.txt是训练时中文文本采用的字典,最后bert_config.json是BERT在训练时,可选调整的一些参数。修改 processor任何模型的训练、预测都是需要有一个明确的输入,而BERT
5、代码中processor就是负责对模型的输入进行处理。我们以分类任务的为例,介绍如何修改processor来运行自己数据集上的fine-tune。在run_classsifier.py文件中我们可以看到,google对于一些公开数据集已经写了一些processor,如XnliProcessor,MnliProcessor,MrpcProcessor和ColaProcessor。这给我们提供了一个很好的示例,指导我们如何针对自己的数据集来写processor。对于一个需要执行训练、交叉验证和测试完整过程的模型而言,自定义的processor里需要继承DataProcessor,并重载获取labe
6、l的get_labels和获取单个输入的get_train_examples,get_dev_examples和get_test_examples函数。其分别会在main函数的FLAGS.do_train、FLAGS.do_eval和FLAGS.do_predict阶段被调用。这三个函数的内容是相差无几的,区别只在于需要指定各自读入文件的地址。以get_train_examples为例,函数需要返回一个由InputExample类组成的list。InputExample类是一个很简单的类,只有初始化函数,需要传入的参数中guid是用来区分每个example的,可以按照train-%d%(i)的
7、方式进行定义。text_a是一串字符串,text_b则是另一串字符串。在进行后续输入处理后(BERT代码中已包含,不需要自己完成) text_a和text_b将组合成CLS text_a SEP text_b SEP的形式传入模型。最后一个参数label也是字符串的形式,label的内容需要保证出现在get_labels函数返回的list里。举一个例子,假设我们想要处理一个能够判断句子相似度的模型,现在在data_dir的路径下有一个名为train.csv的输入文件,如果我们现在输入文件的格式如下csv形式:1,你好,您好0,你好,你家住哪那么我们可以写一个如下的get_train_examp
8、les的函数。当然对于csv的处理,可以使用诸如csv.reader的形式进行读入。defget_train_examples(self,data_dir):file_path=os.path.join(data_dir,train.csv)withopen(file_path,r)asf:reader=f.readlines()examples=forindex,lineinenumerate(reader):guid=train-%d%indexsplit_line=line.strip().split(,)text_a=tokenization.convert_to_unicode(sp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BERT在中文数据集上的fine tune全攻略 BERT 中文 数据 fine tune 攻略
链接地址:https://www.31doc.com/p-3249987.html