日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

2.6 Word2Vec-深度学习第五课《序列模型》-Stanford吴恩达教授

發(fā)布時間:2025/4/5 82 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.6 Word2Vec-深度学习第五课《序列模型》-Stanford吴恩达教授 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Word2Vec

在上個視頻中你已經(jīng)見到了如何學(xué)習(xí)一個神經(jīng)語言模型來得到更好的詞嵌入,在本視頻中你會見到 Word2Vec算法,這是一種簡單而且計算時更加高效的方式來學(xué)習(xí)這種類型的嵌入,讓我們來看看。

本視頻中的大多數(shù)的想法來源于Tomas Mikolov,Kai Chen,Greg CorradoJeff Dean

(Mikolov T, Chen K, Corrado G, et al. Efficient Estimation of Word Representations in Vector Space[J]. Computer Science, 2013.)

假設(shè)在訓(xùn)練集中給定了一個這樣的句子:“I want a glass of orange juice to go along with my cereal.”,在Skip-Gram模型中,我們要做的是抽取上下文和目標(biāo)詞配對,來構(gòu)造一個監(jiān)督學(xué)習(xí)問題。上下文不一定總是目標(biāo)單詞之前離得最近的四個單詞,或最近的 nnn 個單詞。我們要的做的是隨機(jī)選一個詞作為上下文詞,比如選orange這個詞,然后我們要做的是隨機(jī)在一定詞距內(nèi)選另一個詞,比如在上下文詞前后5個詞內(nèi)或者前后10個詞內(nèi),我們就在這個范圍內(nèi)選擇目標(biāo)詞。可能你正好選到了juice作為目標(biāo)詞,正好是下一個詞(表示orange的下一個詞),也有可能你選到了前面第二個詞,所以另一種配對目標(biāo)詞可以是glass,還可能正好選到了單詞my作為目標(biāo)詞。

于是我們將構(gòu)造一個監(jiān)督學(xué)習(xí)問題,它給定上下文詞,要求你預(yù)測在這個詞正負(fù)10個詞距或者正負(fù)5個詞距內(nèi)隨機(jī)選擇的某個目標(biāo)詞。顯然,這不是個非常簡單的學(xué)習(xí)問題,因為在單詞orange的正負(fù)10個詞距之間,可能會有很多不同的單詞。但是構(gòu)造這個監(jiān)督學(xué)習(xí)問題的目標(biāo)并不是想要解決這個監(jiān)督學(xué)習(xí)問題本身,而是想要使用這個學(xué)習(xí)問題來學(xué)到一個好的詞嵌入模型。

接下來說說模型的細(xì)節(jié),我們繼續(xù)假設(shè)使用一個10,000詞的詞匯表,有時訓(xùn)練使用的詞匯表會超過一百萬詞。但我們要解決的基本的監(jiān)督學(xué)習(xí)問題是學(xué)習(xí)一種映射關(guān)系,從上下文c,比如單詞orange,到某個目標(biāo)詞,記為t,可能是單詞juice或者單詞glass或者單詞my。延續(xù)上一張幻燈片的例子,在我們的詞匯表中,orange是第6257個單詞,juice是10,000個單詞中的第4834個,這就是你想要的映射到輸出 yyy 的輸入 xxx

為了表示輸入,比如單詞orange,你可以先從one-hot向量開始,我們將其寫作 OcO_cOc? ,這就是上下文詞的one-hot向量(上圖編號1所示)。然后和你在上節(jié)視頻中看到的類似,你可以拿嵌入矩陣 EEE 乘以向量 OcO_cOc? ,然后得到了輸入的上下文詞的嵌入向量,于是這里 ec=EOce_c=EO_cec?=EOc? 。在這個神經(jīng)網(wǎng)絡(luò)中(上圖編號2所示),我們將把向量 ece_cec? 喂入一個softmax單元。我通常把softmax單元畫成神經(jīng)網(wǎng)絡(luò)中的一個節(jié)點(上圖編號3所示),這不是字母O,而是softmax單元,softmax單元要做的就是輸出 y^\hat{y}y^? 。然后我們再寫出模型的細(xì)節(jié),這是softmax模型(上圖編號4所示),預(yù)測不同目標(biāo)詞的概率:

