GPT-Chinese 复现

news2024/9/24 13:22:26

github

环境准备

conda -create gpt_cn python=3.7
conda activate gpt_cn
conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 -c pytorch
pip install -r requirements.txt

错误

module 'distutils' has no attribute 'version'
  • 解决方案:
pip uninstall setuptools
pip install setuptools==59.5.0

构建数据集

测试 build_files 函数

  • 这一步的目的是为了看看数据被处理之后长什么样子。方便我们更加自由地构造能够符合训练的数据集
  • train.py 文件中,先测试一下 build_files 的功能,看看构造出来用于训练的数据集是什么样子的
      1. 从 huggingface 上下载一个 bert 预训练模型 然后按照我给出的代码中的方式加载这个 bert 预训练模型文件夹中的 vocab.txt 文件,(如何从 huggingface 中下载 bert 的预训练模型可以参考 这篇文章)
      1. 在文件目录下创建一个 data 文件夹,并自己写一个简单的 train.json 文件放到里面作为测试

    在这里插入图片描述

    • 这个 train.json 中的内容作者给出了一个示例:就按照这种方式自己造点数据放进去就行
      在这里插入图片描述
def build_files(data_path, tokenized_data_path, num_pieces, full_tokenizer, min_length):
    """

    :param data_path: 原始训练语料,json 格式的数据
    :param tokenized_data_path: tokenized语料存放位置
    :param num_pieces: 将训练语料分成多少份
    :param full_tokenizer: 使用的分词器,用 bpe 构造的或者使用 bert-base-chinese 模型的分词器
    :param min_length: 最短收录文章长度
    :return:
    """
    with open(data_path, 'r', encoding='utf8') as f:
        print('reading lines')
        lines = json.load(f)
        lines = [line.replace('\n', ' [SEP] ') for line in lines]  # 用[SEP]表示换行, 段落之间使用SEP表示段落结束
    all_len = len(lines)
    if not os.path.exists(tokenized_data_path):
        os.mkdir(tokenized_data_path)
    for i in tqdm(range(num_pieces)):
        sublines = lines[all_len // num_pieces * i: all_len // num_pieces * (i + 1)]
        if i == num_pieces - 1:
            sublines.extend(lines[all_len // num_pieces * (i + 1):])  # 把尾部例子添加到最后一个piece
        sublines = [full_tokenizer.tokenize(line) for line in sublines if
                    len(line) > min_length]  # 只考虑长度超过min_length的句子
        sublines = [full_tokenizer.convert_tokens_to_ids(line) for line in sublines]
        full_line = []
        for subline in sublines:
            full_line.append(full_tokenizer.convert_tokens_to_ids('[MASK]'))  # 文章开头添加MASK表示文章开始
            full_line.extend(subline)
            full_line.append(full_tokenizer.convert_tokens_to_ids('[CLS]'))  # 文章之间添加CLS表示文章结束
        with open(tokenized_data_path + 'tokenized_train_{}.txt'.format(i), 'w') as f:
            for id in full_line:
                f.write(str(id) + ' ')
    print('finish')
if __name__ == '__main__':
    # main()
    from tokenizations import tokenization_bert_word_level as tokenization_bert
    full_tokenizer = tokenization_bert.BertTokenizer(vocab_file='/Users/qinpeinuan/Desktop/清华/Bert/bert-base-chinese/vocab.txt')
    build_files("./data/train.json", "./data/tokenized/", 1, full_tokenizer, 100)
  • 运行这一步成功后,data 中会产生一个 data / tokenized 文件夹,其中放着经过 tokenize 处理之后的数据:
    在这里插入图片描述
  • 本文中,作者明确说,这个工作的所有分词都是借助 bert 的 vocab.txt 来完成的。所以大家不要一看这是 GPT 模型就觉得和 BERT 有什么关系?其实他用的就是 bert 的 tokenizer 来分词的。

加载 GPT 预训练模型

  • 和上一步的 bert 文件一样,还是从 huggingface 上找一个 GPT 的预训练模型。我下载的是 这个 gpt2-base-chinese
  • 然后把这个预训练的 gpt 模型放到自己构建的文件夹下面,我是这么放的:
    在这里插入图片描述

train.py 运行即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/67036.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计基于Springboot游戏交易平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

MinIO实战

1.简介 MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。 2.部署 2.1单机器单节点(docker) 官网教程:https://min.io/docs/minio/container/index.html mkdir -p ~/minio/dat…

Node.js编程

Node.js编程 一、实验目的与要求 实验任务 用户信息增删改查 掌握数据库软件的安装了解集合、文档的概念掌握使用mongoose创建集合的方法创建集合掌握对数据库中的数据进行增删改查操作 二、实验任务和步骤 实验1. 用户信息增删改查 需求说明 (1)搭建网站服务器&#xf…

第十章 降维与度量学习

10.1 k近邻学习 k近邻学习(kNN)是一种常用的监督学习方法,其工作机制非常简单:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个邻居的信息来进行预测。 k近邻学习似乎与…

2022 计网复习计算题【太原理工大学】

期末复习汇总,点这里!https://blog.csdn.net/m0_52861684/category_12095266.html?spm1001.2014.3001.5482 三、计算题 1. 假定 1km 长的 CSMA/CD 网络的数据率为 1Gb/s,设信号在网络上的传播速率为 200000km/s。求能够使用此协议的最短帧长…

java swing(GUI) MySQL实现的学生选课成绩管理系统源码+运行教程

今天给大家演示一下由Java swing mysql实现的一款学生选课成绩信息管理系统,主要实现的功能有:学生教师信息管理、年级班级信息管理、课程信息管理、选课、成绩录入功能、成绩统计功能,实现学生、教师、管理员三个角色的登录,三个…

【计算机图形学入门】笔记1:图形学概述

前言:今天开始开启一个新篇章的学习,那就是games101闫令琪老师讲的《现代计算机图形学入门》课程,我会根据闫老师每节课讲的内容记录重点笔记,每节课都会整理一篇发布出来,希望自己可以坚持下去,从图形学小…

可视化音视频分析工具:好用工具大集锦,快转发给你兄弟看看丨音视频工具

(本文基本逻辑:音画原始数据分析工具介绍 → 编码数据分析工具介绍 → 封装格式分析工具介绍) 工欲善其事,必先利其器。在音视频开发中,为了方便、快捷、直观的分析音视频数据,最好能有一些可视化的分析工…

《爱在 ZStack Cube 超融合》三部曲

一、始于初识:很高兴见到你 这一天东川路最靓的仔打开了 ZStack Cube 宝盒 ,这可能是我们的第一次相遇,我们相谈甚欢,相遇恨晚。 我的名字是 ZStack Cube,一个基于超融合架构的云平台。我拥有3300、5300、7300、7300…

Acwing_98

题目链接 考察知识点: 坐标变换、递归、分治。 核心问题:计算出点的坐标。 策略是递归算出子图形中的坐标,再进行平移得到当前图形中的坐标。 采用下图方式建立坐标系:原点在中心。 前置知识: (x,y)(x,y)(x,y) 逆时…

ResNet18实现——MNIST手写数字识别(突破0.995)

1.简单CNN改进 简单的CNN实现——MNIST手写数字识别 该部分首先对我前面的工作进行了改进,然后以此为基础构建ResNet18去实现MNIST手写数字识别。 1.改进要点: 1.利用nn.Sequential()自定义块结构,增加可读性和方便…

Spring - 什么是spring?

好久没更新博客了,今天小更一波。 学习java已经有一段时间了,今天将接触Spring框架技术。 什么是Spring? spring 中文意思就是 春天,实际上spring 是真的给软件行业带来了春天。 使用spring的好处? spring可以解决企业级开发…

眼内衍射透镜的设计与分析

1. 摘要 如今,多焦点眼内透镜移植已广泛用于白内障的治疗。作为其优势特点之一,衍射眼内透镜为病患提供了很好的远近景性能。这种透镜经常在Zemax OpticStudio 中采用binary2面型进行设计。在本示例中,我们阐述了如何将初始设计导入VirtualLa…

嵌入式开发--RS-485通讯的问题

嵌入式开发 RS-485通讯的问题RS-485说明接口芯片硬件连接CubeMX设置代码编写引脚定义使能串口中断函数发送数据接收数据有一个问题,多收了一个数数据线上的波形问题分析问题解决RS-485说明 RS-485一般简称485总线,是最常用的工业总线之一,一…

LeetCode简单题之回环句

题目 句子 是由单个空格分隔的一组单词,且不含前导或尾随空格。 例如,“Hello World”、“HELLO”、“hello world hello world” 都是符合要求的句子。 单词 仅 由大写和小写英文字母组成。且大写和小写字母会视作不同字符。 如果句子满足下述全部条…

从 0 开始学习 Git + GitHub

文章目录一、GitHub创建仓库二、安装Git客户端1、安装2、配置身份三、为Github账户设置SSH key1、生成ssh key2、GitHub 新建SSh key3、测试连接是否成功四、上传本地项目到Github方法一:方法二:master分支到main分支迁移五、Git常用命令git initgit sta…

共享主机安全吗(以及如何保护它)?

共享主机是在一台服务器上存储多个网站的主机。通常,您的资源(例如 CPU、内存、数据库和带宽)会在用户之间溢出。由于它非常适合流量低的网站,且因具成本效益,共享主机相当普遍。如果您是博主和小型企业,则很有可能会选择共享主机…

聊聊我常用的5款动态数据可视化工具

视频当道的时代,数据可视化自然也要动起来。 我常用的动态可视化工具主要有Tableau、Echarts、Flourish、Python这几个,另外一个地图可视化神器kepler.gl,是技术群小伙伴的分享。 这五款可视化工具差异很大,在各自领域都是学霸级…

Grafana 快速配置可视化面板

一、如何快速搭建部署Grafana CSDNhttps://mp.csdn.net/mp_blog/creation/editor/128199952 二、快速配置可视化面板 1.新建数据源 首次新建数据源、首次新建看板 2.选择数据源类型 3.配置数据库 地址、账号、密码 备注:新建的数据源都可以在添加看板作为选项进…

Odoo丨如何在明细行中添加复选框?

最近,在项目实际业务中遇到需要对明细订单添加复选框和按钮进行操作的需求。 起初在拿到需求时,我联想到Odoo默认tree视图是有复选框和操作按钮的功能,于是查看了源码,确认了这个想法。 因为这个是属于字段中one2many 关系属性来…