
使用 Scikit-LLM 进行零样本和少样本分类
图片由 Editor | ChatGPT 提供
在本文中,您将学习到:
- Scikit-LLM 如何将像 OpenAI 的 GPT 这样的大型语言模型与 Scikit-learn 框架集成,用于文本分析。
- 零样本(zero-shot)和少样本(few-shot)分类之间的区别,以及如何使用 Scikit-LLM 来实现它们。
- 一个关于如何使用 OpenAI API 密钥配置 Scikit-LLM 并将其应用于示例文本分类任务的分步指南。
引言
Scikit-LLM 是一个 Python 库,旨在将大型语言模型(LLM),如 OpenAI 的 GPT-3.5 和 GPT-4,与 Scikit-learn 机器学习框架集成。它提供了一个简单的接口,使用自然语言提示将 LLM 用作零样本或少样本分类器,这使得它在下游文本分析任务(如分类、情感分析和主题标注)中非常方便。
本文重点介绍 Scikit-LLM 的零样本和少样本分类功能,并阐述如何将它与 Scikit-learn 工作流结合使用来完成这些任务。
在我们开始动手之前,让我们先澄清一下零样本和少样本分类之间的区别。
- 零样本分类:LLM 在没有任何来自数据集的已标记示例的情况下对文本进行分类;它仅通过可能的类别标签进行提示。
- 少样本分类:在提示中提供一小部分已标记的示例——通常是每个可能类别提供几个示例——以引导 LLM 的推理朝着所请求的分类方向进行。
分步流程
现在是时候用我们文章的主角库 Scikit-LLM 来尝试这两种用例了。我们首先来安装它:
1 |
!pip install scikit-llm |
我们现在需要导入以下两个类:
1 2 |
from skllm.config import SKLLMConfig from skllm import ZeroShotGPTClassifier |
由于使用 OpenAI 的模型需要一个 API 密钥,我们需要对其进行配置。请访问并(如果需要的话)在 OpenAI 平台上注册以创建一个新的 API 密钥。请注意,如果您没有付费计划,您在以下示例中使用模型的选项可能会受到限制。
1 |
SKLLMConfig.set_openai_key("API_KEY_GOES_HERE") |
让我们来看这个小示例数据集,其中包含几条用户评论及其对应的情感标签:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
X = [ "我喜欢这个产品!它效果很好,超出了我的预期。", "这是我所受过的最差的服务。", "这部电影还行,不好也不坏。", "出色的客户支持和非常迅速的响应。", "我对这个产品的质量感到失望。" ] y = [ "积极", "消极", "中性", "积极", "消极" ] |
我们按如下方式创建一个零样本分类器的实例:
1 |
clf = ZeroShotGPTClassifier() |
正如其名,Scikit-LLM 深度基于 Scikit-learn。因此,如果您熟悉 Scikit-learn 生态系统,那么训练和评估模型的过程会感觉非常熟悉:
1 2 3 4 |
clf.fit(X, y) labels = clf.predict(X) print(labels) |
但这里才是零样本分类真正价值的体现:训练数据并非必需。分类器可以仅使用可能的标签进行“拟合”。换句话说,可以这样做:
1 2 3 |
clf_empty = ZeroShotGPTClassifier() clf_empty.fit(None, ["积极", "消极", "中性"]) labels = clf_empty.predict(X) |
而且它依然能工作!这才是零样本分类的真正精髓。
关于少样本分类,其过程与我们提供训练数据的第一个零样本分类示例非常相似。事实上,fit()
方法是向模型传递少量已标记示例的正确方式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from skllm import FewShotGPTClassifier clf = FewShotGPTClassifier() # Fit 使用少样本示例来构建部分提示 clf.fit(X, y) test_samples = [ "新更新太棒了,而且非常流畅。", "我对这次体验一点也不满意。", "嗯,既不刺激也不糟糕。" ] predictions = clf.predict(test_samples) print(predictions) |
初听可能觉得奇怪,但在少样本分类这个特定用例中,fit()
和 predict()
方法都是推理过程的一部分。fit()
为提示提供已标记的示例,而 predict()
提供待分类的新文本。它们共同构建了发送给 LLM 的完整提示。
总结
本文演示了使用新发布的 Scikit-llm 库实现的两个文本分类用例:零样本和少样本分类。这两种技术采用类似于 Scikit-learn 的方法,但在利用示例数据进行推理时,它们使用的提示策略有细微的差别。
零样本分类不需要已标记的示例,仅依靠已加载模型的一般理解能力来分配标签。而少样本分类则将一小组已标记的示例整合到提示中,以更准确地引导模型的推理。
暂无评论。