谷歌BERT模型--调试MRPC任务--使用pycharm集成环境

谷歌BERT模型--MRPC调试心得

唐宇迪BERT课程使用Pycharm实现MRPC

1.任务介绍
MPRC(Microsoft Research Paraphrase Corpus)语料库中包含一些句子对,这些句子有些表示相同的意思,有些是不同的意思。本文主要使用BERT模型去做句子对的分类任务。官方代码及数据集可以访问我的码云,下载速度比Github快。
在这里插入图片描述
如上图所示,为BERT用于微调句子对分类任务示意图,输入是两个句子的Embedding(包含词向量token embedding、位置编码position embedding、段编码segment embedding),输出是[CLS]。
2.调试代码
如下图所示为官网的Tendorflow版本要求,我自己用的是Tensorflow1.13。如果自己的Tensorflow是2.0版本及以上,还是建议新建一个Tensorflow1.X的环境,这样可以避免很多由于版本不一致导致的错误。
在这里插入图片描述
本次调试过程中TensorFlow = 1.14.0 ,Python=3.7,按照视频里调试代码(视频课程中使用的是Eclipse),但是会遇到如下错误:
absl.flags._exceptions.IllegalFlagValueError: flag --do_train=true: (‘Non-boolean argument to boolean flag’, ‘true\’)
如何在修改pycharm里的初始化参数呢?具体方法如下:
首先在上图画框位置的下三角中打开参数设置,选择run configure
在该方框里设置参数
(1) 参数设置为: ,–task_name=MRPC
–do_train=true
–do_eval=true
–data_dir=…/GLUE/glue_data/MRPC
–vocab_file=…/GLUE/BERT_BASE_DIR/uncased_L-12_H-768_A-12/vocab.txt
–bert_config_file=…/GLUE/BERT_BASE_DIR/uncased_L-12_H-768_A-12/bert_config.json
–init_checkpoint=…/GLUE/BERT_BASE_DIR/uncased_L-12_H-768_A-12/bert_model.ckpt
–max_seq_length=128
–train_batch_size=2
–learning_rate=2e-5
–num_train_epochs=3.0
–output_dir=…/GLUE/output/;

需要注意的是取消官网脚本文件的斜杠,如果下载官网代码困难,可以移步至我的仓库https://gitee.com/cheng_jinpei/bert,具体的几个文件的路径自己修改。(同时还需要注意的是参数的中英文字符,尤其是这个"-"符号,最好自己检查一下。否则可能会报错:raise _exceptions.IllegalFlagValueError(’%s: %s’ % (message, str(e)))
absl.flags._exceptions.IllegalFlagValueError: flag --data_dir=None: Flag --data_dir must have a value other than None
.)

(2)最终实现效果如下:在这里插入图片描述
3.可能遇到的问题及解决方法
首先非常感谢大家的分享,这里我将可能遇到的问题做一下汇总:

(1)问题1:Windows fatal exception: access violation

中间省略…

Process finished with exit code -1073741819 (0xC0000005)在这里插入图片描述百度里给的解释是 windows致命异常:访问冲突 .
我个人觉得可能是电脑属性设置导致的,可以参考: 链接.
,但是在和网友交流的过程中试了试下面的步骤(实测可以解决)
解决方法:降低tensorflow的版本 和 使用GPU
a.降低Tensorflow的版本
我觉得大家可以重新新建一个tensorflow1.x的环境,然后在pycharm中重新更改一下编译环境即可。毕竟现在好多模型还是使用1.x的版本,具体方法如下:在这里插入图片描述
【注意】需要将图片中的第三步改成pip install tensorflow==1.11.0(因为要选择合适的版本),同时python的版本也需要和自己的对应上
b.使用GPU
根据之前网友的反馈,大多数都是使用CPU训练的,按理说CPU是可以训练BERT模型的,只需要将Batch_size调小,迭代的步数调大即可。报错的原因就是电脑属性导致的。在我们不清楚自己是否使用GPU版本的tensorflow时,可以使用如下代码进行测试:

//测试环境中GPU是否可用
import tensorflow as tf
if __name__ == "__main__":
    print(tf.test.is_gpu_available())

同时还要保证自己的CUDA Toolkit 和 cuDNN 与 Tensorflow的版本对应上。官方版本说明.
测试cuda是否可以使用,需要在命令行下执行下列指令:
在这里插入图片描述
c.确认上述环境及cuda等好使之后,直接pycharm配置一下新的环境即可
在这里插入图片描述
在这里插入图片描述
选择Add即可,然后选择刚才新建的tensorflow1.x的环境
在这里插入图片描述
(2)问题2:–data_dir must have a value other than None
在这里插入图片描述
在这里插入图片描述

数据的路径不对,一般建议数据和代码放在同一个位置,个人建议使用绝对路径,这样不会出错。
(3)问题3: has no attribute ‘xxx’
在这里插入图片描述
这类问题的解决思路无非就是导入相应的包即可,其实我们遇到这类问题绝大多数原因是Tensorflow 2.x的版本删除了1.x版本里的某些属性,只需要更改一下版本即可,当然也可以使用兼容包tf.compat.v1。
(4)问题4:中英文符号的问题
raise _exceptions.IllegalFlagValueError(’%s: %s’ % (message, str(e)))
absl.flags._exceptions.IllegalFlagValueError: flag --data_dir=None: Flag --data_dir must have a value other than None.

在这里插入图片描述

这种情况检查一下路径那块的英文字符,报错的原因是路径那块软件没正确读入
(5)同文档下的自建库文件下面有波浪号 ,此时会报错: No module named “XXX”
在这里插入图片描述
解决方法可以参考我的另一篇博客: Tensorflow2.0使用心得.如果这个工程文件里没有__init__文件,自己新建一个,然后source root设置源文件即可,如果已经存在,直接source root。

  • 18
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 52
    评论
BERT(Bidirectional Encoder Representations from Transformers)是一种预训练的语言模型,它可以用于各种自然语言处理任务,例如文本分类、命名实体识别、问答等等。bert-base-chinese是针对中文语言的BERT预训练模型使用bert-base-chinese模型,可以按照以下步骤进行: 1. 安装相应的Python库,例如transformers库,可以使用pip install transformers进行安装。 2. 加载bert-base-chinese模型,可以使用transformers库中的BertModel类和BertTokenizer类。BertTokenizer类可以将输入文本转换为模型输入的格式,BertModel类则是BERT模型的实现。 3. 对文本进行预处理,包括分词、截断、填充等操作,将文本转换为模型输入的格式。 4. 调用BertModel类进行预测,得到模型的输出结果。 以下是一个使用bert-base-chinese模型进行文本分类的示例代码: ```python from transformers import BertTokenizer, BertModel import torch # 加载bert-base-chinese模型和tokenizer tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') model = BertModel.from_pretrained('bert-base-chinese') # 输入文本 text = "这是一段测试文本" # 对文本进行预处理 inputs = tokenizer(text, return_tensors='pt') input_ids = inputs['input_ids'] attention_mask = inputs['attention_mask'] # 调用BertModel类进行预测 outputs = model(input_ids, attention_mask=attention_mask) ``` 在以上示例代码中,我们首先加载了bert-base-chinese模型和tokenizer,然后将文本转换为模型输入的格式,最后调用BertModel类进行预测。在预测过程中,我们可以得到模型的输出结果outputs,可以使用这些输出结果进行各种自然语言处理任务
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值