【年报文本分析】第五辑: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表格即可。

相关推荐
袁袁袁袁满1 分钟前
100天精通Python(爬虫篇)——第113天:‌爬虫基础模块之urllib详细教程大全
开发语言·爬虫·python·网络爬虫·爬虫实战·urllib·urllib模块教程
老大白菜24 分钟前
Python 爬虫技术指南
python
古希腊掌管学习的神2 小时前
[搜广推]王树森推荐系统——矩阵补充&最近邻查找
python·算法·机器学习·矩阵
LucianaiB3 小时前
探索CSDN博客数据:使用Python爬虫技术
开发语言·爬虫·python
PieroPc5 小时前
Python 写的 智慧记 进销存 辅助 程序 导入导出 excel 可打印
开发语言·python·excel
梧桐树04299 小时前
python常用内建模块:collections
python
Dream_Snowar9 小时前
速通Python 第三节
开发语言·python
四口鲸鱼爱吃盐10 小时前
Pytorch | 从零构建GoogleNet对CIFAR10进行分类
人工智能·pytorch·分类
蓝天星空10 小时前
Python调用open ai接口
人工智能·python
jasmine s10 小时前
Pandas
开发语言·python