Scikit-LLM 是一个 Python 包,可帮助将大型语言模型 (LLM) 集成到 Scikit-Learn 框架中。 它有助于完成文本分析任务。 如果您熟悉 scikit-learn,您会发现使用 Scikit-LLM 会更容易。
需要注意的是,Scikit-LLM 不会取代 scikit-learn。 scikit-learn 是一个通用机器学习库,但 Scikit-LLM 是专门为文本分析任务而设计的。
开始 法学硕士,您需要安装该库并配置您的 API 密钥。 要安装该库,请打开 IDE 并创建一个新的虚拟环境。 这有助于避免潜在的库版本冲突。 然后在终端中运行以下命令。
pip install scikit-llm
此命令安装 Scikit-LLM 及其所需的依赖项。
要配置您的 API 密钥,您必须从您的 LLM 提供商处购买一个。 为了得到那个 OpenAI 要获取 API 密钥,请按照以下步骤操作:
继续那个 OpenAI API页面。 然后单击窗口右上角的个人资料。 选择 查看 API 密钥。 这将带您前往 API密钥 页。
上 API密钥 页面,点击 创建一个新的密钥 按钮。
命名您的 API 密钥并单击 创建密钥 单击按钮生成密钥。 生成后,您必须复制密钥并将其存储在安全的地方 OpenAI 该键不再显示。 如果您丢失了它,则必须创建一个新的。
完整的源代码可在 GitHub 存储库。
现在您已经有了 API 密钥,打开 IDE 并导入它 SKLLM配置 来自 Scikit LLM 库的类。 此类允许您设置与使用大型语言模型相关的配置选项。
from skllm.config import SKLLMConfig
在本课程中,您需要定义自己的技能 OpenAI API 密钥和组织详细信息。
# Set your OpenAI API key
SKLLMConfig.set_openai_key("Your API key")
# Set your OpenAI organization
SKLLMConfig.set_openai_org("Your organization ID")
组织 ID 和名称不相同。 组织 ID 是您组织的唯一标识符。 要获取您的组织 ID,请继续执行 OpenAI 组织 打开设置页面并复制它。 您现在已经在 Scikit-LLM 和大语言模型之间建立了连接。
Scikit-LLM 需要基于使用情况的分配计划。 这是因为免费试用版 OpenAI 该帐户的速率限制为每分钟 3 个请求,这对于 Scikit-LLM 来说是不够的。
尝试使用免费试用帐户会导致在解析文本时出现类似于以下内容的错误。
了解有关速率限制的更多信息。 继续那个 OpenAI 票价限制页面。。
LLM 提供者不仅限于 OpenAI。 您还可以使用其他 LLM 提供商。
导入所需的库并加载数据集
导入将用于加载数据集的 pandas。 还可以从 Scikit-LLM 和 scikit-learn 导入所需的类。
import pandas as pd
from skllm import ZeroShotGPTClassifier, MultiLabelZeroShotGPTClassifier
from skllm.preprocessing import GPTSummarizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import MultiLabelBinarizer
接下来,加载要执行文本分析的数据集。 此代码使用 IMDB 电影数据集。 但是,您可以对其进行自定义以使用您自己的数据集。
# Load your dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Extract the first 100 rows
data = data.head(100)
不强制要求仅使用数据集的前 100 行。 您可以使用整个数据集。
接下来,提取特征并标记列。 然后将数据集分成训练集和测试集。
# Extract relevant columns
X = data['Description']
# Assuming 'Genre' contains the labels for classificationy = data['Genre']
# Split the dataset into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
这 类型 该列包含您要预测的标签。
使用 Scikit-LLM 进行零样本文本分类
零样本文本分类是主要语言模型提供的功能。 它将文本分类为预定义的类别,而不需要对标记数据进行显式训练。 当处理需要将文本分类到模型训练期间未预料到的类别的任务时,此功能非常有用。
要使用 Scikit-LLM 执行零样本文本分类,请使用 ZeroShotGPT分类器 班级。
# Perform Zero-Shot Text Classification
zero_shot_clf = ZeroShotGPTClassifier(openai_model="gpt-3.5-turbo")
zero_shot_clf.fit(X_train, y_train)
zero_shot_predictions = zero_shot_clf.predict(X_test)# Print Zero-Shot Text Classification Report
print("Zero-Shot Text Classification Report:")
print(classification_report(y_test, zero_shot_predictions))
输出如下:
分类报告提供模型尝试预测的每个标签的指标。
使用 Scikit-LLM 进行多标签零样本文本分类
在某些场景下,单个文本可以同时属于多个类别。 传统的分类模型在这方面存在问题。 另一方面,Scikit-LLM 支持这种分类。 零样本多标签文本分类对于为单个文本示例分配多个描述性标签至关重要。
使用 多标签ZeroShotGPT分类器 预测哪些标签适合每个文本示例。
# Perform Multi-Label Zero-Shot Text Classification
# Make sure to provide a list of candidate labels
candidate_labels = ["Action", "Comedy", "Drama", "Horror", "Sci-Fi"]
multi_label_zero_shot_clf = MultiLabelZeroShotGPTClassifier(max_labels=2)
multi_label_zero_shot_clf.fit(X_train, candidate_labels)
multi_label_zero_shot_predictions = multi_label_zero_shot_clf.predict(X_test)# Convert the labels to binary array format using MultiLabelBinarizer
mlb = MultiLabelBinarizer()
y_test_binary = mlb.fit_transform(y_test)
multi_label_zero_shot_predictions_binary = mlb.transform(multi_label_zero_shot_predictions)
# Print Multi-Label Zero-Shot Text Classification Report
print("Multi-Label Zero-Shot Text Classification Report:")
print(classification_report(y_test_binary, multi_label_zero_shot_predictions_binary))
在上面的代码中,您定义了文本可能属于的候选标签。
输出如下所示:
此报告可帮助您了解模型在多标签分类中对每个标签的执行情况。
使用 Scikit-LLM 进行文本矢量化
文本矢量化涉及将文本数据转换为机器学习模型可以理解的数字格式。 Scikit-LLM 为此提供了 GPTVectorizer。 它允许您使用以下命令将文本转换为固定维度的向量 GPT 楷模。
您可以使用术语“频率-逆文档频率”来实现这一点。
# Perform Text Vectorization using TF-IDF
tfidf_vectorizer = TfidfVectorizer(max_features=1000)
X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)
X_test_tfidf = tfidf_vectorizer.transform(X_test)# Print the TF-IDF vectorized features for the first few samples
print("TF-IDF Vectorized Features (First 5 samples):")
print(X_train_tfidf[:5]) # Change to X_test_tfidf if you want to print the test set
这是输出:
输出表示数据集中前五个样本的 TF-IDF 矢量化特征。
Scikit-LLM 文本摘要
文本摘要有助于压缩文本,同时保留其最重要的信息。 Scikit-LLM 提供了 GPTSumarizer,它使用 GPT 用于生成简洁文本摘要的模型。
# Perform Text Summarization
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)
输出如下:
以上是测试数据的总结。
基于法学硕士构建应用程序
Scikit-LLM 开启了使用大型语言模型进行文本分析的可能性世界。 了解大型语言模型背后的技术至关重要。 它将帮助您了解它们的优点和缺点,从而可以帮助您开发基于这种尖端技术的高效应用程序。