深度学习 (五)cbow、skip-gram of word2vec
介紹
? ?????NLP 自然語言處理即讓計(jì)算機(jī)理解學(xué)會(huì)人類語言,讓計(jì)算機(jī)像人一樣能有分辨能力、語言交流能力,并為我們服務(wù)產(chǎn)生價(jià)值的一種研究方向,從發(fā)展歷史來說經(jīng)過了很多代人的努力,向我們的目標(biāo)更近了一步,從傳統(tǒng)的基于規(guī)則的語言逐步向基于統(tǒng)計(jì)的理論發(fā)展。
? ?????下面先來看一張旅游地圖,不至于迷失方向,后面會(huì)詳細(xì)介紹它們之間的關(guān)系。
歷程
rules-Based
? ?????1950年時(shí)基于規(guī)則的自然語言處理非常火,它是把規(guī)則提前編碼好并告訴計(jì)算機(jī)按著規(guī)則來分析解析句子結(jié)構(gòu)和語法,如主謂賓語法,這些規(guī)則是咋來的呢,人為編制的,可能是計(jì)算機(jī)科學(xué)家和中文語言學(xué)家坐在一起開了個(gè)會(huì)溝通了一下,中文學(xué)家把語言規(guī)則提了一個(gè)產(chǎn)品需求扔給計(jì)算機(jī)科學(xué)家,說你把這個(gè)搞到計(jì)算機(jī)里面讓它能懂我們說得話,就這么簡單的開了個(gè)會(huì)規(guī)則、符號(hào)就確定了,顯然這一過程依賴于幾個(gè)有經(jīng)驗(yàn)的人以及他們的水平,人的水平是有限的一個(gè)人同時(shí)懂了世界上所有語言不太可能。
? ?????另一方面出來各種新詞之后我們?cè)O(shè)定的規(guī)則是否要從新變更呢,另外翻譯準(zhǔn)確率也不是很高,經(jīng)過一段難熬的時(shí)間,很多人們開始把目光轉(zhuǎn)向了另一種思路,以統(tǒng)計(jì)學(xué)為基礎(chǔ)統(tǒng)計(jì)概率問題。
language modeling
? ?????到了1970年時(shí)隨著統(tǒng)計(jì)學(xué)的快速發(fā)展,人們開始嘗試應(yīng)用統(tǒng)計(jì)學(xué)和機(jī)器學(xué)習(xí)相結(jié)合來解決語言處理問題,要判斷一段文字是不是一句自然語言,可以通過確定這段文字的概率分布來表示其存在的可能性,語言模型中的詞是有順序的,給定m個(gè)詞看這句話是不是一句合理的自然語言,人們嘗試了各種機(jī)器學(xué)習(xí)模型,從那時(shí)起語言模型這個(gè)概念逐漸流程起來,語言模型這個(gè)詞的含義其實(shí)也包括傳統(tǒng)的規(guī)則符號(hào)表示模型,不過現(xiàn)如今一般指基于統(tǒng)計(jì)的語言模型。
representation model
? ?????機(jī)器學(xué)習(xí)模型前面我們已經(jīng)接觸過,常見的監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí),無論哪種都學(xué)要輸入經(jīng)過數(shù)據(jù)清洗好的數(shù)值數(shù)據(jù)即向量,我們面臨的第一個(gè)問題就是書本或各大新聞上的那么多文字如何讓計(jì)算機(jī)理解看懂呢,想象小時(shí)候我們學(xué)習(xí)了什么,是從單個(gè)的字詞 偏旁、結(jié)構(gòu)學(xué)起 時(shí)間一長積累了大量單詞詞匯并理解各個(gè)詞的意思,相近詞等,開始人們建立了一個(gè)超大型詞表或叫‘’漢語詞典‘’,在轉(zhuǎn)換一句話時(shí)如果單詞存在字典中即為1,不存在即為0,單詞長度為詞典長度。
one hot encoding(word)
舉個(gè)使用one hot encoding編碼的具體例子:
第一句:John likes to watch movies.Mary likes too.
第二句:John also likes to watch football games.
將兩句編碼為詞典:
{“John”:1,“l(fā)ikes”:2,“to”:3,“watch”:4,“movies”:5,“also”:6,“football”:7,“games”:8,“Mary”:9,“too”:10}
對(duì)詞典里面每個(gè)詞編碼
John [1,0,0,0,0,0,0,0,0,0]
likes [0,1,0,0,0,0,0,0,0,0]
to [0,0,1,0,0,0,0,0,0,0]
watch [0,0,0,1,0,0,0,0,0,0]
movies [0,0,0,0,1,0,0,0,0,0]
also [0,0,0,0,0,1,0,0,0,0]
football [0,0,0,0,0,0,1,0,0,0]
games [0,0,0,0,0,0,0,1,0,0]
mary [0,0,0,1,0,0,0,0,1,0]
too [0,0,0,1,0,0,0,0,1,1]
bag of words
第一句話整合編碼為:[1 2 1 1 1 0 0 0 1 1 1]
第二句為 [1 1 1 1 0 1 1 1 0 0]
? ?????從實(shí)事求是的角度來觀察:句子的編碼可以看出來一個(gè)單詞出現(xiàn)的次數(shù)越多權(quán)重會(huì)越大,上面like出現(xiàn)了兩次權(quán)重為2,假如John這人還喜歡apple peal 等那又多出來幾個(gè)like,經(jīng)常一篇文章的主題和里面重復(fù)太多的詞關(guān)系不大,往往和那么在本篇中出現(xiàn)的有關(guān)系。
- TF-IDF
? ?????有人因此提出來了TF-IDF模型,此處略過可以自行網(wǎng)上搜索,它在表示一個(gè)單詞重要性時(shí)不止和本篇有關(guān)系,同在其它文檔中的頻次成反比,它在一定程度上解決了文章中單個(gè)重要程度的合理表達(dá),but依然存在詞之間的相互關(guān)系不能表達(dá),每個(gè)詞之間順序完全沒有體現(xiàn)出來。
n-gram
? ?????我們先來說一下基于統(tǒng)計(jì)的語言模型,它們都是基于條件率來求解,在A事件發(fā)生的情況下,B事件發(fā)生的概率是多少,我們想一句話是否合理轉(zhuǎn)化為了數(shù)學(xué)向量,然后又通過概念來計(jì)算這一向量是否合理的概率,可以說是結(jié)合數(shù)學(xué)+統(tǒng)計(jì)學(xué)解決自然語言識(shí)別翻譯等問題,概率論的鼻祖是貝葉斯,所以都稱貝葉斯是自然語言理論的開拓者。
? ?????假設(shè)句子為S,由m個(gè)詞組成,即求這m個(gè)字詞組成句子S的概率是多少,概率值越大表明這個(gè)句子接近正確越近、表達(dá)也越合理。
P(S) = p(w1)*p(w2|w1)*p(w3|w1,w2)*p(w4|w1,w2,w3)****p(wm|w(m-1+n)**wm)
馬爾科夫鏈假設(shè):
? ?????由于上述問題非常復(fù)雜求解,后來馬爾科夫提出來了一個(gè)假設(shè),每個(gè)詞出現(xiàn)的概率只與前面n-1個(gè)詞有關(guān)系,那么可以節(jié)省很多計(jì)算,常用模型如下:
n=1 unique gram
n=2 binary gram
n=3 third gram
? ?????這里面的n是劃分預(yù)料庫的一個(gè)標(biāo)準(zhǔn),n=1表明整個(gè)語料庫都是單個(gè)詞,n=2表明都是大小為2的短語,我們要做的便是基于這么多的預(yù)料庫計(jì)算我們所給出的句子發(fā)生的概率是多少,語料庫中的每一個(gè)詞都有可能是組成我們將要預(yù)測詞的一部分,因此每個(gè)詞都要有一個(gè)概率值,即語料庫的個(gè)數(shù)即我們參數(shù)規(guī)模的大小,語料庫成指數(shù)增長,那么參數(shù)個(gè)數(shù)也呈指數(shù)增長,n值越大句子越精確但是n>=4時(shí)語料庫將非常大不利于計(jì)算,項(xiàng)目中很少使用,對(duì)于計(jì)算概率我們可以寫一個(gè)例子來實(shí)現(xiàn)說明。
? ?????計(jì)算時(shí)大概是根據(jù)出現(xiàn)次數(shù)來計(jì)算.
distributed representation
You shall know a word by the company it keeps
? ?????distributed描述的是把詞語包含的信息分布式地存儲(chǔ)在向量的各個(gè)維度中相反的是局部表示(local representation),如詞語的獨(dú)熱表示(one-hot representation),在高維的one hot向量中只有一個(gè)維度描述了詞的語義如為1的那個(gè)維度,其它維度都是0,語義是離散的,可以通過矩陣降維或神經(jīng)網(wǎng)絡(luò)降維可以將語義分散存儲(chǔ)到向量的各個(gè)維度中,因此,這類方法得到的低維向量可稱為分布式表示。
cocurrence matrix
? ?????topic model 說道這里有必要先說下主題topic model,即識(shí)別一個(gè)文檔是屬于或包含哪些主題,如今日頭條文章都是自動(dòng)分好類的,這個(gè)分類如何來分呢,一個(gè)分類就是一個(gè)主題,下面這兩種常用方法經(jīng)常用來識(shí)別文檔主題,主題模型也是自然語言的一個(gè)研究方向,詳細(xì)的這里先不深入研究。
- word document
? ?????詞-文檔表示用來發(fā)現(xiàn)topic,大概描述方法矩陣的每行表示詞(one hot) ,縱列表示文檔,可想而知每個(gè)文章包含的單詞個(gè)數(shù)是很大的,那么每行將非常長,雖然可以利用SVD來降維,結(jié)果還是難于計(jì)算如LSA,后面人們又優(yōu)化了有了LDA等,詳情請(qǐng)百度。 - word-word
? ?????表示方法變了但要記住我們的思想 ,我們是想通過上下文來表示目標(biāo)詞的含義,word-document也可以表示它的上下文自然是整個(gè)文檔,因此這種方法在分析句子含義方面很少用,它的關(guān)系是詞語整篇文章,這個(gè)word-word關(guān)系表示法即可以用來表達(dá)句子語義信息,看下面三句話:
l like deep learning
l like NLP
I enjoy flying,編碼為詞典
效果如下圖:
? ?????上圖也好理解,我們發(fā)現(xiàn)好多方法都存在向量維度非常大的問題,對(duì)新加入詞兼容性不好,它沒有表明詞與詞之間的順序,當(dāng)我們?cè)O(shè)置劃窗大小時(shí),劃窗只是表示目標(biāo)詞周圍幾個(gè)詞和他共同出現(xiàn)的現(xiàn)象,共現(xiàn)的意義也在于此,在2013年有人提出來了更好的設(shè)計(jì)詞語義表示方法,如下
word embedding
? ?????嵌入即把一個(gè)東西放在另一個(gè)東西里面的意思,在生活中也常常聽說嵌入鉆石的戒指、項(xiàng)鏈等,嵌入貌似都是將大的物件嵌入到小的物品中,其實(shí)詞向量這里也是這個(gè)意思,嵌入這個(gè)詞真是異曲同工,在數(shù)學(xué)上可以理解為有兩個(gè)集合A、B,A包含B,那么B也可以說嵌入到了A中,具體的例子可以正整數(shù)、整數(shù)的關(guān)系來說,我們可以說把正整數(shù)集合嵌入到整數(shù)集合中,那么整數(shù)的特征可以表達(dá)出來正整數(shù),正整數(shù)依然有些自己的特性,再高級(jí)說即將整數(shù)映射到實(shí)數(shù),本篇尾部我們來談?wù)勔粋€(gè)高級(jí)話題黎曼猜想,人類的這些認(rèn)為常識(shí)的東西,也是逐漸積累起來的,現(xiàn)在認(rèn)為的常識(shí),放在幾千年前可能是難以想象的數(shù)學(xué)難題,word embdding也是類似,詞嵌入是將高維稀疏的詞向量映射到低維稠密的向量空間,主要為了方便計(jì)算。
? ?????word embedding完成了哪些事呢,首先它將硬生生的語言文字(不只限于中文)用數(shù)學(xué)中的向量來表達(dá)出來了,即表達(dá)原有語言文字,將語義信息分不到了多個(gè)向量維度來表達(dá),另外只表達(dá)出來還不算,還要能盡量把表達(dá)的東西的本身特性不能丟了也要表達(dá)出來,一句話總結(jié)即用低維稠密向量完美表達(dá)語言本意信息。
? ?????word embedding可以理解為一個(gè)概念層面的東西,好比接口api有人定義有人實(shí)現(xiàn),java ee里面基本的規(guī)范有十三個(gè),而實(shí)現(xiàn)這些規(guī)范的公司有很多,隨便舉個(gè)例子MDB,實(shí)現(xiàn)產(chǎn)品就有activeMQ、rocketMQ等流程框架,目前實(shí)現(xiàn)將詞嵌入到有著更多表達(dá)信息的稠密向量方法中常用的有nnlm、cbow、skip-gram等。
neural network model
? ?????我們想理解上面模型首先要理解各個(gè)字母表達(dá)的含義,v是詞典的大小,就是詞典中包含多少個(gè)單詞或漢字,n在這里表示劃窗大小,如n=5表示用前4個(gè)詞來預(yù)測第五個(gè)詞是啥(從詞典v中查找),我們是想將一個(gè)詞的表達(dá)映射到一個(gè)稠密向量d,d一般是可以設(shè)置的一般在幾百維度左右,可令d=100,不宜太大不好計(jì)算。
? ?????例如下面這句話:我愛自然語言處理。jieba分詞后為【我、愛、自然、語言、處理】 ,我們要根據(jù)【我、愛、自然、語言】預(yù)測 【處理】,即一個(gè)樣本有了,也可以這樣表示(context(w),w) ,w代表目標(biāo)詞處理,context(w)表示它前面n-1個(gè)詞,這樣的樣本有很多,這里只是一個(gè),上圖原理圖只代表一個(gè)樣本處理過程,這點(diǎn)我在這類疑惑了還以為是多個(gè)樣本。
? ?????假設(shè)詞典只包含中文常用詞大小為5000,即v=5000,那么投影矩陣C = 1005000大小的矩陣,輸入的最下面一層為 我[1 0000**] 、愛[010000*]、自然[0010000***]、語言[00010000*],它們都為15000的向量,讓C矩陣和上面四個(gè)輸入做映射,將得到4個(gè)1001的稠密向量,即倒數(shù)第二層,然后讓這個(gè)4個(gè)向量連接起來變?yōu)橐粋€(gè)向量,大小就4*100,即(n-1)d ,也可以看做輸入層的大小,它在與隱層做全連接權(quán)重個(gè)數(shù)為(n-1)dh,h為隱層的節(jié)點(diǎn)個(gè)數(shù)(可以調(diào)節(jié)),到這里就和BP網(wǎng)絡(luò)類似了,前面我們利用sigmoid激活函數(shù)分析過。輸出層大小為hv,輸出層大小為詞典大小,即預(yù)測詞典里面哪一個(gè)測稱為目標(biāo)詞的概率大。
? ?????前面我們?cè)谟?xùn)練BP網(wǎng)絡(luò)時(shí)已經(jīng)發(fā)現(xiàn),其參數(shù)量很大,而且輸入的維度一般也很大,這里我們輸入的語料庫依然很大,模型將訓(xùn)練變慢,同樣不太實(shí)用。
continuous bag of word
? ?????順著概念的不斷擴(kuò)展來擴(kuò)充知識(shí),是一個(gè)水到渠成的過程,上面介紹了nnlm這里介紹cbow感覺一句話即可概括,在經(jīng)過projection layer線性映射后,為了減少訓(xùn)練參數(shù)數(shù)量將隱層去掉了,改為了求(n-1)個(gè)向量的和,再做輸出層變換softmax結(jié)果,還有一點(diǎn)主要區(qū)別是cbow是利用上下文n-1個(gè)詞去預(yù)測中間的詞,nnlm是利用前n-1個(gè)詞預(yù)測后一個(gè)詞,如下圖左:
? ?????再想想簡化后的過程其實(shí)只是對(duì)稠密向量做了一個(gè)softmax多類回歸,這里計(jì)算量依然耗時(shí)的是softmat分類,詞典多大softmax就有多大,為了減少這部分耗時(shí)采用了哈夫曼樹和下采樣方法,下次再說如何優(yōu)化的。
右邊模型是skip-gram 思想是利用中間次去預(yù)測周圍你個(gè)詞,思路類似。
疑問
? ?????剛看這里的時(shí)候有很多疑問,可以帶著疑問往下看,有了眾多疑問更是學(xué)習(xí)的動(dòng)力,如:
- word2vec 與cbow skip-gram 關(guān)系
word2vec只是一個(gè)項(xiàng)目名稱,也可以叫工具名稱,其原理主要是利用了cbow sip-gram兩個(gè)模型思想來實(shí)現(xiàn)詞向量的訓(xùn)練 - HMM、最大熵模型、CRF 、LDA 之間關(guān)系
LDA是預(yù)測主題模型的框架,HMM CRF 最大熵模型都是用來解決序列問題。 - one-hot詞向量表示法 詞匯鴻溝 維度災(zāi)難
- 訓(xùn)練一份好的詞向量表示對(duì)深度學(xué)習(xí)很有幫助
- RNN LSTM為什么能處理文字?
- 什么是序列問題
- n-gram規(guī)模為什么隨著n指數(shù)增長?
- word embedding如何理解
隨筆
網(wǎng)約車壟斷的行程
? ?????現(xiàn)在生活中人們已經(jīng)習(xí)慣滴滴一下,網(wǎng)約車就來了,方便了我們的生活,也可以說是生態(tài)圈已經(jīng)行程,貿(mào)然采取措施會(huì)是生態(tài)區(qū)被迫害,再行程下一個(gè)生態(tài)之前會(huì)有一段混亂時(shí)間,壟斷的缺點(diǎn)是使得服務(wù)和技術(shù)落后,沒有了推動(dòng)力去提高服務(wù)和質(zhì)量,聯(lián)想、惠普等大公司在購買芯片時(shí)一般不會(huì)只買in特爾,也會(huì)買一些amd,作為購買方知道有責(zé)任維持這個(gè)行業(yè)的生態(tài),同樣作為乘客如果我們每次出行都換一種出行方式,會(huì)不會(huì)好些,好像比較難,我每次出行都會(huì)選價(jià)格低一些的,價(jià)錢好像是大部分人靠譜的主要因素。
總結(jié)
以上是生活随笔為你收集整理的深度学习 (五)cbow、skip-gram of word2vec的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java10以内的加减法_Java实现随
- 下一篇: tplinkwr703无线打印服务器,T