当前位置: 首页 > news >正文

训练一个中文gpt2模型

前言

  1. 这是我的github上的一个介绍,关于如何训练中文版本的gpt2的。
  2. 链接为: https://github.com/yuanzhoulvpi2017/zero_nlp

介绍

  1. 本文,将介绍如何使用中文语料,训练一个gpt2
  2. 可以使用你自己的数据训练,用来:写新闻、写古诗、写对联等
  3. 我这里也训练了一个中文gpt2模型,使用了612万个样本,每个样本有512个tokens,总共相当于大约31亿个tokens

⚠️安装包

需要准备好环境,也就是安装需要的包

pip install -r requirements.txt

像是pytorch这种基础的包肯定也是要安装的,就不提了。

数据

数据来源

  1. 获得数据:数据链接,关注公众号【统计学人】,然后回复【gpt2】即可获得。
  2. 获得我训练好的模型(使用了15GB的数据(31亿个tokens),在一张3090上,训练了60多小时)

数据格式

  1. 数据其实就是一系列文件夹📁,然后每一个文件夹里面有大量的文件,每一个文件都是.csv格式的文件。其中有一列数据是content
  2. 每一行的content就代表一句话,截图如下
  3. 虽然数据有15GB那么大,但是处理起来一点也不复杂,使用 datasets
    包,可以很轻松的处理大数据,而我只需要传递所有的文件路径即可,这个使用 glob 包就能完成。

代码

⚙️训练代码train_chinese_gpt2.ipynb

⚠️注意

  1. 现在训练一个gpt2代码,其实很简单的。抛开处理数据问题,技术上就三点:tokenizergpt2_modelTrainer
  2. tokenizer使用的是bert-base-chinese
    ,然后再添加一下bos_tokeneos_tokenpad_token
  3. gpt2_model使用的是gpt2,这里的gpt2我是从0开始训练的。而不是使用别人的预训练的gpt2模型。
  4. Trainer训练器使用的就是transformersTrainer模块。(支撑多卡并行,tensorboard等,都写好的,直接调用就行了,非常好用)

📤推理代码infer.ipynb

⚠️注意

这个是chinese-gpt2的推理代码

  1. 将代码中的model_name_or_path = "checkpoint-36000"里面的"checkpoint-36000",修改为模型所在的路径。
  2. 然后运行下面一个代码块,即可输出文本生成结果
  3. 可以参考这个代码,制作一个api,或者打包成一个函数或者类。

🤖交互机器人界面chatbot.py

⚠️注意

  1. 修改代码里面的第4行,这一行值为模型所在的位置,修改为我分享的模型文件路径。
model_name_or_path = "checkpoint-36000"
  1. 运行
python chatbot.py
  1. 点击链接,即可在浏览器中打开机器人对话界面

更多

  1. 这个完整的项目下来,其实我都是全靠huggingface文档、教程度过来的.
  2. 我做的东西,也就是把Tokenizer改成中文的了,然后也整理了数据,别的大部分东西,都不是我做的了.
  3. 原文链接为https://huggingface.co/course/zh-CN/chapter7/6?fw=pt.

一起学习

其实,我更喜欢做应用,但是也要理解相关的背后原理,目前还在研究相关的gpt2原理还有相关的推理细节,这是我整理的链接,希望可以共同进步

  1. https://huggingface.co/blog/how-to-generate
  2. https://huggingface.co/gpt2
  3. https://huggingface.co/gpt2-large

相关文章:

训练一个中文gpt2模型

前言 这是我的github上的一个介绍,关于如何训练中文版本的gpt2的。链接为: https://github.com/yuanzhoulvpi2017/zero_nlp 介绍 本文,将介绍如何使用中文语料,训练一个gpt2可以使用你自己的数据训练,用来:写新闻、…...

python文件头规范和函数注释自动生成(pycharm)

#!/usr/bin/env python # -*- coding: utf-8 -*- """ Time : ${DATE} ${TIME} Author : xxx Email : xxxxxx.comFileName: ${NAME}.py Software: ${PRODUCT_NAME} """if __name__ __main__:print(Python)pycharm python文件头规范和函数注…...

Fluent Python 笔记 第 17 章 使用 future 处理并发

future 指一种对象,表示异步执行的操作。这个概念的作用很大,是 concurrent.futures 模块和 asyncio 包(第 18 章讨论)的基础。 17.1 示例:网络下载的三种风格 17.1.1 依序下载的脚本 17.1.2 使用 concurrent.futures 模块下载 from concurrent impo…...

Android进阶之路 - StringUtils、NumberUtils 场景源码

