如何开发移动网站,哪里可以接公司外包业务,外贸网站建设网,网络安全知识目标
本章的目标是帮助你理解文本分类的基本概念#xff0c;并通过具体示例学习如何使用 scikit-learn 训练文本分类模型#xff0c;以及如何利用 OpenAI API 进行文本分类。 5.1 什么是文本分类#xff1f;
文本分类#xff08;Text Classification#xff09;是自然语…目标
本章的目标是帮助你理解文本分类的基本概念并通过具体示例学习如何使用 scikit-learn 训练文本分类模型以及如何利用 OpenAI API 进行文本分类。 5.1 什么是文本分类
文本分类Text Classification是自然语言处理NLP中的一个基础任务指的是将文本数据自动归类到一个或多个预定义类别中的过程。例如
垃圾邮件检测判定邮件是“垃圾邮件”还是“正常邮件”。情感分析分析评论或社交媒体上的文本判断其情感是“正面”、“负面”还是“中性”。新闻分类将新闻归类到“体育”、“政治”、“科技”等类别。
文本分类的常见方法
基于规则的方法使用关键字匹配等方法进行分类适用于简单场景。机器学习方法使用 scikit-learn 训练分类模型如朴素贝叶斯Naïve Bayes、支持向量机SVM等。深度学习方法使用 BERT、LSTM、Transformer 等深度神经网络进行分类适用于大规模数据。预训练模型如 OpenAI API直接使用强大的 NLP 模型进行分类无需训练自己的模型。 5.2 使用 scikit-learn 训练文本分类模型
步骤
准备数据集文本预处理分词、去停用词、向量化训练分类模型测试和评估模型
示例 1垃圾邮件分类
我们使用 scikit-learn 的 Pipeline 训练一个简单的垃圾邮件分类器。
Step 1安装必要的库
!pip install scikit-learn numpy pandas nltkStep 2导入所需库
import pandas as pd # 用于处理数据集
import numpy as np # 用于数值计算
import nltk # 自然语言处理工具包
from sklearn.model_selection import train_test_split # 用于数据集划分
from sklearn.feature_extraction.text import TfidfVectorizer # 用于文本特征提取
from sklearn.naive_bayes import MultinomialNB # 朴素贝叶斯分类器
from sklearn.pipeline import Pipeline # 机器学习流水线自动化处理流程
from sklearn.metrics import accuracy_score, classification_report # 评估模型性能Step 3加载数据
我们使用一个简单的数据集其中包含邮件内容及其分类ham 表示正常邮件spam 表示垃圾邮件。
# 创建一个简单的数据集
data {text: [Get free money now!,Hello, how are you?,Congratulations! You have won a prize.,Call me when you get a chance.,Claim your free gift today!,Meeting at 3 PM, dont be late.,Win a brand new iPhone now!],label: [spam, ham, spam, ham, spam, ham, spam]
}# 转换数据为 Pandas DataFramedf pd.DataFrame(data)# 将标签类别转换为数值spam 1, ham 0
df[label] df[label].map({spam: 1, ham: 0})
print(df)示例输出 text label
0 Get free money now! 1
1 Hello, how are you? 0
2 Congratulations! You have won a prize. 1
3 Call me when you get a chance. 0
4 Claim your free gift today! 1
5 Meeting at 3 PM, dont be late. 0
6 Win a brand new iPhone now! 1Step 4数据预处理
TfidfVectorizer将文本转换为数值向量去除停用词如 the, and。MultinomialNB使用朴素贝叶斯算法进行分类。
# 划分数据集80% 训练20% 测试
X_train, X_test, y_train, y_test train_test_split(df[text], df[label], test_size0.2, random_state42)# 创建文本分类管道Pipeline
pipeline Pipeline([(tfidf, TfidfVectorizer(stop_wordsenglish)), # 文本向量化并去除停用词(classifier, MultinomialNB()) # 朴素贝叶斯分类器
])# 训练模型
pipeline.fit(X_train, y_train)# 进行预测
y_pred pipeline.predict(X_test)# 评估模型
print(Accuracy:, accuracy_score(y_test, y_pred))
print(Classification Report:\n, classification_report(y_test, y_pred))Step 5测试新文本
new_texts [Win a free iPhone!, Meeting at 9 PM online., Get rich fast with this simple trick!]
predictions pipeline.predict(new_texts)for text, label in zip(new_texts, predictions):print(f{text} - {Spam if label 1 else Ham})示例输出
Win a free iPhone! - Spam
Meeting at 9 PM online. - Ham
Get rich fast with this simple trick! - Spam5.3 使用 OpenAI API 进行文本分类
如果你不想训练自己的模型可以直接使用 OpenAI 的 GPT 进行文本分类。
步骤
获取 OpenAI API Key调用 OpenAI API 进行文本分类解析 API 结果
Step 1安装 openai 库
!pip install openaiStep 2编写 API 调用代码
import openai# 设置 API Key你需要在 OpenAI 官网申请
openai.api_key your-api-keydef classify_text(text):response openai.chat.completions.create(modelgpt-4,messages[{role: system, content: You are a text classification assistant.},{role: user, content: fClassify the following message as spam or ham: {text}}])return response.choices[0].message.content# 测试 API
test_messages [Win a free iPhone!, Lets have lunch together.]
for msg in test_messages:print(f{msg} - {classify_text(msg)})示例输出
Win a free iPhone! - I would classify this message as spam.
Lets have lunch together. - The message Lets have lunch together can be classified as ham. 总结
你学习了 文本分类的基本概念。你用 scikit-learn 训练了一个垃圾邮件分类器。你使用 OpenAI API 进行文本分类并且可以轻松调用预训练模型。你可以尝试 不同的数据集和任务比如情感分析、新闻分类等。
下节课我们将介绍词向量和文本表示Word Embeddings帮助你理解 NLP 如何将文本转化为计算机可理解的数值表示