博客 / 詳情

返回

吳恩達深度學習課程五:自然語言處理 第二週:詞嵌入(三)Word2Vec

此分類用於記錄吳恩達深度學習課程的學習筆記。
課程相關信息鏈接如下:

  1. 原課程視頻鏈接:[雙語字幕]吳恩達深度學習deeplearning.ai
  2. github課程資料,含課件與筆記:吳恩達深度學習教學資料
  3. 課程配套練習(中英)與答案:吳恩達深度學習課後習題與答案

本篇為第五課的第二週內容,2.6的內容以及一些相關知識的補充。


本週為第五課的第二週內容,與 CV 相對應的,這一課所有內容的中心只有一個:自然語言處理(Natural Language Processing,NLP)
應用在深度學習裏,它是專門用來進行文本與序列信息建模的模型和技術,本質上是在全連接網絡與統計語言模型基礎上的一次“結構化特化”,也是人工智能中最貼近人類思維表達方式的重要研究方向之一。
這一整節課同樣涉及大量需要反覆消化的內容,橫跨機器學習、概率統計、線性代數以及語言學直覺。
語言不像圖像那樣“直觀可見”,更多是抽象符號與上下文關係的組合,因此理解門檻反而更高
因此,我同樣會儘量補足必要的背景知識,儘可能用比喻和實例降低理解難度。
本週的內容關於詞嵌入,是一種相對於獨熱編碼,更能保留語義信息的文本編碼方式。通過詞嵌入,模型不再只是“記住”詞本身,而是能夠基於語義關係進行泛化,在一定程度上實現類似“舉一反三”的效果。詞嵌入是 NLP 領域中最重要的基礎技術之一。

本篇的內容關於Word2Vec,這是詞嵌入領域中里程碑式的內容。

1. Word2Vec

在上一篇裏我們提到了,早期的詞嵌入模型雖然實現了通過神經網絡學習詞向量,但在計算成本與實際性能上仍然存在明顯的優化空間。
因此,正如 CNN 是在傳統卷積操作基礎上的系統化建模,RNN 是對一般循環結構的模型化抽象 一樣,在詞嵌入這一思想被提出之後,圍繞其訓練效率、表示質量與可擴展性的一系列新模型與新技術便不斷出現。
而這些改進在解決舊問題的同時,又會引入新的結構性挑戰,推動研究不斷向前演進。正是在這種“問題—改進—新問題”的循環中,計算機科學得以持續發展。

在詞嵌入領域同樣如此,當使用神經網絡學習連續詞向量被證明可行之後,新的問題就是:如何在保證表示質量的同時,提高實際部署價值,讓詞向量能夠更高效、穩定地訓練出來?

正是在這樣的背景下,Mikolov 等人於 2013 年在論文Efficient Estimation of Word Representations in Vector Space中提出了 Word2Vec
簡單説明一下,Word2Vec 的命名來源於“Word to Vec”,其中的“2”是工程寫法,相當於 to,直觀表達了“從詞彙到向量”的映射思想。

在論文中,作者並未引入複雜的深層網絡結構,而是通過極其簡潔的模型設計與目標函數重構,大幅提升了詞向量學習的效率,使其首次具備在超大規模語料上訓練的可行性
同年,在論文 Distributed Representations of Words and Phrases and their Compositionality 中,作者進一步引入了 負採樣(Negative Sampling) 等近似訓練策略,在不顯著犧牲表示質量的前提下,將訓練複雜度從依賴詞表規模的 Softmax 形式降為常數級,從而使詞嵌入模型真正成為 NLP 系統中的基礎組件。
儘管如今有更先進的上下文相關嵌入模型,Word2Vec 的思想仍然具有重要價值:它奠定了現代詞嵌入方法的理論基礎,並在輕量級、資源受限的場景中仍可提供高效、可解釋的詞向量。

需要強調的是,Word2Vec 並不是某一個具體的神經網絡結構名稱,而是對一類詞向量學習方法的統稱,主要包括兩種基本模型:

  1. CBOW(Continuous Bag-of-Words):根據上下文詞預測中心詞。
  2. Skip-gram:根據中心詞預測上下文詞。

