处理文本数据

Machine LearningMachine LearningBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将探索如何使用 scikit-learn(Python 中一个流行的机器学习库)来处理文本数据。我们将学习如何加载文本数据、对其进行预处理、提取特征、训练模型以及评估其性能。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/naive_bayes("Naive Bayes") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/feature_extraction("Feature Extraction") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/naive_bayes -.-> lab-71103{{"处理文本数据"}} sklearn/feature_extraction -.-> lab-71103{{"处理文本数据"}} sklearn/datasets -.-> lab-71103{{"处理文本数据"}} ml/sklearn -.-> lab-71103{{"处理文本数据"}} end

加载文本数据

首先,我们需要加载要处理的文本数据。我们将使用 20 新闻组数据集,其中包含来自二十个不同主题的新闻文章。要加载该数据集,我们可以使用 scikit-learn 中的fetch_20newsgroups函数。

from sklearn.datasets import fetch_20newsgroups

## 加载数据集
categories = ['alt.atheism','soc.religion.christian', 'comp.graphics','sci.med']
twenty_train = fetch_20newsgroups(subset='train', categories=categories, shuffle=True, random_state=42)

现在我们已经加载了数据,可以探索其结构和内容。

预处理文本数据

在我们将文本数据用于机器学习之前,需要对其进行预处理。这涉及几个步骤,例如去除标点符号、将所有文本转换为小写,以及将文本分词为单个单词。我们可以使用 scikit-learn 的CountVectorizerTfidfTransformer来执行这些预处理步骤。

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer

## 预处理文本数据
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(twenty_train.data)

tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)

现在我们的文本数据已经过预处理,可以进行特征提取了。

特征提取

为了将文本数据表示为特征向量,我们可以使用词袋表示法。这种表示法为训练集中的每个单词分配一个固定的整数 ID,并统计每个单词在每个文档中的出现次数。我们可以使用 scikit-learn 的CountVectorizer来提取这些特征向量。

from sklearn.feature_extraction.text import CountVectorizer

## 提取特征向量
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(twenty_train.data)

现在我们已经提取了特征向量,可以将它们用于训练我们的模型。

训练模型

既然我们已经有了特征向量,就可以训练一个模型来对文本数据进行分类。在这个例子中,我们将使用多项式朴素贝叶斯算法,这是一种用于文本分类的流行算法。

from sklearn.naive_bayes import MultinomialNB

## 训练模型
clf = MultinomialNB().fit(X_train_tfidf, twenty_train.target)

现在我们的模型已经训练好,可以进行预测了。

评估模型

为了评估我们模型的性能,我们可以使用一个留出的测试集。我们可以使用与训练集相同的过程来加载测试集。

twenty_test = fetch_20newsgroups(subset='test', categories=categories, shuffle=True, random_state=42)

现在我们可以对测试集进行预处理并提取特征向量。

X_test_counts = count_vect.transform(twenty_test.data)
X_test_tfidf = tfidf_transformer.transform(X_test_counts)

最后,我们可以使用训练好的模型对测试集进行预测并计算准确率。

predicted = clf.predict(X_test_tfidf)
accuracy = np.mean(predicted == twenty_test.target)

总结

在这个实验中,我们学习了如何使用 scikit-learn 处理文本数据。我们加载了文本数据,对其进行了预处理,提取了特征向量,训练了一个模型,并评估了其性能。处理文本数据可能具有挑战性,但 scikit-learn 提供了强大的工具和算法,使这个过程更加容易。