忘记是在去年还是前年的时候遇到一个需要检测所传字符串是否为数字的场景,开始使用 NumberUtils.isNumber() 提示错误 ,没有解决问题(可能是因为依赖版本导致),最后使用的是StringUtils.isNumeric(),当时关…...

装备制造业数字化转型CRM系统解决方案(信息图)

一、制造企业面临的机遇与挑战 2021年12月28日,工业和信息化部等八部门联合对外发布《“十四五”智能制造发展规划》,明确提到“推进智能制造,要立足制造本质,紧扣智能特征,以工艺、装备为核心,以数据为基…...

CGAL 二维剖分

目录一、 2D Triangulations1、定义2 Representation2.1 The Set of Faces2.2 A Representation Based on Faces and Vertices3 Software Design4 Basic Triangulations4.1 Description遍历三角网顶点4.2 Implementation4.3 Geometric Traits4.4 Example of a Basic Triangulat…...

node.js+vue婚纱影楼摄影婚庆管理系统vscode项目

:减少管理婚庆工作人员的负担;管理人员可以随时浏览婚纱网站以便及时知道哪里需要修改和更进,同时还可以查看用户反馈给我们的信息,让管理员更加直观的了解客户的需求;该系统改变了以前手工记录的方式,使用…...

C语言 指针的新理解

16年写了很多 C 与 C 相关的文章,但是后面从事了 Android 开发,就全部删掉了,无意中发现了这篇由还存在草稿箱,索性就找回来吧,也是追忆当年学习的青葱岁月 1.指针就是一个存储了其他变量地址的变量。 指针存储的是整…...

【向每个应用View中增加子控件 Objective-C语言】

一、把刚才计算九宫格的思路再给大家过一遍 1.现在我们要计算九宫格坐标 1)先把每一个格子,每一个九宫格的大小,先确定了, 在这里先指定宽和高 CGFloat appW = 75; CGFloat appH = 90; 2)再去计算第一个格子的一些间距, 到上面的间距,marginTop = 30; 再计算出…...

【FPGA】Verilog:组合电路设计 | 三输入 | 多数表决器

前言:本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载的示例:表决器(三人表决器)。 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片 配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部…...

【安全等保】安全等保二级和三级哪个高?哪个费用更高?

等保政策已经严格落地执行了,各大企业纷纷接到了过等保的通知,但有的估计是第一次听到等保,对于等保相关政策都是非常蒙圈的。这不不少企业相关负责人在问,安全等保二级和三级哪个高?哪个费用更高?这里我们…...

C++ STL学习记录(v1)

C STL学习记录一. 什么是STL1.1 STL的诞生1.2 STL基本概念1.3 STL的六大组件1.4 STL中的容器、算法、迭代器1.5 容器、算法、迭代器实践一. 什么是STL 1.1 STL的诞生 STL建立的目的就是为了解决软件界复用性的需求。C的面向对象和泛型编程思想,目的就是为了复用性的…...

开发中遇到的问题

1.当写一个导出功能时,因为编码写URL地址&参数的时候,用反转字符串的时候换行了,造成地址拼接不成,一直报错,后来发现是编码格式造成的,已解决。 解决方案:不换行或者用 “”拼接 2.当本地…...

Javascript笔记

数据类型 基本类型(primitive value) 简单的数据段,包括 Undefined, Null, Boolean, Number, String初始化只使用2原始字面量形式,如果使用new则会创建Object无法加入新的属性 引用类型(reference value) 可能由多个值构成的对象判断类型 typeofinstanc…...

Elasticsearch(ES)配置及优化

在Elasticsearch中,索引的大小和存储能力取决于多个因素,包括文档大小、索引的分片数、硬件规格、查询负载和其他因素。索引和分片配置:索引和分片的数量和配置会对查询并发性能产生影响。如果索引和分片的数量太少,可能会导致查询…...

一文看懂Java语言与Java生态圈

Java语言与Java生态圈 1、Oracle JDK与Open JDK之间的关系 Oracle JDK Java最早是由SUN公司发明,Oracle JDK之前叫SUN JDK,显而易见,这是在2009年Oracle收购SUN公司之前,收购之后被名为Oracle JDK,实际上&#xff0…...

GitHub 上有什么嵌入式方面的项目?

原文直达,喜欢就点个赞吧! GitHub 上有什么嵌入式方面的项目? - CodeAllen的回答 - 知乎 https://www.zhihu.com/question/27835930/answer/2871624679 前言 对于GitHub,可能做互联网开发的同学会更加熟悉,尤其是前端&#xff0…...

【C语言进阶】结构体、位段、枚举和联合

👦个人主页:Weraphael ✍🏻作者简介:目前是C语言学习者 ✈️专栏:C语言航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&a…...

