返回文章列表

Amazon評論情感分析模型建構與最佳化

本文將使用機器學習技術,特別是邏輯迴歸模型,對 Amazon 產品評論進行情感分析。文章涵蓋資料預處理、TF-IDF 特徵向量化、模型訓練與評估等關鍵步驟,並提供 Python 程式碼範例與詳細說明,最終達成高準確率的情感分類別目標。

機器學習 自然語言處理

隨著電商平台的蓬勃發展,消費者評論已成為重要的資訊來源。有效地分析評論情感,有助於企業瞭解產品優缺點,進而提升產品和服務。本文將使用 Python 和機器學習技術,特別是邏輯迴歸模型,對 Amazon 產品評論進行情感分析。

首先,我們會對資料進行預處理,包含清除雜訊、移除停用詞以及使用 TF-IDF 技術將文字轉換為數值向量。接著,使用預處理後的資料訓練邏輯迴歸模型,並使用準確率、精確率、召回率和 F1 分數等指標評估模型效能。最後,我們將探討模型的優缺點,並提供進一步提升模型效能的建議,例如嘗試不同的模型引數或使用更進階的深度學習技術。

將問題分解為功能特性

在給定亞馬遜產品評論資料集和套用機器學習模型進行情感分析的情況下,我們將概述以下功能特性,以引導使用者建立和最佳化情感分類別模型:

  • 資料前處理和特徵工程:使用者將首先對文字資料進行前處理,包括諸如詞彙切分、小寫轉換和移除停用詞及標點符號等任務。此外,將套用特徵工程技術,如詞頻-逆向檔案頻率(TF-IDF)編碼或詞嵌入,以將文字資料表示為適合機器學習模型的格式。
  • 模型選擇和基準訓練:使用者將選擇基準機器學習模型,如邏輯迴歸、樸素貝葉斯或支援向量機(SVM),進行情感分類別。所選模型將在預處理後的資料上進行訓練,以建立情感分析的基準效能。
  • 模型評估和解釋:使用者將使用諸如準確率、精確率、召回率和 F1 分數等指標評估訓練好的機器學習模型的效能。此外,將探索解釋模型預測的技術,如特徵重要性分析或模型可解釋性方法,以深入瞭解影響情感分類別決策的因素。
  • 處理不平衡資料:此功能特性旨在透過實施諸如過取樣、欠取樣或在模型訓練期間使用類別權重等技術來解決資料集中類別分佈不平衡的挑戰。使用者將探索減輕類別不平衡對模型效能影響的方法,並提高少數類別的分類別準確率。
  • 超引數調校:使用者將學習如何透過調校超引數(如正則化強度、學習率和核函式引數)來最佳化機器學習模型的效能。透過網格搜尋或隨機搜尋等技術,使用者將嘗試不同的超引陣列態,以在驗證集上提高模型的效能。
  • 探索特徵表示:使用者將探索將文字資料表示為機器學習模型特徵的不同方法。此功能特性側重於比較使用不同特徵表示(如詞袋模型、TF-IDF 或詞嵌入)訓練的模型的效能,以確定最有效的情感分類別方法。

遵循這些功能特性,使用者將獲得建立、微調和最佳化機器學習模型以進行情感分析任務的實務見解。他們將學習如何系統地嘗試不同的預處理技術、特徵表示、超引陣列態和類別不平衡處理策略,以實作情感分類別的卓越效能和準確率。

使用 ChatGPT 建立分類別模型

提示策略

為了有效地利用 ChatGPT 生成情感分析機器學習任務的程式碼,我們需要制定一個全面的提示策略,以適應使用亞馬遜產品評論資料集進行情感分析的特定功能特性和需求。

策略 1:任務-動作-(TAG)提示策略

1.1 – 任務:具體任務或目標是使用亞馬遜產品評論資料集建立和最佳化情感分析機器學習模型。 1.2 – 動作:建立和最佳化情感分析機器學習模型所涉及的關鍵步驟包括:

  • 資料前處理:詞彙切分、小寫轉換、移除停用詞及標點符號,以及特徵工程(例如,TF-IDF 編碼、詞嵌入)。
  • 模型選擇:選擇基準機器學習模型,如邏輯迴歸、樸素貝葉斯或 SVM。 1.3 – :我們將在提示中為 ChatGPT 提供以下:
  • 程式碼應與 Jupyter Notebook 相容。
  • 確保每行程式碼都有詳細的註解。
  • 在提供程式碼之前,必須詳細解釋每行程式碼,這些程式碼將被複製到 Notebook 的文字區塊中,以便對所使用的方法進行詳細說明。

策略 2:角色-指令-背景(PIC)提示策略

