GPT-4o mini微调医疗援助模型
在着手创建由生成式 AI 驱动的聊天解决方案时,效率应该是我们的指导方针。从利用 SaaS 解决方案到从头开始构建模型,选项多种多样。在本文中,我将介绍基于 Azure OpenAI 服务的模型微调,重点是在定制与效率之间取得平衡。
注意:本文中显示的输入数据包含与医学相关的一般问题和答案,目的是开发一个包含一些医学领域信息的模型。由于我不是医学专业人士,我仅将这些数据用于本文所讨论的数据科学工作,而不是建议或表明任何医疗状况或疾病的定义、预防、诊断或治疗。
优先考虑效率意味着并不总是需要选择最大、最强大的模型。定制通常使我们能够使用更轻量的模型版本实现卓越的性能。出于这个原因,我选择了 GPT-4o mini,它是著名的 GPT-4o 模型的较小版本。 在下图中,我们可以在两个阶段使用它:提示工程和 AOAI 模型 FT。
1、为什么微调是一个明智的选择?
你可能已经熟悉了少样本学习的概念,其中机器学习模型在极少量的标记示例上进行训练,从而提高效率。微调是另一种(尽管是独立的)优先考虑效率的方法,并且与少样本学习相比具有几个优势:
- 质量结果:微调可以在比单个提示更大的数据集上进行训练,从而产生更高质量的输出。
- 令牌效率:部署后,经过微调的模型会减少令牌消耗,因为并非所有数据都需要作为输入上下文传递。
- 更低的延迟:经过微调的模型可以更快地处理请求,从而提供响应更快的用户体验。
尽管本文的重点是微调方法,但它不应该是解决这些场景的默认或首选方法。首先考虑提示工程和检索增强生成 (RAG) 解决方案,因为微调的训练阶段可能需要大量计算且成本高昂。
2、模型微调
虽然微调过程乍一看似乎很有挑战性,但将其分解为可管理的步骤可以简化整个过程。以下是指导你完成的简化程序:
- 部署基础模型
- 准备输入数据
- 上传文件
- 微调模型
- 部署微调模型
- 测试模型
我将在本文的其余部分依次介绍这些步骤。
2.1 部署基础模型
我们将通过转到部署 > 部署模型 > 部署基础模型,从 Azure OpenAI Studio 中的 Azure OpenAI 服务开始部署我们的 GPT-4o mini模型。
2.2 准备输入数据
第二步是上传将用于训练的数据。提供至少几千个示例以获得更高质量的结果非常重要。上传的文件必须遵循特定格式,即使用 UTF-8 和字节顺序标记 (BOM) 进行 jsonl 编码。鉴于大多数训练数据集都不是这种格式的现成可用数据,我将添加一个额外步骤来帮助你从 .csv 文件转换数据。
正如我之前提到的,我的输入数据包含一般的医学相关问题和答案,目的是开发一个包含一些医学领域信息的模型。以下是输入数据的示例:
训练数据必须采用问题/答案对的格式,因为模型必须知道如何回答。
首先在本地执行以下 Python 代码以从 .csv 格式转换为 .jsonl:
import pandas
import json
file_name = "qna-medicaldata"
df = pandas.read_csv(file_name+".csv", header=None)
system_message = "You are an AI assistant expert in medicine that answers medical questions."
structured_message = json.dumps("")
for index in df.index:
if index == 0:
continue
question = df.loc[index][0]
answer = df.loc[index][1]
row = '{"messages": [{"role": "system", "content": "'+ system_message +'" }, {"role": "user", "content": "'+ question +'" }, {"role": "assistant", "content": "'+ answer +'" }]}\n'
row_json = json.dumps(row)
structured_message += row
with open(file_name+".jsonl","w", encoding="utf-8-sig") as file_handle:
file_handle.write(structured_message[2:len(structured_message)])
每一行都必须具有以下结构: {“messages”: [{“role”: “system”, “content”: “‘+ system_message +’” }, {“role”: “user”, “content”: “‘+ question +’” }, {“role”: “assistant”, “content”: “‘+ answer +’” }]}
同样重要的是将最终文件的编码设置为 UTF-8-sig,以遵循 UTF-8 字节顺序标记 (BOM) 格式的要求。
预处理后,输入数据即可以适当的格式上传,如下所示:
{“messages”: [{“role”: “system”, “content”: “You are an AI assistant expert in medicine that answers medical questions.” }, {“role”: “user”, “content”: “What causes High Blood Pressure ?” }, {“role”: “assistant”, “content”: “Changes in Body Functions Researchers continue to study how various changes in normal body functions cause high blood pressure. The key functions affected in high blood pressure include — kidney fluid and salt balances — the renin-angiotensin-aldosterone system — the sympathetic nervous system activity — blood vessel structure and function. (…)” }]}
{“messages”: [{“role”: “system”, “content”: “You are an AI assistant expert in medicine that answers medical questions.” }, {“role”: “user”, “content”: “How to prevent Diabetes ?” }, {“role”: “assistant”, “content”: “Your weight affects your health in many ways. Being overweight can keep your body from making and using insulin properly. It can also cause high blood pressure. If you are overweight or obese, choose sensible ways to reach and maintain a reasonable body weight. — Make healthy food choices. What you eat has a big impact on your weight and overall health. By developing healthy eating habits, you can help control your body weight, blood pressure, and cholesterol. (…)” }]}
{“messages”: [{“role”: “system”, “content”: “You are an AI assistant expert in medicine that answers medical questions.” }, {“role”: “user”, “content”: “Who is at risk for Osteoporosis?” }, {“role”: “assistant”, “content”: “The more likely you are to fall, the higher your risk for a fracture. And more severe falls increase your risk for fractures. Factors that increase your risk of falling and of fracturing a bone include — decreased muscle strength — poor balance — impaired eyesight — impaired mental abilities — certain medications, such as tranquilizers and muscle relaxants — hazardous elements in your living environment, such as slippery throw rugs and icy sidewalks. (…)” }]}
确保数据格式正确且丰富,为创建强大、专业的模型铺平了道路。
2.3 上传文件
我们现在可以返回 Azure OpenAI Studio,然后转到数据文件 > 添加数据 > 用于微调,并上传我们新创建的文件:
2.4 微调模型
上传数据后,我们继续执行微调步骤,即微调 > 微调模型。
我们选择要微调的模型(仅列出可以微调的模型)。
我们选择要微调的模型版本以及模型的后缀,以便轻松识别它。
我们选择之前上传的训练数据。
你也可以选择上传验证数据并自定义四个超参数:批处理大小、学习率乘数、时期数和种子。
模型现在开始执行,需要一段时间,在此期间状态从“排队”变为“正在运行”再变为“已完成”。
完成后,你可以打开模型并检查其状态和详细信息,例如训练指标(损失和标记准确度演变)。
2.5 部署微调模型
我们快到了——我们还有最后一步,即部署模型。这是因为虽然我们已经创建了模型,但除非我们部署它,否则它还不能使用。让我们转到部署 > 部署模型 > 部署微调模型,然后像基础模型一样重复该过程。
2.6 测试模型
一旦模型准备就绪,它就会像任何其他已部署的模型一样被列出。
让我们访问 Chat 游乐场,看看我们的模型是否已准备好投入使用:
我将问几个问题,看看它是否知道什么是青光眼以及如何治疗青光眼:
现在,让我们评估一下如果我们使用 RAG 架构而不是微调模型,它的行为会有何不同。如你所见,没有微调的传统 RAG 缺乏基于提供的数据解释结果的精度和准确性。
3、结束语
我们的分析揭示了微调模型生成的响应与 RAG 方法生成的响应之间的明显差异。微调模型以特定的方式提供答案,与其训练数据中的问答模式非常相似。这使得微调模型能够充当其领域的专家。相反,RAG 方法根据提供的示例数据生成答案,这可能并不总是那么专业或一致 - 但允许检查引用的数据。
对于涉及大量历史医疗数据的场景,RAG 可能不太实用。经过微调的模型具有专业化能力,为此类复杂数据集提供了更可行的解决方案。
有关自定义模型的详细分步指南,请参阅官方文档:使用 Azure OpenAI 服务自定义模型 。
原文链接:Creating specialized AI models: Fine-tuning GPT-4o mini for a medical assistance model
汇智网翻译整理,转载请标明出处