【NLP】CS224N课程笔记|词向量I: 简介, SVD和Word2Vec
NewBeeNLP原創(chuàng)出品
公眾號(hào)專欄作者@Ryan?
知乎?|?機(jī)器學(xué)習(xí)課程筆記
CS224N課程筆記系列,持續(xù)更新中?
課程主頁(yè):??http://web.stanford.edu/class/cs224n/
1、Introduction to Natural Language Processing
1.1 What is so special about NLP?
人類的語(yǔ)言有什么特別之處?人類語(yǔ)言是一個(gè)專門用來表達(dá)意義的系統(tǒng),而不是由任何形式的物理表現(xiàn)產(chǎn)生的。在這方面上,它與視覺或任何其他機(jī)器學(xué)習(xí)任務(wù)都有很大的不同。
大多數(shù)單詞只是一個(gè)超語(yǔ)言實(shí)體的符號(hào):單詞是一個(gè)映射到所指(想法或事物)的能指。
例如,“rocket”一詞指的是火箭的概念,因此可以引申為火箭的實(shí)例。當(dāng)我們使用單詞和字母來表達(dá)符號(hào)時(shí),也會(huì)有一些例外,例如“whoompaa”的使用。最重要的是,這些語(yǔ)言的符號(hào)可以被 encoded 成幾種形式:聲音、手勢(shì)、文字等等,然后通過連續(xù)的信號(hào)傳輸給大腦,大腦本身似乎也能以一種連續(xù)的方式對(duì)這些信號(hào)進(jìn)行 encode。語(yǔ)言哲學(xué)和語(yǔ)言學(xué)已經(jīng)做了大量的工作來使人類語(yǔ)言概念化,并區(qū)分單詞和它們的指代、意義等。
1.2 Examples of tasks
自然語(yǔ)言處理有不同層次的任務(wù),從語(yǔ)音處理到語(yǔ)義解釋再到論述處理。自然語(yǔ)言處理的目標(biāo)是通過設(shè)計(jì)算法使得計(jì)算機(jī)能夠“理解”語(yǔ)言,從而能夠執(zhí)行某些特定的任務(wù)。不同的任務(wù)的難度是不一樣的:
「Easy」
拼寫檢查
關(guān)鍵詞檢索
同義詞查找
「Medium」
解析來自網(wǎng)站、文檔等的信息
「Hard」
機(jī)器翻譯
語(yǔ)義分析
指代消解
問答系統(tǒng)
1.3 How to represent words?
在所有的NLP任務(wù)中,第一個(gè)也是可以說是最重要的共同點(diǎn)是我們?nèi)绾螌卧~表示為任何模型的輸入。在這里我們不會(huì)討論早期的自然語(yǔ)言處理工作是將單詞視為 atomic symbols。為了讓大多數(shù)的自然語(yǔ)言處理任務(wù)能有更好的表現(xiàn),我們首先需要了解單詞之間的相似和不同。有了詞向量,我們可以很容易地將其 encode 到向量本身中。
2、Word Vectors
大約一共有1千3百萬(wàn)個(gè)英語(yǔ)單詞,它們都是沒有關(guān)系的嗎?例如 “feline” 和 “cat”,“hotel” 和 “motel” 是有關(guān)系的。因此,我們希望用詞向量 encode 單詞使它代表在詞組空間中的一個(gè)點(diǎn)。重要的原因有很多,但最直觀的原因是,實(shí)際上可能存在 N 維空間(例如 ),這足以 encode 我們語(yǔ)言的所有語(yǔ)義。每個(gè)維度都會(huì) encode 一些使用言語(yǔ)傳達(dá)的意思。例如,語(yǔ)義維度可能表示時(shí)態(tài)(過去、現(xiàn)在和未來),計(jì)數(shù)(單數(shù)和復(fù)數(shù))和性別(男性和女性)。
我們從最簡(jiǎn)單的 「one-hot 向量」的來表示詞向量方法開始:每個(gè)詞都是一個(gè) 向量,其中除了該單詞所在的索引為 1 外其他索引都是 0。在這個(gè)定義下, 是詞匯表的大小。這時(shí)詞向量的可以表示為
我們將每個(gè)單詞表示為完全獨(dú)立的實(shí)體。我們之前討論過,這樣的單詞表示沒有給出任何直接相似的概念,例如,
也許我們可以嘗試降低維度,從 減少到更小以此來找到一個(gè)低維度的子空間來 encode 詞之間的關(guān)系。
3、SVD Based Methods
這是一類找到詞嵌入的方法(即詞向量),我們首先遍歷一個(gè)很大的數(shù)據(jù)集和統(tǒng)計(jì)詞的共現(xiàn)計(jì)數(shù)矩陣 X,然后對(duì)矩陣 X 進(jìn)行 SVD 分解得到 。然后我們使用 U 的行來作為字典中所有詞的詞向量。我們來討論一下矩陣 X 的幾種選擇。
3.1、Word-Document Matrix
我們最初的嘗試,我們猜想相關(guān)連的單詞在同一個(gè)文檔中會(huì)經(jīng)常出現(xiàn)。例如,“banks”,“bonds”,“stocks”,“moneys”等等,出現(xiàn)在一起的概率會(huì)比較高。但是“banks”,“octopus”,“banana”,“hockey”不大可能會(huì)連續(xù)地出現(xiàn)。我們根據(jù)這個(gè)情況來建立一個(gè)詞-文檔矩陣,X 是按照以下方式構(gòu)建:遍歷數(shù)億的文檔和當(dāng)詞 i 出現(xiàn)在文檔 j,我們對(duì) 加一。這顯然是一個(gè)很大的矩陣( ),它的規(guī)模是和文檔(M)成正比關(guān)系。因此我們可以嘗試更好的方法。
3.2、Window based Co-occurrence Matrix
同樣的邏輯也適用于這里,但是矩陣 X 存儲(chǔ)單詞的共現(xiàn),從而成為一個(gè)關(guān)聯(lián)矩陣。在這種方法中,我們計(jì)算每個(gè)單詞在感興趣單詞的附近特定大小的窗口中出現(xiàn)的次數(shù)。我們按照這個(gè)方法對(duì)語(yǔ)料庫(kù)中的所有單詞進(jìn)行統(tǒng)計(jì)。我們?cè)谙旅嬲故玖艘粋€(gè)例子。讓我們的語(yǔ)料庫(kù)是僅僅由三句話組成和窗口的大小是 1:
1. I enjoy flying.
2. I like NLP.
3. I like deep learning.
計(jì)數(shù)矩陣的結(jié)果如下所示:
3.3、Applying SVD to the cooccurrence matrix
然后我們對(duì)矩陣 X 使用 SVD,觀察奇異值(矩陣 S 上對(duì)角線上元素),根據(jù)期望的捕獲方差百分比截?cái)?#xff0c;留下前 k 個(gè)元素:
然后我們?nèi)∽泳仃? 作為詞嵌入矩陣。這就給出了詞匯表中每個(gè)詞的 k 維表示。
對(duì)矩陣 X 使用 SVD
「通過選擇前 k 個(gè)奇異向量來降低維度:」
這兩種方法都讓我們的詞向量 encode 充分的語(yǔ)義和句法(詞性標(biāo)注)的信息,但是這些方法會(huì)存在許多問題:
矩陣的維度會(huì)經(jīng)常發(fā)生改變(經(jīng)常增加新的單詞和語(yǔ)料庫(kù)的大小會(huì)改變)。
矩陣會(huì)非常的稀疏,因?yàn)楹芏嘣~不會(huì)共現(xiàn)。
矩陣的維度一般會(huì)非常高( )。
基于 SVD 的方法的計(jì)算復(fù)雜度一般為 。
需要在 X 上加入一些技巧處理來解決詞頻的極劇的不平衡。
對(duì)上述討論中存在的問題存在以下的解決方法:
忽略功能詞,例如 “the”,“he”,“has” 等等。
使用 ramp window - 即基于在文檔中詞與詞之間的距離給共現(xiàn)計(jì)數(shù)加上一個(gè)權(quán)值。
使用皮爾遜相關(guān)系數(shù)將負(fù)數(shù)的計(jì)數(shù)設(shè)為 0,而不是使用原始的計(jì)數(shù)。
在下一部分,基于迭代的方法可以以更為優(yōu)雅的方式解決大部分上述的問題。
4、Iteration Based Methods - Word2vec
這里我們嘗試一個(gè)新的方法。我們可以嘗試創(chuàng)建一個(gè)能夠一次學(xué)習(xí)一個(gè)迭代,并最終能夠?qū)o定上下文的單詞的概率進(jìn)行 encode 的模型,而不是計(jì)算和保留一個(gè)巨大的數(shù)據(jù)集的全局信息(可能含有數(shù)億個(gè)句子)。
這個(gè)想法是設(shè)計(jì)一個(gè)模型,該模型的參數(shù)就是詞向量。然后根據(jù)一個(gè)目標(biāo)函數(shù)訓(xùn)練模型,在每次模型的迭代計(jì)算誤差,并遵循一些更新規(guī)則,該規(guī)則具有懲罰造成錯(cuò)誤的模型參數(shù)的作用,從而可以學(xué)習(xí)到詞向量。這個(gè)方法可以追溯到 1986年,我們稱這個(gè)方法為誤差“反向傳播”,這個(gè)方法簡(jiǎn)化的模型和任務(wù)并使得訓(xùn)練模型的速度更快。
已經(jīng)很多人按照這個(gè)思路測(cè)試了不同的方法。[Collobert et al., 2011] 設(shè)計(jì)的模型首先將每個(gè)單詞轉(zhuǎn)換為向量,對(duì)每個(gè)特定的任務(wù)(命名實(shí)體識(shí)別、詞性標(biāo)注等等),他們不僅訓(xùn)練模型的參數(shù),同時(shí)也訓(xùn)練單詞向量,并取得了很好的 performance 和計(jì)算出了非常好的詞向量。
在這里,我們介紹一個(gè)非常有效的概率模型:Word2vec。Word2vec 是一個(gè)軟件包實(shí)際上包含:
「兩個(gè)算法」:continuous bag-of-words(CBOW)和 skip-gram。CBOW 是根據(jù)中心詞周圍的上下文單詞來預(yù)測(cè)該詞的詞向量。skip-gram 則相反,是根據(jù)中心詞預(yù)測(cè)周圍上下文的詞的概率分布。
「兩個(gè)訓(xùn)練方法」:negative sampling 和 hierarchical softmax。Negative sampling 通過抽取負(fù)樣本來定義目標(biāo),hierarchical softmax 通過使用一個(gè)有效的樹結(jié)構(gòu)來計(jì)算所有詞的概率來定義目標(biāo)。
4.1、Language Models (Unigrams, Bigrams, etc.)
首先,我們需要?jiǎng)?chuàng)建一個(gè)模型來分配一個(gè)概率在一系列的單詞上。我們從一個(gè)例子開始:
“The cat jumped over the puddle”
一個(gè)好的語(yǔ)言模型會(huì)給這個(gè)句子很高的概率,因?yàn)樵诰浞ê驼Z(yǔ)義上這是一個(gè)完全有效的句子。相似地,句子“stock boil fish is toy”會(huì)得到一個(gè)很低的概率,因?yàn)檫@是一個(gè)無(wú)意義的句子。在數(shù)學(xué)上,我們可以稱為對(duì)給定 n 個(gè)詞的序列的概率是:
我們可以使用 unary 語(yǔ)言模型方法,通過假設(shè)單詞的出現(xiàn)是完全獨(dú)立來將概率分開:
但是我們知道這是不大合理的,因?yàn)橄乱粋€(gè)單詞是高度依賴于前面的單詞序列的。如果使用上述的語(yǔ)言模型,會(huì)讓一個(gè)無(wú)意義的句子可能會(huì)具有很高的概率。所以也許我們讓序列的概率取決于序列中的單詞和其旁邊的單詞的成對(duì)概率。我們稱之為 bigram 模型:
但是,這個(gè)方法還是有點(diǎn)簡(jiǎn)單,因?yàn)槲覀冎魂P(guān)心一對(duì)鄰近的單詞,而不是針對(duì)整個(gè)句子來考慮。但是我們將看到,這個(gè)方法會(huì)有顯著的提升。考慮在詞-詞共現(xiàn)矩陣中,共現(xiàn)窗口為 1,我們基本上能得到這樣的成對(duì)的概率。但是,這又需要計(jì)算和存儲(chǔ)大量數(shù)據(jù)集的全局信息。
現(xiàn)在我們知道我們能夠如何考慮一個(gè)序列單詞的概率,讓我們了解一些可以計(jì)算這些概率的模型。
4.2、Continuous Bag of Words Model (CBOW)
一個(gè)方法是把 {"The","cat","over","the","puddle"} 作為上下文和從這些詞中能夠預(yù)測(cè)或者生成中心詞“jumped”。這樣的模型我們稱之為 continuous bag-of-words(CBOW)模型,它是從上下文中預(yù)測(cè)中心詞的方法,在這個(gè)模型中的每個(gè)單詞,我們希望學(xué)習(xí)兩個(gè)向量:v(輸入向量)當(dāng)詞在上下文中;u(輸出向量)當(dāng)詞是中心詞。
我們討論 CBOW 模型的更對(duì)的細(xì)節(jié)。首先我們?cè)O(shè)定已知參數(shù)。令我們模型的已知參數(shù)是 one-hot 形式的詞向量表示。輸入的 one-hot 向量或者上下文我們用 表示輸出用 表示。在 CBOW 模型中,因?yàn)槲覀冎挥幸粋€(gè)輸出,因此我們把 y 稱為是已知中心詞的的 one-hot 向量。現(xiàn)在讓我們定義模型的未知參數(shù)。
首先我們對(duì) CBOW 模型作出以下定義:
:詞匯表 V 中的單詞 i。
:輸入詞矩陣。
: 的第 i 列,單詞 的輸入向量表示。
:輸出詞矩陣。
: 的第 i 行,單詞 的輸出向量表示。
我們創(chuàng)建兩個(gè)矩陣, 和 。其中 n 是嵌入空間的任意維度大小。 是輸入詞矩陣,使得當(dāng)其為模型的輸入時(shí), ) 的第 i 列是詞 的 n 維嵌入向量。我們定義這個(gè) 的向量為 。相似地, 是輸出詞矩陣。當(dāng)其為模型的輸入時(shí), 的第 j 行是詞 的 n 維嵌入向量。我們定義 的這行為 。注意實(shí)際上對(duì)每個(gè)詞 我們需要學(xué)習(xí)兩個(gè)詞向量(即輸入詞向量 和輸出詞向量 )。
我們將這個(gè)模型分解為以下步驟:
我們?yōu)榇笮?m 的輸入上下文生成一個(gè) one-hot 詞向量: 。
我們從上下文 得到嵌入詞向量。
對(duì)上述的向量求平均值 。
生成一個(gè)分?jǐn)?shù)向量 。當(dāng)相似向量的點(diǎn)積越高,就會(huì)令到相似的詞更為靠近,從而獲得更高的分?jǐn)?shù)。
將分?jǐn)?shù)轉(zhuǎn)換為概率 。這里 softmax 是一個(gè)常用的函數(shù)。它將一個(gè)向量轉(zhuǎn)換為另外一個(gè)向量,其中轉(zhuǎn)換后的向量的第 i 個(gè)元素是 。因?yàn)樵摵瘮?shù)是一個(gè)指數(shù)函數(shù),所以值一定為正數(shù);通過除以 來歸一化向量( )得到概率。
我們希望生成的概率, ,與實(shí)際的概率匹配, ,這是剛好實(shí)際的詞就是這個(gè) one-hot 向量。
下圖是 CBOW 模型的計(jì)算圖示:
如果有 和 ,我們知道這個(gè)模型是如何工作的,那我們?nèi)绾螌W(xué)習(xí)這兩個(gè)矩陣呢?這需要?jiǎng)?chuàng)建一個(gè)目標(biāo)函數(shù)。一般我們想從一些真實(shí)的概率中學(xué)習(xí)一個(gè)概率,信息論提供了一個(gè)度量?jī)蓚€(gè)概率分布的距離的方法。這里我們采用一個(gè)常見的距離/損失方法,交叉熵 。
在離散情況下使用交叉熵可以直觀地得出損失函數(shù)的公式:
上面的公式中,y 是 one-hot 向量。因此上面的損失函數(shù)可以簡(jiǎn)化為:
c 是正確詞的 one-hot 向量的索引。我們現(xiàn)在可以考慮我們的預(yù)測(cè)是完美并且 的情況。然后我們可以計(jì)算 。因此,對(duì)一個(gè)完美的預(yù)測(cè),我們不會(huì)面臨任何懲罰或者損失。現(xiàn)在我們考慮一個(gè)相反的情況,預(yù)測(cè)非常差并且 。和前面類似,我們可以計(jì)算損失 。因此,我們可以看到,對(duì)于概率分布,交叉熵為我們提供了一個(gè)很好的距離度量。因此我們的優(yōu)化目標(biāo)函數(shù)公式為:
我們使用 SGD 來更新所有相關(guān)的詞向量 和 。SGD 對(duì)一個(gè)窗口計(jì)算梯度和更新參數(shù):
4.3、Skip-Gram Model
另外一個(gè)創(chuàng)建模型的方法是給定中心詞“jumped”,模型可以預(yù)測(cè)或者生成中心詞附近的詞語(yǔ) “The”,“cat”,“over”,“the”,“puddle”。這樣的模型我們稱之為 Skip-Gram 模型。
首先我們對(duì) Skip-Gram 模型作出以下定義:
:詞匯表 V 中的單詞 i。
:輸入詞矩陣。
: 的第 i 列,單詞 的輸入向量表示。
:輸出詞矩陣。
: 的第 i 行,單詞 的輸出向量表示。
我們現(xiàn)在來討論一下 Skip-Gram 模型。Skip-Gram 和 CBOW 大體上是一樣的,但是我們基本上交換了我們的 x 和 y,即 CBOW 中的 x 現(xiàn)在是 y,y 現(xiàn)在是 x。輸入的 one-hot 向量(中心詞)我們表示為 x,輸出向量為 。我們定義的 和 是和 CBOW 一樣的。
我們將這個(gè)模型分解為以下步驟:
我們生成中心詞的 one-hot 向量 。
我們對(duì)中心詞 得到詞嵌入向量。
生成分?jǐn)?shù)向量 。
將分?jǐn)?shù)向量轉(zhuǎn)化為概率, 。注意 是每個(gè)上下文詞觀察到的概率。
我們希望我們生成的概率向量匹配真實(shí)概率 ,one-hot 向量是實(shí)際的輸出。
下圖是 Skip-Gram 模型的計(jì)算圖示:
和 CBOW 模型一樣,我們需要生成一個(gè)目標(biāo)函數(shù)來評(píng)估這個(gè)模型。與 CBOW 模型的一個(gè)主要的不同是我們引用了一個(gè)樸素的貝葉斯假設(shè)來拆分概率。如果你之前沒有了解過,這里可以先放下,這是一個(gè)很強(qiáng)(樸素)的條件獨(dú)立假設(shè)。換而言之,給定中心詞,所有輸出的詞是完全獨(dú)立的。
通過這個(gè)目標(biāo)函數(shù),我們可以計(jì)算出與未知參數(shù)相關(guān)的梯度,并且在每次迭代中通過 SGD 來更新它們。
注意
其中 是向量 的概率和 one-hot 向量 之間的交叉熵。
4.4、Negative Sampling
讓我們?cè)倩氐侥繕?biāo)函數(shù)上。注意對(duì) 的求和計(jì)算量是非常大的!任何的更新或者對(duì)目標(biāo)函數(shù)的評(píng)估都要花費(fèi) 的時(shí)間復(fù)雜度。一個(gè)簡(jiǎn)單的想法是不去直接計(jì)算,而是去求近似值。
在每一個(gè)訓(xùn)練的時(shí)間步,我們不去遍歷整個(gè)詞匯表,而僅僅是抽取一些負(fù)樣例!我們對(duì)噪聲分布( )“抽樣”,這個(gè)概率是和詞頻的順序相匹配的。我們將負(fù)抽樣放到問題中,我們只需要更新:
目標(biāo)函數(shù)
梯度
更新規(guī)則
Mikolov 在論文《Distributed Representations of Words and Phrases and their Compositionality.》中提出了「負(fù)采樣」。雖然負(fù)采樣是基于 Skip-Gram 模型,但實(shí)際上是對(duì)一個(gè)不同的目標(biāo)函數(shù)進(jìn)行優(yōu)化。考慮一對(duì)中心詞和上下文詞 。這詞對(duì)是來自訓(xùn)練數(shù)據(jù)集嗎?我們通過 表示 是來自語(yǔ)料庫(kù)。相應(yīng)地, 表示 不是來自語(yǔ)料庫(kù)。首先,我們對(duì) 用 sigmoid 函數(shù)建模:
現(xiàn)在,我們建立一個(gè)新的目標(biāo)函數(shù),如果中心詞和上下文詞確實(shí)在語(yǔ)料庫(kù)中,就最大化概率 ,如果中心詞和上下文詞確實(shí)不在語(yǔ)料庫(kù)中,就最大化概率 。我們對(duì)這兩個(gè)概率采用一個(gè)簡(jiǎn)單的極大似然估計(jì)的方法(這里我們把 作為模型的參數(shù),在我們的例子是 和 )。
注意最大化似然函數(shù)等同于最小化負(fù)對(duì)數(shù)似然:
注意 是“假的”或者“負(fù)的”語(yǔ)料。例如我們有句子類似“stock boil fish is toy”,這種無(wú)意義的句子出現(xiàn)時(shí)會(huì)得到一個(gè)很低的概率。我們可以從語(yǔ)料庫(kù)中隨機(jī)抽樣出負(fù)樣例 。
對(duì)于 Skip-Gram 模型,我們對(duì)給定中心詞 c 來觀察的上下文單詞 c-m+j 的新目標(biāo)函數(shù)為
對(duì) CBOW 模型,我們對(duì)給定上下文向量 來觀察中心詞 的新的目標(biāo)函數(shù)為
在上面的公式中, 是從 中抽樣。有很多關(guān)于如何得到最好近似的討論,從實(shí)際效果看來最好的是指數(shù)為 3/4 的 Unigram 模型。那么為什么是 3/4?下面有一些例如可能讓你有一些直觀的了解:
“Bombastic”現(xiàn)在被抽樣的概率是之前的三倍,而“is”只比之前的才提高了一點(diǎn)點(diǎn)。
4.5、Hierarchical Softmax
Mikolov 在論文《Distributed Representations of Words and Phrases and their Compositionality.》中提出了 hierarchical softmax,相比普通的 softmax 這是一種更有效的替代方法。在實(shí)際中,hierarchical softmax 對(duì)低頻詞往往表現(xiàn)得更好,負(fù)采樣對(duì)高頻次和較低維度向量表現(xiàn)得更好。
Hierarchical softmax 使用一個(gè)二叉樹來表示詞表中的所有詞。樹中的每個(gè)葉結(jié)點(diǎn)都是一個(gè)單詞,而且只有一條路徑從根結(jié)點(diǎn)到葉結(jié)點(diǎn)。在這個(gè)模型中,沒有詞的輸出表示。相反,圖的每個(gè)節(jié)點(diǎn)(根節(jié)點(diǎn)和葉結(jié)點(diǎn)除外)與模型要學(xué)習(xí)的向量相關(guān)聯(lián)。
在這個(gè)模型中,給定一個(gè)向量 的下的單詞 w 的概率 ,等于從根結(jié)點(diǎn)開始到對(duì)應(yīng) w 的葉結(jié)點(diǎn)結(jié)束的隨機(jī)漫步概率。這個(gè)方法最大的優(yōu)勢(shì)是計(jì)算概率的時(shí)間復(fù)雜度僅僅是 ,對(duì)應(yīng)著路徑的長(zhǎng)度。
下圖是 Hierarchical softmax 的二叉樹示意圖:
讓我們引入一些概念。令 為從根結(jié)點(diǎn)到葉結(jié)點(diǎn) w 的路徑中節(jié)點(diǎn)數(shù)目。例如,上圖中的 為 3。我們定義 為與向量 相關(guān)的路徑上第 i 個(gè)結(jié)點(diǎn)。因此 是根結(jié)點(diǎn),而 是 w 的父節(jié)點(diǎn)。現(xiàn)在對(duì)每個(gè)內(nèi)部節(jié)點(diǎn) n,我們?nèi)我膺x取一個(gè)它的子節(jié)點(diǎn)和定義為 (一般是左節(jié)點(diǎn))。然后,我們可以計(jì)算概率為
其中
和 是 函數(shù)。
這個(gè)公式看起來非常復(fù)雜,讓我們細(xì)細(xì)梳理一下。
首先,我們將根據(jù)從根節(jié)點(diǎn) 到葉節(jié)點(diǎn) 的路徑的形狀來計(jì)算相乘的項(xiàng)。如果我們假設(shè) 一直都是 n 的左節(jié)點(diǎn),然后當(dāng)路徑往左時(shí) 的值返回 1,往右則返回 0。
此外, 提供了歸一化的作用。在節(jié)點(diǎn) n 處,如果我們將去往左和右節(jié)點(diǎn)的概率相加,對(duì)于 的任何值則可以檢查,
歸一化也保證了 ,和在普通的 softmax 是一樣的。
最后我們計(jì)算點(diǎn)積來比較輸入向量 對(duì)每個(gè)內(nèi)部節(jié)點(diǎn)向量 的相似度。下面我們給出一個(gè)例子。以上圖中的 為例,從根節(jié)點(diǎn)要經(jīng)過兩次左邊的邊和一次右邊的邊才到達(dá) ,因此
我們訓(xùn)練模型的目標(biāo)是最小化負(fù)的對(duì)數(shù)似然 。不是更新每個(gè)詞的輸出向量,而是更新更新二叉樹中從根結(jié)點(diǎn)到葉結(jié)點(diǎn)的路徑上的節(jié)點(diǎn)的向量。
該方法的速度由構(gòu)建二叉樹的方式確定,并將詞分配給葉節(jié)點(diǎn)。Mikolov 在論文《Distributed Representations of Words and Phrases and their Compositionality.》中使用的是赫夫曼樹,在樹中分配高頻詞到較短的路徑。
本文參考資料
[1]
Abigail See: https://link.zhihu.com/?target=https%3A//cs.stanford.edu/people/abisee/%23one
[2]cs224n: https://link.zhihu.com/?target=http%3A//web.stanford.edu/class/cs224n/
[3]Word Vectors I: Introduction, SVD and Word2Vec: https://link.zhihu.com/?target=http%3A//web.stanford.edu/class/cs224n/readings/cs224n-2019-notes01-wordvecs1.pdf
-?END?-
總結(jié)
以上是生活随笔為你收集整理的【NLP】CS224N课程笔记|词向量I: 简介, SVD和Word2Vec的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python工程能力进阶、数学基础、经典
- 下一篇: 【机器学习基础】你应该知道的LightG