markdown和latex常用部分参考@注脚@链接跳转@csdn

文章目录refmarkdown和latex常用部分参考typora文档基础语法扩展语法链接内联链接的方式将链接提取出来链接示例typora的支持LinksInline LinksInternal Links🎈Reference LinksURLs文章内部跳转(Heading IDs)🎈My Great Heading注脚(Footnotes)&#x1…...

Java 在二叉树中增加一行

623. 在二叉树中增加一行中等给定一个二叉树的根 root 和两个整数 val 和 depth ,在给定的深度 depth 处添加一个值为 val 的节点行。注意,根节点 root 位于深度 1 。加法规则如下:给定整数 depth,对于深度为 depth - 1 的每个非空树节点 cur…...

EVA-01保姆级教程:Qwen2.5-VL-7B多模态大模型在EVA-01中的本地化安全部署

EVA-01保姆级教程:Qwen2.5-VL-7B多模态大模型在EVA-01中的本地化安全部署 1. 引言:欢迎来到NERV指挥中心 想象一下,你面前有一个能看懂图片、理解图表、甚至能和你讨论图片里发生了什么的智能助手。现在,我们把这个助手装进了一…...

墨语灵犀开源模型生态:对接LangChain/RAG构建专属翻译知识库

墨语灵犀开源模型生态:对接LangChain/RAG构建专属翻译知识库 1. 引言:当古典美学遇见现代AI架构 在人工智能技术快速发展的今天,翻译工具已经从简单的词汇转换演变为理解文化语境和语义深度的智能系统。「墨语灵犀」作为基于腾讯混元大模型…...

Unity WebGL输入优化:跨平台文本输入解决方案的技术突破

Unity WebGL输入优化:跨平台文本输入解决方案的技术突破 【免费下载链接】WebGLInput IME for Unity WebGL 项目地址: https://gitcode.com/gh_mirrors/we/WebGLInput 在Unity WebGL应用的开发过程中,文本输入功能一直是开发者面临的核心挑战。传…...

FPGA商用级ISP:动态坏点校正(DPCC)的滑窗架构与并行判决实现

【写在前面:为什么要写这个专栏?】在数字图像处理领域,ISP(图像信号处理器)的算法原理并不罕见,但真正能够支持 4K60fps 实时处理、并经过商用验证的 Verilog 硬核实现思路 却往往秘和封装在黑盒之中。我手…...

在WSL2 Ubuntu 22.04上搞定RK3568 SDK编译:我遇到的8个坑和填坑方法

在WSL2 Ubuntu 22.04上搞定RK3568 SDK编译:我遇到的8个坑和填坑方法 作为一名长期在Windows环境下工作的嵌入式开发者,第一次尝试在WSL2中编译RK3568 SDK的经历简直像是一场噩梦。从环境配置到最终构建成功,我踩遍了几乎所有可能的坑。这篇文…...

会用AI的人,早已拉开职场差距!全岗位工作范式重构进行时

AI深度融入职场,正在改写工作的底层逻辑,会用AI的从业者,已在工作效率与职业发展上形成明显优势。从开发人员的研发流程,到方案人员的工作模式,再到各行各业的基础岗位,AI不再只是简单的效率工具&#xff0…...

WWW-万维网

万维网的概念与组成结构万维网(World Wide Web,WWW)是一个分布式的信息存储空间,在这个空间中:一个事物被称为一样 “资源”,并由一个全域 “统一资源定位符”(URL)标识。这些资源通…...

一本计算机专业,准大一,有什么忠告?

你现在大概处于一种很特别的状态。高考刚结束不久,录取通知书拿到了,专业是计算机。可能是你自己选的,也可能是家里建议的,也可能是分数刚好够就填了。不管哪种,你现在对”计算机专业到底学什么”的理解大概率是模糊的…...

开源条码字体技术:如何通过字体文件彻底改变条码生成方式

开源条码字体技术:如何通过字体文件彻底改变条码生成方式 【免费下载链接】librebarcode Libre Barcode: barcode fonts for various barcode standards. 项目地址: https://gitcode.com/gh_mirrors/li/librebarcode 条码生成技术长期以来依赖专业软件和专用…...

3大核心功能:让iOS推送调试效率提升10倍的SmartPush工具全解析

3大核心功能:让iOS推送调试效率提升10倍的SmartPush工具全解析 【免费下载链接】SmartPush SmartPush,一款iOS苹果远程推送测试程序,Mac OS下的APNS工具APP,iOS Push Notification Debug App 项目地址: https://gitcode.com/gh_mirrors/smar/SmartPush 一、问…...