复现论文ChineseBERT(ONTONOTES数据集)
记录一下自己复现论文《ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information》的过程,最近感觉老在调包,一天下来感觉什么也没干,就直播记录一下跑模型的过程吧
自己电脑环境如下:
- 显卡:3060TI
- CUDA : 11.0
- CUDAToolkit : 8.0.2
- tensorflow : 2.4.0
- pytorch : 1.7.0
首先使用Conda
创建一下项目的虚拟环境
conda create -n ChineseBERT python=3.8 |
进入环境
conda activate ChineseBERT |
用Pycharm
打开项目并切换到刚刚新建的环境
找到requirements.txt
文件,在环境中一个一个安装
安装的时候,发现torch
版本装不到这么低的
然后就装了项目简介中的版本,(发现自己要跑的OntoNotes 4.0
数据集正好也需要装这个版本,nice)
pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html |
然后打开作者的文档OntoNotes NER task,下载对应的数据集
然后新建一个名为ONTONOTES_DATA_PATH
的文件夹,把解压后的文件放进去
找到tasks/OntoNotes/OntoNotes_trainer.py
文件,尝试第一次运行
果不其然会报错,好像是numpy
版本不匹配的问题,搜一下
看了一眼自己装的numpy
版本,果然高一点
然后直接
pip uninstall numpy |
再跑一次!
好消息,刚刚的错误解决了。新的错误好像是路径格式的问题?难道是我刚刚路径那没配好?
又看了一遍文档,好像是我ChineseBERT-base
模型没下,赶紧去下载一下
然后按照文档中说的,也把模型文件都放在CHINESEBERT_PATH
这个文件夹中(我猜的
配置完如下
再跑一次试试!
emmm待我研究一下…又看了眼文档,好像是跑错文件了?
应该是要运行chinesebert_base.sh
文件,再运行之前需要修改两个个参数,把这两个位置的地址换成自己的。(啊我终于理解作者的意思了,不是要新建一个ONTONOTES_DATA_PATH
的文件夹啊,是要把这个地址修改成自己的…)
改到一半的时候发现,好像这其他路径也得该啊,而且这个是在Linux
的环境下运行的,不管了先用git
跑试试,改完路径后结果如下
配置一下Pycharm
,让其可以直接用git
走起!
emmm闪一下就没了,什么情况
在chinesebert_base.sh
脚本最后加入以下代码以便查看运行情况
# 使用read命令达到类似bat中的pause命令效果 |
运行情况如下
啊?没东西输出吗?看了一下路径,好像是Windows
和Linux
的路径不一样,Linux下路径是/
,Win下应该是\\
再跑一次!
啊???(黑人问号.jpg)
试试把.sh文件转成.bat的,搜了一下网上居然还有一键自动转换的网址,太赞了
转换完的.bat
脚本如下
@echo off |
运行一下试试!
太痛了!好像又是路径的问题?检查了一下确实是路径的错误
把上述OUTPUT_DIR
的地址换成下面的
SET "OUTPUT_DIR=..\..\outputs\chinesebert\%TIME%\%FILE_NAME%_%MAX_EPOCH%_%TRAIN_BATCH_SIZE%_%LR%_%WEIGHT_DECAY%_%WARMUP_PROPORTION%_%MAX_LEN%_%DROPOUT%_%ACC_GRAD%_%VAL_CHECK_INTERVAL%" |
再跑亿次!
我再康康…好像那个网站转换的有问题
我用chatGPT转换了一下
@echo off |
重新跑一下!
chatGPT牛逼!看来格式是转换对了,下面就是调包的问题了
看这个错应该是这个pypinyin
包没装,装一下试试
pip install pypinyin |
但是环境里应该有了鸭,难道是跑的时候不在这个环境吗
单独跑了一下这个文件,并没有报错!
感觉我的推理是正确的,查了一下如何在bat
文件中选择环境
%切换到ChineseBert环境% |
将这段代码放在执行Python
文件前面
然后走起!
这???这是跑起来了???有戏有戏
等了一会也没反应,看了下说明,好像说是模型没训练初始化?
又等了一会
难…难道再等等?好像又说CUDA和Pytorch不匹配?(但我之前专门按照官网装的鸭
还说我什么model.example_input_array
或者input_array
属性没设置
首先解决一下CUDA和Pytorch的版本匹配问题,再次检查一下作者提供的Pytorch安装代码,发现和我CUDA版本是不匹配的,看来这个需要自己修改一下,不能无脑复制
我自己的CUDA
于是直接重装吧
先卸载
pip uninstall torch |
再安装
pip3 install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/cu110/torch_stable.html |
在跑一次试试!
跑起来了?!!!!!Ohhhhhhhh
等了一下午,终于跑出了结果了
作者的结果如下
Model | Test Precision | Test Recall | Test F1 |
---|---|---|---|
BERT | 79.69 | 82.09 | 80.87 |
RoBERTa | 80.43 | 80.30 | 80.37 |
ChineseBERT | 80.03 | 83.33 | 81.65 |
不知道为什么test_precision
这一项结果略低一点,其他结果相差不是很大