還是簡單過了過歷史,下面就來詳細展開這部分內容。

1.1 連續詞袋模型 (Continuous Bag-of-Words,CBOW)

CBOW 的思想並不複雜,相對於上一篇中早期詞嵌入模型的模型設計,CBOW 最大的改變其實是對上下文信息的選擇和詞向量處理部分。
我們分點來進行展開:

(1)數據準備

首先,一句話概括一下 CBOW 的核心思想 :用上下文詞來預測中心詞
所謂“上下文詞”,就是目標詞前後一定範圍內的詞,這個範圍同樣還是由窗口大小 \(t\) 決定。
只是不同於之前的只使用目標詞\(t\) 個詞,CBOW 中的窗口大小表示中心詞左右各最多 \(t\) 個詞

這裏可能混淆,我們展開一下:對於中心詞,模型會把左右 \(1\sim t\) 個詞作為上下文集合,如果左右不足所選窗口大小個詞(如在句首或句尾),就取實際存在的詞。
舉個例子,對於句子:

 I want to go to the ____ to get a few potato chips

假如窗口大小為 2,訓練時可能存在以下兩種選擇:

  1. 左右各選 1 個詞:
    • 左邊 1 個詞:the
    • 右邊 1 個詞:to
    • 上下文集合:\(\{\text{the}, \text{to}\}\)
  2. 左右各選 2 個詞:
    • 左邊 2 個詞:to, the
    • 右邊 2 個詞:to, get
    • 上下文集合:\(\{\text{to}, \text{the}, \text{to}, \text{get}\}\)

image.png

你會發現,在 CBOW 訓練時,窗口大小 \(t\) 只規定了一個最大值,左右各選 1~t 個上下文詞是隨機的,這樣模型可以在不同組合下學習更魯棒的詞向量。

但同時,你可能也會發現一個問題:如果還按照之前拼接詞向量的邏輯,那麼這種不固定長度的選詞模式就會帶來模型輸入維度的不統一。

這個問題在 CBOW 中是怎麼解決的?我們繼續:

(2)模型傳播

實際上,在模型結構方面,CBOW 進行的改動不多,但為了處理可變長度上下文和提升訓練效率,它做了幾個關鍵優化。我們先整體看一看它的傳播過程:
image.png
這裏展開幾個更改的內容:

  1. 對詞向量的處理從拼接改為取平均或求和:這一步極大縮小了模型輸入的維度,從而減少了計算成本。但這不是沒有代價,這樣的操作忽略了信息的順序: 沒有順序的信息就像被一股腦地裝進了一個袋子裏交給模型,這也是 CBOW 命名的由來。
  2. 隱藏層沒有使用激活函數引入非線性:這一步通過簡化模型結構來提高訓練效率,但同樣,這也讓模型失去了非線性能力

看到這裏,你會發現:這些優化好像有利有弊,並沒有我們想象的那麼“完美”
實際上,CBOW 的優化體現了一個權衡:通過求平均和去掉非線性,它在訓練效率和可擴展性上獲得了顯著優勢,但同時犧牲了順序信息和非線性表達能力,順序信息完全丟失,模型無法區分左右詞序。
最終,CBOW 更像是在訓練詞彙的統計共現規律,適合在大規模語料上快速學習基礎詞向量,但對複雜上下文或語義關係的建模能力有限。
相應地,它在速度、資源消耗和向量可解釋性方面具有明顯優勢。

而Word2Vec中的另一類模型:Skip-gram 便與之不同,我們繼續:

1.2 Skip-gram

Skip-gram 的核心思想與 CBOW 相反: 用中心詞去預測它的上下文詞

也就是説,CBOW 是“上下文 → 中心詞”,而 Skip-gram 是“中心詞 → 上下文詞”。這種方向的轉換,使 Skip-gram 在捕捉稀有詞語義時表現更優,我們按同樣的格式來展開:

(1)數據準備

Skip-gram 也依賴窗口大小 \(t\) 來確定上下文範圍,對於句子:

