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風格實現多標籤文本分類,無需任何標註資料。後續可擴充套件候選標籤集、替換不同模型,或引入少樣本學習進一步最佳化結果。對於生產環境,建議構建評估迴圈以衡量標籤級別的精確率和召回率。