2.1 – 角色:扮演一個初學者的角色,需要逐步指導如何使用亞馬遜產品評論資料集建立和最佳化情感分析機器學習模型。 2.2 – 指令:要求 ChatGPT 一步一步地生成每個功能的程式碼,並在繼續下一步之前等待使用者回饋。同時,提供載入資料集的路徑。 2.3 – 背景:鑒於重點是使用亞馬遜產品評論資料集進行情感分析,ChatGPT 不瞭解該資料集及其特性,因此需要額外的背景資訊。

策略 3:學習-即興-回饋-評估(LIFE)提示策略

3.1 – 學習:

  • 強調瞭解機器學習模型及其元件的重要性,包括特徵工程技術和模型選擇。 3.2 – 即興:
  • 請求 ChatGPT 提供程式碼片段,以實作額外的功能,如超引數調校、處理不平衡資料和模型評估技術。

程式碼範例

# 匯入必要的函式庫
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report

# 載入亞馬遜產品評論資料集
df = pd.read_csv('amazon_product_reviews.csv')

# 將資料分割為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(df['review'], df['label'], test_size=0.2, random_state=42)

# 建立 TF-IDF 向量化器
vectorizer = TfidfVectorizer(stop_words='english')

# 對訓練資料進行向量化
X_train_vectorized = vectorizer.fit_transform(X_train)

# 對測試資料進行向量化
X_test_vectorized = vectorizer.transform(X_test)

# 建立樸素貝葉斯分類別器
clf = MultinomialNB()

# 在訓練資料上訓練分類別器
clf.fit(X_train_vectorized, y_train)

# 在測試資料上評估分類別器
y_pred = clf.predict(X_test_vectorized)
print('準確率:', accuracy_score(y_test, y_pred))
print('分類別報告:\n', classification_report(y_test, y_pred))

內容解密:

此程式碼範例展示瞭如何使用 TF-IDF 向量化器對文字資料進行向量化,並使用樸素貝葉斯分類別器對亞馬遜產品評論進行情感分類別。首先,我們匯入必要的函式庫並載入資料集。然後,我們將資料分割為訓練集和測試集。接下來,我們建立一個 TF-IDF 向量化器,並對訓練資料和測試資料進行向量化。之後,我們建立一個樸素貝葉斯分類別器,並在訓練資料上訓練它。最後,我們在測試資料上評估分類別器的效能,並輸出準確率和分類別報告。這個範例展示瞭如何使用機器學習技術對文字資料進行情感分析。

建構情感分析模型以準確分類別 Amazon 評論

本章節將利用 ChatGPT 的免費版本建立基準模型,並逐步完成情感分析模型的建置。

特徵 1:資料預處理與特徵工程

首先,我們需要撰寫初始提示(prompt)來建立基準模型。

提示內容

假設我們要建立一個簡單的分類別模型,用於分析 Amazon Review Dataset (TAG 1.1) 的情感,該資料集包含以下欄位(PIC 2.3):

  • marketplace(字串):產品的銷售地區。
  • customer_id(字串):客戶的唯一識別碼。
  • review_id(字串):評論的唯一識別碼。
  • product_id(字串):產品的唯一識別碼。
  • product_parent(字串):父產品的識別碼。
  • product_title(字串):被評論產品的標題。
  • product_category(字串):產品的類別。
  • star_rating(整數):產品的評分,範圍從 1 到 5。
  • helpful_votes(整數):評論收到的有用票數。
  • total_votes(整數):評論收到的總票數。
  • review_headline(字串):評論的標題。
  • review_body(字串):評論的內容。
  • review_date(字串):評論的日期。
  • Sentiments(字串):評論的情感(正面或負面)。

處理步驟

該過程應包含以下步驟(TAG 1.2),並一次提供一個步驟,等待使用者反饋(PIC 2.2):

  • 資料預處理: Tokenization、轉換為小寫、移除停用詞和標點符號,以及特徵工程(例如 TF-IDF 編碼、詞嵌入)。
  • 模型選擇:選擇基準機器學習模型,如邏輯迴歸、Naive Bayes 或 SVM。

初始提示

身為初學者(PIC 2.1),請逐步提供程式碼,並嚴格遵循以下指示(TAG 1.3):

  • 程式碼須相容於 Jupyter Notebook。
  • 確保每行程式碼都有詳細註解。
  • 在提供程式碼之前,需詳細解釋每行程式碼,並將解釋複製到 Notebook 的文字區塊中。同時,資料集存放在 Google Drive 的路徑為 /Chapter05/amazon_product_review_data.csv,因此需新增掛載雲端硬碟並載入資料集的程式碼(PIC 2.2)。

Step 1:資料預處理

載入資料集

首先,我們需要從 Google Drive 載入 Amazon 評論資料集。為此,我們將使用 pandas 函式庫。

