CS224n学习笔记:Lecture1 2
開始的這部分主要是對DL4NLP的一個簡介。
 
個人理解,DL4NLP中,所有層級都是以向量的形式進行處理,用向量表示單詞、用向量表示句子等。向量是最靈活的形式,維度自由,可組成矩陣,可組成高維的tensor等。進行NLP等后續(xù)任務,首先需要輸入。輸入來源主要有兩個,一個是來自語音speech,一個是來自文本text。對于NLP中,
有一個概念需要理解:morphology(形態(tài)學)。這個所謂的形態(tài)學是一個語言學中的概念,涉及到語音特征、句法特征、語義特征等,處于音位學、句法學和語義學的結(jié)合部位。
整個的一個NLP的通用處理流程是: 拿到輸入(來自語音/文本) -> 形態(tài)學分析(morphological analysis) -> 句法分析(syntactic analysis) -> 語義分析(semantic interpretation) -> 對話分析(discourse processing)
最后的那個階段需要利用上下文語境進行理解。
 
NLP 的工業(yè)界應用:
一般來講,結(jié)合自己的工作經(jīng)驗,有拼寫檢查、關(guān)鍵詞生成、NER、文本分類、情感分析等初中級任務,稍高級的任務有MT、QA、客服系統(tǒng)、chatbot等這些直接利用NLP的產(chǎn)出,還有利用NLP的輸出作用于廣告投放、推薦等業(yè)務的情形。
p.s.對于情感分析,傳統(tǒng)方法是用一個情感詞袋,在詞袋上做分類器;基于DL的方法用RNN等解決,可識別”反話“的情感極性。對于QA,傳統(tǒng)方法是手工寫大量正則表達式,超蠢,效果也不好;基于DL的方法把事實存儲在向量里。對于客服系統(tǒng),如google的inbox,是基于RNN等DL方法實現(xiàn)的。對于MT,有傳統(tǒng)的SMT,也有現(xiàn)在的NMT,NMT是將原文中的各個詞映射成向量,由向量來構(gòu)建譯文。
 
NLP的難點:
1.人類的語言有歧義,需要明確某一代詞具體指代的是什么。就是Reference analysis
2.人類的語言較簡練,省略了大量的背景知識。省略的原因是由于人類已經(jīng)儲備了大量基于現(xiàn)實世界、常識和上下文的一些知識。
 
隨后進入正題,介紹w2v。詞是進行NLP任務的最小單詞,需要把詞表示明白。
據(jù)說過去一直都是用的分類詞典,常見是就是像WordNet那樣的詞庫查詢上位詞和同義詞等。這種方法并不能區(qū)分同義詞之間的細微差別,如expert != good,這專業(yè)的程度完全不一樣好嘛!!此外,這種方法不需要大量人力去整理,而且不能實時加入新詞,由于是人工整理的,就會出現(xiàn)主觀化的問題,還無法計算詞和詞之間的相似度。總而言之,就是不好。
 
用稍現(xiàn)代化的模式去進行處理的時候,最早是采用one-hot編碼的形式進行詞語表示。這種就是列一個詞典,初始化詞典里的各個單詞對應的計數(shù)都是0,然后一個一個擼單詞,句子里出現(xiàn)哪個單詞了就把詞典相應的位值+1,直到擼完為止。這種方法是有問題的,如果詞典特別大,比如達到百萬級別的話,那這向量也太長了!而且任意兩個向量之間的點積都為0,說人話就是這兩個詞沒有關(guān)聯(lián),這是不對的,比如說motel和hotel...這兩個怎么說是沒關(guān)聯(lián)呢?說motel和cat沒關(guān)聯(lián)還差不多!
 
在對詞語的理解時,很大程度上需要依賴其對應的上下文,如果能把單詞放到正確的上下文中,才說明正確掌握了他的意義。個人認為這就是w2v的語言學基礎。通過調(diào)整一個單詞及其上下文單詞的向量,可根據(jù)這兩個向量推測兩個詞語的相似度,或者可根據(jù)一個單詞的向量預測詞語的上下文。w2v被稱作是分布式表示,稱為分布式主要是因為,不像one-hot這種編碼形式,把雞蛋都放在一個籃子里,而是把該單詞的含義分散到不同維度,因此稱作是分布的表示。
 
