AI News HubLIVE
站内改写2 分钟阅读

使用Scikit-LLM进行多标签文本分类

本文介绍如何利用Scikit-LLM和大型语言模型,无需标注数据即可实现多标签文本分类。通过整合Groq提供的免费开源LLM,采用零样本推理方式,并基于真实数据集go_emotions演示情感多标签分类。步骤包括库安装、API配置、分类器初始化、数据集加载及预测执行,展示一条文本可同时获得多个情感标签。

来源Machine Learning Mastery作者: Iván Palomares Carrascosa

使用Scikit-LLM进行多标签文本分类

文本分类通常将产品评论分为“正面”或“负面”,或将客户咨询归入单一类别。然而,人类情感往往复杂多变,一句话可能同时包含喜悦与愤怒。例如,“我非常喜欢增强的电池续航,但新设计糟糕透顶。”多标签分类应运而生,它能同时为文本分配多个类别。

传统构建多标签分类器需要大量标注数据和复杂神经网络。如今,借助大型语言模型(LLM)的零样本推理能力,这一过程大为简化。Scikit-LLM库正是为此而生,它让scikit-learn用户能像使用传统机器学习工作流一样调用LLM进行推理,无需繁琐训练。本文将使用真实开源数据集,展示如何进行多标签情感分类。

环境准备

首先安装所需库:

pip install scikit-llm datasets

我们将使用Groq提供的免费LLM。请前往Groq官网注册并获取API密钥。密钥仅可复制一次,请妥善保存。

加载与配置分类器

以下Python代码配置Scikit-LLM并使用Groq模型:

from skllm.config import SKLLMConfig
from skllm.models.gpt.classification.zero_shot import MultiLabelZeroShotGPTClassifier

# 设置API密钥(本地环境可填任意字符串)
SKLLMConfig.set_openai_key("YOUR_FREE_API_KEY")
# 设置自定义端点URL
SKLLMConfig.set_gpt_url("https://api.groq.com/openai/v1/")
# 初始化分类器,指定模型并设置最大标签数
clf = MultiLabelZeroShotGPTClassifier(model="custom_url::llama-3.3-70b-versatile", max_labels=3)

加载数据集

使用Hugging Face的go_emotions数据集(前100条评论):

from datasets import load_dataset
import pandas as pd

dataset = load_dataset("google-research-datasets/go_emotions", split="train[:100]")
df = dataset.to_pandas()
texts = df['text'].tolist()
print(f"已加载 {len(texts)} 条评论。")

示例输出:

已加载 100 条评论。
示例:'My favourite food is anything I didn't have to cook myself.'

零样本拟合与预测

定义候选标签并“拟合”模型(实际仅传入标签集,不进行训练):

candidate_labels = [
    "admiration", "amusement", "anger", "annoyance",
    "approval", "curiosity", "disappointment", "joy",
    "sadness", "surprise"
]
clf.fit(None, [candidate_labels])

对前五条评论进行预测:

predictions = clf.predict(texts)
for i in range(5):
    print(f"评论: {texts[i]}")
    print(f"预测情感: {predictions[i]}")

输出示例:

评论: My favourite food is anything I didn't have to cook myself.
预测情感: ['amusement' 'joy' '']
--------------------------------------------------
评论: Now if he does off himself, everyone will think he's having a laugh screwing with people instead of actually dead
预测情感: ['anger' 'annoyance' 'surprise']

注意,一条文本可被分配多个标签。由于使用LLM本地推理,预测过程可能较慢,这是正常现象。

总结

本文展示了如何利用Scikit-LLM和预训练LLM,以经典的scikit-learn风格实现多标签文本分类,无需任何标注数据。后续可扩展候选标签集、替换不同模型,或引入少样本学习进一步优化结果。对于生产环境,建议构建评估循环以衡量标签级别的精确率和召回率。