使用 Scikit-LLM 進行零樣本和少樣本分類
使用 Scikit-LLM 進行零樣本和少樣本分類
在本文中,您將學習:
- Scikit-LLM如何將OpenAI的GPT等大型語言模型與Scikit-learn框架集成以進行文本分析。
- 零樣本和少樣本分類之間的區別以及如何使用Scikit-LLM實現它們。
- 一個指南,介紹如何配置 Scikit-LLM 并使用 OpenAI API 密鑰,以及如何將其應用于一個示例文本分類任務。
介紹
Scikit-LLM 是一個旨在將大型語言模型(LLMs)如 OpenAI 的 GPT-3.5 和 GPT-4 與 Scikit-learn 機器學習框架集成的 Python 庫。它提供了一個簡單的接口,可以使用自然語言提示將 LLM 作為零樣本或少樣本分類器使用,使其非常適合下游文本分析任務,如分類、情感分析和主題標記。
本文重點介紹 Scikit-LLM的零樣本和少樣本分類能力,并展示了如何將其與Scikit-learn工作流程結合以完成這些任務。
在我們開始操作之前,讓我們先弄清楚零樣本分類和少樣本分類之間的區別。
- 零樣本分類: LLM類在沒有來自數據集的任何先驗標記示例的情況下對文本進行分類;它僅根據可能的類別標簽進行提示。
- 少樣本分類: 在提示中提供了一小組帶標簽的示例——通常是每個可能類別幾組示例——以引導LLM的推理符合所請求的分類。
逐步過程
是時候嘗試這兩個使用案例了,主角是我們的文章中介紹的庫:Scikit-LLM。我們首先安裝它:
!pip install scikit-llm
我們現在需要導入以下兩個類:
from skllm.config import SKLLMConfig
from skllm import ZeroShotGPTClassifier
由于使用OpenAI的模型需要一個API密鑰,我們將需要進行配置。如果需要,請訪問并注冊 OpenAI平臺 以創建一個新的API密鑰。請注意,如果您沒有付費計劃,您在下面示例中使用模型的選項可能會有限制。
SKLLMConfig.set_openai_key("API_KEY_GOES_HERE")
讓我們考慮這個小型示例數據集,包含一些用戶評論及其相關的感情標簽:
X = ["I love this product! It works great and exceeded my expectations.","This is the worst service I have ever received.","The movie was okay, not bad but not great either.","Excellent customer support and very quick response.","I am disappointed with the quality of this item."
]y = ["positive","negative","neutral","positive","negative"
]
我們創建一個零樣本分類器的實例如下:
clf = ZeroShotGPTClassifier()
正如其名字所示,Scikit-LLM 強烈依賴于 Scikit-learn。因此,如果您對 Scikit-learn 生態系統有經驗,那么訓練和評估模型的過程將非常熟悉:
clf.fit(X, y)
labels = clf.predict(X)print(labels)
但是這里正是零樣本分類真正發揮作用的地方:不需要訓練數據。分類器可以僅使用可能的標簽進行“擬合”。換句話說,可以做到類似這樣的事情:
clf_empty = ZeroShotGPTClassifier()
clf_empty.fit(None, ["positive", "negative", "neutral"])
labels = clf_empty.predict(X)
這仍然有效!這是真正的零樣本分類的本質。
關于少樣本分類,這個過程非常類似于我們提供訓練數據的第一個零樣本分類示例。事實上,fit()
該方法是將少量標記示例傳遞給模型的正確方法。
from skllm import FewShotGPTClassifierclf = FewShotGPTClassifier()# Fit uses few-shot examples to build part of the prompt
clf.fit(X, y)test_samples = ["The new update is fantastic and really smooth.","I'm not happy with the experience at all.","Meh, it was neither exciting nor terrible."
]predictions = clf.predict(test_samples)
print(predictions)
這聽起來可能有些奇怪,但在少樣本分類的特定使用案例中,fit()
和 predict()
方法都是推理過程的一部分。fit()
提供了 prompt 的標記示例,而 predict()
提供了要分類的新文本。它們一起構成了發送到 LLM 的完整 prompt。
總結
本文展示了使用新發布的Scikit-llm庫的兩種文本分類用例:零樣本和少樣本分類。使用類似于Scikit-learn的方法,這兩種技術在利用示例數據進行推理的提示策略上略有不同。
零樣本 分類不需要帶標簽的示例,并且僅依賴于加載的模型的普遍理解來分配標簽。同時,少樣本 分類將一小組帶標簽的示例納入提示中,以更準確地引導模型的推理。