一、引言:當文字遇上數學 —— 自然語言的數字化革命
在自然語言處理(NLP)的世界里,計算機要理解人類語言,首先需要將文字轉化為數學向量。早期的 One-Hot 編碼如同給每個詞語分配一個唯一的 “房間號”,例如 “我愛北京天安門” 分詞后,每個詞用一個僅含一個 1 的高維向量表示。但這種方法如同用龐大的書架存放稀疏的書籍 —— 維度爆炸、語義割裂,無法捕捉詞語間的潛在聯系。
于是,** 分布式表示(Distributed Representation)** 應運而生,它如同為詞語打造一張 “語義地圖”,每個詞被映射為低維空間中的一個點,相近的點代表語義相關的詞。Word2Vec 正是這一思想的經典實現,它用簡潔的神經網絡架構,讓計算機學會 “理解” 詞語的隱含關系,甚至能完成 “king - man + woman = queen” 這樣的語義推理。
二、Word2Vec:讓詞語在向量空間中 “對話”
2.1 從 One-Hot 到詞向量:稀疏到稠密的跨越
One-Hot 編碼的缺陷在于 “維度詛咒”:若詞表有 N 個詞,每個向量需 N 維,且僅有一個 1。而 Word2Vec 通過訓練,將詞語映射到d 維稠密向量(d 通常為 50-300),每個維度對應一種潛在語義特征(如 “性別”“地點”“情感” 等)。例如 “國王” 和 “女王” 可能在 “權力” 維度值高,在 “性別” 維度值相反。
2.2 模型架構:簡化的神經網絡魔法
Word2Vec 本質是一個兩層神經網絡,有兩種經典模式:
- CBOW(連續詞袋模型):用上下文詞語預測目標詞(如用 “I” 和 “learning” 預測 “deep”)。
- Skip-gram:用目標詞預測上下文(如用 “deep” 預測 “I” 和 “learning”)。
以 CBOW 為例,模型結構如下:
- 輸入層:上下文詞語的 One-Hot 向量(假設詞表大小 V,向量維度 V)。
- 隱藏層:權重矩陣 W(V×d)與輸入向量相乘,壓縮為 d 維詞向量。
- 輸出層:通過 Softmax 計算目標詞的概率(矩陣 W'(d×V)將隱藏層映射回 V 維空間)。
2.3 數據生成:滑動窗口里的語義世界
訓練數據來自大規模文本(如維基百科),通過滑動窗口提取上下文 - 目標詞對。例如句子 “I like deep learning and NLP”,窗口大小設為 3 時,可生成樣本:
- 上下文 [“I”, “like”] → 目標詞 “deep”
- 上下文 [“like”, “deep”] → 目標詞 “learning”
...
滑動窗口遍歷全文后,形成大量訓練樣本。為解決 Softmax 計算量過大的問題,引入負采樣(Negative Sampling):對每個正樣本(真實上下文 - 目標詞對),隨機采樣若干負樣本(非目標詞),將多分類問題轉化為二分類,大幅提升訓練效率。
三、訓練 Word2Vec:讓機器學會 “猜詞”
訓練的核心是通過反向傳播優化權重矩陣 W 和 W',使得預測目標詞的概率最大化。過程可簡化為:
- 初始化:隨機初始化詞向量矩陣。
- 前向傳播:根據輸入上下文計算目標詞概率。
- 計算損失:用交叉熵衡量預測與真實標簽的差距。
- 反向傳播:更新權重,降低損失。
訓練完成后,每個詞語對應隱藏層的權重向量即為其詞向量。這些向量不僅能通過余弦相似度衡量詞語相關性(如 “貓” 與 “狗” 接近),還能通過向量運算發現語義規律,如 “中國” - “北京” + “巴黎” ≈ “法國”。
四、Word2Vec 的優缺點:通用但不完美的語義引擎
優點:
- 高效性:相比傳統 Embedding,更低的維度和更快的訓練速度。
- 語義關聯性:能捕捉詞語間的類比關系(如 “男人 - 女人” 對應 “國王 - 女王”)。
- 通用性:可遷移至多種 NLP 任務(如文本分類、機器翻譯)。
缺點:
- 多義詞困境:一個詞對應一個向量,無法區分 “bank(銀行 / 河岸)” 在不同語境的含義。
- 靜態局限性:詞向量固定,無法針對特定任務動態調整(如情感分析中 “棒” 的褒義強度)。
五、實戰:用 Word2Vec 生成古詩
5.1 數據準備:構建詩詞語料庫
收集唐詩、宋詞等古典文本,預處理步驟:
- 分詞(保留單字,因古詩以字為基本單位)。
- 清洗(去除標點、特殊符號)。
- 構建詞表(統計高頻字,過濾生僻字)。
5.2 訓練詩詞專用詞向量
調整 Word2Vec 參數:
- 窗口大小設為 2-5(捕捉近鄰字的語義關聯,如 “床前”“明月”)。
- 向量維度設為 100-200(平衡語義表達與計算效率)。
- 負采樣數設為 5-10(增加訓練難度,提升向量質量)。
訓練完成后,“月”“夜”“酒” 等字的向量應在語義空間中接近,而 “江”“河”“湖” 形成地理相關的簇。
5.3 結合語言模型生成詩句
Word2Vec 僅提供詞向量,生成古詩需結合序列模型(如 RNN/LSTM):
- 編碼層:將輸入字轉換為 Word2Vec 向量。
- 隱藏層:RNN 捕捉上下文依賴,輸出隱藏狀態。
- 解碼層:通過 Softmax 預測下一個字的概率,采樣生成詩句。
示例代碼框架(偽代碼):
python
# 假設已訓練好word2vec模型和RNN模型
def generate_poem(seed_word, length=4): poem = [seed_word] for _ in range(length): # 編碼當前序列 vecs = [word2vec[word] for word in poem] hidden_state = rnn(vecs) # 預測下一字 next_word = softmax(hidden_state).sample() poem.append(next_word) return ''.join(poem) # 生成示例:以“春”開頭的五言絕句
print(generate_poem('春', 20)) # 輸出類似“春眠不覺曉,處處聞啼鳥...”的詩句
六、結語:從詞向量到認知智能的起點
Word2Vec 如同打開自然語言理解的第一扇窗,用簡單的架構揭示了語言的數學本質。盡管它存在局限,但作為后續預訓練模型(如 BERT、GPT)的基石,其思想深遠影響著 NLP 的發展。從古詩生成到智能對話,詞向量始終是連接人類語言與機器智慧的橋梁。
思考延伸:如何用 Word2Vec 分析不同詩人的寫作風格?多語言場景下,如何讓不同語言的詞向量 “對話”?歡迎在評論區分享你的想法!
參考資料:
- 《Word2Vec Parameter Learning Explained》(Tomas Mikolov et al.)
- 《自然語言處理入門》(何晗)
- Word2Vec 官方實現:gensim 庫