OpenAI提供了很多可直接利用的GPT模子。只管这些模子在各种使命上表现精彩,但针对特定使命或上下文对这些模子举行微调,可以进一步进步它们的性能。
一. 开始微调
假设你想为公司创建一个电子邮件主动复兴天生器。由于你的公司所在的行业利用专有词汇,因此你渴望天生器给出的电子邮件复兴保持肯定的写作风格。要做到这一点,有两种战略:要么利用之前先容的提示工程本事来欺凌模子输出你想要的文本,要么对现有模子举行微调。
本文对微调举行讨论。
微调的根本逻辑
- 网络大量数据:对于这个例子,你须要网络大量电子邮件,此中包罗关于特定业务范畴的数据、客户咨询及针对这些咨询的复兴。然后,你可以利用这些数据微调现有模子,以使模子学习公司所用的语言模式和词汇。
- 微调后的新模子:微调后的模子本质上是基于OpenAI提供的原始模子构建的新模子,此中模子的内部权重被调解,以顺应特定题目,从而可以大概在相干使命上进步正确性。
通过对现有模子举行微调,你可以创建一个专门针对特定业务所用语言模式和词汇的电子邮件主动复兴天生器。
下图展示了微调过程,也就是利用特定范畴的数据集来更新现有GPT模子的内部权重。微调的目的是使新模子可以大概在特定范畴中做出比原始GPT模子更好的推测。
须要留意的是:新模子仍旧在OpenAI服务器上
纵然你利用自己的数据对LLM举行了微调,新模子也仍旧生存在OpenAI的服务器上。你须要通过OpenAI API与新模子举行交互,而不是在当地利用它。
1. 选择符合的底子模子
在微调时,必须利用底子模子,而不能利用InstructGPT系列中的模子。
现在,微调仅实用于davinci、curie、babbage和ada这几个底子模子。这些模子都在正确性和所需资源之间做出了权衡。
开发职员可以为应用步调选择最符合的模子:
- 较小的模子(ada和babbage)大概在简单使命或资源有限的应用步调中更快且更具资源效益
- 较大的模子(curie和davinci)则提供了更强的语言处理处罚和天生本领,从而实用于须要更高正确性的复杂使命。
微调后的专有本领
- 上述模子不属于InstructGPT系列,它们没有颠末RLHF阶段。
- 通过微调这些底子模子,好比根据自界说数据集调解它们的内部权重,你可以针对特定的使命或范畴定制模子。
- 固然没有InstructGPT系列的处理处罚本领和推理本领,但是它们提供了强盛的底子,让你可以利用其预训练的处理处罚本领和天生本领来构建专门的应用步调。
2. 微调和少样本学习
2.1. 对比微调和少样本学习
模子是否举行了更新
- 微调是指针对特定使命在一组数据上重新训练现有模子,以进步模子的性能并使其回复更正确。在微调过程中,模子的内部参数得到更新。
- 少样本学习则是通过提示词向模子提供有限数量的好例子,以引导模子根据这些例子给出目的结果。在少样本学习过程中,模子的内部参数不会被修改。
都可以用来加强GPT模子
- 微调可以资助我们得到高度专业化的模子,更正确地为特定使命提供与上下文相干的结果。这使得微调非常得当有大量数据可用的场景。这种定制化确保模子天生的内容更符合目的范畴的特定语言模式、词汇和语气。
- 少样本学习是一种更机动的方法,其数据利用率也更高,由于它不须要重新训练模子。当只有有限的示例可用或须要快速顺应差异使命时,这种本事非常有益。
2.2. 微调须要的数据量
微调通常须要用到大量数据。可用示例的缺乏每每限定了我们利用这种本事。
- 简单使命:为了相识微调所需的数据量,可以假设对于相对简单的使命或仅需轻微调解的模子,通过几百个提示词示例才气得到相应的目的结果。当预训练的GPT模子在使命上表现精良但须要微调以更好地与目的范畴对齐时,这种方法是有效的。
- 复杂使命:对于更复杂的使命或须要更多定制化的应用场景,模子大概须要利用成千上万个示例举行训练。前述的电子邮件主动复兴天生器正是如许一个应用场景。
- 专业性强的使命:针对非常专业的使命微调模子,大概须要数十万以致数百万个示例。这种微调规模可以显着地进步模子的性能,并使模子更好地顺应特定范畴。
ing
迁移学习是指将从一个范畴学到的知识应用于差异但相干的范畴。正由于云云,你偶然大概会听到人们在品评微调时提到迁移学习。
二. 利用OpenAI API举行微调
本节利用OpenAI API来微调LLM。我们将学习怎样预备数据、上传数据,并利用OpenAI API创建一个颠末微调的模子。
1. 数据天生
1.1. JSONL的数据格式
更新LLM须要提供一个包罗示例的数据集。该数据集是一个JSONL文件,此中每一行对应一个<提示词:补全文本>对,如下示例:
- {"prompt": "<prompt text>", "completion": "<completion text>"}
- {"prompt": "<prompt text>", "completion": "<completion text>"}
- {"prompt": "<prompt text>", "completion": "<completion text>"}
- ...
复制代码 JSONL文件是文本文件,此中每一行表现一个单独的JSON对象。你可以利用它来高效地存储大量数据。
1.2. 数据天生工具
OpenAI提供了一个工具,可以资助你天生此训练文件。
- 该工具担当各种文件格式(CSV、TSV、XLSX、JSON或JSONL)作为输入,只要它们包罗<提示词,文本补全,输出即可直接用于微调过程的JSONL文件。
- 该工具还会验证数据,并提供改进数据质量的发起。
安装:当实行pip install openai时,该工具会主动安装。
终端利用此工具:
- $ openai tools fine_tunes.prepare_data -f <LOCAL_FILE>
复制代码
1.3. 数据文件的细节留意
- 工具发起:该工具会提出一系列发起来改善终极文件的结果。你既可以担当这些发起,也可以不担当,还可以指定选项-q,从而主动担当全部发起。
- 分为训练集和验证集:如果你有充足的数据,那么该工具会扣问你是否要将数据分为训练集和验证集。这是一种保举的做法。
- 算法将利用训练集来微调模子参数。
- 验证集则用于权衡模子在未用于更新参数的数据上的性能。
- 示例考核:对LLM的微调受益于高质量示例,最好由专家考核。
- 当利用已有数据集举行微调时,请确保对数据举行筛查,以清除具有得罪性的内容或禁绝确的内容。如果数据集过大而无法手动考核全部内容,则可以查抄随机样本。
2. 上传数据来训练模子
预备好数据后,须要将其上传到OpenAI服务器。OpenAI API提供了差异的函数来利用文件。以下是一些告急函数。
上传文件:
- openai.File.create(
- file=open("out_openai_completion_prepared.jsonl", "rb"),
- purpose='fine-tune'
- )
- # 两个参数是必需的:file和purpose。
- # 在微调时,将purpose设置为fine-tune。这将验证用于微调的下载文件格式。
复制代码 此函数的输出是一个字典,你可以在id字段中检索文件ID。现在,文件的总巨细可以到达1 GB 。
删除文件:
- openai.File.delete("file-z5mGg(...)")
复制代码
列出全部已上传的文件:
3. 创建微调模子
如下:微调已上传文件是一个简单的过程。
- openai.FineTune.create(
- training_file='', # 给定数据集
- model='', # 根据给定的数据集优化指定的模型
- validation_file='',
- suffix='' #
- )
复制代码 重要的输入参数
字段名称范例形貌training_filestring这是唯一的必填参数,包罗已上传文件的 ID。数据集必须格式化为 JSONL 文件。每个训练示例是一个带有 prompt 键和 completion 键的 JSON 对象modelstring指定用于微调的底子模子。可选项有 ada, babbage, curie, davinci,或曾之前微调过的模子。默认的底子模子是 curievalidation_filestring包罗验证数据的已上传文件。该文件中的数据将仅在微调过程中用来天生验证指标suffixstring这是一个最多由 40 个字符构成的字符串,它将被添加到自界说模子名称中该函数的相应
包摆列队作业的详细信息,如作业的状态、fine_tune_id,以及过程竣事时模子的名称。
4. 列出微调作业
可以通过以下函数获取OpenAI服务器上的全部微调作业
- openai.FineTune.list()
- # 结果是一个字典,包含所有微调模型的信息。
复制代码
5. 取消微调作业
可以通过以下函数立刻克制在OpenAI服务器上运行的作业:
- openai.FineTune.cancel()
- # 只有一个必需的参数:fine_tune_id。
- # 该参数是以ft-开头的字符串,例如ft-Re12otqdRaJ(...)。
- # 它是在使用openai.FineTune.create创建作业后获得的。
- # 如果你丢失了fine_tune_id,那么可以使用openai.FineTune.list检索它。
复制代码
二. 微调的应用
微调提供了一种强盛的技能本事,有助于提升模子在各类应用场景中的性能。再次提示,微调的资源比基于提示工程的技能更高,因此在大多数情况下并非必须。不外当须要利用它时,微调可以显着地改善结果。
1. 法律文天职析
场景
在这个案例中,LLM被用来处理处罚法律文本并提取有代价的信息。这些文档通常利用特定的行话写成,这使非专业人士很难明白其内容。
微调
通过在特定主题的法律语料库上对LLM举行微调,大概针对特定范例的终极用户,该模子可以更好地处理处罚法律文本,并在实行与该特定范例的终极用户相干的使命时变得更加纯熟。
结果
通过微调可以使模子专门针对特定范畴完成使命,或帮助非专业人士加入法律步调。
利用大量数据微调LLM,以分析法律文本,使其可以大概更好地处理处罚超出提示工程技能本领范围的眇小差异。
2. 主动代码检察-类Copilot
在这个案例中,微调可以资助模子分析开发职员编写的代码,并提出改进发起。
- 这须要在包罗代码片断息争释的数据集上训练模子,使模子可以大概处理处罚特定语言的语法、语义和最佳实践。
- 请留意,这个案例类似于GitHub对Copilot的用法,该工具旨在通过及时提供对代码和整个函数的发起来资助开发职员编写代码。
举例:
你可以利用微调来训练模子完成特定使命,好比代码检察,如下例子:
JSONL文件可以包罗代码及相应的检察品评。这将资助模子学习怎样提供正确且相干的代码质量反馈。以下是一个例子。
- {"prompt": "Review the following Python code:
- 'def sum(a, b): return a + b\nresult = sum(5, '5')'",
- "completion": "Type error: The 'sum' function is adding an integer
- and a string. Consider converting the string to an integer using
- int() before passing it to the function."}
复制代码
3. 财政文档择要
针对收益陈诉、财政报表和分析师陈诉等财政文档,颠末微调的LLM可以天生简明、正确的择要。
在与财政纪录明白相干的数据集上微调后,LLM可以更正确地明白财政文档的术语和上下文。
如许一来,你便可以给模子提供一个包罗财政文档及其抱负择要的JSONL文件。
好比,模子可以将央行关于上调利率的详细陈诉压缩成轻便而富有信息的择要。要调解现有模子以得到更好的财政文档择要,你须要拥有大量样本择要。
- {"prompt": "The central bank announced a 0.25% increase in the benchmark
- interest rate, citing concerns about inflationary pressures.
- This move is expected to affect borrowing costs for consumers
- and businesses.",
- "completion": "Bank increases rate 0.25% for inflation worry. May
- affect people, business borrowing costs."}
复制代码
4. 技能文档翻译
与少样本学习相比,利用微调后的模子来翻译技能文档可以显着地改善翻译结果。重要缘故起因是,技能文档通常包罗专业词汇和复杂的句子布局,少样本学习无法有效处理处罚这种复杂性。
对于技能文档翻译的用例,该文件应该包罗将技能文本翻译为目的语言的翻译内容。
5. 为专业范畴天生内容
一个颠末微调的模子可以针对高度专业化的主题天生高质量、引人入胜且与上下文相干的内容。
微调模子可以显着进步客户服务谈天呆板人的性能,使模子更好地明白和相应特定范畴的客户查询。客户服务场景具备天然的上风,即容易网络典范客户服务对话的高质量问答集,通过用户反馈形成回路,再通过微调连续改进模子的相应质量。这使模子可以大概更正确地辨认客户题目的本质,并提供符合的办理方案。好比,模子可以学习怎样处理处罚账户查询、故障清除或产物保举等详细题目。
三. 微调的资源
利用微调模子的资源不低。你不光须要付出模子训练费用,而且在模子预备好后,每次举行推测时须要付出的费用也会比利用OpenAI提供的底子模子略高一些。在我们撰写本书之时,费用如表所示,不外详细的费用会有所厘革。
模子训练利用ada每千个标志 0.0004 美元每千个标志 0.0016 美元babbage每千个标志 0.0006 美元每千个标志 0.0024 美元curie每千个标志 0.0030 美元每千个标志 0.0120 美元davinci每千个标志 0.0300 美元每千个标志 0.1200 美元作为比力,gpt-3.5-turbo模子的定价是每千个输出标志0.0020美元。可见,gpt-3.5-turbo模子的性价比最高。要相识最新的模子定价,请访问OpenAI的Pricing页面。
|