少妇脱了内裤让我添,久久久久亚洲精品无码网址蜜桃,性色av免费观看,久久人妻av无码中文专区

分享

從零開始學自然語言處理(十三)——CBOW原理詳解

 松桃烏羅梵凈山 2020-03-01

在之前的連載中我們用代碼實現了word2vec,但并沒有詳細講解CBOW的原理,本文手把手帶你走入CBOW的算法原理。

word2vec是一種將word轉為向量的方法,其包含兩種算法,分別是skip-gram和CBOW,它們的最大區別是skip-gram是通過中心詞去預測中心詞周圍的詞,而CBOW是通過周圍的詞去預測中心詞。

這個word2vec的方法是在2013年的論文《Efficient Estimation of Word Representations inVector Space》中提出的,作者來自google,文章下載鏈接:https:///pdf/1301.3781.pdf

文章提出了這兩種方法如下圖所示:

你現在看這張圖可能一頭霧水,不知所措,沒關系,我們慢慢來學習。

在處理自然語言時,通常將詞語或者字做向量化,例如獨熱編碼,例如我們有一句話為:“關注數據科學雜談公眾號”,我們分詞后對其進行獨熱編碼,結果可以是:

“關注”:       【1,0,0,0】

“數據科學”:【0,1,0,0】

“雜談”:       【0,0,1,0】

“公眾號”:   【0,0,0,1】

這樣,我們就可以將每個詞用一個向量表示了。

但是獨熱編碼在大量數據的情況下會出現維度災難,通過觀察我們可以知道上面的獨熱編碼例子中,如果不同的詞語不是4個而是n個,則獨熱編碼的向量維度為1*n,也就是說,任何一個詞的獨熱編碼中,有一位為1,其他n-1位為0,這會導致數據非常稀疏(0特別多,1很少),存儲開銷也很大(n很大的情況下)。

那有什么辦法可以解決這個問題呢?

于是,分布式表示被提出來了。什么是分布式表示?

它的思路是通過訓練,將每個詞都映射到一個較短的詞向量上來。這個較短的詞向量維度是多大呢?這個一般需要我們在訓練時自己來指定。現在很常見的例如300維。

例如下面圖展示了四個不同的單詞,可以用一個可變化的維度長度表示(圖中只畫出了前4維),其實可以是多少維由你指定。假設為4維。

大家如果細心,會發現在展示的這些維度中的數字已經不是1和0了,而是一些其他的浮點數。

這種將高維度的詞表示轉換為低維度的詞表示的方法,我們稱之為詞嵌入(word embedding)。

上圖是將一個3維詞向量表示轉為2維詞向量表示。

有個有意思的發現是,當我們使用詞嵌入后,詞之間可以存在一些關系,例如:

king的詞向量減去man的詞向量,再加上woman的詞向量會等于queen的詞向量!

出現這種神奇現象的原因是,我們使用的分布式表示的詞向量包含有詞語上下文信息。

怎么理解上下文信息呢?

其實很簡單,我們在上學時,做閱讀理解經常會提到聯系上下文,所謂的上下文信息無非是當前內容在文本中前后的其他內容信息。

如下圖所示,learning這個詞的上下文信息可以是它左右兩邊的content標記的內容。

試想一下,如果這里的learning換成studying,是不是這句話仍然很合適呢?畢竟這兩個單詞都是學習的意思。

再轉換一下思維,由于在當前上下文信息中,learning和studying都可以出現,是不是learning和studying是近義詞了呢?沒錯,在當前的CBOW下確實是這樣,甚至man和woman,cat和dog都可能是近義詞。

所以大家是否理解了呢?

其實就是擁有相似或者相同的上下文的多個詞可能是近義詞或者同義詞。

這里慢慢將CBOW的算法思想透露出來了,因為CBOW就是通過當前中心詞的上下文單詞信息預測當前中心詞。

此時再來看CBOW這張示意圖,是不是有點感覺了?

接下來進入具體的算法模型部分!

首先我們需要訓練CBOW模型,該模型的結構如下圖:

這張圖略微復雜,我們需要從最左邊開始看,最左邊的一列是當前詞的上下文詞語,例如當前詞的前兩個詞和后兩個詞,一共4個上下文詞。

這些上下文詞即為圖中的x1k、x2k。。。xck。

這些詞是獨熱編碼表示,維度為1*V(雖然圖上畫得像列向量V*1,這圖畫的容易理解錯誤,其中V為詞空間的大小,也就是有多少個不同的詞,則獨熱編碼的維度為多少,也就是V個不同的詞)。

然后剛說的每個上下文的詞向量都需要乘以一個共享的矩陣W,由于整個模型是一個神經網絡結構,我們將這個存在于輸入層和隱藏層之間的矩陣稱為W1,該矩陣的維度為V*N,其中V如前所述,N為我們自己定義的一個維度。

