课堂筆記
word representation#
我們如何在 NLP 模型中表示單詞?
N-gram#
定義:n-gram 是指從給定的文本或語音序列中連續取出的 n 個元素的序列。在自然語言處理領域,這些元素通常是單詞。n-gram 模型是一種概率語言模型,用於估計給定文本序列出現的概率。它基於這樣一個假設:一個單詞出現的概率只取決於它前面的 n-1 個單詞。例如,在二元語法(bigram,即 n=2 的 n-gram)模型中,“我愛自然語言處理” 這句話會被分解為 “我愛”“愛自然”“自然語言”“語言處理” 這樣的二元詞組,模型會學習每個二元詞組出現的概率,比如 “愛自然” 這個組合在語料庫中出現的頻率等,以此來預測文本的可能性或者進行語言生成等任務。
第一個公式表示一個單詞序列的聯合概率。它通過將每個單詞出現的概率(條件於前一個單詞)相乘來計算整個序列的概率。這種分解方式稱為鏈式法則(chain rule)。
第二個公式計算給定前一個單詞時,當前單詞出現的條件概率。公式中的各個部分解釋如下:
- :表示在訓練數據中,單詞對出現的次數。
- :表示單詞在訓練數據中出現的次數。
- ∣V∣:表示詞彙表的大小,即詞彙表中不同單詞的數量。
- α:是一個平滑參數,用於避免零概率問題。它是一個介於 0 和 1 之間的值,通常用於調整未見過的單詞對的概率。
具體細節#
Definition: An n-gram is a chunk of n consecutive words.
•unigrams: “the”, “students”, “opened”, ”their”
•bigrams: “the students”, “students opened”, “opened their”
•trigrams: “the students opened”, “students opened their”
•four-grams: “the students opened their”
理念:收集不同 n-gram 出現的頻率,並使用這些數據預測下一個單詞。
- First we make a Markov assumption: depends only on the preceding n-1 words
- 我們如何獲取這些 n 元組和 (n-1) 元組的概率?回答:通過在一些大型文本語料庫中計數它們!
示例#
假設我們正在學習一個 4-gram 語言模型:
稀疏問題(Sparsity Problems)#
n-gram 模型是自然語言處理中用於預測文本序列的一種方法,它基於假設一個詞的出現只依賴於它前面的 n-1 個詞。然而,當 n 的值較大時,稀疏問題會變得更加嚴重,因為可能存在許多未見過的 n-gram 組合。
- 稀疏問題 1(Sparsity Problem 1):
問題:
如果某個特定的詞或詞組(如 “students opened their w”)在訓練數據中從未出現過,那麼根據 n-gram 模型,這個詞或詞組的概率將為 0。這會導致模型無法為這些未見過的詞或詞組分配任何概率。
部分解決方案:
平滑(Smoothing):為了解決這個問題,可以在每個詞的計數中添加一個小的值 δ。這樣即使某個詞或詞組在數據中從未出現過,它的概率也不會是 0。平滑技術可以確保所有詞都有一個非零的概率,從而避免概率為 0 的情況。
稀疏問題 2(Sparsity Problem 2):
問題:
如果一個更長的 n-gram(如 “students opened their”)在數據中從未出現過,那麼模型將無法計算任何跟隨這個詞組的詞(如 w)的概率。
部分解決方案:
回退(Backoff):在這種情況下,可以回退到一個更短的 n-gram(如 “opened their”)來計算概率。這種方法允許模型在遇到未見過的長 n-gram 時,使用更短的 n-gram 來估計概率。
注意事項:
增加 n 的影響: 增加 n(n-gram 的長度)會使稀疏問題更加嚴重。通常,我們不能讓 n 大於 5,因為隨著 n 的增加,未見過的 n-gram 組合的數量會急劇增加,導致更多的稀疏問題。
通過這些方法,n-gram 語言模型可以在一定程度上緩解稀疏問題,提高模型的泛化能力和預測準確性。然而,這些方法也有其局限性,例如平滑可能會引入一些噪聲,而回退可能會丟失一些上下文信息。因此,在實際應用中,選擇合適的 n 值和平滑技術是非常重要的。
Storage Problems#
存儲需求:n-gram 模型需要存儲在訓練語料庫中觀察到的所有 n-grams 的計數。這意味著模型的大小與訓練數據中不同 n-grams 的數量成正比。
模型大小的影響因素:
- 增加 n:n-gram 的長度 n 增加時,模型需要存儲更多的 n-grams 計數,因為更長的 n-grams 組合數量會急劇增加。
- 增加語料庫:訓練語料庫的增加也會增加模型的大小,因為更多的文本意味著更多的 n-grams 組合。
解決方案和挑戰: - 存儲優化:由於 n-gram 模型的存儲需求隨著 n 的增加和語料庫的擴大而增加,因此需要有效的存儲優化技術,如壓縮、哈希表等,來減少存儲空間。
- 模型簡化:可以通過限制 n-gram 的長度、使用更高效的數據結構或算法來簡化模型,以減少存儲需求。
- 稀疏性問題:隨著 n 的增加,稀疏性問題(即許多 n-grams 在訓練數據中從未出現)變得更加嚴重,這需要使用平滑技術來解決。
- 替代模型:可以考慮使用更先進的模型,如神經網絡模型(如 Transformer),這些模型通常更緊湊,能夠以更少的參數學習更複雜的語言模式。
朴素貝葉斯#
朴素貝葉斯是一種基於貝葉斯定理的簡單概率分類器,它假設特徵之間相互獨立。在文本分類任務中,朴素貝葉斯模型可以用於計算給定類別 cj 下單詞 wi 出現的概率。
公式如下:
公式解釋:
- :表示在給定類別 cj 的條件下,單詞 wi 出現的概率。這是模型預測的估計概率。
- Count (wi,cj):表示在類別 cj 中,單詞 wi 出現的次數。
- :表示在類別 cj 中,所有單詞出現次數的總和。這裡 V 是詞彙表,表示所有可能的單詞。
- α:是平滑參數,用於處理數據稀疏問題,避免出現零概率。它是一個介於 0 和 1 之間的值。
- ∣V∣:表示詞彙表的大小,即詞彙表中不同單詞的數量。
平滑技術:
在朴素貝葉斯模型中,平滑技術同樣用於處理數據稀疏問題。具體來說,公式中的平滑技術通過在分子和分母中都加上 α 來實現: - 在分子中加上 α:Count (wi,cj)+α,這表示即使單詞 wi 在類別 cj 中沒有出現過,它的概率也不會是零,而是 α。
- 在分母中加上 α∣V∣:,這表示即使某些單詞在類別 cj 中沒有出現過,它們的概率也不會是零,而是被均勻分配。
為什麼需要在 NLP 模型關注語義?#
如果用文字:a feature is a word identity (= string)
比如說上個詞是‘terrible’,需要在測試集和訓練集中有完全相同的 'terrible'。
但如果能將語義轉化為向量:
- previous word was vector [35, 22, 17, …]
- Now in the test set we might see a similar vector [34, 21, 14, …]
- We can generalize to similar but unseen words!!!
- 在傳統的 NLP 中,我們把單詞視作離散的向量,用 one-hot 向量表示,向量維度 = 詞彙表中單詞數量。但這種方法沒有提供自然相似度的辦法。
- 分佈語義學:一個詞的意義由經常出現在其附近的詞給出
- When a word w appears in a text, its context is the set of words that appear nearby(within a fixed-size window). We use the many contexts of w to build up a representation of w。
- 我們可以用向量表示一個詞的上下文!
What do words mean?#
- 同義詞:couch/sofa, car/automobile, filbert/hazelnut
- 反義詞:dark/light, rise/fall, up/down
- 一些詞不是同義詞,但他們共享一些意義元素,如:cat/dog, car/bicycle, cow/horse
- 一些詞不相似,但他們是相關的:coffee/cup, house/door, chef/menu
The big idea: model of meaning focusing on similarity
相似詞語是 “在向量空間中附近
詞嵌入過程#
Goal: represent words as short (50-300 dimensional) & dense (real-valued) vectors!
- 基於計數的方法(Count-based approaches):
使用歷史:這種方法自 90 年代以來一直在使用。
共現矩陣:構建一個稀疏的詞 - 詞共現(PPMI,Positive Pointwise Mutual Information)矩陣,該矩陣記錄了不同詞在文本中共同出現的頻率。
SVD 分解:使用奇異值分解(SVD)對共現矩陣進行分解,以獲得詞的低維向量表示。 - 基於預測的方法(Prediction-based approaches):
機器學習問題:將詞嵌入問題表述為一個機器學習問題,通過預測上下文中的詞來學習詞的表示。
Word2vec:由 Mikolov 等人在 2013 年提出,Word2vec 通過預測給定詞的上下文詞或通過上下文詞預測中心詞來學習詞向量。
GloVe:由 Pennington 等人在 2014 年提出,GloVe(Global Vectors for Word Representation)利用全局詞 - 詞共現信息來學習詞向量。
Word embeddings: the learning problem#
從文本中學習向量來表示單詞。
輸入:
一個大型文本語料庫(text corpus)和詞彙表 V。
向量維度 d(例如,300 維)。
輸出:
一個函數 f→Rd,它將詞彙表中的每個詞映射到一個 d 維的實數向量空間中。
學習過程:
詞嵌入的學習過程通常涉及優化一個目標函數,該函數衡量模型在預測任務(如預測上下文中的詞)上的性能。
通過訓練,模型學習到的詞向量能夠捕捉詞與詞之間的關係,例如同義詞、反義詞、詞的類別等。
基本屬性:
- 相似詞語具有相似向量 argmaxcos (e (w),w (w*))
- “man”(男性)和 “woman”(女性)之間的關係,以及 “king”(國王)和 “queen”(王后)之間的關係。在詞嵌入空間中,這兩個關係是相似的,即 vman−vwoman≈vking−vqueen。這意味著從 “man” 到 “woman” 的向量與從 “king” 到 “queen” 的向量相似。
- 動詞時態(Verb tense):如 “walk”(走)、“walked”(走過)、“swim”(游泳)和 “swam”(游過)。這些關係在詞嵌入空間中也是相似的,即 vwalking−vwalked≈vswimming−vswam。
- 國家 - 首都(Country-Capital):如 “France”(法國)和 “Paris”(巴黎)、“Italy”(意大利)和 “Rome”(羅馬)。這些關係在詞嵌入空間中也是相似的,即 vParis−vFrance≈vRome−vItaly。
- 解決類比問題的方法:通過計算向量的差和餘弦相似度來找到類比詞。具體步驟如下:
定義類比關係:給定一個類比關係,其中 a 和 b 是已知詞,a∗和 b∗是需要找到的類比詞。
計算向量差:計算 e (a∗)−e (a)+e (b),其中 e (w) 表示詞 w 的向量表示。
尋找最相似的詞:在詞彙表 V 中找到與 e (a∗)−e (a)+e (b) 餘弦相似度最大的詞 b∗,即 b∗=argmaxw∈Vcos (e (w),e (a∗)−e (a)+e (b))。
這張圖展示了通過神經網絡學習語言模型(LMs)的過程,特別是如何引入詞嵌入(word embedding)的概念。圖中描述的模型是神經概率語言模型(Neural Probabilistic Language Model),由 Yoshua Bengio、Réjean Ducharme、Pascal Vincent 和 Christian Jauvin 在 2003 年提出。
圖中元素解釋:
- 輸入層(Index for wt−n+1, wt−2, wt−1):
這些是前 n 個詞的索引,表示上下文。每個詞通過查找表(Table look-up)映射到一個向量表示,即詞嵌入。 - 詞嵌入層(C(wt−n+1), C(wt−2), C(wt−1)):
每個詞的索引通過查找表映射到一個向量,這些向量是共享的參數(shared parameters across words),表示詞嵌入。 - 隱藏層(tanh):
詞嵌入向量被連接起來,並通過一個非線性激活函數(如 tanh)處理。這一步是模型中計算量最大的部分。 - 輸出層(softmax):
隱藏層的輸出通過 softmax 函數轉換為概率分佈,表示在給定上下文下每個可能的下一個詞的概率。 - 輸出(t-th output = P(wt=i∣context)):
最終輸出是給定上下文條件下,第 t 個詞為某個特定詞 i 的概率。
word2vec#
skip-gram#
Skip-gram 模型的目標是使用每個詞來預測其上下文中的其他詞。
假設:
我們有一個大型文本語料庫
關鍵思想:
使用每個詞來預測其上下文中的其他詞。這是一個分類問題,因為模型需要從詞彙表中選擇正確的上下文詞。
上下文:
上下文定義為一個固定大小的窗口,大小為 2m(圖中例子中 m=2)。這意味著對於每個中心詞,模型會考慮其前後各 m 個詞作為上下文。
概率計算:
給定中心詞 a,模型需要計算其他詞 b 成為上下文詞的概率 P (b∣a)。
這個概率分佈 P (⋅∣a) 定義為∑w∈VP (w∣a)=1,即所有可能的上下文詞的概率之和。
圖中展示了一個中心詞 “into”,其上下文窗口大小為 2,包括前後各一詞,即 “problems”、“turning”、“banking”、“crises” 和 “as”。
模型需要學習如何根據中心詞預測這些上下文詞。
Skip-gram 模型的原理:
目標:對於每個中心詞,模型的目標是最大化其上下文詞的概率。
損失函數:通常使用交叉熵損失函數來訓練模型,即最小化預測概率分佈與實際上下文詞分佈之間的差異。
優化:通過梯度下降或其他優化算法來調整模型參數,以最小化損失函數。
這張圖進一步解釋了 Skip-gram 模型的訓練過程,展示了如何將文本數據轉換成模型可以處理的格式,並說明了模型的訓練目標。
上下文窗口:
圖中展示了一個大小為 2 的固定窗口,這意味著對於每個中心詞(圖中紅色標記的詞),模型會考慮其前後各兩詞作為上下文。
概率計算:
對於每個中心詞,模型需要計算其上下文詞的概率。例如,給定中心詞 “into”,模型需要計算 “problems”、“turning”、“banking”、“crises” 和 “as” 成為上下文詞的概率。
訓練數據轉換:
圖中右側展示了如何將原始文本數據轉換成模型訓練所需的格式。例如,對於中心詞 “into”,模型會生成訓練樣本 (into, problems)、(into, turning)、(into, banking)、(into, crises) 等。
訓練目標:
模型的訓練目標是找到一組參數,這些參數能夠最大化上下文詞的概率。換句話說,模型試圖學習到的詞向量能夠最好地預測給定中心詞的上下文詞。
目標函數:
如何定義?
這是通過使用詞向量和 Softmax 函數來實現的。
兩組向量:
對於詞彙表 V 中的每個詞,使用兩組向量:
ua∈Rd:中心詞 a 的向量,對於所有 a∈V。
vb∈Rd:上下文詞 b 的向量,對於所有 b∈V。
內積:
使用內積 ua⋅vb來衡量中心詞 a 與上下文詞 b 一起出現的可能性。
Softmax 函數:
使用 Softmax 函數將內積轉換為概率分佈。這是通過將內積的指數與所有可能的上下文詞的指數和進行歸一化來實現的。
概率分佈:
P (⋅∣wt) 是一個定義在詞彙表 V 上的概率分佈,表示給定中心詞 wt時,每個可能的上下文詞出現的概率。
vs Multinomial Logistic Regression#
- 多項式邏輯回歸:
公式:
多項式邏輯回歸用於多分類問題,其公式為:
P(y=c∣x)=∑j=1mexp(wj⋅x+bj)exp(wc⋅x+bc)
其中,y 是類別標籤,c 是其中一個類別,x 是輸入特徵向量,wc和 bc分別是類別 c 的權重向量和偏置項,m 是類別總數。
解釋:
公式中的分子是輸入特徵向量 x 和類別 c 的權重向量 wc的內積加上偏置項 bc的指數。
分母是所有類別的指數和,用於歸一化,使得所有類別的概率之和為 1。 - Skip-gram 模型:
公式:
Skip-gram 模型中的概率計算公式為:
P(wt+j∣wt)=∑k∈Vexp(uwt⋅vk)exp(uwt⋅vwt+j)
其中,wt是中心詞,wt+j是上下文詞,uwt和 vwt+j分別是中心詞和上下文詞的向量表示,V 是詞彙表。
解釋:
公式中的分子是中心詞 wt和上下文詞 wt+j的向量內積的指數。
分母是中心詞 wt與詞彙表中所有詞的向量內積的指數和,用於歸一化。 - 比較:
本質上是∣V∣路分類問題:Skip-gram 模型可以看作是一個多分類問題,其中∣V∣是詞彙表的大小。
固定 uwt時:如果固定中心詞的向量 uwt,那麼問題就簡化為一個多項式邏輯回歸問題。
非凸優化問題:由於需要同時學習中心詞和上下文詞的向量,訓練目標是非凸的,這意味著優化過程可能存在多個局部最優解。
vs 多項邏輯回歸#
Practise#
答案是 (b)。
每個詞有兩個 d 維的向量,所以是 2 × | V | × d
問:為什麼每個詞需要兩個向量而不是一個?
回答:因為一個詞不太可能在其自身的上下文窗口中出現。例如,給定詞 “dog” 時,P (dog∣dog) 應該是低的。如果我們只使用一組向量,模型本質上需要最小,這會導致自指向量過於相似,從而影響模型性能。
問:哪組向量用作詞嵌入?
回答:這是一個經驗性問題。通常,只使用作為詞嵌入,但你也可以將兩組向量連接起來使用。
Skip-gram with negative sampling (SGNS) 及其他變體#
問題描述:
在傳統的 Skip-gram 模型中,每次得到一對中心詞和上下文詞 (t,c),都需要用詞彙表中的所有詞來更新上下文詞向量 vk。這在計算上是非常昂貴的。
負採樣方法:
負採樣不是考慮詞彙表中的所有詞,而是隨機採樣 K 個(通常 K 在 5 到 20 之間)負樣本。這意味著我們只從詞彙表中隨機選擇 K 個詞作為負樣本,而不是使用所有詞。
Softmax 和負採樣公式:
Softmax:原始的 Skip-gram 模型使用 Softmax 函數來計算概率,公式為:
y=−log(∑k∈Vexp(ut⋅vk)exp(ut⋅vc))
負採樣:負採樣方法將 Softmax 替換為一個更簡單的公式,公式為:
y=−log(σ(ut⋅vc))−i=1∑KEj∼P(w)log(σ(−ut⋅vj))
其中,σ(x)=1+exp (−x) 1是 sigmoid 函數,用於將內積轉換為概率。
關鍵思想:
將原本的∣V∣- 路分類問題(其中∣V∣是詞彙表的大小)轉換為一組二元分類任務。
每次得到一對詞 (t,c) 時,模型不是在詞彙表中的所有詞中預測 c,而是預測 (t,c) 是一個正樣本對,而 (t,c′) 是一個負樣本對,其中 c′是從一個小的採樣集合中隨機選擇的。
正樣本和負樣本:
正樣本:例如,對於中心詞 “apricot” 和上下文詞 “tablespoon”,這是一個正樣本對。
負樣本:例如,對於中心詞 “apricot” 和隨機選擇的詞 “aardvark”,這是一個負樣本對。
損失函數:
損失函數 y 被定義為:
y=−log(σ(ut⋅vc))−i=1∑KEj∼P(w)log(σ(−ut⋅vj))
其中,σ(x)=1+exp (−x) 1是 sigmoid 函數,K 是負樣本的數量,P (w) 是根據詞的頻率進行採樣的概率分佈。
概率計算:
給定中心詞 t 和上下文詞 c 的概率 P (y=1∣t,c) 通過 σ(ut⋅vc) 計算。
給定中心詞 t 和負樣本 c′的概率 P (y=0∣t,c′) 通過 1−σ(ut⋅vc′)=σ(−ut⋅vc′) 計算。
優化:
類似於二元邏輯回歸,但需要同時優化中心詞向量 ut和上下文詞向量 vc。
Practise#
d。
- 中心詞 t 的向量 ut(維度為 d。
- 正樣本上下文詞 c 的向量 vc(維度為 d。
- K 個負樣本詞的向量(每個維度為 d。
Continuous Bag of Words (CBOW)#
GloVe: Global Vectors#
這張圖介紹了 GloVe(Global Vectors for Word Representation)模型,這是一種用於生成詞嵌入的算法。GloVe 通過利用詞的全局共現統計信息來學習詞向量,與基於窗口的 Skip-gram 和 CBOW 方法不同,GloVe 直接利用整個語料庫的共現矩陣來學習詞向量。
關鍵思想:
直接使用詞的共現計數來近似詞向量之間的點積(ui⋅vj)。
全局共現統計:
模型使用全局共現統計 Xij,即詞 i 和詞 j 在語料庫中共同出現的頻率。
損失函數 J (θ):
GloVe 的損失函數定義為:
J(θ)=i,j∈V∑f(Xij)(ui⋅vj+bi+b~j−logXij)2
其中,f (Xij) 是一個權重函數,用於調整共現頻率較低的詞對的影響;ui和 vj分別是詞 i 和詞 j 的向量表示;bi和 bj是偏置項;Xij是詞 i 和詞 j 的共現頻率。
訓練速度和可擴展性:
GloVe 模型訓練更快,可以擴展到非常大的語料庫。
權重函數 f:
圖中右下角的圖示展示了權重函數 f 的形狀,它通常是一個平滑的遞增函數,用於減少低頻共現詞對的影響。
GloVe 的優勢:
全局信息:GloVe 利用整個語料庫的共現信息,這使得它能夠捕捉更廣泛的語義關係。
訓練效率:由於其矩陣分解的形式,GloVe 在訓練時比基於窗口的方法更高效。
可擴展性:GloVe 可以處理非常大的語料庫,這使得它在大規模數據集上表現良好。
FastText#
這張圖介紹了 FastText 模型中的子詞嵌入(Subword Embeddings),這是一種改進的詞嵌入方法,它通過將單詞分解為子詞(n-grams)來捕捉更細粒度的語義信息。
子詞嵌入:
FastText 模型類似於 Skip-gram 模型,但它將單詞分解為 n-grams(子詞),其中 n 的範圍是 3 到 6。
這種方法可以捕捉單詞內部的語義信息,例如,單詞 “where” 可以分解為子詞 “wh”、“her”、“ere” 等。
示例:
圖中給出了單詞 “where” 的分解示例:
3-grams(三元組):<wh, whe, her, ere, re>
4-grams(四元組):<whe, wher, here, ere>
5-grams(五元組):<wher, where, here>
6-grams(六元組):<where, where>
替換操作:
在計算中心詞和上下文詞的向量內積時,FastText 模型用子詞的向量和來替換原始單詞的向量內積。
具體來說,如果 ui⋅vj是原始單詞的向量內積,那麼在 FastText 中,這個內積被替換為所有子詞向量內積的和:
g∈n-grams(wi)∑ug⋅vj
其中,g 是單詞 wi的一個子詞,n-grams (wi) 表示單詞 wi所有可能的子詞集合。
FastText 模型的優勢:
捕捉內部結構:
通過將單詞分解為子詞,FastText 能夠捕捉單詞內部的結構信息,這對於理解詞的語義非常有幫助。
處理罕見詞和未知詞:
子詞嵌入可以更好地處理罕見詞和未知詞,因為即使單詞在訓練數據中沒有出現過,其子詞可能已經出現過。
提高泛化能力:
子詞嵌入使得模型在面對新詞時具有更好的泛化能力,因為它可以利用已知的子詞信息來推斷新詞的語義。
訓練好的可用詞嵌入#
- word2vec: https://code.google.com/archive/p/word2vec/
- GloVe: https://nlp.stanford.edu/projects/glove
- FastText: https://fasttext.cc/
To contextualized word vectors using LMs#
這張圖展示了 ELMo(Embeddings from Language Models)模型的結構,這是一種用於生成詞嵌入的深度學習模型。ELMo 由 Matthew E. Peters 等人在 2018 年提出,其論文《Deep contextualized word representations》詳細介紹了該模型的原理和實現。
圖中元素解釋:
-
輸入層(E1,E2,...,EN):
這些是詞的輸入嵌入,通常是詞的 one-hot 編碼或詞頻編碼。 -
雙向 LSTM 層:
圖中展示了兩層雙向 LSTM(Long Short-Term Memory),每層由前向和後向兩個 LSTM 組成。每個 LSTM 單元處理序列數據,能夠捕捉詞與詞之間的長距離依賴關係。
雙向 LSTM 能夠同時考慮詞的前後文信息,從而更好地理解詞的上下文含義。- 關於雙向 LSTM 層的補充說明:
- 雙向長短期記憶網絡(Bidirectional Long Short-Term Memory,簡稱 Bi-LSTM 或雙向 LSTM)是一種特殊的循環神經網絡(RNN),它通過兩個 LSTM 層來處理序列數據,一個層以正向(從序列的開始到結束)處理數據,另一個層以反向(從序列的結束到開始)處理數據。這種結構使得網絡能夠同時考慮序列中每個元素的前後文信息。
- 結構:在雙向 LSTM 中,對於序列中的每個時間步 t,都有兩個 LSTM 單元在工作:
前向 LSTM(Forward LSTM):這個 LSTM 單元從序列的第一個元素開始,按時間步正向處理序列,直到最後一個元素。對於每個時間步 t,它只考慮從序列開始到當前時間步的信息。
後向 LSTM(Backward LSTM):這個 LSTM 單元從序列的最後一個元素開始,按時間步反向處理序列,直到第一個元素。對於每個時間步 t,它只考慮從序列結束到當前時間步的信息。 - 信息流:在每個時間步 t,前向 LSTM 和後向 LSTM 都會產生一個隱藏狀態。這兩個隱藏狀態包含了關於序列中該位置元素的上下文信息,一個來自序列的前面,另一個來自序列的後面。
-** 輸出 **:雙向 LSTM 的輸出可以有幾種不同的組合方式:- 拼接(Concatenation):將前向和後向 LSTM 在每個時間步的輸出拼接起來,形成一個更長的向量。這種方式保留了序列中每個位置的雙向上下文信息。
加和(Summation):將前向和後向 LSTM 的輸出向量在每個時間步相加。這種方式將雙向信息合併,但可能會丟失一些細節。 - 取平均(Averaging):將前向和後向 LSTM 的輸出向量在每個時間步取平均。這種方式也是將雙向信息合併,但可能會降低模型對某些特定方向信息的敏感度。
- 單獨使用(Separate Use):在某些情況下,前向和後向 LSTM 的輸出可能會被單獨使用,尤其是在模型的不同部分需要不同方向的信息時。
- 拼接(Concatenation):將前向和後向 LSTM 在每個時間步的輸出拼接起來,形成一個更長的向量。這種方式保留了序列中每個位置的雙向上下文信息。
- 關於雙向 LSTM 層的補充說明:
-
輸出層(T1,T2,...,TN):
這些是經過 LSTM 處理後的詞的表示。每個詞的表示是其在不同 LSTM 層的輸出的加權和。
原理: -
詞嵌入的上下文化:傳統的詞嵌入(如 Word2Vec 或 GloVe)是靜態的,不考慮詞的上下文。而 ELMo 通過使用雙向 LSTM,能夠生成上下文化的詞嵌入,即同一個詞在不同上下文中可以有不同的表示。
-
捕捉長距離依賴:LSTM 特別適合處理序列數據,能夠捕捉詞與詞之間的長距離依賴關係。這對於理解語言中的複雜結構(如句法和語義)非常重要。
-
雙向信息流:通過同時考慮詞的前後文信息,ELMo 能夠更全面地理解詞的含義。這對於處理歧義詞和理解上下文非常重要。
評估詞向量#
- 外在評估
- 讓我們將這些詞嵌入到真實的 NLP 中,系統和查看能否提高性能,可能需要很長時間,但仍然是最重要的評估指標
- 內在評估
- 評估特定 / 中間子任務
- 快速計算
- 不清楚這實際上是否有助於下游任務
詞彙表假設:假設存在一個從訓練集中構建的包含數萬個單詞的固定詞彙表。在測試時遇到的所有新單詞都將被映射到一個單一的 “UNK”(未知詞)。
詞彙映射示例:
常見詞:如 “hat”(帽子)映射到詞彙表中的 “pizza”(索引),“learn”(學習)映射到 “tasty”(索引)。
變體、拼寫錯誤、新項:“taaaaaasty”(變體)、“laern”(拼寫錯誤)、“Transformerify”(新項)都被映射到 “UNK”(索引)。
有限詞彙表假設的局限性:在許多語言中,有限詞彙表假設的意義更小。因為許多語言具有複雜的形態學或詞結構,這會導致更多的詞類型,但每種詞出現的次數更少。
語言模型#
Narrow Sense#
一個概率模型,為每個有限序列(語法的或非語法的)分配一個概率
GPT-3 仍然以這種方式運作,但該模型實現為一個非常大的神經網絡,擁有 1750 億個參數!
Broad Sense#
圖中詳細展示了三種主要的預訓練語言模型架構:僅解碼器模型(Decoder-only models)、僅編碼器模型(Encoder-only models)和編碼器 - 解碼器模型(Encoder-decoder models),以及它們的典型應用。
- 僅解碼器模型(Decoder-only models):
代表模型:GPT-x 模型(如 GPT-2, GPT-3)。這些模型主要用於生成任務,如文本生成、問答等。它們通常使用自回歸方法,從左到右生成文本。 - 僅編碼器模型(Encoder-only models):
代表模型:BERT、RoBERTa、ELECTRA。這些模型通過編碼器處理輸入文本,生成文本的表示,但不進行文本生成。它們主要用於理解任務,如文本分類、命名實體識別等。BERT 模型使用了掩碼語言模型(Mask LM)和下一個句子預測(NSP)作為預訓練目標,以學習詞的上下文表示。 - 編碼器 - 解碼器模型(Encoder-decoder models):
代表模型:T5、BART。這些模型結合了編碼器和解碼器,可以處理生成任務和理解任務。編碼器生成文本表示,解碼器基於這些表示生成輸出文本。這種結構使得模型能夠處理生成任務和理解任務,如翻譯、摘要等。
圖中示例解釋: - BERT:
BERT 使用了掩碼語言模型(Mask LM)和下一個句子預測(NSP)作為預訓練目標。圖中展示了 BERT 如何處理兩個掩碼句子(Masked Sentence A 和 Masked Sentence B)以及一個未標記的句子對(Unlabeled Sentence A and B Pair)。 - T5:
T5 是一個編碼器 - 解碼器模型,它使用了一個不同的預訓練目標。圖中展示了 T5 在不同任務中的應用,包括翻譯(將英語翻譯成德語)、摘要(對文本進行摘要)、以及文本評估(判斷文本的可接受性)。 - 原理:
掩碼語言模型(Mask LM):在 BERT 中,輸入文本中的一些詞被隨機替換為特殊的 [MASK] 標記,模型需要預測這些被掩蓋的詞。這種方法使得模型能夠學習到詞的上下文表示。
下一個句子預測(NSP):BERT 還使用 NSP 任務來學習句子之間的關係。模型需要預測兩個輸入句子是否是連續的文本。
編碼器 - 解碼器結構:在 T5 和 BART 中,編碼器首先處理輸入文本,生成文本的表示。然後,解碼器基於這些表示生成輸出文本。這種結構使得模型能夠處理生成任務和理解任務。
構建神經語言模型#
- Approximately: Y. Bengio, et al. (2000/2003): A Neural Probabilistic Language Model
- 固定窗口神經語言模型的改進:
- 無稀疏性問題:
神經語言模型不會產生稀疏性問題,因為它不需要計算每個特定 n-gram 的概率,而是通過學習詞向量和上下文來預測下一個詞。 - 不需要存儲所有觀察到的 n-grams:
神經模型不需要像 n-gram 模型那樣存儲所有在語料庫中觀察到的 n-grams 及其計數,從而減少了存儲需求。
- 無稀疏性問題:
- 存在的問題:
- 固定窗口太小:
固定窗口的大小限制了模型能夠考慮的上下文範圍。 - 擴大窗口會增加參數數量:
如果嘗試擴大窗口以包含更多的上下文信息,模型的參數數量(權重矩陣 W 的大小)也會相應增加,這可能導致過擬合和計算成本增加。 - 窗口永遠不夠大:
無論窗口多大,總有一些長距離的依賴關係無法被捕捉。 - 輸入處理缺乏對稱性:
在固定窗口模型中,序列中不同位置的詞會被不同的權重處理,這缺乏對稱性。 - 解決方案:
循環神經網絡(RNN):
圖中指出,需要一種能夠處理任意長度輸入的神經網絡架構。RNN 是解決方案之一,因為它能夠通過循環連接處理序列數據,無論序列長度如何。
- 固定窗口太小:
- 固定窗口神經語言模型的改進:
More On Word Vectors#
這張圖展示了 MorphTE(一種在張量嵌入中注入形態學的方法)的工作流程,出自論文 “MorphTE: Injecting Morphology in Tensorized Embeddings”(NeurIPS 2022),作者包括 Guobing Gan、Peng Zhang 等。以下是對圖中內容的詳細解釋:
-
左側 - 詞彙表(Vocabulary):
展示了一個包含多個單詞的詞彙表,例如 “kindness”、“unkindly”、“unfeelingly”。這些單詞將作為輸入進入後續處理步驟。 -
中間左側 - 詞素分割(Morpheme Segmentation):
對詞彙表中的每個單詞進行詞素分割。例如,“kindness” 被分割為 “kind” 和 “ness”,“unkindly” 被分割為 “un”、“kind” 和 “ly”,“unfeelingly” 被分割為 “un”、“feel”、“ing” 和 “ly”。分割後的詞素排列在一個矩陣中,矩陣的行數為詞彙表大小 | V|,列數為單詞的詞素數量 n。 -
中間右側 - 索引(Indexing):
對分割後的詞素進行索引,將每個詞素映射到一個唯一的標識符。索引後的結果用於後續的嵌入操作。 -
右側 - 詞素嵌入矩陣(Morpheme Embedding Matrices):
包含兩個詞素嵌入矩陣和,分別用於處理詞素的左側和右側部分。這些矩陣將詞素索引轉換為低維向量表示。 -
最右側 - 單詞嵌入矩陣(Word Embedding matrix):
通過將詞素嵌入矩陣的結果進行組合(圖中顯示為加法操作),生成最終的單詞嵌入向量。這些向量表示了單詞的語義和形態信息。
圖中的符號和參數解釋如下:
- :單詞的詞素數量(詞素順序)。
- :詞素向量的維度大小。
- :詞彙表的大小。
- :詞素詞彙表的大小。
整體來看,這張圖詳細展示了 MorphTE 如何通過詞素分割、索引和嵌入操作,將單詞轉換為包含形態學信息的向量表示。
訓練詞向量#
怎麼訓練?
Practise#
c
compute gradients for word2vec#
Overall algorithm#
這張圖片展示的是一個整體算法,主要用於詞嵌入相關任務,以下是詳細解釋:
輸入部分#
- text corpus:文本語料庫,即算法處理的文本數據來源。
- embedding size d:嵌入維度大小,決定了每個詞最終表示向量的維度。
- vocabulary V:詞彙表,包含所有可能出現的詞。
- context size m:上下文窗口大小,用於定義在文本中考慮的上下文範圍。
初始化部分#
對於詞彙表 V 中的每個詞 i,隨機初始化兩個向量和。
訓練部分#
遍歷訓練語料庫,對於每個訓練實例(其中是目標詞,是上下文詞):
- 更新目標詞向量:
- 公式為,其中 。這裡是學習率,控制每次更新的步長。
- 更新上下文詞向量:
- 對於詞彙表 V 中的每個詞,公式為 。
- 當(即當前上下文詞)時,;當時, 。表示在給定目標詞的情況下,詞出現的概率。
右側還展示了將訓練數據轉換為特定格式的示例,如 (into, problems) 等,體現了目標詞和上下文詞的組合形式。