TF-IDF在情感分析中的应用


情感分析是一种自然语言处理方法,对于识别和分类文本(例如社交媒体帖子或产品评价)中表达的情感至关重要。企业可以通过这项能力来了解客户对其产品或服务的态度,从而改进其产品并做出数据驱动的决策。词频-逆文档频率 (TF-IDF) 是情感分析中一种常用的技术。它确定文本中词语相对于整个语料库的重要性,有助于识别表达正面或负面情绪的关键短语。通过使用TF-IDF,情感分析算法可以精确地对文本的情感进行分类。本文将深入探讨TF-IDF及其在情感分析中的应用。

什么是TF-IDF?

TF-IDF是一种统计指标,用于评估术语在一个文本中相对于整个语料库的重要性。它包含两个组成部分:术语频率 (TF) 组件,评估某个词语在一个特定文档中出现的频率;以及逆文档频率 (IDF) 组件,评估某个词语在整个语料库中出现的频率。TF-IDF对于情感分析非常有用,因为它可以处理大量的文本数据,识别文本中的词语和短语,并赋予独特的短语更高的权重。由于其计算效率高,它是处理大型数据集的实用选择。

TF-IDF在情感分析中的应用

在这个项目中,书面文件将被分类为正面、负面或中性。我们将使用流行的Python编程语言、一个真实世界的数据集和机器学习框架。该过程包括加载库和IMDb电影评论数据集,执行预处理操作(如去除停用词和分词),使用scikit-learn的TfidfVectorizer创建TF-IDF矩阵,使用train_test_split将数据集划分为训练集和测试集,以及使用TF-IDF矩阵作为特征和情感标签作为目标在训练集上构建逻辑回归模型。

导入必要的库和收集数据集

我们将使用IMDb电影评论数据集,该数据集包含50,000条电影评论及其情感。可以在此处下载数据集:下载

import pandas as pd
import numpy as np
import re
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# Step 1 − Collecting the Dataset
df = pd.read_csv('/content/sample_data/IMDB_Dataset.csv')

预处理数据集

原始文本数据的预处理将包括去除停用词、大小写转换和标点符号。我们还将使用分词和词干提取来降低数据的维度。

# Step 2− Preprocessing the Data
corpus = []
stemmer = PorterStemmer()
for i in range(0, len(df)):
   review = re.sub('[^a-zA-Z]', ' ', df['review'][i])
   review = review.lower()
   review = review.split()
   review = [stemmer.stem(word) for word in review if word not in set(stopwords.words('english'))]
   review = ' '.join(review)
   corpus.append(review)

创建TF-IDF矩阵

我们将使用预处理后的数据创建一个词频-逆文档频率 (TF-IDF) 矩阵。TF-IDF矩阵显示每个文档中每个词语相对于整个语料库的比例重要性。

# Step 3− Creating the TF-IDF Matrix
vectorizer = TfidfVectorizer(max_features=5000)
X = vectorizer.fit_transform(corpus).toarray()
y = df.iloc[:, 1].values

分割数据集

我们将使用该数据集创建训练集和测试集。80%的数据集将用于训练机器学习模型,其余20%将用于测试。

# Step 4− Splitting the Dataset
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

训练模型

我们将使用TF-IDF矩阵作为特征和情感标签作为目标,在训练集上训练机器学习模型。我们将针对这个问题使用逻辑回归模型。

# Step 5− Training the Model
model = LogisticRegression()
model.fit(X_train, y_train)

评估模型

我们将使用多种指标来评估模型在测试集上的性能,包括准确率、精确率、召回率和F1分数。

# Step 6− Evaluating the Model
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted')
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')
print(f"Accuracy: {accuracy:}")
print(f"Precision: {precision:}")
print(f"Recall: {recall:}")
print(f"F1 score: {f1:}")

结果

Accuracy− 0.886
Precision− 0.8863485349216157
Recall− 0.886
F1 score− 0.8859583626410477

该项目使用TF-IDF对IMDb电影评论数据集进行情感分析。我们对原始文本数据进行了预处理,包括去除停用词、仅大写特定词语、去除标点符号、分词和词干提取。在将数据集分成训练集和测试集后,我们使用预处理后的数据创建了一个TF-IDF矩阵。在训练集上训练逻辑回归模型后,我们使用准确率、精确率、召回率和F1分数来评估该模型在测试集上的性能。

结论

总而言之,TF-IDF是一种强大的文本数据特征提取方法,常用于包括情感分析、文本分类和信息检索在内的自然语言处理应用中。因为它考虑了每个词语在每个文档中相对于整个语料库的重要性,所以它优于简单的基于词频的方法。

更新于:2023年7月31日

2K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告