學過線性代數的矩陣乘法我們知道,這里的獨熱編碼向量1*V乘上維度為V*N的矩陣W1,結果是1*N的向量。

這里因為一個中心詞會有多個上下文詞,而每個上下文詞都會計算得到一個1*N向量,我們將這些上下文詞的1*N向量相加取平均,得到中間層(隱藏層)的向量,這個向量也為1*N,之后,這個向量需要乘以一個N*V的矩陣W2,最終得到的輸出層維度為1*V。

然后將1*V的向量softmax歸一化處理得到新的1*V向量,在V個取值中概率值最大的數字對應的位置所表示的詞就是預測結果。如果對softmax的概念陌生,可以搜索學習一下。

而這個輸出的結果1*V就是預測出的中心詞的分布式表示。

別急,我們只是講通了這個CBOW模型的前向計算過程。

我們接下來說說模型的訓練過程。

(1)當前詞的上下文詞語的獨熱編碼輸入到輸入層。

(2)這些詞分別乘以同一個矩陣W1后分別得到各自的1*N向量。

(3)將這些1*N向量取平均為一個1*N向量。

(4)將這個1*N向量乘矩陣W2,變成一個1*V向量。

(5)將1*V向量softmax歸一化后輸出取每個詞的概率向量1*V。

(6)將概率值最大的數對應的詞作為預測詞。

(7)將預測的結果1*V向量和真實標簽1*V向量(真實標簽中的V個值中有一個是1,其他是0)計算誤差,一般是交叉熵。

(8)在每次前向傳播之后反向傳播誤差,不斷調整W1和W2矩陣的值。

預測的時候,做一次前向傳播即可得到預測的中心詞結果。

你可能會想,word2vec不是要將詞轉為分布式表示的詞嵌入么?怎么變成預測中心詞了?

這個問題問得好!其實我們在做CBOW時,最終要的是W1這個V*N矩陣,想想這是為什么呢?

因為我們是要將詞轉換為分布式表示的詞嵌入,我們先將詞進行獨熱編碼,每個詞的向量表示是1*V的,經過乘以W1后,根據矩陣乘法的理解,假設1*V向量中第n位是1,其他是0,則矩陣乘法結果是得到了W1矩陣中的第n行結果,也就是將詞表示為了一個1*N的向量,一般N遠小于V,這也就將長度為V的獨熱編碼稀疏詞向量表示轉為了稠密的長度為N的詞向量表示。

如果還沒啥感覺,看下面這張圖幫助你理解:

所以,當我們下次要查某個詞的詞向量時,只需要和矩陣W1相乘就能得到結果。常用的詞向量長度有300,大家想想300是不是遠小于我們詞表里所有不重復詞的數量呢?

關于CBOW的代碼實現,可以看這里:從零開始學自然語言處理(二)——手把手帶你用代碼實現word2vec

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發表

    請遵守用戶 評論公約

    類似文章 更多

    主站蜘蛛池模板: 越猛烈欧美xx00动态图| 中文字幕无码乱人伦| 成在线人免费视频播放| 国产麻豆精品精东影业av网站| 精品无人区麻豆乱码1区2区| 无码日韩精品国产av| 国产99精品| 国产偷国产偷亚洲清高app| 五十老熟妇乱子伦免费观看| 亚洲中文av一区二区三区| 国产夫妇肉麻对白| 日韩人妻无码精品一专区| 自拍亚洲综合在线精品| 国产精品无码成人午夜电影| 无码人妻精品一区二区三区下载| 国产97在线 | 亚洲| 国产在线乱码一区二区三区| 午夜精品电影你懂的| 3d动漫精品啪啪一区二区下载| 女被啪到深处喷水gif动态图| 久久精品国产第一区二区三区| 熟妇无码熟妇毛片| 呻吟国产av久久一区二区| 精品人妻少妇一区二区三区不卡| 欧美丰满大乳大屁股流白浆| 天天综合亚洲色在线精品| 99久久人人爽亚洲精品美女| 亚洲精品不卡av在线播放| 性色a∨精品高清在线观看| 成人无遮挡18禁免费视频| 无码人妻丰满熟妇区10p| 国产天美传媒性色av出轨| 中文字幕无码av波多野吉衣| 国产黄在线观看免费观看软件| 在线亚洲欧美日韩精品专区| 日韩少妇内射免费播放18禁裸乳| 国产熟妇搡bbbb搡bbbb| 大肉大捧一进一出视频| 国产成人高清亚洲明星一区| 欧美性xxxx极品少妇| 欧美亚洲国产第一精品久久|