复现论文ChineseBERT(ONTONOTES数据集)

news2025/2/21 4:14:51

记录一下自己复现论文《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
pip install numpy==1.23.4

再跑一次!

在这里插入图片描述

好消息,刚刚的错误解决了。新的错误好像是路径格式的问题?难道是我刚刚路径那没配好?

又看了一遍文档,好像是我ChineseBERT-base模型没下,赶紧去下载一下

然后按照文档中说的,也把模型文件都放在CHINESEBERT_PATH这个文件夹中(我猜的

在这里插入图片描述

配置完如下

在这里插入图片描述

再跑一次试试!

在这里插入图片描述

emmm待我研究一下…又看了眼文档,好像是跑错文件了?

应该是要运行chinesebert_base.sh文件,再运行之前需要修改两个个参数,把这两个位置的地址换成自己的。(啊我终于理解作者的意思了,不是要新建一个ONTONOTES_DATA_PATH的文件夹啊,是要把这个地址修改成自己的…)

在这里插入图片描述

改到一半的时候发现,好像这其他路径也得该啊,而且这个是在Linux的环境下运行的,不管了先用git跑试试,改完路径后结果如下

在这里插入图片描述

配置一下Pycharm,让其可以直接用git

在这里插入图片描述

走起!

在这里插入图片描述

emmm闪一下就没了,什么情况

chinesebert_base.sh脚本最后加入以下代码以便查看运行情况

#  使用read命令达到类似bat中的pause命令效果
echo 按任意键继续
read -n 1
echo 继续运行

运行情况如下

在这里插入图片描述

啊?没东西输出吗?看了一下路径,好像是WindowsLinux的路径不一样,Linux下路径是/,Win下应该是\\

再跑一次!

在这里插入图片描述

啊???(黑人问号.jpg)

试试把.sh文件转成.bat的,搜了一下网上居然还有一键自动转换的网址,太赞了

转换完的.bat脚本如下

@echo off

SET "TIME=0711"
SET "FILE_NAME=ontonotes_glyce_base"
SET "REPO_PATH=D:\code\ChineseBert"
SET "BERT_PATH=..\..\CHINESEBERT_PATH"
SET "DATA_DIR=..\..\ONTONOTES_DATA_PATH"
SET "SAVE_TOPK=20"
SET "TRAIN_BATCH_SIZE=26"
SET "LR=3e-5"
SET "WEIGHT_DECAY=0.001"
SET "WARMUP_PROPORTION=0.1"
SET "MAX_LEN=275"
SET "MAX_EPOCH=5"
SET "DROPOUT=0.2"
SET "ACC_GRAD=1"
SET "VAL_CHECK_INTERVAL=0.25"
SET "OPTIMIZER=torch.adam"
SET "CLASSIFIER=multi"

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%"
mkdir "-p" "%OUTPUT_DIR%"
export "PYTHONPATH="%PYTHONPATH%:%REPO_PATH%""

python3 "%REPO_PATH%\\tasks\\OntoNotes\\OntoNotes_trainer.py" 
    "--lr" "%LR%" 
    "--max_epochs" "%MAX_EPOCH%" 
    "--max_length" "%MAX_LEN%" 
    "--weight_decay" "%WEIGHT_DECAY%" 
    "--hidden_dropout_prob" "%DROPOUT%" 
    "--warmup_proportion" "%WARMUP_PROPORTION%" 
    "--train_batch_size" "%TRAIN_BATCH_SIZE%" 
    "--accumulate_grad_batches" "%ACC_GRAD%" 
    "--save_topk" "%SAVE_TOPK%" 
    "--bert_path" "%BERT_PATH%" 
    "--data_dir" "%DATA_DIR%" 
    "--save_path" "%OUTPUT_DIR%" 
    "--val_check_interval" "%VAL_CHECK_INTERVAL%" 
    "--gpus=1" 
    "--precision=16" 
    "--optimizer" "%OPTIMIZER%" 
    "--classifier" "%CLASSIFIER%"
    
echo "按任意键继续"
read "-n" "1"
echo "继续运行"

运行一下试试!

在这里插入图片描述

太痛了!好像又是路径的问题?检查了一下确实是路径的错误

把上述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
set TIME=0711
set FILE_NAME=ontonotes_glyce_base
set REPO_PATH=D:\code\ChineseBert
set BERT_PATH=..\..\CHINESEBERT_PATH
set DATA_DIR=..\..\ONTONOTES_DATA_PATH

set SAVE_TOPK=20
set TRAIN_BATCH_SIZE=26
set LR=3e-5
set WEIGHT_DECAY=0.001
set WARMUP_PROPORTION=0.1
set MAX_LEN=275
set MAX_EPOCH=5
set DROPOUT=0.2
set ACC_GRAD=1
set VAL_CHECK_INTERVAL=0.25
set OPTIMIZER=torch.adam
set CLASSIFIER=multi

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%
mkdir %OUTPUT_DIR%
set PYTHONPATH=%PYTHONPATH%;%REPO_PATH%

python %REPO_PATH%\tasks\OntoNotes\OntoNotes_trainer.py ^
    --lr %LR% ^
    --max_epochs %MAX_EPOCH% ^
    --max_length %MAX_LEN% ^
    --weight_decay %WEIGHT_DECAY% ^
    --hidden_dropout_prob %DROPOUT% ^
    --warmup_proportion %WARMUP_PROPORTION% ^
    --train_batch_size %TRAIN_BATCH_SIZE% ^
    --accumulate_grad_batches %ACC_GRAD% ^
    --save_topk %SAVE_TOPK% ^
    --bert_path %BERT_PATH% ^
    --data_dir %DATA_DIR% ^
    --save_path %OUTPUT_DIR% ^
    --val_check_interval %VAL_CHECK_INTERVAL% ^
    --gpus="1" ^
    --precision=16 ^
    --optimizer %OPTIMIZER% ^
    --classifier %CLASSIFIER%

pause

重新跑一下!

在这里插入图片描述

chatGPT牛逼!看来格式是转换对了,下面就是调包的问题了

看这个错应该是这个pypinyin包没装,装一下试试

pip install pypinyin

在这里插入图片描述

但是环境里应该有了鸭,难道是跑的时候不在这个环境吗

单独跑了一下这个文件,并没有报错!

在这里插入图片描述

感觉我的推理是正确的,查了一下如何在bat文件中选择环境

%切换到ChineseBert环境%
CALL activate 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

等了一下午,终于跑出了结果了

在这里插入图片描述

作者的结果如下

ModelTest PrecisionTest RecallTest F1
BERT79.6982.0980.87
RoBERTa80.4380.3080.37
ChineseBERT80.0383.3381.65

不知道为什么test_precision这一项结果略低一点,其他结果相差不是很大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/700035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实用类详解

第二章 实用类介绍 目录 第二章 实用类介绍 1.枚举 2.包装类及其构造方法 3.Math类 4.Random类 5.String类 总结 内容仅供学习交流,如有问题请留言或私信!!!!! 有空您就点点赞 1.枚举 枚举指由一…

python-注册nacos服务

一、首页 Nacos(Naming and Configuration Service)是一个用于实现服务注册和发现的开源项目。Nacos注册服务的主要作用是帮助微服务架构中的各个服务实例进行注册和发现,以便于服务之间的通信和协作,另外,也可以在nac…

基于高性能的STM32G031K4T6、STM32G031K6T6、STM32G031K8T6(ARM微控制器)64MHz 闪存 32-LQFP

STM32G0 32位微控制器 (MCU) 适合用于消费、工业和家电领域的应用,并可随时用于物联网 (IoT) 解决方案。这些微控制器具有很高的集成度,基于高性能ARM Cortex-M0 32位RISC内核,工作频率高达64MHz。该器件包含内存保护单元 (MPU)、高速嵌入式内…

大数据赋能交通业务管理——远眺智慧交通集成管控系统

随着交通管理需求的不断提升,原有系统管理模式的缺点逐渐显露,各业务系统的相互独立、各自为战,成为交通管理人员全局把控交通资源、实现交通综合管控的壁垒。 智慧交通集成管控平台通过统一标准,集成交警各类业务系统、整合相关数…

libevent(6)windows上使用iocp网络模型

windows操作系统上不能使用epoll模型&#xff0c;只能使用iocp网络模型。这里我把怎么在windows上使用iocp的代码直接贴上&#xff1a; #include <iostream> #include <signal.h> #include <event2/event.h> #include <event2/listener.h> #include &l…

【Linux从入门到放弃】冯诺依曼体系机构、操作系统及管理的本质

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《Linux从入门到放弃》 &#x1f466;个人简介&#xff1a;一名双非编程菜鸟&#xff0c;在这里分享自己的编程学习笔记&#xff0c;欢迎大家的指正与点赞&#xff0c;谢谢&#xff01; 文…

技术小知识:WAN和LAN区别 ①

1、WAN是外网接接入入口&#xff0c;一般指&#xff1a;外网&#xff0c;广域网&#xff0c;公网。 2、LAN是局域网输出接口&#xff0c;一般指&#xff1a;内网&#xff0c;家庭公司局域网。 局域网是小规模&#xff0c;近距离的一种内部范围网络布局。 外网要跨越的通讯商中…

【GESP】2023年06月图形化一级 -- 去旅行

文章目录 去旅行1. 准备工作2. 功能实现3. 设计思路与实现&#xff08;1&#xff09;角色、舞台背景设置a. 角色设置b. 舞台背景设置 &#xff08;2&#xff09;脚本编写a. 角色&#xff1a;Avery Walking 4. 评分标准 去旅行 1. 准备工作 &#xff08;1&#xff09;删除默认小…

不要错过这所211,专业课简单!保护一志愿,人称电力黄埔军校!

一、学校及专业介绍 华北电力大学&#xff08;North China Electric Power University&#xff09;&#xff0c;简称华电&#xff08;NCEPU&#xff09;&#xff0c;是中华人民共和国教育部直属、由国家电网有限公司等12家特大型电力集团和中国电力企业联合会组成的理事会与教育…

Java容器介绍及其操作方法

一、List ArrayList&#xff0c;LinkedList 特有的函数 <class T> get(int index) 获取下标为index的元素 <class T> set(int index, <class T> element) 改变某个元素 void add(int index, <class T> element) 在下标为index处插入元素…

API信息

API 接口渗透测试

Neo4j的简单使用

1、创建节点 CREATE (:Person {name: Alice, age: 25, city: London}) CREATE (:Person {name: Bob, age: 30, city: New York}) CREATE (:Person {name: Charlie, age: 35, city: Paris})CREATE (:Interest {name: Music}) CREATE (:Interest {name: Sports}) CREATE (:Inter…

Redis实战案例9-封装Redis工具类

1. 封装Redis工具类 方法一和三主要解决缓存穿透的问题&#xff1b; 方法二和四主要解决缓存击穿的问题&#xff1b; 2. 方法一和三 缓存穿透的封装&#xff1b; private final StringRedisTemplate stringRedisTemplate; public CacheClient(StringRedisTemplate stringRedisT…

炫技亮点 Spring Websocket idle check原理

文章目录 原理配置附件Java_websocket空闲检测原理 Spring Websocket 是基于 WebSocket 协议的实现&#xff0c;它提供了一种在客户端和服务器之间实时双向通信的方式。其中&#xff0c;idle check&#xff08;空闲检查&#xff09;是一种机制&#xff0c;用于检测 WebSocket 连…

新项目,不妨采用这种架构分层,很优雅!

大家好&#xff0c;我是飘渺。今天继续更新DDD&微服务的系列文章。 在专栏开篇提到过DDD&#xff08;Domain-Driven Design&#xff0c;领域驱动设计&#xff09;学习起来较为复杂&#xff0c;一方面因为其自身涉及的概念颇多&#xff0c;另一方面&#xff0c;我们往往缺乏…

CF449D Jzzhu and Numbers 题解

题意 给定 A 1 . . . . A n A_1....A_n A1​....An​&#xff0c;选任意个数使得它们异或和为 0 0 0&#xff0c;求方案数。 思路 很朴素的想法是枚举每个数&#xff0c;然后进行 0-1 背包方案数统计&#xff0c;时间复杂度 O ( n n ) O(n \times n) O(nn)。 而根据前面几…

linux——解压和压缩

目录 1.压缩格式 2. tar命令 3.tar命令压缩 4. tar解压 5. zip命令压缩文件 6. unzip 命令解压 7. 总结 1.压缩格式 2. tar命令 3.tar命令压缩 4. tar解压 5. zip命令压缩文件 6. unzip 命令解压 7. 总结

DragGAN windows 部署逼坑指南

可参看B站视频&#xff1a;【DragGAN开源】DragGAN win11 部署逼坑指南_哔哩哔哩_bilibili 报错信息如下&#xff1a; Setting up PyTorch plugin "bias_act_plugin"... Failed! ninja is required to load c extensions 环境配置&#xff1a; cuda:12.1visual …

C++vector动态容器类

1、std::vector::push_back&#xff08;尾差&#xff09; 1.1、std::vector::operator[] 意思为&#xff1b; 访问元素 返回对vector容器中位置n的元素的引用。 void test_vector2() {vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);/…

这个元宇宙平台真是拼了!新上线十套模板,帮您打造虚拟展览

导语&#xff1a; 随着数字技术的不断发展&#xff0c;线上虚拟展览正成为越来越多企业和组织的营销利器。在众多的虚拟展厅平台中&#xff0c;蛙色3DVR展厅凭借其独特的优势和特点&#xff0c;成为行业中备受关注的创新解决方案。 第一部分&#xff1a;展厅的优势和特点 1.便…