使用Scikit-LLM将LLM整合到Scikit-learn工作流程中

2023年12月22日 由 camellia 发表 437 0
LLM是一个强大的模型,可以改善我们的文本分析。通过Scikit-LLM,我们可以轻松地将LLM整合到我们的机器学习管道中。

2

文本分析任务已经存在一段时间了,因为需求总是存在的。研究已经取得了长足的进展,从简单的描述统计到文本分类和先进的文本生成。有了大型语言模型(LLM)在我们的武库中,我们的工作任务变得更加容易。

Scikit-LLM是一个为文本分析活动开发的Python包,它借助LLM的力量。这个包之所以出色,是因为我们可以将标准的Scikit-Learn管道与Scikit-LLM整合起来。

那么,这个包是关于什么的,它是如何工作的呢?让我们来了解一下。

Scikit-LLM

Scikit-LLM是一个Python包,通过LLM增强文本数据分析任务。它由Beatsbyte开发,以帮助弥合标准Scikit-Learn库和语言模型的强大能力。Scikit-LLM创建了其API,使其类似于SKlearn库,因此我们使用起来不会有太多麻烦。

安装

要使用该包,我们需要安装它们。为此,您可以使用以下代码。
pip install scikit-llm
截至本文撰写时,Scikit-LLM仅与部分OpenAI和GPT4ALL模型兼容。这就是为什么我们只会使用OpenAI模型。不过,如果需要,您可以通过初步安装组件来使用GPT4ALL模型。
pip install scikit-llm[gpt4all]
安装后,您必须设置OpenAI密钥以访问LLM模型。
from skllm.config import SKLLMConfig

SKLLMConfig.set_openai_key("")
SKLLMConfig.set_openai_org("")
试用Scikit-LLM

让我们在环境设置好后尝试一些Scikit-LLM的功能。LLM具有的一项能力是可以进行无需重新训练的文本分类,我们称之为Zero-Shot。然而,我们最初会尝试使用样本数据进行Few-Shot文本分类。
from skllm import ZeroShotGPTClassifier
from skllm.datasets import get_classification_dataset


#label: Positive, Neutral, Negative
X, y = get_classification_dataset()


#Initiate the model with GPT-3.5
clf = ZeroShotGPTClassifier(openai_model="gpt-3.5-turbo")
clf.fit(X, y)
labels = clf.predict(X)
您只需要在X变量中提供文本数据,并在数据集中提供标签y。在这种情况下,标签由情感构成,可以是Positive(积极的)、Neutral(中立的)或Negative(消极的)。

正如您所见,该过程类似于在Scikit-Learn包中使用拟合方法。然而,我们已经知道Zero-Shot不一定需要训练数据集。这就是为什么我们可以在没有训练数据的情况下提供标签。
X, _ = get_classification_dataset()

clf = ZeroShotGPTClassifier()
clf.fit(None, ["positive", "negative", "neutral"])
labels = clf.predict(X)
这也可以扩展到多标签分类案例中,你可以在以下代码中看到。
from skllm import MultiLabelZeroShotGPTClassifier
from skllm.datasets import get_multilabel_classification_dataset
X, _ = get_multilabel_classification_dataset()
candidate_labels = [
"Quality",
"Price",
"Delivery",
"Service",
"Product Variety",
"Customer Support",
"Packaging",,
]
clf = MultiLabelZeroShotGPTClassifier(max_labels=4)
clf.fit(None, [candidate_labels])
labels = clf.predict(X)
Scikit-LLM的神奇之处在于,它允许用户将LLM的力量扩展到典型的Scikit-Learn管道中。

机器学习管道中的Scikit-LLM

在下一个例子中,我将展示我们如何将Scikit-LLM作为向量化器,并使用XGBoost作为模型分类器。我们还会将这些步骤包装到模型管道中。

首先,我们将加载数据并启动标签编码器将标签数据转换为数值。
from sklearn.preprocessing import LabelEncoder

X, y = get_classification_dataset()

le = LabelEncoder()
y_train_enc = le.fit_transform(y_train)
y_test_enc = le.transform(y_test)
接下来,我们将定义一个管道来执行向量化和模型拟合。我们可以用以下代码来实现。
from sklearn.pipeline import Pipeline
from xgboost import XGBClassifier
from skllm.preprocessing import GPTVectorizer

steps = [("GPT", GPTVectorizer()), ("Clf", XGBClassifier())]
clf = Pipeline(steps)

#Fitting the dataset
clf.fit(X_train, y_train_enc)
最后,我们可以使用以下代码进行预测。
pred_enc = clf.predict(X_test)
preds = le.inverse_transform(pred_enc)
正如我们所看到的,我们可以在Scikit-Learn管道中使用Scikit-LLM和XGBoost。结合所有必要的包将使我们的预测更加有力。

还有各种各样的任务您可以使用Scikit-LLM来完成,包括模型微调,我建议您查阅文档以进一步了解。如果有必要,您还可以使用来自GPT4ALL的开源模型。

结论

Scikit-LLM是一个Python包,它用LLM增强了Scikit-Learn文本数据分析任务。在本文中,我们讨论了如何使用Scikit-LLM进行文本分类,并将其结合到机器学习管道中。
文章来源:https://www.kdnuggets.com/easily-integrate-llms-into-your-scikit-learn-workflow-with-scikit-llm
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消