第二部:《深度學習》38/100 文本分類實作 🗂 RNN 分析影評正負面!

更新 發佈閱讀 8 分鐘

AI時代系列(2) 機器學習三部曲: 🔹 第二部:《深度學習 —— 神經網路的革命》

38/100 第四週:📌 循環神經網路 RNN

38.文本分類實作 🗂 RNN 分析影評正負面!

_______________________________________

🎯 任務目標:

建立一個能夠判斷影評是「正面」或「負面」的神經網路模型,並了解:

如何使用 Keras 內建資料集 IMDB

如何進行文字前處理與嵌入

如何設計 SimpleRNN / LSTM / GRU 結構

如何評估並可視化模型表現

________________________________________

📦 1. 載入 IMDB 資料集

python

from tensorflow.keras.datasets import imdb

from tensorflow.keras.preprocessing.sequence import pad_sequences

# 只保留最常用的 10,000 個單字

num_words = 10000

max_len = 200

(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=num_words)

x_train = pad_sequences(x_train, maxlen=max_len)

x_test = pad_sequences(x_test, maxlen=max_len)

這段程式碼載入了 Keras 的 IMDb 電影評論資料集,並對文字資料進行預處理。它保留最常見的 10,000 個單字,過濾掉低頻詞彙,接著將每篇評論補齊或截斷為固定長度 200 的整數序列,使資料能統一輸入到深度學習模型中。這是文字分類任務(如情感分析)的標準準備步驟,後續可搭配嵌入層與 LSTM、GRU 或 CNN 進行模型訓練與預測。

________________________________________

🔤 2. 建立 RNN 模型

python

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Embedding, SimpleRNN, Dense

model = Sequential([

Embedding(input_dim=num_words, output_dim=64, input_length=max_len),

SimpleRNN(64), # 可替換為 LSTM(64) 或 GRU(64)

Dense(1, activation='sigmoid')

])

model.compile(optimizer='adam',

loss='binary_crossentropy',

metrics=['accuracy'])

這段程式碼建立了一個用於文字情感分類的簡單循環神經網路模型。首先使用 Embedding 將單字索引轉換為 64 維的詞向量,輸入長度為先前處理好的 max_len(200);接著使用一層 SimpleRNN 來處理序列資訊,捕捉文字中的時間關聯性;最後透過 Dense(1, activation='sigmoid') 輸出一個機率值,用於二元分類(如判斷影評為正面或負面)。整體模型透過 adam 最佳化器與 binary_crossentropy 損失函數進行編譯,適合訓練 IMDb 這類二分類文字資料集,是 NLP 初學者常見的入門實作範例。

________________________________________

🏋️ 3. 模型訓練與評估

python

history = model.fit(x_train, y_train,

epochs=5,

batch_size=64,

validation_split=0.2)

這段程式碼將模型套用在 IMDb 訓練資料上進行訓練,設定訓練輪數為 5(epochs=5),每批次處理 64 筆資料(batch_size=64),並保留 20% 的訓練資料作為驗證集(validation_split=0.2)用來監控模型在訓練過程中的泛化表現。訓練結果會儲存在 history 物件中,可用於後續繪圖或分析模型學習曲線。這是深度學習訓練流程中的標準步驟。

________________________________________

📈 4. 可視化訓練過程(準確率與損失)

python

import matplotlib.pyplot as plt

plt.plot(history.history['accuracy'], label='Train Acc')

plt.plot(history.history['val_accuracy'], label='Val Acc')

plt.title("Model Accuracy")

plt.xlabel("Epoch")

plt.ylabel("Accuracy")

plt.legend()

plt.show()

這段程式碼使用 Matplotlib 繪製出模型在訓練過程中的準確率變化圖。圖中包含訓練集(Train Acc)與驗證集(Val Acc)在每個訓練輪次(epoch)後的準確率,方便觀察模型是否持續學習、是否出現過擬合或欠擬合現象。這是評估模型訓練效果與調整參數時常用的視覺化工具。

________________________________________

✅ 成果預期:

模型在訓練集準確率約 85%~90%,測試集約 83%

若使用 LSTM 或 GRU 通常會比 SimpleRNN 表現更佳

若使用雙向 RNN(Bidirectional(LSTM(...))),可提升理解語境能力

