roman_日积跬步-终至千里

roman_日积跬步-终至千里

OpenAI提供了许多可直接使用的GPT模型。尽管这些模型在各种任务上表现出色,但针对特定任务或上下文对这些模型进行微调,可以进一步提高它们的性能。

一. 开始微调

假设你想为公司创建一个电子邮件自动回复生成器。由于你的公司所在的行业使用专有词汇,因此你希望生成器给出的电子邮件回复保持一定的写作风格。要做到这一点,有两种策略:要么使用之前介绍的提示工程技巧来强制模型输出你想要的文本,要么对现有模型进行微调。

本文对微调进行讨论。

 
微调的基本逻辑

通过对现有模型进行微调,你可以创建一个专门针对特定业务所用语言模式和词汇的电子邮件自动回复生成器。

 

下图展示了微调过程,也就是使用特定领域的数据集来更新现有GPT模型的内部权重。微调的目标是使新模型能够在特定领域中做出比原始GPT模型更好的预测。

【大模型应用开发极简入门】微调(一):1.微调基础原理介绍、2. 微调的步骤、3. 微调的应用(Copilot、邮件、法律文本分析等)-LMLPHP

 

需要注意的是:新模型仍然在OpenAI服务器上

 

1. 选择合适的基础模型

目前,微调仅适用于davinci、curie、babbage和ada这几个基础模型。这些模型都在准确性和所需资源之间做出了权衡。
 

开发人员可以为应用程序选择最合适的模型:

微调后的专有能力

 

2. 微调和少样本学习

2.1. 对比微调和少样本学习

模型是否进行了更新

 

都可以用来增强GPT模型

 

2.2. 微调需要的数据量

微调通常需要用到大量数据。可用示例的缺乏往往限制了我们使用这种技巧。

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提供了一个工具,可以帮助你生成此训练文件。

安装:当执行pip install openai时,该工具会自动安装。

终端使用此工具:

$ openai tools fine_tunes.prepare_data -f <LOCAL_FILE>

 

1.3. 数据文件的细节注意

 

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(...)")

 

列出所有已上传的文件:

openai.File.list()

 

3. 创建微调模型

如下:微调已上传文件是一个简单的过程。

openai.FineTune.create(  
    training_file='',  # 给定数据集
    model='',  # 根据给定的数据集优化指定的模型
    validation_file='',  
    suffix=''  # 
)

主要的输入参数

该函数的响应

 

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. 法律文本分析

场景

微调

成果

 

2. 自动代码审查-类Copilot

在这个案例中,微调可以帮助模型分析开发人员编写的代码,并提出改进建议。

举例:
你可以使用微调来训练模型完成特定任务,比如代码审查,如下例子:

{"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可以生成简明、准确的摘要。

{"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提供的基础模型略高一些。在我们撰写本书之时,费用如表所示,不过具体的费用会有所变化。

作为比较,gpt-3.5-turbo模型的定价是每千个输出标记0.0020美元。可见,gpt-3.5-turbo模型的性价比最高。要了解最新的模型定价,请访问OpenAI的Pricing页面。

 

06-17 12:31