w2v是由兩個模型構(gòu)成的:CBOW和SG,兩個模型的作用完全相反,其中CBOW是給定一個中心詞,預測其context詞,而SG則是給定context詞來預測中心詞。通過單詞和上下文彼此預測。
對于w2v的原始softmax,提出了兩種較為高效的訓練方法:負采樣和層次softmax。
學習神經(jīng)網(wǎng)絡word embedding的基本思路如下:
首先定義一個預測某單詞的上下文的模型:
p(context|wt)=… 其損失函數(shù)定義如下:J=1?p(w?t|wt)
這里的w?t表示wt的上下文(負號通常表示除了某詞之外),如果完美預測,損失函數(shù)為零。然后在大語料庫上不同位置得到訓練實例,調(diào)整詞向量,最小化損失函數(shù)
Lecture里主要是針對SG模型進行了詳細講解。計算P(wt-2 | wt)、P(wt-1 | wt)、P(wt+1 | wt )、P(wt+2 | wt)等概率。這里只是拿窗口為2舉例,實際上學習出的是一個概率分布。目標函數(shù)是對所有中心詞其context詞的預測結(jié)果的乘積,需要最大化這個乘積(理想情況是這個乘積的結(jié)果為1,表示對于所有中心詞,對其context詞的預測都是準的)。
在實際操作時,要對這個最原始的目標函數(shù)進行一下改造。乘法顯然是不太好處理的,一個通用的trick是將乘法轉(zhuǎn)成求和,利用log操作。而且接觸過ML的都知道,處理最小化要比處理最大化更受歡迎,原始目標函數(shù)是進行最大化,取個負數(shù)就轉(zhuǎn)成了最小化。因此,將原始目標函數(shù)進行對數(shù)似然的相反數(shù)操作即可得到較易處理的損失函數(shù)形式。對于目標函數(shù)里的p,用softmax函數(shù)得到。
softmax函數(shù)本質(zhì)上是將一個向量轉(zhuǎn)換成另一個向量,向量的shape不變,只是將向量中的各個值進行"規(guī)范化"處理,將一個任意值轉(zhuǎn)成(0,1)之間的一個浮點數(shù),在NN里這個值可近似認為是概率。softmax的計算函數(shù)如下:
 
 
這里涉及到的u和v分別對應詞o(context詞)的向量和詞c(中心詞)的向量,來自于兩個矩陣U和V,二者均為這個模型的參數(shù),是我們要通過損失函數(shù)反復迭代更新的。之所以叫做softmax函數(shù)是因為,該函數(shù)中用的指數(shù)函數(shù)會將較大的數(shù)變得更大,而較小的數(shù)變得很小很小,類似于max函數(shù)
p.s. 在對應的assignment1里第一部分就是針對softmax做的一些練習。softmax有一個特性,那就是平移不變性(我也不知道專業(yè)的說法是這個,勿噴),數(shù)學表示就是softmax(x) = softmax(x + c),其中c為一個常數(shù)或常向量,x是一個向量。這個很好證。實際利用這個特性時,c普遍取-max x(i),就是x向量中的最大值。為啥要費勁減去這么個值呢?還要從softmax函數(shù)本身定義著手。softmax函數(shù)用指數(shù)來進行”規(guī)范化“操作,指數(shù)操作會把大數(shù)繼續(xù)放大,如exp(1000)時,直接算是會上溢出的,得到inf,對于exp(-1000),還是不行,會下溢出,得到0,下溢出這個事情是因為,浮點數(shù)只有64位,太小的數(shù)字也是表示不出來的。減去x(i)的最大值,可以保證指數(shù)最大不會超過0,不會發(fā)生上溢出,即使下溢出了,也能得到一個相對合理的值。這個softmax函數(shù)很重要很重要很重要!!!!!
對于整個SG模型的執(zhí)行過程,用如下scratch表示很清楚:
 
 
對于模型的訓練,用梯度下降法。模型的參數(shù)就是W和W'矩陣。求導即可得到梯度,使用SGD而非BGD來減少訓練時間,這些都是老生常談了。比較特別的一點是提到了一句,NN喜歡嘈雜的算法。?????這個是為什么,需要仔細思考一下
至此得到SG模型訓練的整體流程,針對softmax函數(shù),還有優(yōu)化的空間,后邊會提到一些trick,這個不是lecture1 中主要提到的問題了,后邊再繼續(xù)總結(jié)。
 
 
總結(jié)
以上是生活随笔為你收集整理的CS224n学习笔记:Lecture1 2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 北大百练 4075. 矩阵旋转
- 下一篇: 升级 ThinkPad T61 BIOS