Softmax:p(t∣c)=exp(θtTec)∑j=110,000exp(θjTec)Softmax:p(t|c)=\frac{exp(\theta_t^Te_c)}{\sum_{j=1}^{10,000}exp(\theta^T_je_c)}Softmax:p(tc)=j=110,000?exp(θjT?ec?)exp(θtT?ec?)?

這里 θt\theta_tθt? 是一個與輸出 ttt 有關(guān)的參數(shù),即某個詞 ttt 和標(biāo)簽相符的概率是多少。我省略了softmax中的偏差項,想要加上的話也可以加上。

最終softmax的損失函數(shù)就會像之前一樣,我們用 yyy 表示目標(biāo)詞,我們這里用的 yyyy^\hat{y}y^? 都是用one-hot表示的,于是損失函數(shù)就會是:

L(y^,y)=?∑i=110,000yilog?y^iL(\hat{y},y)=-\sum_{i=1}^{10,000}y_i\log\hat{y}_iL(y^?,y)=?i=110,000?yi?logy^?i?

這是常用的softmax損失函數(shù), yyy 就是只有一個1其他都是0的one-hot向量,如果目標(biāo)詞是juice,那么第4834個元素就是1,其余是0(上圖編號5所示)。類似的 y^\hat{y}y^? 是一個從softmax單元輸出的10,000維的向量,這個向量是所有可能目標(biāo)詞的概率。

總結(jié)一下,這大體上就是一個可以找到詞嵌入的簡化模型和神經(jīng)網(wǎng)絡(luò)(上圖編號2所示),其實就是個softmax單元。矩陣 EEE 將會有很多參數(shù),所以矩陣 EEE 有對應(yīng)所有嵌入向量 ece_cec? 的參數(shù)(上圖編號6所示),softmax單元也有 θt\theta_tθt? 的參數(shù)(上圖編號3所示)。如果優(yōu)化這個關(guān)于所有這些參數(shù)的損失函數(shù),你就會得到一個較好的嵌入向量集,這個就叫做Skip-Gram模型。它把一個像orange這樣的詞作為輸入,并預(yù)測這個輸入詞,從左數(shù)或從右數(shù)的某個詞,預(yù)測上下文詞的前面一些或者后面一些是什么詞。

實際上使用這個算法會遇到一些問題,首要的問題就是計算速度。尤其是在softmax模型中,每次你想要計算這個概率,你需要對你詞匯表中的所有10,000個詞做求和計算,可能10,000個詞的情況還不算太差。如果你用了一個大小為100,000或1,000,000的詞匯表,那么這個分母的求和操作是相當(dāng)慢的,實際上10,000已經(jīng)是相當(dāng)慢的了,所以擴(kuò)大詞匯表就更加困難了。

這里有一些解決方案,如分級(hierarchical)的softmax分類器和負(fù)采樣(Negative Sampling)。

在文獻(xiàn)中你會看到的方法是使用一個分級(hierarchical)的softmax分類器,意思就是說不是一下子就確定到底是屬于10,000類中的哪一類。想象如果你有一個分類器(上圖編號1所示),它告訴你目標(biāo)詞是在詞匯表的前5000個中還是在詞匯表的后5000個詞中,假如這個二分類器告訴你這個詞在前5000個詞中(上圖編號2所示),然后第二個分類器會告訴你這個詞在詞匯表的前2500個詞中,或者在詞匯表的第二組2500個詞中,諸如此類,直到最終你找到一個詞準(zhǔn)確所在的分類器(上圖編號3所示),那么就是這棵樹的一個葉子節(jié)點。像這樣有一個樹形的分類器,意味著樹上內(nèi)部的每一個節(jié)點都可以是一個二分類器,比如邏輯回歸分類器,所以你不需要再為單次分類,對詞匯表中所有的10,000個詞求和了。實際上用這樣的分類樹,計算成本與詞匯表大小的對數(shù)成正比(上圖編號4所示),而不是詞匯表大小的線性函數(shù),這個就叫做分級softmax分類器。

