情感分析 TF-IDF
为了识别和分类文本中传达的情感,如社交媒体帖子或产品评价,情感分析是一种自然语言处理的方法是必不可少的。企业可以通过使用这种功能来发现客户对其产品或服务的态度,从而提高他们的产品并做出数据驱动的决策。情感分析中一种流行的技术称为词频-逆文档频率(TF-IDF)。它确定了文本中单词相对于整个语料库的重要性,帮助识别表达积极或消极情绪的重要短语。通过使用TF-IDF,情感分析算法可以精确地对文本的情感进行分类。本文将介绍TF-IDF及其在情感分析中的应用。
什么是TF-IDF
使用一种称为TF-IDF的统计度量来评估文本中一个术语与整个文档语料库的相关性。它分为两个部分:逆文档频率(IDF)组件用于估计一个术语在整个文档语料库中出现的频率,词频(TF)组件用于评估一个单词在特定文档中出现的频率。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矩阵。在训练集上训练完logistic回归模型后,我们使用准确率、精确度、召回率和F1值来评估模型在测试集上的性能。
结论
总之,TF-IDF是一种从文本数据中提取特征的强大方法,经常用于自然语言处理应用,包括情感分析、文本分类和信息检索。它优于基于词频的简单技术,因为它考虑了每个术语在整个语料库中的重要性。