________________________________________

⚙️ 可選進階挑戰(你可以嘗試):

挑戰項目 說明

✅ 改用 LSTM 或 GRU 增加記憶長度與穩定性

✅ 加入 Dropout 或 BatchNorm 降低過擬合,穩定學習

✅ 使用注意力機制(第37節) 提升對關鍵詞彙的注意力,讓模型更精準

✅ 將輸出改為 Softmax 多分類 做情緒多分類(喜、怒、哀、樂)任務

________________________________________

🎯 小結與啟示:

✅ RNN 能有效處理文本序列,適合情感分析、意圖分類等任務

✅ 單字序列需經過嵌入向量(Embedding)轉換為模型可學習的特徵

✅ 模型架構越複雜(如 LSTM、GRU、雙向 + Attention),通常越能提升語意理解力


留言
avatar-img
留言分享你的想法!
avatar-img
Hansen W的沙龍
11會員
274內容數
AIHANS沙龍是一個結合AI技術實戰、產業策略與自我成長的知識平台,主題涵蓋機器學習、生成式AI、創業經驗、財務規劃及哲學思辨。這裡不只提供系統化學習資源與實作案例,更強調理性思維與行動力的結合。無論你是AI初學者、創業者,還是追求人生升維的行者,都能在這裡找到前進的方向與志同道合的夥伴。
Hansen W的沙龍的其他內容
2025/09/09
在 Seq2Seq 訓練中,教師強制透過提供正確答案作為解碼器輸入,加速收斂並減少錯誤累積。而注意力機制則讓模型在生成每個輸出時,自動聚焦輸入序列的關鍵部分,提升長文本與複雜語境的理解與表現,廣泛應用於翻譯、摘要與對話系統。
2025/09/09
在 Seq2Seq 訓練中,教師強制透過提供正確答案作為解碼器輸入,加速收斂並減少錯誤累積。而注意力機制則讓模型在生成每個輸出時,自動聚焦輸入序列的關鍵部分,提升長文本與複雜語境的理解與表現,廣泛應用於翻譯、摘要與對話系統。
2025/09/09
Seq2Seq 模型透過編碼器將輸入序列轉換為隱含表示,再由解碼器生成輸出序列,能處理輸入與輸出長度不一致的任務,廣泛應用於語言翻譯、文本摘要、問答系統與語音轉文字等領域。
2025/09/09
Seq2Seq 模型透過編碼器將輸入序列轉換為隱含表示,再由解碼器生成輸出序列,能處理輸入與輸出長度不一致的任務,廣泛應用於語言翻譯、文本摘要、問答系統與語音轉文字等領域。
2025/09/09
在處理序列資料時,單層 RNN 難以捕捉複雜語境,多層 RNN 透過堆疊多層結構,可提取更深層次的序列特徵,適合長文本摘要與 seq2seq 任務。而雙向 RNN 則同時考慮前後文資訊,使模型能更完整理解語境,在情感分析、命名實體辨識與語音辨識中表現突出,成為提升自然語言處理與語音應用的重要方法。
2025/09/09
在處理序列資料時,單層 RNN 難以捕捉複雜語境,多層 RNN 透過堆疊多層結構,可提取更深層次的序列特徵,適合長文本摘要與 seq2seq 任務。而雙向 RNN 則同時考慮前後文資訊,使模型能更完整理解語境,在情感分析、命名實體辨識與語音辨識中表現突出,成為提升自然語言處理與語音應用的重要方法。
看更多
你可能也想看
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
本篇文章介紹如何使用PyTorch構建和訓練圖神經網絡(GNN),並使用Cora資料集進行節點分類任務。通過模型架構的逐步優化,包括引入批量標準化和獨立的消息傳遞層,調整Dropout和聚合函數,顯著提高了模型的分類準確率。實驗結果表明,經過優化的GNN模型在處理圖結構數據具有強大的性能和應用潛力。
Thumbnail
本篇文章介紹如何使用PyTorch構建和訓練圖神經網絡(GNN),並使用Cora資料集進行節點分類任務。通過模型架構的逐步優化,包括引入批量標準化和獨立的消息傳遞層,調整Dropout和聚合函數,顯著提高了模型的分類準確率。實驗結果表明,經過優化的GNN模型在處理圖結構數據具有強大的性能和應用潛力。
Thumbnail
數據分析與解讀 隨著數據的爆炸式增長,能夠分析、解讀和應用數據的能力變得至關重要。這包括熟悉數據分析工具和技術,如統計學、數據挖掘、機器學習等。然而,僅靠短時間的數據分析並不足以提供深入見解。 要熟悉數據分析工具和技術,如統計學、數據挖掘和機器學習,可以從以下幾個方面入手: 基礎知識的學習
Thumbnail
數據分析與解讀 隨著數據的爆炸式增長,能夠分析、解讀和應用數據的能力變得至關重要。這包括熟悉數據分析工具和技術,如統計學、數據挖掘、機器學習等。然而,僅靠短時間的數據分析並不足以提供深入見解。 要熟悉數據分析工具和技術,如統計學、數據挖掘和機器學習,可以從以下幾個方面入手: 基礎知識的學習
Thumbnail
本文參考TensorFlow官網Deep Convolutional Generative Adversarial Network的程式碼來加以實作說明。 示範如何使用深度卷積生成對抗網路(DCGAN) 生成手寫數位影像。
Thumbnail
本文參考TensorFlow官網Deep Convolutional Generative Adversarial Network的程式碼來加以實作說明。 示範如何使用深度卷積生成對抗網路(DCGAN) 生成手寫數位影像。
Thumbnail
本文將延續上一篇文章,經由訓練好的GAN模型中的生成器來生成圖片 [深度學習][Python]訓練MLP的GAN模型來生成圖片_訓練篇 [深度學習][Python]訓練CNN的GAN模型來生成圖片_訓練篇 相較之下CNN的GAN生成的效果比較好,但模型也相對比較複雜,訓練時間花的也比較
Thumbnail
本文將延續上一篇文章,經由訓練好的GAN模型中的生成器來生成圖片 [深度學習][Python]訓練MLP的GAN模型來生成圖片_訓練篇 [深度學習][Python]訓練CNN的GAN模型來生成圖片_訓練篇 相較之下CNN的GAN生成的效果比較好,但模型也相對比較複雜,訓練時間花的也比較
Thumbnail
本文將延續上一篇文章,經由訓練好的VAE模型其中的解碼器,來生成圖片。 [深度學習]訓練VAE模型用於生成圖片_訓練篇 輸入產生的隨機雜訊,輸入VAE的解碼器後,生成的圖片
Thumbnail
本文將延續上一篇文章,經由訓練好的VAE模型其中的解碼器,來生成圖片。 [深度學習]訓練VAE模型用於生成圖片_訓練篇 輸入產生的隨機雜訊,輸入VAE的解碼器後,生成的圖片
Thumbnail
透過這篇文章,我們將瞭解如何使用PyTorch實作圖神經網絡中的訊息傳遞機制,從定義消息傳遞的類別到實作消息傳遞過程。我們也探討了各種不同的消息傳遞機制,並通過對單次和多次傳遞過程的結果,可以看到節點特徵如何逐步傳遞與更新。
Thumbnail
透過這篇文章,我們將瞭解如何使用PyTorch實作圖神經網絡中的訊息傳遞機制,從定義消息傳遞的類別到實作消息傳遞過程。我們也探討了各種不同的消息傳遞機制,並通過對單次和多次傳遞過程的結果,可以看到節點特徵如何逐步傳遞與更新。
Thumbnail
GNN發展背景 傳統的深度學習模型如在計算機視覺(CV)和自然語言處理(NLP)領域中極為成功,主要是處理結構化數據如影像和文本。這些數據類型通常具有固定且規律的結構,例如影像是由有序的像素點組成。然而,在真實世界中,許多數據是非結構化的,如化合物結構(原子和分子)。這些數據雖然具有一定的規則性,
Thumbnail
GNN發展背景 傳統的深度學習模型如在計算機視覺(CV)和自然語言處理(NLP)領域中極為成功,主要是處理結構化數據如影像和文本。這些數據類型通常具有固定且規律的結構,例如影像是由有序的像素點組成。然而,在真實世界中,許多數據是非結構化的,如化合物結構(原子和分子)。這些數據雖然具有一定的規則性,
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News