我要提一下,在實踐中分級softmax分類器不會使用一棵完美平衡的分類樹或者說一棵左邊和右邊分支的詞數(shù)相同的對稱樹(上圖編號1所示的分類樹)。實際上,分級的softmax分類器會被構(gòu)造成常用詞在頂部,然而不常用的詞像durian會在樹的更深處(上圖編號2所示的分類樹),因為你想更常見的詞會更頻繁,所以你可能只需要少量檢索就可以獲得常用單詞像theof。然而你更少見到的詞比如durian就更合適在樹的較深處,因為你一般不需要到那樣的深處,所以有不同的經(jīng)驗法則可以幫助構(gòu)造分類樹形成分級softmax分類器。所以這是你能在文獻(xiàn)中見到的一個加速softmax分類的方法,但是我不會再花太多時間在這上面了,你可以從我在第一張幻燈片中提到的Tomas Mikolov等人的論文中參閱更多的細(xì)節(jié),所以我不會再花更多時間講這個了。因為在下個視頻中,我們會講到另一個方法叫做負(fù)采樣,我感覺這個會更簡單一點,對于加速softmax和解決需要在分母中對整個詞匯表求和的問題也很有作用,下個視頻中你會看到更多的細(xì)節(jié)。

但是在進(jìn)入下個視頻前,我想要你理解一個東西,那就是怎么對上下文c進(jìn)行采樣,一旦你對上下文c進(jìn)行采樣,那么目標(biāo)詞t就會在上下文c的正負(fù)10個詞距內(nèi)進(jìn)行采樣。但是你要如何選擇上下文c?一種選擇是你可以就對語料庫均勻且隨機(jī)地采樣,如果你那么做,你會發(fā)現(xiàn)有一些詞,像theofaandto諸如此類是出現(xiàn)得相當(dāng)頻繁的,于是你那么做的話,你會發(fā)現(xiàn)你的上下文到目標(biāo)詞的映射會相當(dāng)頻繁地得到這些種類的詞,但是其他詞,像orangeappledurian就不會那么頻繁地出現(xiàn)了。你可能不會想要你的訓(xùn)練集都是這些出現(xiàn)得很頻繁的詞,因為這會導(dǎo)致你花大部分的力氣來更新這些頻繁出現(xiàn)的單詞的 ece_cec? (上圖編號1所示),但你想要的是花時間來更新像durian這些更少出現(xiàn)的詞的嵌入,即 eduriane_{durian}edurian? 。實際上詞 p(c)p(c)p(c) 的分布并不是單純的在訓(xùn)練集語料庫上均勻且隨機(jī)的采樣得到的,而是采用了不同的分級來平衡更常見的詞和不那么常見的詞。

這就是Word2VecSkip-Gram模型,如果你讀過我之前提到的論文原文,你會發(fā)現(xiàn)那篇論文實際上有兩個不同版本的Word2Vec模型,Skip-Gram只是其中的一個,另一個叫做CBOW,即連續(xù)詞袋模型(Continuous Bag-Of-Words Model),它獲得中間詞兩邊的的上下文,然后用周圍的詞去預(yù)測中間的詞,這個模型也很有效,也有一些優(yōu)點和缺點。

總結(jié)下:CBOW是從原始語句推測目標(biāo)字詞;而Skip-Gram正好相反,是從目標(biāo)字詞推測出原始語句。CBOW對小型數(shù)據(jù)庫比較合適,而Skip-Gram在大型語料中表現(xiàn)更好。 (下圖左邊為CBOW,右邊為Skip-Gram

而剛才講的Skip-Gram模型,關(guān)鍵問題在于softmax這個步驟的計算成本非常昂貴,因為它需要在分母里對詞匯表中所有詞求和。通常情況下,Skip-Gram模型用到更多點。在下個視頻中,我會展示給你一個算法,它修改了訓(xùn)練目標(biāo)使其可以運行得更有效,因此它可以讓你應(yīng)用在一個更大的訓(xùn)練集上面,也可以學(xué)到更好的詞嵌入。

總結(jié)

以上是生活随笔為你收集整理的2.6 Word2Vec-深度学习第五课《序列模型》-Stanford吴恩达教授的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。