NLP - 文字向量化 - Word2Vec:IMDB Movie Reviews

NLP - 文字向量化 - Word2Vec:IMDB Movie Reviews

「物以類聚,詞以鄰分」。今天我們將實戰 Word2Vec,利用 IMDB 的 50,000 筆影評,讓電腦學會理解詞與詞之間的語義聯繫,揭開 NLP 的核心秘密。


神經網路的語意覺醒

在 2013 年,Google 的 Tomas Mikolov 帶領團隊發表了 Word2Vec。這在 NLP 領域是一場大地震。在那之前,電腦把詞當作獨立個體 (One-hot Encoding),「貓」跟「狗」在電腦眼裡跟「石頭」沒有區別。Mikolov 讓電腦學會了詞之間的 「關係」,甚至能做這種神奇運算:「國王 - 男人 + 女人 = 皇后」


1. 資料集來源:IMDB Movie Reviews

我們使用 IMDB 的 50,000 筆電影評論

  • 特性:包含大量的形容詞 (good, bad, awful) 和專業術語 (director, plot, scene)。
  • 目標:訓練詞向量,觀察哪些形容詞在情感或語意上是接近的。

2. 原理:誰常跟誰在一起?

想像你在參加一個 森林音樂會

  • One-hot (以前):你只認識每個動物的名字,但不知道誰是誰。
  • Word2Vec (現在):你開始觀察 「誰常跟誰在一起」。你發現「貓」常跟「沙發」出現,而「虎」常跟「森林」出現。雖然它們長得不同,但因為 「鄰居 (Context)」 很像,電腦會把它們放在空間中很近的位置。

兩大訓練策略

  1. Skip-gram (今日使用):拿一個詞 (如:電影),去預測它的鄰居 (如:好看、演員)。比喻:給你一個明星,請你猜他的助理是誰。
  2. CBOW (Continuous Bag of Words):拿一群鄰居,預測中間那個詞。比喻:給你一堆助理,請你猜他們服侍的明星是誰。

我該選哪一個?(CBOW vs Skip-gram)

  • 選擇 CBOW 的時機
    • 追求速度:CBOW 訓練速度比 Skip-gram 快得多。
    • 資料量較小:在小型資料集上,CBOW 通常能更快收斂。
    • 常見詞很重要:它對頻率高的單字有更好的表現。
  • 選擇 Skip-gram 的時機
    • 追求精準度:能更好地捕捉複雜的語義關係。
    • 處理罕見詞 (Rare Words):這是 Skip-gram 的強項,即使某個詞出現次數不多,它也能學到不錯的向量。
    • 大型資料集:在龐大的語料庫中,Skip-gram 的上限通常更高。
Word2Vec Concept

3. 實戰:訓練你的 Word2Vec 模型

完整程式連結:Word2Vec_IMDB.py

# 關鍵程式碼:使用 gensim 訓練 Word2Vec
from gensim.models import Word2Vec

# vector_size=100: 把詞變成 100 維的向量
# window=5: 看看前後 5 個詞
model = Word2Vec(sentences, vector_size=100, window=5, min_count=5)

# 找出最像的詞
print(model.wv.most_similar("good"))

4. 模型評估與視覺化

4.1 詞意相近度分析

訓練後的產出結果非常有意思:

  • 與 "bad" 最像的詞good, terrible, horrible, awful (雖然 good 在內,但這是因為語法位置相似,其餘負面詞已成功群聚)。
  • 與 "scary" 最像的詞funny, frightening, gory (電腦開始理解恐怖片常伴隨血腥與驚嚇特徵)。

4.2 TSNE 降維視覺化

Word2Vec TSNE
  • 負面評價區awful, terrible 成功在左上方集合。
  • 人物與製作actor, actress 在上方,director, script 在中央。
  • 類型區drama, thriller, comedy 在右下方成群。

5. NLP 模型進化清單 (其他常見模型)

除了 Word2Vec,我們也應該了解這些經典:

  • TF-IDF (統計派):找出文章中的關鍵字權重,但不懂語意。
  • N-Gram (順序派):將單字綁在一起看,但難以捕捉長距離依賴。
  • GloVe (全域統計派):結合了局部預測與全域統計的優點,適合大型語料庫。
  • BERT / Transformer (現代派):解決了「一詞多義」問題,是當今 AI 的核心。

7. 進階實戰:從詞向量到情緒分析 (LSTM)

當我們有了 Word2Vec 賦予的語意座標後,根據ML016學習的LSTM就是拿來處理「順序」。這就是 LSTM (長短期記憶網路) 的強項。

7.2 程式碼實作:影評分類器

完整程式連結:LSTM_Sentiment_Analysis.py

# 關鍵程式碼:建立 LSTM 情感分類器
model = Sequential([
    Embedding(max_features, 128, input_length=maxlen),
    LSTM(64, dropout=0.2),
    Dense(1, activation='sigmoid')
])

7.3 實戰產出結果

我們將 Word2Vec 產生的向量丟進 LSTM,訓練後的表現如下:

1. 訓練過程與實測結果

Training History 觀察:僅訓練 5 個 Epoch,正確率即達到 80.6%。模型能精準捕捉到 "brilliant" 等正面情緒。

2. 實測預測

我們挑選了幾句評論讓模型「盲測」,結果如下:

  • 評論 A: "The movie was absolutely brilliant and I loved every minute of it!"
    • AI 評分: 0.98 (極高機率為好評) → [正面]
  • 評論 B: "What a waste of time. The acting was terrible and the plot made no sense."
    • AI 評分: 0.02 (極高機率為負評) → [負面]
  • 評論 C: "It was okay, not the best but certainly not the worst either."
    • AI 評分: 0.45 (語氣中立偏保守) → [系統判定為負面] (觀察:模型對於這種複雜的對比語氣還需要更多資料學習,這正是 NLP 的挑戰所在!)

8. 總結:從「詞語內涵」到「情感理解」

今天我們完成了一次 NLP 的完整演進實戰:

  • Word2Vec:讓我們跳脫了無意義的編號,學會了單字的「語意內涵」。透過物以類聚,我們把文字變成了有意義的數字座標。
  • LSTM:在向量的基礎上,我們加入了「記憶」與「順序」,讓 AI 不僅讀懂單字,還能讀懂整段影評背後的情緒溫度。

戰略對比:Word2Vec vs LSTM

特性Word2Vec (語意煉金術)LSTM (情緒容器)
核心目標學習單字的「意思」與關聯學習句子的「情感」與脈絡
輸入形式單個詞 (Word)整段文字序列 (Sequence)
強項應用找同義詞、類比運算 (國王-男人)處理上下文、語氣反轉 (不...好)

9. 同場加映:效率大師 GRU (Gated Recurrent Unit)

如果你覺得 LSTM 的結構太複雜、計算太慢,那麼你一定要認識 GRU。它是 2014 年由 Kyunghyun Cho 等人提出的 LSTM 精簡版。

  • 結構簡化:將 LSTM 的三個門簡化為兩個門 —— 更新門 (Update Gate)重置門 (Reset Gate)
  • 優勢:參數量更少,訓練速度更快,且在大多數情緒分析任務中,表現與 LSTM 不相上下。

這代表在資源有限的行動裝置或即時系統中,GRU 往往是更好的選擇!


下一章我們將進入現代 AI 的轉折點:Transformer 與 Attention 機制。這就是讓 GPT 誕生的核心技術,我們將揭開「大腦抓重點」的秘密!