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+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告