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模型 的相关文章

  • 理解含义的算法[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想知道是否有任何特定的算法可以遵循
  • 训练新的 AutoTokenizer 拥抱脸部

    收到此错误 AttributeError GPT2Tokenizer 对象没有 属性 train new from iterator 与拥抱面部文档非常相似 我更改了输入 就是这样 不应该影响它 有一次就成功了 2小时后回来查看 发现并没有
  • 使用 NLTK python 对使用示例数据或 Web 服务的句子进行情感分析?

    我正在着手一个用于情感分析的 NLP 项目 我已经成功安装了Python的NLTK 看起来是一个很棒的软件 但是 我无法理解如何使用它来完成我的任务 这是我的任务 我从一长条数据开始 假设来自他们的网络服务的数百条关于英国大选主题的推文 我
  • NLTK 中的 FreqDist 未对输出进行排序

    我是 Python 新手 我正在尝试自学语言处理 python 中的 NLTK 有一个名为 FreqDist 的函数 可以给出文本中单词的频率 但由于某种原因它无法正常工作 这是教程让我写的 fdist1 FreqDist text1 vo
  • doc2vec 获得良好性能所需的最小数据集大小是多少?

    在不同大小的数据集上进行训练时 doc2vec 的表现如何 原始语料库中没有提到数据集大小 所以我想知道从 doc2vec 中获得良好性能所需的最小大小是多少 有很多东西被称为 doc2vec 但它似乎最常指的是 Le 和 Mikolov
  • 如何将地名词典或词典表示为 crf++ 中的特征?

    如何使用地名词典或词典作为功能CRF https taku910 github io crfpp 详细说明 假设我想对人名进行 NER 并且我有一个包含常见人名的地名词典 或字典 我想使用这个地名词典作为 crf 的输入 我该怎么做 我正在
  • 使用 nltk 进行分块

    如何从给定模式的句子中获取所有块 示例 NP
  • 如何计算两个文本文档之间的相似度?

    我正在考虑使用任何编程语言 尽管我更喜欢 Python 来从事 NLP 项目 我想获取两个文档并确定它们的相似程度 常见的方法是将文档转换为 TF IDF 向量 然后计算它们之间的余弦相似度 任何有关信息检索 IR 的教科书都涵盖了这一点
  • 使用我自己的训练示例训练 spaCy 现有的 POS 标记器

    我正在尝试在我自己的词典上训练现有的词性标注器 而不是从头开始 我不想创建一个 空模型 在spaCy的文档中 它说 加载您想要统计的模型 下一步是 使用add label方法将标签映射添加到标记器 但是 当我尝试加载英文小模型并添加标签图时
  • 将单引号替换为双引号并排除某些元素

    我想用双引号替换字符串中的所有单引号 但出现的情况除外 例如 n t ll m 等 input the stackoverflow don t said hey what output the stackoverflow don t sai
  • 如何提取数字(以及比较形容词或范围)

    我正在用 Python 开发两个 NLP 项目 它们都有类似的任务提取数值和比较运算符来自句子 如下所示 greater than 10 weight not more than 200lbs height in 5 7 feets fas
  • 将 python NLTK 解析树保存到图像文件[重复]

    这个问题在这里已经有答案了 这可能会复制这个 stackoverflowquestion https stackoverflow com questions 23429117 saving nltk drawn parse tree to
  • 如何训练斯坦福 NLP 情感分析工具

    地狱大家 我正在使用斯坦福核心 NLP 包 我的目标是对推文直播进行情感分析 按原样使用情感分析工具对文本 态度 的分析非常差 许多积极因素被标记为中性 许多消极因素被评为积极 我已经在文本文件中获取了超过一百万条推文 但我不知道如何实际获
  • 实时跟踪每分钟/小时/天的前 100 个 Twitter 单词

    我最近遇到这样一个面试问题 Given a continuous twitter feed design an algorithm to return the 100 most frequent words used at this min
  • BERT 输出不确定

    BERT 输出是不确定的 当我输入相同的输入时 我希望输出值是确定性的 但我的 bert 模型的值正在变化 听起来很尴尬 同一个值返回两次 一次 也就是说 一旦出现另一个值 就会出现相同的值并重复 如何使输出具有确定性 让我展示我的代码片段
  • 使用正则表达式标记化进行 NLP 词干提取和词形还原

    定义一个函数 名为performStemAndLemma 它需要一个参数 第一个参数 textcontent 是一个字符串 编辑器中给出了函数定义代码存根 执行以下指定任务 1 对给出的所有单词进行分词textcontent 该单词应包含字
  • 如何将标记化中的多单词名称保留在一起?

    我想使用 TF IDF 特征对文档进行分类 一种方法是 from sklearn feature extraction text import TfidfVectorizer import string import re import n
  • 使用 NLP 进行地址分割

    我目前正在开发一个项目 该项目应识别地址的每个部分 例如来自 str Jack London 121 Corvallis ARAD ap 1603 973130 输出应如下所示 street name Jack London no 121
  • 除非 POS 显式,否则 WordNetLemmatizer 不会返回正确的引理 - Python NLTK

    我正在对 Ted 数据集成绩单进行词形还原 我注意到一些奇怪的事情 并非所有单词都被词形还原 要说的是 selected gt select 哪个是对的 然而 involved gt involve and horsing gt horse
  • 如何从 Pandas DataFrame 转换为 Tensorflow BatchDataset 以进行 NLP?

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

随机推荐

  • 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