情绪分析中的 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 # 步骤 1 − 收集数据集 df = pd.read_csv('/content/sample_data/IMDB_Dataset.csv')
预处理数据集
在原始文本数据的预处理过程中,停用词、大写字母和标点符号都将被删除。为了降低数据的维度,我们还将使用标记化和词干提取。
# 第 2 步 - 预处理数据 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 矩阵显示每个文档中每个短语与整个语料库的比例相关性。
# 步骤 3− 创建 TF-IDF 矩阵 vectorizer = TfidfVectorizer(max_features=5000) X = vectorizer.fit_transform(corpus).toarray() y = df.iloc[:, 1].values
拆分数据集
数据集将用于创建训练集和测试集。 80% 的数据集将用于训练机器学习模型,而剩余的 20% 将用于测试它。
# 步骤 4− 分割数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
训练模型
为了在训练集上训练机器学习模型,我们将利用 TF-IDF 矩阵作为特征,并使用情绪标签作为目标。我们将使用逻辑回归模型来解决这个问题。
# 步骤 5− 训练模型 model = LogisticRegression() model.fit(X_train, y_train)
评估模型
准确率、精确率、召回率和 F1 分数是用于评估模型在测试集上表现的几个指标。
# 步骤 6− 评估模型 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:}") print(f"精确率: {precision:}") print(f"召回率: {recall:}") print(f"F1 得分: {f1:}")
结果
准确率− 0.886 精确率− 0.8863485349216157 召回率− 0.886 F1 得分− 0.8859583626410477
该项目使用 TF-IDF 对 IMDb 电影评论数据集进行情感分析。我们通过删除停用词、仅将某些术语大写、删除标点符号、标记和词干提取对原始文本数据进行了预处理。在将数据集拆分为训练集和测试集后,我们使用预处理后的数据创建了一个 TF-IDF 矩阵。在训练集上训练逻辑回归模型后,准确率、精确率、召回率和 F1 分数用于衡量该模型在测试集上的表现。
结论
总之,TF-IDF 是一种从文本数据中提取特征的有效方法,常用于 NLP 应用,包括情绪分析、文本分类和信息检索。它优于简单的基于词频的技术,因为它考虑了每个文档中每个词相对于整个语料库的重要性。