【年报文本分析】第五辑:Python+Pytorch训练大语言模型,使用自训练模型完成文本分类任务——金星晔等(2024)《经济研究》大语言模型方法的复现

目录

  • [0 背景介绍](#0 背景介绍)
  • [1 环境及依赖库](#1 环境及依赖库)
  • [2 使用示例数据集,跑通大语言模型代码](#2 使用示例数据集,跑通大语言模型代码)
  • [2.1 源代码下载](#2.1 源代码下载)
  • [2.2 代码的运行步骤](#2.2 代码的运行步骤)
  • [3 更换预训练模型,寻找最优模型](#3 更换预训练模型,寻找最优模型)
  • [4 确定词典,筛选年报](#4 确定词典,筛选年报)
  • [5 开始人工标注工作](#5 开始人工标注工作)
  • [6 批量文本预测](#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,输入下方面临即可完成安装。

python 复制代码
pip install torch==1.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
python 复制代码
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里输入待预测句子即可。
python 复制代码
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表格即可。

相关推荐
孟郎郎几秒前
Python打开Excel文档并读取数据
python·excel·xlsx·openpyxl·xlrd·xls
许思王23 分钟前
【Python】组合数据类型:序列,列表,元组,字典,集合
开发语言·人工智能·python
巴拉巴拉朵25 分钟前
大语言模型基础
人工智能·语言模型·自然语言处理
程序员的开发手册1 小时前
新手教学系列——慎用Flask-SQLAlchemy慢日志记录
数据库·python·flask·sqlalchemy
木觞清3 小时前
Django学习第三天
python·学习·django
电饭叔3 小时前
《python程序语言设计》2018版第5章第52题利用turtle绘制sin函数
开发语言·python
YCCX_XFF214 小时前
ImportError: DLL load failed while importing _imaging: 操作系统无法运行 %1
开发语言·python
FutureUniant6 小时前
GitHub每日最火火火项目(7.7)
python·计算机视觉·ai·github·视频
杰哥在此6 小时前
Java面试题:讨论持续集成/持续部署的重要性,并描述如何在项目中实施CI/CD流程
java·开发语言·python·面试·编程
PY1787 小时前
Python的上下文管理器
数据库·python·oracle