# 匯入 pandas 函式庫並將其別名為 pd,以便於使用
import pandas as pd

# 從 Google Drive 載入資料集
from google.colab import drive
drive.mount('/content/drive')

# 指定資料集在 Google Drive 中的路徑
dataset_path = '/content/drive/MyDrive/Chapter05/amazon_product_review_data.csv'

# 使用 pandas 讀取 CSV 檔案
df = pd.read_csv(dataset_path)

# 顯示資料集的前幾行,以驗證是否正確載入
print(df.head())

程式碼解析:

  1. import pandas as pd:匯入 pandas 函式庫,並將其命名為 pd,以便於後續使用。

    • pandas 是一個強大的 Python 資料分析函式庫,提供多種資料結構和函式,能夠方便地進行資料操作和分析。
  2. from google.colab import drivedrive.mount('/content/drive'):這兩行程式碼用於在 Google Colab 環境中掛載 Google Drive。

    • 這樣做可以讓我們直接從 Google Drive 中讀取資料,而無需將資料下載到本地環境。
  3. dataset_path = '/content/drive/MyDrive/Chapter05/amazon_product_review_data.csv':指定 Amazon 評論資料集在 Google Drive 中的路徑。

    • 請根據實際的檔案路徑進行調整。
  4. df = pd.read_csv(dataset_path):使用 pandasread_csv 方法讀取 CSV 檔案中的資料,並將其儲存在 DataFrame 物件 df 中。

    • DataFrame 是 pandas 中用於儲存和操作表格資料的重要資料結構。
  5. print(df.head()):顯示 DataFrame 的前幾行,以驗證資料是否正確載入。

    • 這是檢查資料載入結果的有效方法,可以確認資料是否正確讀取,以及欄位名稱是否正確。

後續步驟:

在完成資料載入後,下一步是進行 Tokenization,將評論內容分割成單個詞或詞元。接著,我們會進行轉換為小寫、移除停用詞和標點符號等預處理操作。這些步驟對於提高模型的效能至關重要。

下一步:Tokenization 與文字預處理

在完成資料載入後,我們將進行 Tokenization 和進一步的文字預處理操作,包括轉換為小寫、移除停用詞和標點符號等,以準備好資料供後續的特徵工程和模型訓練使用。

使用 ChatGPT 建構分類別模型

資料載入與預處理

在進行情感分析的分類別模型建構時,第一步是載入必要的函式庫並掛載 Google Drive 以存取資料集。

程式碼實作

# 匯入必要的函式庫
import pandas as pd
from google.colab import drive

# 掛載 Google Drive
drive.mount('/content/drive')

# 定義資料集路徑
data_path = '/content/drive/My Drive/Chapter05/amazon_product_review_data.csv'

# 將資料集載入 DataFrame
df = pd.read_csv(data_path)

內容解密:

  1. 匯入必要的函式庫:使用 pandas 處理 CSV 檔案,使用 google.colabdrive 模組掛載 Google Drive。
  2. drive.mount('/content/drive'):掛載 Google Drive 以便存取資料集,這需要授權存取許可權。
  3. data_path 定義:指定 CSV 檔案在 Google Drive 中的路徑。
  4. pd.read_csv(data_path):讀取 CSV 檔案並將其儲存在 DataFrame df 中。

資料預處理

資料預處理是情感分析的重要步驟,包括詞彙切分(Tokenization)、轉換為小寫(Lowercasing)、移除停用詞(Stopwords)和標點符號(Punctuation)。

程式碼實作

# 匯入必要的函式庫
import nltk
import string

# 下載 NLTK 資源(只需執行一次)
nltk.download('punkt')
nltk.download('stopwords')

# 取得停用詞列表
stopwords = nltk.corpus.stopwords.words('english')

# 定義文字預處理函式
def preprocess_text(text):
    # 詞彙切分
    tokens = nltk.word_tokenize(text)
    # 轉換為小寫
    tokens = [token.lower() for token in tokens]
    # 移除停用詞和標點符號
    tokens = [token for token in tokens if token not in stopwords and token not in string.punctuation]
    # 將詞彙重新組合成文字
    preprocessed_text = ' '.join(tokens)
    return preprocessed_text

# 對評論內容進行預處理
df['Cleaned_Review'] = df['review_body'].apply(preprocess_text)

# 顯示預處理後的資料
df.head()

內容解密:

  1. 匯入 NLTK 和 string 函式庫:使用 NLTK 進行自然語言處理任務,使用 string 處理標點符號。
  2. nltk.download():下載 NLTK 資源,用於詞彙切分和停用詞移除。
  3. preprocess_text() 函式:定義一個函式對文字進行預處理,包括詞彙切分、轉換為小寫、移除停用詞和標點符號。
  4. df['Cleaned_Review'] = df['review_body'].apply(preprocess_text):將預處理函式應用於評論內容,並將結果儲存在新的欄位 Cleaned_Review 中。

