Machine Learning Mastery

Building an End-to-End Sentiment Analysis Pipeline with Scikit-LLM

8.5内容质量

TL;DR · AI 摘要

Scikit-LLM 桥接传统机器学习与现代大语言模型 API,实现快速情感分析推理。

核心要点

  • Scikit-LLM 支持使用 Groq API 调用开源大语言模型进行情感分析。
  • 使用 IMDB 电影评论数据集进行推理,实现零样本分类。
  • 通过 scikit-learn 兼容语法构建端到端情感分析流水线。

结构提纲

按章节快速跳转。

  1. 传统机器学习依赖结构化特征,而大语言模型改变了这一规则。

  2. ·Scikit-LLM 的作用

    Scikit-LLM 桥接传统机器学习与现代大语言模型 API。

  3. 需要安装 Scikit-LLM 并配置 Groq API 凭据。

  4. 使用 scikit-learn 兼容语法构建零样本分类流水线。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • Scikit-LLM 情感分析流水线
    • 传统机器学习
      • 特征提取(如 TF-IDF)
      • 模型(如逻辑回归、SVM)
    • 现代大语言模型
      • 零样本/少样本推理
      • Groq API 集成
    • 实现步骤
      • 安装 Scikit-LLM
      • 配置 Groq API 凭据
      • 构建流水线

金句 / Highlights

值得收藏与分享的关键句。

#Scikit-LLM#Groq#情感分析#机器学习
打开原文

使用 Scikit-LLM 构建端到端情感分析流水线 - MachineLearningMastery.com

使用 Scikit-LLM 构建端到端情感分析流水线

作者:

Iván Palomares Carrascosa

2026 年 6 月 16 日

语言模型

0

分享

文章

在本文中,你将学习如何使用 Scikit-LLM 和通过 Groq API 提供的开源大型语言模型构建端到端情感分析流水线。

我们将涵盖的主题包括:

  • Scikit-LLM 如何将传统的 scikit-learn 流水线与现代大型语言模型 API 调用相结合。
  • 如何使用 Groq 后端设置 Scikit-LLM 并准备 IMDB 电影评论数据集进行推理。
  • 如何使用与 scikit-learn 兼容的语法构建、运行和评估零样本情感分类流水线。

使用 Scikit-LLM 构建端到端情感分析流水线

介绍

传统机器学习流水线用于预测任务,如文本分类,通常依赖于从原始文本中提取结构化、数值特征 —— 例如 TF-IDF 频率或词嵌入 —— 以输入到经典模型中,如逻辑回归、集成模型或支持向量机。

随着大型语言模型(LLMs)的兴起,游戏规则有所改变:现在可以利用零样本或少样本推理,使用现有的预训练模型来执行语言任务,作为机器学习框架的一部分。Scikit-LLM 是一个 Python 库,它解决了这个问题:它弥合了传统机器学习和现代 LLM API 调用之间的差距。在本文中,我们将使用 Scikit-LLM 和 Groq 后端模型构建一个端到端的情感分析流水线(一种特定领域的文本分类形式),使用开源模型实现合理快速的推理结果。从预处理到推理,我们将使用一个大型、现实规模的数据集 —— IMDB 电影评论数据集。

先决条件、设置和获取数据集

要使本教程中显示的代码正常工作,你需要安装 Scikit-LLM 库:

pip install scikit-llm

1

pip

install

scikit

-

llm

安装完成后,第一步是设置并配置 API 凭据。换句话说,我们需要将 Scikit-LLM “连接”到一个端点 —— 也就是一个 LLM API 存储库,如 Groq。请确保你在 Groq 注册并在此处生成 API 密钥:你需要将其复制并粘贴到下面的代码中:

from skllm.config import SKLLMConfig # 1. 指向一个兼容 Groq 的端点 SKLLMConfig.set_gpt_url("https://api.groq.com/openai/v1") # 2. 设置你的免费 Groq API 密钥 # 在 https://console.groq.com/keys 获取你的密钥 SKLLMConfig.set_openai_key("YOUR-API-KEY-GOES-HERE")

2

3

4

5

6

7

8

from

skllm

.

config

import

SKLLMConfig

1. 指向一个兼容 Groq 的端点