I want to go to the pier to get a few potato chips

假如中心詞選擇 "pier",窗口大小 \(t=2\),它的上下文集合就是中心詞左右各最多 2 個詞:

  • 左側上下文:to, the
  • 右側上下文:to, get

到這部分的邏輯,它和 CBOW 是相同的,而不同之處在這裏:
Skip-gram 會將每一個上下文詞與中心詞組成一個訓練樣本,生成多條訓練對,就像這樣:

中心詞 上下文詞
pier the
pier to
pier to
pier get

而 Skip-gram 的傳播過程也和 CBOW 有所不同,我們在下面來詳細展開:

(2)模型傳播

首先要明確的核心點是:在 Skip-gram 中,只有中心詞的詞向量被輸入模型。
它的具體傳播過程如下:
image.png
同樣強調一些細節:

  1. 同一中心詞形成的多個訓練對每個都作為獨立樣本輸入模型,重複的訓練對不會去重。
  2. 上下文詞即為該樣本的標籤,模型以此計算損失並訓練中心詞的詞向量。

同時,你會發現,Skip-gram 同樣忽略了上下文詞的順序,以換取在大規模語料上的訓練效率。它的本質也是在捕捉詞彙的統計共現規律,但相比 CBOW,每個上下文詞都單獨訓練,因此不容易被高頻詞“淹沒”,能學習更細粒度的詞向量。
在實踐中,多個訓練對通常組成 batch,一次性向量化計算,來提高訓練效率。

1.3 對比和小結

Word2Vec 的兩類基本模型 CBOW 和 Skip-gram 在訓練目標、數據處理和適用場景上各有特點,但都體現了 Word2Vec 的核心價值:通過簡單、高效的神經網絡結構,將詞彙映射為向量,從而捕捉詞彙的統計共現規律和語義特徵。
我們簡單對比總結如下:

特性 CBOW Skip-gram
訓練目標 上下文 → 中心詞 中心詞 → 上下文
輸入 上下文詞向量求平均或求和 中心詞向量
輸出 中心詞預測 上下文詞預測
樣本生成 每個中心詞 1 個訓練樣本 每個中心詞 × 上下文詞數 個訓練樣本
稀有詞建模 不擅長 更穩健
順序信息 丟失 丟失
計算效率 相對低(可用負採樣優化)
適用場景 高頻詞快速學習、大規模語料 低頻詞學習、捕捉長尾語義
向量質量 平滑、基礎語義關係 更細粒度、長尾詞語義表現好

最後,Word2Vec 提供了效率、可擴展性與語義捕捉能力的平衡方案:CBOW 注重訓練速度和高頻詞表示,Skip-gram 注重低頻詞和長尾詞的語義細節。
但二者同樣具有侷限性,主要在於在於順序信息丟失和標準 Softmax 在大詞表下計算開銷高,這也為我們之後要介紹的負採樣和分層 Softmax等優化策略提供了研究和應用空間。

2.總結

概念 原理 比喻
Word2Vec 通過淺層神經網絡將詞彙映射為稠密向量,學習詞彙的統計共現規律 就像給每個詞配一個“身份卡片”,卡片上的信息可以反映它與其他詞的關係
CBOW 以上下文詞預測中心詞,輸入為上下文向量的平均或求和,輸出為中心詞概率 像根據周圍鄰居的描述來猜某個人是誰,信息平均處理,順序不重要
Skip-gram 以中心詞預測每個上下文詞,輸入為中心詞向量,輸出為上下文詞概率 像一個人介紹自己時,把自己的特徵逐一告訴周圍人,每條信息單獨訓練
訓練樣本生成 CBOW:每個中心詞生成 1 個訓練樣本;Skip-gram:每個中心詞 × 上下文詞數生成多條樣本 CBOW 是一次性“彙總鄰居描述”,Skip-gram 是逐條“對每個鄰居單獨説明”
侷限性 順序信息丟失;標準 Softmax 在大詞表下計算開銷高 就像在聚餐中只知道菜裏有哪些食材,但不清楚順序;如果菜太多,要統計全部組合很費力
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.