模型選擇與基準訓練

在完成資料預處理後,下一步是選擇合適的機器學習模型進行情感分析。常見的文字分類別模型包括邏輯迴歸(Logistic Regression)、樸素貝葉斯(Naive Bayes)和支援向量機(SVM)。

下一步指示

我們將指示 ChatGPT 提供模型選擇的程式碼,並根據預處理後的資料進行基準模型的訓練和評估。

邏輯迴歸在情感分析中的應用

邏輯迴歸是一種流行的線性分類別演算法,廣泛應用於二元分類別任務,如情感分析。它透過使用邏輯函式模擬輸入屬於特定類別的機率來運作。

實作邏輯迴歸進行情感分析

我們將使用Python中的scikit-learn,一個強大的機器學習函式庫,來實作邏輯迴歸進行情感分析。

# 匯入必要的函式庫
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report

# 將資料分割為訓練集和測試集
X = df['Cleaned_Review']
y = df['sentiments']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# TF-IDF向量化
tfidf_vectorizer = TfidfVectorizer(max_features=5000) 
X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)
X_test_tfidf = tfidf_vectorizer.transform(X_test)

# 初始化並訓練邏輯迴歸模型
lr_model = LogisticRegression()
lr_model.fit(X_train_tfidf, y_train)

# 進行預測
y_pred = lr_model.predict(X_test_tfidf)

# 評估模型
accuracy = accuracy_score(y_test, y_pred)
print("準確率:", accuracy)
print("\n分類別報告:")
print(classification_report(y_test, y_pred))

內容解密:

  1. 匯入必要的函式庫:我們從scikit-learn匯入了必要的函式庫,包括train_test_split用於分割資料、TfidfVectorizer用於TF-IDF向量化、LogisticRegression用於邏輯迴歸、accuracy_scoreclassification_report用於模型評估。
  2. 資料分割:使用train_test_split將資料分割為訓練集和測試集。
  3. TF-IDF向量化:使用TfidfVectorizer對訓練和測試資料進行TF-IDF向量化。
  4. 模型訓練:初始化並訓練邏輯迴歸模型。
  5. 預測:對測試資料進行預測。
  6. 模型評估:使用準確率和分類別報告評估模型的表現。

模型評估與解釋

執行程式碼後,我們獲得了模型的評估結果,包括準確率和分類別報告。

評估結果:

  • 準確率:0.86
  • 分類別報告:
    • 精確度(precision)、召回率(recall)、F1分數(f1-score)等指標。

指標解釋

  • 準確率:衡量模型正確分類別的例項佔總例項的比例。
  • 精確度:衡量正向預測中真實正向的比例,反映模型避免假陽性的能力。
  • 召回率:衡量模型捕捉所有真實正向例項的能力。
  • F1分數:精確度和召回率的調和平均值,提供了一個平衡的衡量指標。

結果解讀

  • 模型的準確率為0.86,表示在測試集中有86%的例項被正確分類別。
  • 正向類別的精確度為0.86,表示當模型預測評論為正向時,有86%的機率是正確的。
  • 負向類別的精確度為0.00,表示模型未能正確預測任何負向評論。

圖表說明

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Amazon評論情感分析模型建構與最佳化

package "機器學習流程" {
    package "資料處理" {
        component [資料收集] as collect
        component [資料清洗] as clean
        component [特徵工程] as feature
    }

    package "模型訓練" {
        component [模型選擇] as select
        component [超參數調優] as tune
        component [交叉驗證] as cv
    }

    package "評估部署" {
        component [模型評估] as eval
        component [模型部署] as deploy
        component [監控維護] as monitor
    }
}

collect --> clean : 原始資料
clean --> feature : 乾淨資料
feature --> select : 特徵向量
select --> tune : 基礎模型
tune --> cv : 最佳參數
cv --> eval : 訓練模型
eval --> deploy : 驗證模型
deploy --> monitor : 生產模型

note right of feature
  特徵工程包含:
  - 特徵選擇
  - 特徵轉換
  - 降維處理
end note

note right of eval
  評估指標:
  - 準確率/召回率
  - F1 Score
  - AUC-ROC
end note

@enduml

此圖示展示了從輸入評論到獲得評估指標的流程。

深入分析與建議

為了進一步提升模型的表現,可以考慮以下幾點:

  • 分析負向類別精確度為0的原因,可能是由於資料不平衡或模型偏差。
  • 嘗試其他模型或引數調優,以改善對負向類別的預測能力。
  • 使用特徵重要性分析或模型可解釋性方法,深入瞭解影響情感分類別決策的因素。