set_gpt_url

(

"https://api.groq.com/openai/v1"

)

2. 设置你的免费 Groq API 密钥

在 https://console.groq.com/keys 获取你的密钥

set_openai_key

"YOUR-API-KEY-GOES-HERE"

Scikit-LLM 使用一个端点函数 set_gpt_url,默认与 OpenAI 兼容;我们将其路由到一个自定义的 Groq URL:https://api.groq.com/openai/v1。

接下来的步骤是导入 IMDB 电影评论数据集 —— 该数据集包含约 50K 条实例 —— 并为我们将要构建的情感分析流程做准备。每个实例由一条带有情感标签的文本评论组成,情感可以是正面或负面(这是一个二分类问题,可以用逻辑回归等模型解决)。

为了方便起见,我们从一个公开的 GitHub 仓库中以 CSV 格式读取数据集:

python
import pandas as pd
from sklearn.model_selection import train_test_split

# 获取一个大型、真实规模的数据集(IMDB 电影评论 - 50,000 行)
# 为了方便,我们将从一个公开的原始 CSV 文件中读取数据
url = "https://raw.githubusercontent.com/Ankit152/IMDB-sentiment-analysis/master/IMDB-Dataset.csv"
print("正在下载数据集...")
df = pd.read_csv(url)
print(f"数据集总大小: {df.shape[0]} 行")

# 在使用免费 API 的现实 LLM 流程中,发送 50,000 次请求
# 很可能会触发配额限制。因此,我们将使用 500 行来演示我们的流程执行。
# 如果你有付费 API 访问权限,可以随意使用更多数据。
df_sampled = df.sample(n=500, random_state=42)

# IMDB 数据集包含 HTML 标签和格式噪声:这正好适合测试我们的清理器
X = df_sampled["review"]
y = df_sampled["sentiment"]  # 标签是 'positive' 或 'negative'

# 分割为训练(用于初始化零样本标签)和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

请注意,我们只获取了 500 行用于演示目的,否则在没有足够计算资源的情况下,推理过程可能会很耗时。你可以自由更改这个样本大小,n=500,以适应你自己的需求。

构建情感分析流程

现在是整个过程中最有趣的部分!数据科学流程归结为一系列预处理、清理和数据准备步骤,随后是模型设置或训练、推理和评估。对于像我们这样的预测性、基于文本的场景,预处理通常包括清理和规范化文本。Scikit-learn 提供了一个优雅的类,FunctionTransformer,可以根据自定义函数定义和封装预处理步骤:

from sklearn.preprocessing import FunctionTransformer def clean_text_data(texts): """Cleans raw text inputs by removing HTML tags and stripping whitespace.""" series = pd.Series(texts).astype(str) # Remove HTML tags like <br /> cleaned = series.str.replace(r'<[^>]+>', ' ', regex=True) # Remove extra spaces cleaned = cleaned.str.strip().str.replace(r'\s+', ' ', regex=True) return cleaned.tolist() # Wrapping the cleaning function to enable its use inside a Pipeline object text_cleaner = FunctionTransformer(clean_text_data)

预处理

FunctionTransformer

def

clean_text_data

texts

:

""

"Cleans raw text inputs by removing HTML tags and stripping whitespace."

series

astype

str

Remove HTML tags like <br />

cleaned

replace

r

'<[^>]+>'

' '

regex

True

Remove extra spaces

strip

'\s+'

return

tolist

Wrapping the cleaning function to enable its use inside a Pipeline object

text_cleaner

现在我们将这个预处理对象与模型实例组合在一起,创建一个Pipeline。一旦定义,这个Pipeline将协调整个数据准备过程,并在训练和推理阶段将数据传递给模型——尽管我们使用了“训练”这个词,但实际上不会发生基于权重的训练,因为我们使用的是Groq提供的预训练模型进行零样本分类。拟合模型仅涉及将分类标签传递给模型。

