简介
如果你不是生活在岩石下,你很可能已经听说过ChatGPT,因为它是最近互联网的主要话题。这是一个由OpenAI开发的人工智能聊天机器人,你可以就任何话题进行对话,并得到类似人类的连贯回应。它建立在迄今为止训练的最大的语言模型之上,它基于来自互联网内外的大量文本数据。它于2022年11月30日推出,因其在许多知识领域的连贯、正确和清晰的回答而引起了人们的关注。
除了用连贯的回答来回答问题的主要功能外,OpenAI还提供了一种方法来定制他们的模型来回答问题,并为它以前从未见过的输入生成文本。这个功能被称为微调,允许任何人利用GPT-3技术,根据数据集的例子训练原始模型。这将产生一个个性化的模型,为您的特定场景回答问题。有了这个模型,对你的具体案例的答复质量将得到改善,请求的延迟也将减少。
有了这个工具,我决定尝试一下,并训练一个自定义模型来测试它的工作情况。在寻找开放的数据集后,我发现了一个引起我注意的数据集,一个假新闻数据集。这个数据集由假新闻和真新闻组成,这将是一个有趣而大胆的场景,可以用来测试GPT-3微调功能的潜力。
微调GPT
收集和净化你的数据集
首先,我搜索了一个适合微调过程的公开数据集。我在寻找一个能够符合GPT-3使用的格式的数据集:问题和答案或提示和完成。经过几个小时的数据集搜索,我终于找到了一个有希望的假新闻数据集。该数据集由成千上万的真实新闻和假新闻的例子组成。它被分为两个CSV文件,一个是假新闻,另一个是真新闻。每个文件中的每篇新闻都有以下属性:标题、文本主体、主题和日期。你可以看到下面的数据集例子(fake_news_dataset.csv):
title,text,subject,date
News Title 2,News body 2,politicsNews,31/12/22
News Title 2,News body 2,politicsNews,09/10/22
News Title 3,News body 3,worldNews,17/11/22
. . .
我们的想法是,根据新闻标题和正文来识别一篇新闻是假的还是真的。有了原始数据集,现在是时候以适合微调过程的方式来格式化数据了。文件格式应该是CSV,必须包含两个属性:"提示 "和 "完成"。提示将有新闻标题和文本主体附加在一起。完成度是简单的一个词,假的或真的。结果文件的结构应该像下面的例子*(formated_dataset.csv*):
prompt,completion
"News Title: News body ... end","fake"
"News Title: News body ... end","true"
"News Title: News body ... end","fake"
. . .
为了将原始CSV数据格式化为微调的格式,为了简单起见,我使用了csvkit CLI工具。你可以使用其他工具,比如Python的panda,甚至Spark的大数据量。当你把数据放在一起,经过消毒和格式化,那么你就可以开始微调过程了。
微调的先决条件
首先,我使用pip安装了OpenAI Python库(pypi.org/project/OpenAI):
pip install --upgrade openai
然后我不得不设置OpenAI的API密钥,以允许你代表你的账户向OpenAI发送命令。我使用了api-keys页面中你的账户的api密钥。然后我设置了环境变量来授权命令给OpenAI,命令如下:
export OPENAI_API_KEY=<your_key>
格式化数据集
OpenAI的微调过程只接受JSONL格式的文件,但不用担心,它提供了一个工具,可以将上面提到的任何格式转化为JSONL。所以我运行下面的命令来做这件事:
openai tools fine_tunes.prepare_data -f formated_dataset.csv
该命令失败了,因为它缺少一些依赖性,所以我运行下面的命令来修复它,并再次尝试(点击这里了解更多细节)。命令安装运行openai包所需的依赖性:
pip install OpenAI[dependency]
openai的prepare_data命令分析了我的数据集,并向我展示了一个建议列表,其中有关于我的数据集的重要信息和一些用于微调的选项。然后,根据分析结果,它建议执行一些操作,比如,删除重复的数据,添加后缀分隔符,在完成的开头添加空白字符,等等。我应用了所有建议的操作,因为它们都符合我的数据集情况。
一个重要的操作是 "将数据分成训练集和验证集",这将在训练过程中产生一些评估结果。它将产生两个文件,其中包括一个训练集,用于微调(大约95%的例子)和一个验证集,用于评估训练过的模型的性能(大约5%的例子)。这个动作允许OpenAI以后生成关于模型性能的详细结果。
最后,我有了两个正确格式的JSONL文件,用于微调。注意,当命令完成后,它会给你一些关于如何运行微调命令的提示和建议。在这种情况下,建议的命令是:
openai api fine_tunes.create -t "dataset_train.jsonl" -v "dataset_valid.jsonl" -m "ada" --compute_classification_metrics --classification_positive_class " true"
这个命令将被用来创建训练好的模型,并将在下一节进行解释。
运行微调
现在我有了正确的JSONL格式的数据,我准备运行微调过程来训练自定义模型。请注意,这是一个付费功能,价格根据你的数据集的大小和你用于训练的基础模型而有所不同(见这里的定价)。
我运行了之前建议的 "fine_tunes.create "命令。这个命令有几个选项,可以根据你的需要进行设置或改变(查看它的细调命令细节,请点击这里)。例如,选项"-m "你可以设置为 "ada"、"babbage"、"curie "或 "davinci",是OpenAI提供的基于模型之一,具有不同的优势,如性能、精度、价格等(查看更多关于OpenAI提供的模型)。
openai api fine_tunes.create
-m "ada"
-t "prepared_dataset_train.jsonl"
-v "prepared_dataset_valid.jsonl"
--compute_classification_metrics
--classification_positive_class " true"
请注意,该命令可以根据你的数据集数值而改变。例如,对于分类器问题,提示中的每个输入都应该被归入预定义的类别之一,我不得不设置选项"--compute_classification_metrics" 。由于只有两个类,我不得不设置'--分类_正类" true"'。如果有更多的类,你必须设置"--classification_n_classes 5"。请看下面这些例子。
选项的解释:
- m:用于微调的模型
- t:训练数据集的文件名
- v:验证数据集的文件名
- --compute_classification_metrics:用于生成度量标准
- --classification_positive_class:微调用于正类为真的分类。
当你执行该命令时,它将把数据集文件上传到OpenAI服务器,该命令将提示你一个微调的ID,如 "ft-FpsHdkc836TLMi53FidOabcF"。我保存了这个id供以后参考。在这一点上,OpenAI服务器收到了请求,微调被排队执行。由于数据集的大小和设定的模型,微调的执行需要几个小时。我没有必要等待进程结束,所以你毫不犹豫地杀死了这个进程(ctrl-c),并在稍后回来检查工作的进展。我通过用你之前收到的id运行以下命令来检查你的进程状态:
openai api fine_tunes.get -i ft-FpsHdkc836TLMi53FidOabcF
当微调完成后,我检查了你的微调进程的状态为 "已处理",意味着你的自定义模型训练已经完成,可以使用了。为了使用我训练好的模型,我必须得到它的名字,我在名为 "fine_tuned_model "的属性中找到了它(例如:"fine_tuned_model":"ada:ft-personal-2023-01-18-19-50-00"
)。
为了在向OpenAI发送提示时使用训练好的模型,我必须在"-m "选项中设置你的模型的ID,就像下面显示的那样:
openai api completions.create -m ada:ft-personal-2023-01-18-19-50-00 -p "your prompt here!"
我也能够在我的账户的游乐场链接地址中使用训练好的模型。现在我可以自由发挥,检查,测试和评估我的自定义训练模型,以确保它对我的场景做出预期的回答。在这种情况下,我可以发送一篇新闻文章,它将返回该文章是否是假的请看下面的结果。
性能评估结果(奖金)
记得我们为数据集生成了两个文件,一个用于训练,另一个用于验证。OpenAI用第一个文件来训练模型,用第二个文件来运行一些评估程序来测量一些统计数据,比如说,准确率和损失。我可以用下面的命令看到这些统计数字:
openai api fine_tunes.results -i ft-FpsHdkc836TLMi53FidOabcF results.csv
输出的数据默认为CSV文件,可以保存在一个文件中,以便更好地进行可视化。文件结构是基于训练过程中完成的步骤,由csv文件的每一行表示。每一行都显示了关于该步骤的有价值的信息,如:它处理了多少个例子,处理了多少个标记,训练准确率,训练损失,验证准确率,验证损失,等等。在这种情况下,结果是:
在这个链接中看到更多关于结果的信息。
结论
随着GPT-3、GPT-4和ChatGPT的诞生,OpenAI正在带来近代最革命性的技术颠覆之一。最重要的是,任何人都可以使用这个不可思议的工具。除此之外,OpenAI还为任何人提供必要的工具,以创建个性化的模型来参加任何特定的场景。这种微调过程很容易被OpeanAI提供给任何人。微调可以获得OpenAI在GPT中使用的机器学习的尖端技术。这为改善公司、员工和客户的计算机人际互动提供了无限的可能性。
微调允许任何人创建特定于任何场景的定制模型。在文章的案例中,它创建了一个假新闻分类器。想象一下,如果有东西提醒你正在阅读的文章可能是假的,这对用户来说是多么有用!
其他例子可以是:
- 创建一个聊天机器人,以常规方式与客户互动,回答关于你的公司、服务和产品的具体问题。
- 帮助员工在一个有多篇文字文章的大型知识库中快速便捷地找到有价值的信息,在这里找到你需要的东西是很难的,也是很耗时的。
涉及大量文本的情况下,它可以帮助很多。