[LLM]nanoGPT---训练一个写唐诗的GPT

karpathy/nanoGPT: The simplest, fastest repository for training/finetuning medium-sized GPTs. (github.com)

原有模型使用的莎士比亚的戏剧数据集, 如果需要一个写唐诗机器人,需要使用唐诗的文本数据,

一个不错的唐诗,宋词数据的下载资源地址:

https://github.com/chinese-poet

这个数据集里面包含搜集到的唐诗,宋词,元曲小说文本数据。

一 数据准备

1. 先下载全唐诗数据,保存到 data/poemtext/tang-poetry下

2. 进行数据的预处理

format-data.py

# -*- coding: utf-8 -*-
import glob
import json
datas_json=glob.glob("./tang-poetry/poet*.json") #1匹配所有唐诗json文件

for data_json in datas_json[:]: #2处理匹配的每一个文件
    with open(data_json,"r",encoding="utf-8") as f:
        ts_data =json.load(f)
        for each_ts in ts_data[:]: #3处理文件中每段数据,只要五言诗和2句的
            paragraphs_list =each_ts["paragraphs"]
            if len(paragraphs_list) == 2 and len(paragraphs_list[0])==12 and len(paragraphs_list[1]) == 12:
                with open("tang_poet.txt","a",encoding="utf-8") as f2:
                    f2.write("".join(paragraphs_list))
                    f2.write("\n")

f =open("tang_poet.txt","r",encoding="utf-8")
print(len(f.readlines()))

prepare.py

import os
import requests
import tiktoken
import numpy as np

# download the tiny shakespeare dataset
input_file_path = os.path.join(os.path.dirname(__file__), 'tang_poet.txt')
with open(input_file_path, 'r') as f:
    data = f.read()
n = len(data)
train_data = data[:int(n*0.9)]
val_data = data[int(n*0.9):]

# encode with tiktoken gpt2 bpe
enc = tiktoken.get_encoding("gpt2")
train_ids = enc.encode_ordinary(train_data)
val_ids = enc.encode_ordinary(val_data)
print(f"train has {len(train_ids):,} tokens")
print(f"val has {len(val_ids):,} tokens")

# export to bin files
train_ids = np.array(train_ids, dtype=np.uint16)
val_ids = np.array(val_ids, dtype=np.uint16)
train_ids.tofile(os.path.join(os.path.dirname(__file__), 'train.bin'))
val_ids.tofile(os.path.join(os.path.dirname(__file__), 'val.bin'))

二 配置文件准备

参考   train_shakespeare_char.py

三 开始训练

参考   train_shakespeare_char.py

# mac pro m1机器上
python3 train.py config/train_poemtext_char.py --device=mps --compile=False --eval_iters=20 --log_interval=1 --block_size=64 --batch_size=12 --n_layer=4 --n_head=4 --n_embd=128 --max_iters=1000 --lr_decay_iters=1000 --dropout=0.0

四 生成唐诗

python3 sample.py --out_dir=out-poemtext-char --device=mps

参考:

迷你版ChatGPT开源,教你怎么用nanoGPT训练一个写小说的AI机器人! - 知乎 (zhihu.com)

Gpt进阶(二): 以古诗集为例,训练一个自己的古诗词gpt模型 - 知乎 (zhihu.com)

相关推荐

  1. 王昌龄最经典8首唐诗

    2023-12-14 04:04:02       64 阅读
  2. 一个简单兼容GET/POST请求登录接口

    2023-12-14 04:04:02       24 阅读
  3. pytorch一个神经网络训练示例代码

    2023-12-14 04:04:02       39 阅读
  4. 一个简单程序

    2023-12-14 04:04:02       31 阅读
  5. gpt登录页面

    2023-12-14 04:04:02       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-14 04:04:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-14 04:04:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-14 04:04:02       82 阅读
  4. Python语言-面向对象

    2023-12-14 04:04:02       91 阅读

热门阅读

  1. 【js或momentJs获取当前月的起止日期】

    2023-12-14 04:04:02       63 阅读
  2. 智能查券机器人:导购APP的新趋势

    2023-12-14 04:04:02       59 阅读
  3. Linux中的磁盘挂载与取消

    2023-12-14 04:04:02       58 阅读
  4. 【FPGA】篮球比赛计分器

    2023-12-14 04:04:02       51 阅读
  5. RocketMQ的监控和管理工具有哪些❓

    2023-12-14 04:04:02       62 阅读
  6. python 多进程

    2023-12-14 04:04:02       48 阅读
  7. mysql select count 非常慢

    2023-12-14 04:04:02       53 阅读
  8. 项目优化过程

    2023-12-14 04:04:02       53 阅读
  9. ExecuteScalar()方法

    2023-12-14 04:04:02       58 阅读
  10. Android : LifeCycles_简单应用

    2023-12-14 04:04:02       65 阅读
  11. 【MyBatis】拦截查询结果同时动态替换

    2023-12-14 04:04:02       58 阅读
  12. 20230907docker安装MySQL配置

    2023-12-14 04:04:02       55 阅读
  13. linux 13-2day 日志轮转 日志目录 轮转参数

    2023-12-14 04:04:02       58 阅读
  14. libtorch常用函数记录

    2023-12-14 04:04:02       56 阅读