久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

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

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

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

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

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

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

    你現(xiàn)在看這張圖可能一頭霧水,不知所措,沒關(guān)系,我們慢慢來學(xué)習(xí)。

    在處理自然語言時(shí),通常將詞語或者字做向量化,例如獨(dú)熱編碼,例如我們有一句話為:“關(guān)注數(shù)據(jù)科學(xué)雜談公眾號(hào)”,我們分詞后對其進(jìn)行獨(dú)熱編碼,結(jié)果可以是:

    “關(guān)注”:       【1,0,0,0】

    “數(shù)據(jù)科學(xué)”:【0,1,0,0】

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

    “公眾號(hào)”:   【0,0,0,1】

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

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

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

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

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

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

    大家如果細(xì)心,會(huì)發(fā)現(xiàn)在展示的這些維度中的數(shù)字已經(jīng)不是1和0了,而是一些其他的浮點(diǎn)數(shù)。

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

    上圖是將一個(gè)3維詞向量表示轉(zhuǎn)為2維詞向量表示。

    有個(gè)有意思的發(fā)現(xiàn)是,當(dāng)我們使用詞嵌入后,詞之間可以存在一些關(guān)系,例如:

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

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

    怎么理解上下文信息呢?

    其實(shí)很簡單,我們在上學(xué)時(shí),做閱讀理解經(jīng)常會(huì)提到聯(lián)系上下文,所謂的上下文信息無非是當(dāng)前內(nèi)容在文本中前后的其他內(nèi)容信息。

    如下圖所示,learning這個(gè)詞的上下文信息可以是它左右兩邊的content標(biāo)記的內(nèi)容。

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

    再轉(zhuǎn)換一下思維,由于在當(dāng)前上下文信息中,learning和studying都可以出現(xiàn),是不是learning和studying是近義詞了呢?沒錯(cuò),在當(dāng)前的CBOW下確實(shí)是這樣,甚至man和woman,cat和dog都可能是近義詞。

    所以大家是否理解了呢?

    其實(shí)就是擁有相似或者相同的上下文的多個(gè)詞可能是近義詞或者同義詞。

    這里慢慢將CBOW的算法思想透露出來了,因?yàn)镃BOW就是通過當(dāng)前中心詞的上下文單詞信息預(yù)測當(dāng)前中心詞。

    此時(shí)再來看CBOW這張示意圖,是不是有點(diǎn)感覺了?

    接下來進(jìn)入具體的算法模型部分!

    首先我們需要訓(xùn)練CBOW模型,該模型的結(jié)構(gòu)如下圖:

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

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

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

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

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

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

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

    而這個(gè)輸出的結(jié)果1*V就是預(yù)測出的中心詞的分布式表示。

    別急,我們只是講通了這個(gè)CBOW模型的前向計(jì)算過程。

    我們接下來說說模型的訓(xùn)練過程。

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

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

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

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

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

    (6)將概率值最大的數(shù)對應(yīng)的詞作為預(yù)測詞。

    (7)將預(yù)測的結(jié)果1*V向量和真實(shí)標(biāo)簽1*V向量(真實(shí)標(biāo)簽中的V個(gè)值中有一個(gè)是1,其他是0)計(jì)算誤差,一般是交叉熵。

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

    預(yù)測的時(shí)候,做一次前向傳播即可得到預(yù)測的中心詞結(jié)果。

    你可能會(huì)想,word2vec不是要將詞轉(zhuǎn)為分布式表示的詞嵌入么?怎么變成預(yù)測中心詞了?

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

    因?yàn)槲覀兪且獙⒃~轉(zhuǎn)換為分布式表示的詞嵌入,我們先將詞進(jìn)行獨(dú)熱編碼,每個(gè)詞的向量表示是1*V的,經(jīng)過乘以W1后,根據(jù)矩陣乘法的理解,假設(shè)1*V向量中第n位是1,其他是0,則矩陣乘法結(jié)果是得到了W1矩陣中的第n行結(jié)果,也就是將詞表示為了一個(gè)1*N的向量,一般N遠(yuǎn)小于V,這也就將長度為V的獨(dú)熱編碼稀疏詞向量表示轉(zhuǎn)為了稠密的長度為N的詞向量表示。

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

    所以,當(dāng)我們下次要查某個(gè)詞的詞向量時(shí),只需要和矩陣W1相乘就能得到結(jié)果。常用的詞向量長度有300,大家想想300是不是遠(yuǎn)小于我們詞表里所有不重復(fù)詞的數(shù)量呢?

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

      本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評(píng)論

      發(fā)表

      請遵守用戶 評(píng)論公約

      類似文章 更多

      主站蜘蛛池模板: 精品卡通动漫亚洲AV第一页| 午夜免费无码福利视频麻豆| 丁香五月亚洲综合在线国内自拍| 国产中年熟女大集合| 亚洲高清乱码午夜电影网| 无码人妻天天拍夜夜爽| 华人在线亚洲欧美精品| 老色鬼久久亚洲AV综合| 免费现黄频在线观看国产| 免费一区二区无码东京热| 国产精品视频一区不卡| 国产真实乱人偷精品人妻| 国产一区二区不卡在线| 人妻丝袜中文无码AV影音先锋专区| 国产亚洲精AA在线观看SEE| 一区二区国产高清视频在线| 国产乱子伦农村叉叉叉| 亚洲色最新高清AV网站| 久久夜色精品国产嚕嚕亚洲AV| 少妇高潮水多太爽了动态图| 97视频精品全国免费观看| 四虎影视国产精品永久在线| 亚洲成av人片无码天堂下载| 色一乱一伦一图一区二区精品| 偷拍专区一区二区三区| WWW夜片内射视频在观看视频| 综合激情亚洲丁香社区| 动漫av网站免费观看| 国产激情无码一区二区APP| 99在线精品国自产拍中文字幕| 国产精品毛片一区二区| 青青草国产线观看| 少妇无套内谢免费视频| 亚洲人成无码WWW久久久| 69天堂人成无码免费视频| 久久毛片少妇高潮| 人妻无码久久中文字幕专区| 午夜在线观看免费观看 视频| 国产av不卡一区二区| 天天躁日日躁狠狠躁婷婷| 国产在线高清视频无码|