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

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表格即可。
在这里插入图片描述

  • 27
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验!下载完使用问题请私信沟通。 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于MLP与TextCNN实现的文本分类模型python源码+实验报告+项目说明.zip MLPClassify.ipynb仅需要sklearn以及pytorch包即可,打开文件后全部运行即可。 TextCNNClassify.ipynb需要安装spaCy库以及其英文预料包,可以参见[Install spaCy · spaCy Usage Documentation](https://spacy.io/usage)官网下载,也是打开文件后全部运行即可。 EnsembleClassify为集成模型,其中训练了以上两个模型,并进行了整合,打开后全部运行即可。 运行文件后会在**exp1data**文件夹中生成三个output文件:mlpoutput.txt, textcnnoutput.txt, ensembleoutput.txt,且在**output**文件夹中有我已经预测好的测试集,可以进行对比。 实验目标: 以 train_data.txt 中的有标注文本为训练集进行有监督训练,预测 test.txt 中 的无标注文本。 简介: 本实验采用了全连接神经网络、TextCNN 以及集成两者的思想实现了短文 本分类任务,其中全连接神经网络采用了单隐层神经网络;TextCNN 采用了随 机初始化 Word2Vec 词向量,并与卷积层、全连接层一起学习的方式;而集成 学习则以各自 50%的概率作整合来预测。 实验环境: VSCode、PythonPytorch、sklearn(scikit-learn)、spaCy 实验过程: 数据预处理: 由于本文采用 Pytorch 框架,且训练原始数据为文本,需要进一步转化为词 向量才可进行下一步训练。 观察训练原始数据可以知道其每一行为字符串形式的 json 对象,因此我们 可以调用 Python 中的 json 包对其进行处理,将每一行字符串转为 Python 中的 字典格式(同 json)
使用Java运行PyTorch训练的多任务文本分类模型,需要进行以下步骤: 1.安装PyTorch和Java相关的库:首先需要安装PyTorch和Java相关的库,例如PyTorch Java API和Java Native Interface(JNI)库。 2.将训练好的模型导出为ONNX格式:使用PyTorch训练好的模型导出为ONNX格式,以便Java代码可以加载和运行。 3.在Java中加载和运行模型使用Java代码加载ONNX格式的模型,并使用输入数据对其进行推理操作。 以下是一个简单的Java代码示例,用于加载和运行ONNX格式的多任务文本分类模型: ```java import ai.onnxruntime.*; public class TextClassification { public static void main(String[] args) throws Exception { // Load the ONNX model OrtEnvironment env = OrtEnvironment.getEnvironment(); OrtSession session = env.createSession("model.onnx"); // Define input and output tensors OrtSession.SessionOptions options = new OrtSession.SessionOptions(); OrtSession.Result result = session.run( new String[]{/* input tensor names */}, new OrtValue[]{/* input tensors */}, new String[]{/* output tensor names */}); // Get the output tensor values Object[] output = result.get(0).getValue(); // Process the output tensor values // ... } } ``` 在上述代码中,需要根据训练好的模型定义输入和输出的张量名称,并将输入数据作为张量传递给模型。然后通过`session.run()`方法运行模型,并获取输出张量的值进行进一步处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ryo_Yuki

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值