finetune一个GPT3模型

2023-11-02

过程其实挺简单的,首先得注册一个账号获取token(我是叫在美国的朋友注册了一个)。注册好账号后,有18美金的试用额度,基本可以完成好几次模型训练了。除了模型训练需要收费之外,大概1000个token的费用是0.02美金。

设置好OPENAI_API_KEY这个环境变量。

    export OPENAI_API_KEY="<OPENAI_API_KEY>"

接下来就进入正题了,

1. 准备数据,格式如下,每一行都是一个json,换行用\n表示,我finetune的task只需要1000条左右的数据,模型结果还不错,根据训练时的提示,至少需要100条,越多越好

{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
...

openai提供了现成的命令可以转csv成json: openai tools fine_tunes.prepare_data -f ./train_data.csv

2. 训练,我finetune的是davinci模型,还有三四个选择,输错命令行会提示。我的task只finetune了一个周期,整个过程大概花费1美金,持续约5~10分钟

openai api fine_tunes.create -t ./train_data_prepared.jsonl -m davinci --n_epochs 1

不需要的模型还可以删除

openai api models.delete -i "davinci:ft-personal-2022-11-20-03-40-02"

用如下命令可以列出曾经训练的模型列表

openai api fine_tunes.list

3. api调用,有好几种方法,比如直接

openai api completions.create -m davinci:ft-personal-2022-11-20-04-05-47 -p "Beautiful sunset beach landscape with a boat"

我的task还需要设置更多的两个参数temperature和frequency_penalty,所以我写了个简单的脚本完成这个任务,并且openai限制1秒调用超过60次,我加了个简单的sleep。其中有个坑是,推理的时候seperator里的\n,无需过采用"\\"多转义。

import os
import sys
import openai
import json
import time

if not os.path.exists(sys.argv[2]):
    res = openai.Completion.create(
        max_tokens=32,
        model=sys.argv[1],
        prompt=sys.argv[2]+"\n##\n",
        temperature=0.7,
        frequency_penalty=0.1)
    text = res["choices"][0]["text"]
    items = text.split('\n')
    print(sys.argv[2]+"|"+items[0]+"|"+items[2])
else:
    f = open(sys.argv[2])
    lines = [line.strip()[:-2] for line in f.readlines()]
    f.close()

    f = open("./result.txt", "a+")

    for i,line in enumerate(lines):
        print(i, line)

        try:
            res = openai.Completion.create(
                max_tokens=32,
                model=sys.argv[1],
                prompt=line+"\n##\n",
                temperature=0.7,
                frequency_penalty=0.1)
            text = res["choices"][0]["text"]
            items = text.split('\n')
            print(line+"|"+items[0]+"|"+items[2], file=f)
            if i%30 == 0:
                f.flush()
            time.sleep(1.5)
        except Exception as e:
            print(e)
            time.sleep(15)
    f.close()

参考OpenAI API

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

finetune一个GPT3模型 的相关文章

  • 词干函数错误:词干需要一个位置参数

    这里的stem函数显示错误 指出stem需要循环中的一个位置参数 如所讨论的 from nltk stem import PorterStemmer as ps text my name is pythonly and looking fo
  • 将单引号替换为双引号并排除某些元素

    我想用双引号替换字符串中的所有单引号 但出现的情况除外 例如 n t ll m 等 input the stackoverflow don t said hey what output the stackoverflow don t sai
  • 语音识别中如何处理同音词?

    对于那些不熟悉什么是同音字 https en wikipedia org wiki Homophone是的 我提供以下示例 我们的 是 嗨和高 到 太 二 在使用时语音API https developer apple com docume
  • python中的语音识别持续时间设置问题

    我有一个 Wav 格式的音频文件 我想转录 我的代码是 import speech recognition as sr harvard sr AudioFile speech file wav with harvard as source
  • ANEW 字典可以用于 Quanteda 中的情感分析吗?

    我正在尝试找到一种方法来实施英语单词情感规范 荷兰语 以便使用 Quanteda 进行纵向情感分析 我最终想要的是每年的 平均情绪 以显示任何纵向趋势 在数据集中 所有单词均由 64 名编码员按照 7 分李克特量表在四个类别上进行评分 这提
  • AttributeError:类型对象“Word2Vec”没有属性“load_word2vec_format”

    我正在尝试实现 word2vec 模型并收到属性错误 AttributeError 类型对象 Word2Vec 没有属性 load word2vec format 下面是代码 wv Word2Vec load word2vec format
  • 如何在R中使用OpenNLP获取POS标签?

    这是 R 代码 library NLP library openNLP tagPOS lt function x s lt as String x word token annotator lt Maxent Word Token Anno
  • 给定文档,选择相关片段

    当我在这里提出问题时 自动搜索返回的问题的工具提示给出了问题的前一点 但其中相当一部分没有给出任何比理解问题更有用的文本 标题 有谁知道如何制作一个过滤器来删除问题中无用的部分 我的第一个想法是修剪仅包含某个列表中的单词的任何前导句子 例如
  • 如何使用动词时态/语气制作稀疏匹配器模式?

    我一直在尝试使用动词时态和情绪为 spacy 匹配器创建一个特定的模式 我发现了如何使用 model vocab morphology tag map token tag 访问使用 spacy 解析的单词的形态特征 当动词处于虚拟语气模式
  • Lucene 标准分析器与 Snowball

    刚刚开始使用 Lucene Net 我使用标准分析器索引了 100 000 行 运行了一些测试查询 并注意到如果原始术语是单数 则复数查询不会返回结果 我知道雪球分析器增加了词干支持 这听起来不错 不过 我想知道 超过标准的雪球锣是否有任何
  • 如何从 Pandas DataFrame 转换为 Tensorflow BatchDataset 以进行 NLP?

    老实说 我想弄清楚如何转换数据集 格式 pandasDataFrame或 numpy 数组 转换为简单文本分类张量流模型可以训练用于情感分析的形式 我使用的数据集类似于 IMDB 包含文本和标签 正面或负面 我看过的每个教程要么以不同的方式
  • 从 Penn Treebank 格式的文本中提取子句

    说我有一句话 After he had eaten the cheese Bill went to the grocery 在我的程序中 我得到以下输出 PARSE TREE ROOT S SBAR IN After S NP PRP he
  • Rasa core 和 Rasa nlu 之间的区别

    我试图理解之间的区别拉莎核心 https core rasa ai and Rasa NLU https nlu rasa ai installation html从官方文档看的 但我不太明白 我的理解是Rasa core用于引导对话流程
  • NLTK 可用的停用词语言

    我想知道在哪里可以找到 NLTK 停用词支持的语言 及其键 的完整列表 我找到一个列表https pypi org project stop words https pypi org project stop words 但它不包含每个国家
  • 如何使用Bert进行长文本分类?

    我们知道 BERT 有 token 的最大长度限制 512 因此如果一篇文章的长度远大于 512 例如文本中有 10000 个 token 如何使用 BERT 您基本上有三个选择 您可以剪掉较长的文本并仅使用前 512 个令牌 最初的 BE
  • 如何从Python中的阿拉伯字符串中删除英文文本?

    我有一个带有英文文本和标点符号的阿拉伯字符串 我需要过滤阿拉伯文本 我尝试使用 sting 删除标点符号和英语单词 但是 我失去了阿拉伯语单词之间的空格 我哪里错了 import string exclude set string punc
  • 使用自定义层运行 Keras 模型时出现问题

    我目前正在攻读学士学位论文FIIT STU https www fiit stuba sk en html page id 749 其主要目标是尝试复制和验证以下结果study http arxiv org abs 2006 00885 这
  • 分词统计方法

    我想解决分词问题 从没有空格的长字符串中解析单词 例如我们想要从中提取单词somelongword to some long word 我们可以通过字典的动态方法来实现这一点 但我们遇到的另一个问题是解析歧义 IE orcore gt or
  • 如何改进 NLTK 中的荷兰语 NER 词块划分器

    感谢这个伟大的答案 我使用 NLTK 和 Conll2002 语料库训练自己的荷兰语 NE 词块划分器 有了一个良好的开端 NLTK 荷兰语命名实体识别 https stackoverflow com questions 11293149
  • 使用印度名字训练 Spacy NER

    我正在尝试自定义 Spacy 的 NER 来识别印度名字 遵循本指南https spacy io usage training https spacy io usage training这是我正在使用的数据集https gist githu

随机推荐

  • Visual Studio 卸载 Visual Assist番茄助手

    在VS的Visual Studio 2010 Extension Manager 中可卸载 详细可参考文章 https blog csdn net fangxinggood article details 6052950
  • Selenium常用操作之单选复选框、下拉列表、键盘、截屏、断言、(显式隐式)等待

    目录 1 窗口最大化 2 单选框操作 3 复选框操作 4 下拉列表 5 selenium 三种等待 6 键盘操作 7 截屏 8 断言 9 Selenium操作JS弹窗控件 10 鼠标悬停与释放 1 窗口最大化 driver maximize
  • 算法03-任务混部

    公司创新实验室正在研究如何最小化资源成本 最大化资源利用率 请你设计算法帮他们 解决一个任务混部问题 有 taskNum 项任务 每个任务有开始时间 startTime 结束时间 endTime 并行度 parallelism 三个属性 并
  • 福建中烟RFID托盘运输环节的出入库管理

    1 项目设计 在木托盘上加一张带有RFID芯片的纸滑托盘 利用专用推拉器RFID智能叉车将纸滑托盘连同放在其上面的整托盘卷烟叉起 经过出库扫描仪扫描芯片信息后装车 便完成了基于RFID托盘运输环节的出入库作业 基于工业的RFID托盘运输管理
  • C/C++编程:名称

    两个概念 如果一个名称使用域解析符 或者成员访问运算符 gt 来显式表明它所属的作用域 我们就称该名称为受限名称 this gt count是受限名称 count不是 即使count实际上引用的也是一个类名称 如果一个名称 以某种方式 依赖
  • 如何基于 Kubernetes 实现优质开发者平台体验?

    内部开发者平台 或 IDP 是使开发团队能够更快 更轻松 更一致地交付应用程序的基础设施 Kubernetes 本身是一个功能强大的平台 但它引入了太多复杂性和功能 因此不能简单地将其作为 IDP 交给开发团队 若要期望他们能取得成功 非常
  • QString 乱谈(3)-Qt5与中文

    两个月前 简单写过QTextCodec中的setCodecForTr等终于消失了 Qt5 在Qt论坛上 不少用户都对去掉这两个函数表示特别的不了解 为什么会这样 我想多少能说明不少用户对C 中源码字符集和执行字符集的不太了解 从而造成对这种
  • SQL查询~ 存在一个表而不在另一个表中的数据

    A B两表 找出ID字段中 存在A表 但是不存在B表的数据 A表总共13w数据 去重后大约3W条数据 B表有2W条数据 且B表的ID字段有索引 方法一 使用 not in 容易理解 效率低 执行时间为 1 395秒 1 select dis
  • 微信小程序中调用手机拨号功能

    在微信小程序中 如何实现点击电话按钮后跳转至手机的拨号界面 并且传入指定的号码 要实现在微信小程序中点击电话按钮后跳转至手机的拨号界面 并传入指定的号码 你可以使用 wx makePhoneCall 方法 微信小程序中调用手机拨号功能 首先
  • Netty编程面试题

    1 Netty 是什么 Netty是 一个异步事件驱动的网络应用程序框架 用于快速开发可维护的高性能协议服务器和客户端 Netty是基于nio的 它封装了jdk的nio 让我们使用起来更加方法灵活 2 Netty 的特点是什么 高并发 Ne
  • java数组定义错误_JAVA定义数组 int a[]=new int[100000] 错误

    我用JAVA定义了一个1W的数组可以使用 但是定义一个10W的数组提示Exceptioninthread main java lang ArrayIndexOutOfBoundsException 2147479015atJavaappli
  • php微信企业付款到银行卡获取RSA加密公钥

    微信企业付款到银行卡需要对收款方银行卡号 收款方用户名进行加密 这个过程需要获取到加密公钥 对于一些第一次接刚触到的小伙伴来说 可能比较陌生 在此记录一下自己生成 RSA公钥的过程 1 调用官方提供的接口 接口默认输出PKCS 1格式的公钥
  • 可视化库D3.js(1)-入门篇

    从今天开始可视化库 D 3 j s color red D3 js D3 js的第一章 入门篇咯 什么是D3 js D3指的是Data Dri
  • Mybatis插件原理和PageHelper结合实战分页插件

    今天和大家分享下mybatis的一个分页插件PageHelper 在讲解PageHelper之前我们需要先了解下mybatis的插件原理 PageHelper 的官方网站 https github com pagehelper Mybati
  • I/O多路复用之epoll

    关注公众号 高性能架构探索 后台回复 pdf 免费获取计算机必备经典书籍 epoll是一种事件轮询 是Linux特有的 它允许一个进程监视多个文件描述符 并在对它们进行I O操作时获取通知 它允许边缘触发和级别触发通知 在我们研究epoll
  • 跟奥巴马一起编程

    1036 跟奥巴马一起编程 15 15 point s 美国总统奥巴马不仅呼吁所有人都学习编程 甚至以身作则编写代码 成为美国历史上首位编写计算机代码的总统 2014年底 为庆祝 计算机科学教育周 正式启动 奥巴马编写了很简单的计算机代码
  • virtualbox无法创建64虚拟机的解决办法

    最近打算学习一下hadoop 需要用以虚拟机 由于vmware太大 故选择了oracle的virtualbox 结果装上virtualbox后只能创建32位的虚拟机 如下图 在网上百度了一把 说是需要 改Bioss的设置 进入securit
  • MATLAB打开.m文件乱码解决办法

    Matlab打开 m文件出现中文乱码问题 是因为Matlab存在两种编码格式 GBK和UTF 8 而不同版本的Matlab编码格式可能不统一 因此在不同版本的Matlab打开文件 由于编码格式的改变 会导致注释乱码 1 查看你的Matlab
  • 多态案例三-电脑组装

    案例描述 电脑主要组成部件为 CPU 用于计算 显卡 用于显示 内存条 用于存储 将每个零件封装出抽象基类 并且提供不同的厂商生产不同的零件 例如Intel厂商和Lenovo厂商创建电脑类提供让电脑工作的函数 并且调用每个零件工作的接口测试
  • finetune一个GPT3模型

    过程其实挺简单的 首先得注册一个账号获取token 我是叫在美国的朋友注册了一个 注册好账号后 有18美金的试用额度 基本可以完成好几次模型训练了 除了模型训练需要收费之外 大概1000个token的费用是0 02美金 设置好OPENAI