目录
- 0 背景介绍
- 1 环境及依赖库
- 2 使用示例数据集,跑通大语言模型代码
- 2.1 源代码下载
- 2.2 代码的运行步骤
- 3 更换预训练模型,寻找最优模型
- 4 确定词典,筛选年报
- 5 开始人工标注工作
- 6 批量文本预测
0 背景介绍
金星晔老师等在《经济研究》2024年第3期发表了一篇题为《企业数字化转型的测度难题:基于大语言模型的新方法与新发现》,使用替代了传统的以词频为依据的企业数字化转型、数字技术能力等一系列变量的测量方法。
金星晔,左从江,方明月,李涛,聂辉华.企业数字化转型的测度难题:基于大语言模型的新方法与新发现[J].经济研究,2024,59(3):34-53.
根据此篇论文第五作者,人大教授聂辉华老师的预测,以及这篇论文发表的期刊和作者团队的影响力,大概率会对这一领域造成“创造性破坏”的力量。
从一个计算机本科毕业,经管类硕士在读学生的视角来看,这篇论文在方法上的创新的确解决了词频方法的种种弊端,不过这篇论文的方法的技术实现难度不大,就是用成熟的大语言模型训练模型,再用自训练模型完成文本分类任务,其实里边人工标注的时间成本才是最大的。
论文中使用的ERNIE模型也不一定在所有情境下都是最优的,百度飞桨其实也做的不成熟,目前来看其实是不如BERT模型,使用Pytorch来的成熟。
因此,本篇面向零基础、弱基础的经管学生,提供一套易上手方法,使用Pytorch框架和BERT模型对该论文进行复现,同时也提供基于ERNIE模型的复现思路。
1 环境及依赖库
我使用的是windows10,显卡是cpu版本,在Anaconda3中的spyder5中运行,python版本是3.9.12,以上硬件配置和软件环境对代码运行的影响较小,自行下载最新版本安装运行即可。
最主要的依赖库有两个,一个是Pytorch(1.8.0)版本,提供基本的模型训练,另一个是transformers(4.3.0),提供基本的文本转换。
下载方式:打开Anaconda3目录下的Anaconda Powershell Prompt,输入下方面临即可完成安装。
pip install torch==1.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install transformers==4.3.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
如果已经提前安装过了这两个库,可以先用uninstall卸载掉这两个库
其他依赖库,例如pandas、numpy、os等,一般使用Anaconda3自带的版本即可。
2 使用示例数据集,跑通大语言模型代码
做这个工作之前,我试过了网上很多方法,由于环境很难配置、莫名其妙的报错无法解决、整个流程的不完整等原因,付出了大概一个星期的沉默成本,最后机缘巧合搜到了这篇博客,用一下午就完成了所有工作。(确实是相见恨晚)
博客链接:【文本分类】利用bert-base-chinese训练自己的模型完成中文文本分类任务(pytorch实现)
2.1 源代码下载
为不侵犯该博主的知识产权成果,请进入上述博客,从该博客里的链接中下载所有代码、示例数据集以及预训练的中文Bert模型。
具体下载方式为:
1.点击下载仓库,访问该博主的github主页,如果访问不了使用csdn的github加速功能,进入后下载打包好后的zip压缩包,解压。
2.在解压后的文件夹里新建一个空文件夹,命名为bert-base-chinese,点击bert-base-chinese镜像下载,下载该页面所有文件(包含4个大文件,耐心等待)至该文件夹。
3.在解压后的文件夹里新建一个空文件夹,命名为bert_checkpoint。
示例数据还是比较大的,体量有20w,如果机子的显卡不是gpu版本,运行速度会特别慢,没必要在示例数据上边浪费过多时间,因此可以进入THUCNews文件夹,打开里边的train.txt(训练集),test.txt(测试集),dev.txt(验证集),删除掉里边大部分的数据。
我的显卡是cpu,训练集保留了1500条左右,测试集和验证集保留了200条左右,epoch为5时训练时间在20分钟左右,准确率在0.84左右。不过要注意的是,测试集的文本是把一类全放在一起,并不是乱序的,所以我的做法是每个类保留25个句子,这样不会让准确率太低。
2.2 代码的运行步骤
- 1.使用Spyder打开bert_train.py,运行。
该文件里的训练超参数部分可以更改数值,建议只对epoch值进行修改。该过程可能要持续一段时间,控制台会输出训练过程。训练好的模型保存在bert_checkpoint文件夹中。其中best.pt是准确率最高的模型文件,last.pt是最后一轮 epoch得到的模型文件,如果最后一轮准确率最高,二者就完全相同。 - 2.打开bert_test.py,运行。
调用best.pt,运用验证集验证该模型的效果,输出该模型的准确率。 - 3.打开bert_tuili.py,运行。
调用best.pt,使用单个句子进行预测,验证该模型是否可以对其他句子进行分类,检验模型效果。如果出现了关于input函数的报错,可以直接将while True后的代码改为下方代码,在text里输入待预测句子即可。
text = '此处输入待预测的句子'
bert_input = tokenizer(text, padding='max_length', max_length = 35, truncation=True,return_tensors="pt")
input_ids = bert_input['input_ids'].to(device)
masks = bert_input['attention_mask'].unsqueeze(1).to(device)
output = model(input_ids, masks)
pred = output.argmax(dim=1)
print(real_labels[pred])
3 更换预训练模型,寻找最优模型
金老师的论文里是对比ERNIE和BERT模型,以及传统的机器学习方法的准确率,从而确定使用ERNIE模型,所以在此提供基于ERNIE模型的复现思路。
其实使用不同模型,本质上只是预训练模型的不同,所以只需要更换预训练模型文件即可。
在下方链接的描述中,有作者提供的ERNIE的预训练模型文件的网盘地址,可以自行下载。
https://gitcode.com/649453932/Bert-Chinese-Text-Classification-Pytorch?utm_source=csdn_github_accelerator&isLogin=1
该地址其实是我第一次尝试的代码,跑通了但是缺少了最后预测的这一步
下载后,在代码的同级目录下,新建一个文件夹,命名为ERNIE,将下载好的预训练模型文件(pytorch_model.bin)放到该文件夹,,并从bert-base-chinese文件夹中复制一份其他文件至该文件夹即可。并新建一个文件夹,命名为ERNIE_checkpoint
随后将bert_get_data.py、bert_tuili.py中的bert_name改为’./ERNIE’,bert_train.py、bert_test.py、bert_tuili.py中的save_path全改为’./ERNIE_checkpoint’,重复2.2中的步骤即可。
以下部分目前我还没进行到,只做简单介绍,后续进行到了后再更新详细思路及代码。
4 确定词典,筛选年报
使用python批量析出年报中的“管理层讨论与分析”部分,并转换为文本数据。
根据句号和分号分隔文本,并根据文献,确定自己的词典,筛选待标记词库。
5 开始人工标注工作
这里只需要按照示例数据的格式,统一标记标准,安排研究人员标记即可。
6 批量文本预测
此处只需要改写bert_tuili.py文件,将其由单个预测变成批量预测,并将结果录入excel表格即可。