from sklearn.pipeline import Pipeline from skllm.models.gpt.classification.zero_shot import ZeroShotGPTClassifier # Define the end-to-end pipeline sentiment_pipeline = Pipeline([ ("cleaner", text_cleaner), # Updated to use Groq's active Llama 3.1 8B model ("llm_classifier", ZeroShotGPTClassifier(model="custom_url::llama-3.1-8b-instant")) ]) # Fit the pipeline # Note: For Zero-Shot classification, fit() doesn't train the LLM. # It simply registers the unique labels present in 'y_train' (positive, negative). print("Fitting the pipeline...") sentiment_pipeline.fit(X_train, y_train)

pipeline

models

gpt

classification

zero_shot

ZeroShotGPTClassifier

Define the end-to-end pipeline

sentiment_pipeline

"cleaner"

Updated to use Groq's active Llama 3.1 8B model

"llm_classifier"

model

"custom_url::llama-3.1-8b-instant"

Fit the pipeline

Note: For Zero-Shot classification, fit() doesn't train the LLM.

It simply registers the unique labels present in 'y_train' (positive, negative).

"Fitting the pipeline..."

fit

一旦我们运行Pipeline来“拟合”模型,我们再次使用它进行推理。这两个步骤都使用熟悉的scikit-learn语法。除了评估模型Pipeline的性能外,我们还显示一些示例预测:

from sklearn.metrics import classification_report print(f"Running predictions on {len(X_test)} test samples...") # Run predictions through the pipeline predictions = sentiment_pipeline.predict(X_test) # Evaluate the pipeline's performance on the realistic data print("\n--- Classification Report ---") print(classification_report(y_test, predictions)) # Display a few side-by-side examples print("\n--- Sample Predictions ---") for review, actual, predicted in zip(X_test[:3], y_test[:3], predictions[:3]): # Truncate review for display purposes short_review = review[:100] + "..." print(f"Review: {short_review}") print(f"Actual: {actual} | Predicted: {predicted}\n")

metrics

classification_report

"Running predictions on {len(X_test)} test samples..."

Run predictions through the pipeline

predictions

predict

在真实数据上评估管道的性能

"\n--- 分类报告 ---"

并排显示几个示例

"\n--- 示例预测 ---"

for

review

actual

predicted

zip

截断评论以用于显示

short_review

100

+

"..."

"评论: {short_review}"

"实际: {actual} | 预测: {predicted}\n"

以下是详细输出 —— 执行上述代码可能需要几分钟时间才能完成:

--- 分类报告 --- 精确率 召回率 F1 分数 支持数 negative 0.95 0.97 0.96 60 positive 0.95 0.93 0.94 40 准确率 0.95 100 macro avg 0.95 0.95 0.95 100 weighted avg 0.95 0.95 0.95 100 --- 示例预测 --- 评论: 我看到妈妈...好吧,她并没有确切地亲吻圣诞老人;他的手放在她的大腿上,还有邪恶... 实际: negative | 预测: negative 评论: 这条条目对系列粉丝(比如我自己)来说肯定很有趣,但它基本上难以理解... 实际: negative | 预测: negative 评论: 英格丽德·伯格曼(Cleo Dulaine)从未如此美丽。加里·库珀作为“Cleent”被完美地选中... 实际: positive | 预测: positive

--

报告

精确率

召回率

F1

得分

支持数

negative

0.95

0.97

0.96

60

positive

0.93

0.94

40

准确率

macro

平均

加权平均

看到

妈妈

好吧

没有

确切地

亲吻

圣诞老人

他的

她的

大腿

邪恶

|

这条

条目

系列

粉丝

比如

我自己

大部分

难以理解

英格丽德

伯格曼

Cleo

Dulaine

从未

如此

美丽

加里

库珀

"Cleent"

完美地

选中

我们的管道在对评论进行情感分类方面做得很好。做得不错!

总结

本文引导你通过使用 Scikit-LLM 和来自 Groq 等 API 端点的免费可用预训练 LLM,定义了一个端到端的情感分类管道。这是一种在新颖的、由 LLM 驱动的机器学习应用中使用经典 scikit-learn 语法的灵活方法。

更多相关内容

  • 如何准备电影评论数据用于情感分析…
  • 如何开发一个深度学习词袋模型…
  • 用于情感分析的深度卷积神经网络…
  • 如何使用电影评论预测情感…
  • 构建一个健壮的机器学习管道:最佳实践…
  • 在 PyCaret 中构建自定义模型管道:从…开始