NLP-Word2Vec(2)
Word2Vec實作介紹,並結合LSTM用於IMDB資料數據集
NLP-Word2Vec(2)
(一) Introduction
上一篇我們簡單介紹了Word2Vec的概念,其中包含詞向量的運用、Word2Vec的推導及領域應用面。而此篇則著重探討Word2Vec的實作,並嘗試結合IMDB資料集,完成語意的分類。
(二) IMDB Dataset
IMDB為電影評論數據集,共具五萬筆,且每筆數據會依據影評內容給予相對應的標籤,如當影評內容偏向正面則紀錄為1,否則為0,是一種二進制的情感分類數據集,其適合用於自然語言處理或文本分析。

IMDB數據集示意圖
由於IMDB為開放數據集,故我們可以透過下列方式取得。
[embed]取得 IMDB數據集
(三) Workflow
本篇主要目標為訓練出一個可以有效判釋該影評內容為正面或負面的模型。為了能讓模型具有較高的準確率,我們需要依序透過下列幾個步驟來達成,首先透過Text Preprocessing(文字前處理),將影評數據進行文字轉換、去除冗餘單詞和斷詞,再利用Word2Vec將每筆影評製作成Word Embedding(詞向量),因模型需輸出該影評為正負評,因此,最後要將訓練完成的詞向量輸入至Long Short-Term Memory(LSTM;長短期記憶模型),得到能應用的模型。

工作流程
(四) Text Preprocessing
一般而言,取得原始數據的過程中,因來源各異容易包含大量雜訊,進而易影響模型的學習,造成模型準確率不佳,因此,我們必須透過前處理的方式,從原始數據中萃取出重要資訊。而在此專案中,我們將文字前處理的過程分成下列四個步驟。
- 移除HTML tag,只保留英文字母、數字與底線
- 將所有英文字母轉換為小寫(optional)
- 移除停用詞(Stop words),如 i、me及is等等。我們從影評數據中發現介係詞、定冠詞與代名詞皆為高頻單字,而此些單字帶有的資訊量有限,故不予保留,此處我們參考的是NLTK的斷詞表
- 斷詞,將影評數據需先經斷詞後,Word2Vec才能為每個單詞訓練詞向量,由於數據集為英文,而選擇NLTK作為斷詞工具。(當數據集為中文時,則可以參考Jieba、CKIP與CKIP Tagger等)
[embed]text preprocess
(五) Word2Vec Training
此階段我們會將前處理後的斷詞結果,製作成初始化詞向量,並採用gensim word2vec套件進行實作如下。
[embed]訓練 Word2Vec
其中幾個重要參數如可以參考**Gensim線上文檔說明**,如skip-gram與cbow的選擇、每個單詞使用的向量維度及迭代次數等等。以上圖為例,當訓練結束後,Word2Vec會將每個單詞以維度500的詞向量做表示。應用上,我們可以透過比較詞向量的相似度的方式,找出與其最相近的單詞,如與blood最相近的單詞為curdling、splattered等等。
此外也可以透過Tensorflow Embedding projector進行可視化,協助我們更加值觀的理解整個數據集中,單詞的聚類情況。使用上,我們先將單詞及其所表示的詞向量,記錄成兩個獨立檔案,再透過Tensorflow Embedding projector展示結果。
[embed]建立Tensorflow Embedding Projector所需檔案

Tensorflow Embedding Projector 展示結果
(六) Create Embedding Layer
有了每個單詞的詞向量後,我們需要將影評中的每個單詞傳換成詞向量,建立代表該影評的詞向量集合,就是所謂的Embedding Layer,以此作為LSTM模型的輸入,資料準備的過程分為三個階段
1.將影評中每個單詞映射到Word Embedding中的Index

Embedding Index
- IMDB數據集中每則影評的長短不一,造成每則影評詞向量集合的長度不同(LSTM只接受固定長度的輸入),因此必須以填充0的方式截長補短,固定每則數據的長度

文本組成詞向量集合
- LSTM在訓練時會依照Emdedding Layer中的index取出對應的詞向量
[embed]
到目前為止,我們已經透過Word2Vec得到每個單詞對應的詞向量,並將影評數據集依據詞向量製作成embedding layer,完成訓練LSTM的準備。
(七) LSTM training
在機器學習的領域中,有許多架構相異的類神經網絡,因應目的的不同而有其適合的用途。在自然語言處理的領域中,要分析一個文本,如果只考慮個體單詞的意義,則容易忽視文本的上下文,失去文句間的順序與架構性,因此選擇LSTM作為此次辨識之模型,該模型具有記憶的概念,會同時考慮除目標單詞以外的上下單詞,使的模型能學習到完整的文本資訊。
決定好LSTM模型後,下一步我們要設計模型架構及設定參數,且因Embedding Layer已經過Word2Vec預訓練,因此在訓練LSTM時不額外訓練Embedding Layer中的參數,此外影評標籤為01(0)與10(1)兩個位元,故模型最後一層輸出同樣為兩位元,在模型參數部分,將最後一層激發函數設定為softmax且損失函數設定為categorical crossentropy,此設定適合處理多分類問題,模型架構圖如下。

LSTM 架構圖
[embed]模型訓練
模型訓練完成後,我們可以試著用來預測測試資料
[embed]模型預測

預測報告
從模型的分類報告可以發現準確度大約落在0.8左右,雖仍有很大的提升空間,但另一方面也證實了此類方法確有其可行之處,此次實作部分也在此告一段落,感謝大家的閱讀~
** 謝謝大家花費寶貴的時間閱讀這篇文章,裡面包含了一些個人理解,如果有任何問題或內容有誤,請務必留言或寄信給我,再次感謝大家~~~
信箱: caps9129@gmail.com
,
메타데이터
- post_id
- 81d4e210e5a8
- slug
- nlp-word2vec-2-81d4e210e5a8
- url
- https://medium.com/nlp%E8%87%AA%E7%84%B6%E8%AA%9E%E8%A8%80%E8%99%95%E7%90%86/nlp-word2vec-2-81d4e210e5a8
- canonical_url
- https://medium.com/nlp%E8%87%AA%E7%84%B6%E8%AA%9E%E8%A8%80%E8%99%95%E7%90%86/nlp-word2vec-2-81d4e210e5a8
- author_url
- https://medium.com/@caps9129
- status
- ok
- fetched_at
- 2026-06-21 07:44:09