介绍
自去年发布测试版分类端点以来,我们开发了新方法来为此任务取得更好的结果。因此,我们将从我们的文档中删除分类端点,并在 2022 年 12 月 3 日为所有组织删除对该端点的访问。6 月 3 日之后创建的新帐户将无法访问此端点。
我们强烈鼓励开发人员改用更新的技术,以产生更好的结果,如下所述。
当前文档
https://beta.openai.com/docs/guides/classifications
https://beta.openai.com/docs/api-reference/classifications
选项
此处还概述了所有这些选项。
作为快速回顾,以下是当前分类端点的高级步骤:
选项 1:过渡到微调(推荐)
我们相信,大多数用例将通过转向微调模型得到更好的服务。造成这种情况的主要原因是我们当前的系统使用二元过滤器来缩小候选范围,而我们经过微调的系统可以接收任意数量的数据并学习示例之间的更多细微差别。有关创建微调模型的更多信息,请查看我们的指南。
选项 2:过渡到基于嵌入的搜索
另一种可能的选择是使用嵌入,尤其是当您的分类标签经常更改时。如果您对此不熟悉,可以访问我们的嵌入指南了解更多信息。
如果您使用的是小型数据集(<10,000 个文档),请考虑使用该指南中描述的技术来查找最佳文档来构建类似于此的提示。然后,您可以将该提示提交到我们的完成端点。
如果您有更大的数据集,请考虑使用 Pinecone 或 Weaviate 等矢量搜索引擎来支持该搜索。
选项 3:重新实现现有功能
如果您想重新创建分类端点的功能,我们是这样做的。此功能也主要复制在此脚本中。
在较高级别,您可以通过两种主要方式使用分类端点:您可以从上传的文件中获取数据或将其与请求一起发送。
如果您使用文档参数
如果您在分类 API 调用中提供文档,则只有一个步骤。
以下是我们使用的大致步骤:
-
使用此格式构建提示。
-
收集所有提供的文件。如果它们符合提示,只需使用它们。
-
进行OpenAI 搜索(也被弃用。请参阅其转换指南),其中文档是用户提供的文档,查询是上面的查询。按分数对文档进行排名。
-
按照得分顺序,尝试添加 Elastic 搜索文档,直到用完上下文中的空间。尽量增加不同标签的数量,因为这将有助于模型理解可用的不同标签。
-
使用提供的参数(logit_bias、n、stop 等)请求完成
在所有这些过程中,您需要检查提示的长度是否不超过模型的令牌限制。要评估提示中存在的令牌数量,我们建议使用https://huggingface.co/docs/transformers/model_doc/gpt2#transformers.GPT2TokenizerFast。
如果您使用的是文件参数
第一步:上传一个jsonl文件
在幕后,我们将用于分类的新文件上传到 Elastic 搜索。然后将 jsonl 的每一行作为文档提交。
在每一行中,我们需要一个“文本”字段、一个“标签”字段和一个可选的“元数据”字段
这些是我们索引的弹性搜索设置和映射:
{
"properties": {
"document": {"type": "text", "analyzer": "standard_bigram_analyzer"}, -> the “text” field
"label": {"type": "text", "analyzer": "standard_bigram_analyzer"},
"metadata": {"type": "object", "enabled": False}, -> the “metadata” field
}
}
{
"analysis": {
"analyzer": {
"standard_bigram_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "english_stop", "shingle"],
}
},
"filter": {"english_stop": {"type": "stop", "stopwords": "_english_"}},
}
}
之后,我们执行标准的 Elastic search 搜索调用并使用 `max_examples` 来确定要从 Elastic search 返回的文档数。
第 2 步:搜索
这是我们使用的大致步骤。我们的最终目标是创建一个具有这种格式的完成请求。它看起来与Documents非常相似。
从那里开始,我们的步骤是:
-
从 `experimental_alternative_question` 开始,或者,如果没有提供,则从 `question` 字段中的内容开始。称之为查询。
-
使用查询作为搜索参数查询弹性搜索“max_examples”文档。
-
获取这些文档并对它们进行OpenAI 搜索,其中来自 Elastic 搜索的条目是文档,查询是您在上面使用的查询。使用搜索的分数对文档进行排名。
-
按照得分顺序,尝试添加 Elastic 搜索文档,直到提示中的空间用完为止。尽量增加不同标签的数量,因为这将有助于模型理解可用的不同标签。
-
使用提供的参数(logit_bias、n、stop 等)请求 OpenAI 完成。将那一代返回给用户。
完成提示
{{ an optional instruction }}
Text: {{example 1 text}}
Category: {{example 1 label}}
---
Text: {{example 2 text}}
Category: {{example 2 label}}
---
Text: {{question}}
Category: