根据文档https://beta.openai.com/docs/guides/fine-tuning,用于微调OpenAI GPT3模型的训练数据应如下结构化:
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
我有一个来自内部知识库的文档集合,这些文档已经预处理成JSONL文件,格式如下:
{ "id": 0, "name": "Article Name", "description": "Article Description", "created_at": "timestamp", "updated_at": "timestamp", "answer": { "body_txt": "An internal knowledge base article with body text", }, "author": { "name": "First Last"}, "keywords": [], "url": "A URL to internal knowledge base"}
{ "id": 1, "name": "Article Name", "description": "Article Description", "created_at": "timestamp", "updated_at": "timestamp", "answer": { "body_txt": "An internal knowledge base article with body text", }, "author": { "name": "First Last"}, "keywords": [], "url": "A URL to internal knowledge base"}
{ "id": 2, "name": "Article Name", "description": "Article Description", "created_at": "timestamp", "updated_at": "timestamp", "answer": { "body_txt": "An internal knowledge base article with body text", }, "author": { "name": "First Last"}, "keywords": [], "url": "A URL to internal knowledge base"}
然后,文档建议可以使用命令openai api fine_tunes.create -t <TRAIN_FILE_ID_OR_PATH> -m <BASE_MODEL>
在这些文章中对模型进行微调。
运行此结果:
错误:文件应为带有提示/完成键的JSONL格式。第1行缺少prompt
键。(HTTP状态代码:400美元)
考虑到上面提到的文档结构,这并不意外。实际上,如果我运行openai tools fine_tunes.prepare_data -f training-data.jsonl
,那么我会被告知:
您的文件包含490个提示-完成对在necessary_column验证器中出错:缺少prompt
列/键。请确保正确命名列/键,然后重试'
这是尝试微调文档集合上的GTP3模型的正确方法吗,这样问题可以稍后被问到关于它们的内容。在这种情况下,人们会在prompt
和completion
字段中放置什么,因为我不是从一个我有可能的问题和理想答案的集合的地方开始。
我是否从根本上误解了用于微调GTP3模型的机制?对我来说,GTP3需要在可能的问题和答案上进行培训是有意义的。然而,假设基础模型已经训练好了,并且这个过程更像是提供了不在公共域中的附加数据集,以便可以提出关于它的问题,我会认为我想要实现的是可能的。作为一个工作示例,我确实可以转到https://chat.openai.com/并提出一个关于这些文档的问题,如下所示:
给定以下文档:
[粘贴其中一个文档的文本内容]
你能告诉我XXX
事实上,它经常能得到正确的答案,我现在正在做的是在大约500个文档上微调模型,这样人们就不必在每次问问题时粘贴整个单个文档,这样模型甚至可以考虑所有大约500个文档的内容,而不仅仅是用户提供的单个文档。
1条答案
按热度按时间tcomlyy61#
微调是指修改预先训练好的机器学习模型以适应特定任务的需要的过程。微调不是为模型提供内部知识库。你可以为知识库中的数据块创建一个嵌入数据库。然后,这个数据库可以用来在响应查询时从语义上搜索最相关的信息。收到查询后,可以搜索数据库以查找与查询最相似的数据块。然后,可以将此信息馈送到GPT-3以提供答案。使用此方法,可以通过向数据库添加新数据块来轻松更新知识。