此分類用於記錄吳恩達深度學習課程的學習筆記。
課程相關信息鏈接如下:
- 原課程視頻鏈接:[雙語字幕]吳恩達深度學習deeplearning.ai
- github課程資料,含課件與筆記:吳恩達深度學習教學資料
- 課程配套練習(中英)與答案:吳恩達深度學習課後習題與答案
本篇為第五課的第二週內容,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 並不是某一個具體的神經網絡結構名稱,而是對一類詞向量學習方法的統稱,主要包括兩種基本模型:
- CBOW(Continuous Bag-of-Words):根據上下文詞預測中心詞。
- 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 個詞:
the - 右邊 1 個詞:
to - 上下文集合:\(\{\text{the}, \text{to}\}\)
- 左邊 1 個詞:
- 左右各選 2 個詞:
- 左邊 2 個詞:
to,the - 右邊 2 個詞:
to,get - 上下文集合:\(\{\text{to}, \text{the}, \text{to}, \text{get}\}\)
- 左邊 2 個詞:
你會發現,在 CBOW 訓練時,窗口大小 \(t\) 只規定了一個最大值,左右各選 1~t 個上下文詞是隨機的,這樣模型可以在不同組合下學習更魯棒的詞向量。
但同時,你可能也會發現一個問題:如果還按照之前拼接詞向量的邏輯,那麼這種不固定長度的選詞模式就會帶來模型輸入維度的不統一。
這個問題在 CBOW 中是怎麼解決的?我們繼續:
(2)模型傳播
實際上,在模型結構方面,CBOW 進行的改動不多,但為了處理可變長度上下文和提升訓練效率,它做了幾個關鍵優化。我們先整體看一看它的傳播過程:
這裏展開幾個更改的內容:
- 對詞向量的處理從拼接改為取平均或求和:這一步極大縮小了模型輸入的維度,從而減少了計算成本。但這不是沒有代價,這樣的操作忽略了信息的順序: 沒有順序的信息就像被一股腦地裝進了一個袋子裏交給模型,這也是 CBOW 命名的由來。
- 隱藏層沒有使用激活函數引入非線性:這一步通過簡化模型結構來提高訓練效率,但同樣,這也讓模型失去了非線性能力。
看到這裏,你會發現:這些優化好像有利有弊,並沒有我們想象的那麼“完美”。
實際上,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 中,只有中心詞的詞向量被輸入模型。
它的具體傳播過程如下:
同樣強調一些細節:
- 同一中心詞形成的多個訓練對每個都作為獨立樣本輸入模型,重複的訓練對不會去重。
- 上下文詞即為該樣本的標籤,模型以此計算損失並訓練中心詞的詞向量。
同時,你會發現,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 在大詞表下計算開銷高 | 就像在聚餐中只知道菜裏有哪些食材,但不清楚順序;如果菜太多,要統計全部組合很費力 |