1.我們可以假設有300個不同的特征辆苔,這樣的話就會有一列數(shù)字亮钦,新的特征表示的東西肯定比較難搞清楚,通常我們可以把這300維的數(shù)據(jù)嵌入到一個二維空間,這樣就可以可視化了亿眠。常用的可視化算法是t-SNE算法碎罚,把這個空間映射到低維空間,可以畫出一個2維圖像然后觀察纳像,這就是術(shù)語嵌入的來源荆烈。
2.使用詞嵌入做遷移學習:
從大量的文本集中學習詞嵌入(大量的文本集,或者下載網(wǎng)上預訓練好的詞嵌入模型)
用這些詞嵌入模型遷移到你的只有少量標注訓練集的任務重,比如用這個300維的詞嵌入來表示你的單詞憔购。
在新任務上訓練模型時宫峦,可以選擇要不要繼續(xù)微調(diào),用新的數(shù)據(jù)調(diào)整詞嵌入(只有你標記的數(shù)據(jù)集很大你才會這樣做)
3.詞嵌入的特性:類比推理
當算法被問及man對woman相當于king對什么時玫鸟,算法做的就是計算:
???????? ???????? ??: ???????????? ??????(????, ??king ? ??man + ??woman)
在使用t-SNE對300維數(shù)據(jù)進行降維到2維時导绷,這個降維算法是以一種非常復雜的非線性方式進行映射,所以在2維空間中平行四邊形的類比會失效屎飘。
余弦相似度:
其實就是計算向量U和向量V之間夾角的余弦妥曲,我們通過cos的圖像可以知道,當兩向量夾角為0時钦购,余弦相似度是1檐盟,夾角是90度時,余弦相似度是0押桃。所以葵萎,兩向量之間的角度越小,這兩個向量越相似
4.嵌入矩陣
假設詞匯表有10000個單詞唱凯,我們要做的就是學習一個嵌入矩陣E羡忘,這個嵌入矩陣是30010000的維度。假設其中一個詞a是這個單詞表中的第100個單詞波丰,那么它的one hot表示就是除了第100個位置為1其余都是0壳坪,拿這個嵌入矩陣E和這個One-hot表示相乘,我們得到的就是3001的一個向量掰烟,也就是嵌入矩陣E中第100個單詞的向量表示爽蝴,它就表示了這個詞a(詞嵌入的表示方法)
如果目標是要建立一個語言模型,那么一般選取目標詞之前的幾個詞作為上下文纫骑,如果目標不是學習語言模型本身蝎亚,那么可以選擇其他的上下文。見下圖:
學習語言模型-可以用這個target詞前面的四個詞
學習嵌入矩陣-可以用target詞的前后四個詞先馆,可以用target前一個詞发框,可以用target詞附近的一個詞
Word2vec
skip-gram:
抽取上下文和目標詞配對,來構(gòu)造一個監(jiān)督學習問題煤墙。這個監(jiān)督學習問題是:給定一個詞作為上下文詞梅惯,要求預測在這個詞的一個正負窗口內(nèi)選擇目標詞詞。
給定一個詞(上下文詞)仿野,可以獲取到它的one-hot表示Oorange铣减,我們用嵌入矩陣E與這個Oorange相乘,得到向量Ec 脚作,然后把它喂給softMax單元:
這個softmax的損失函數(shù)使用交叉熵表示葫哗。所以在這個問題中缔刹,嵌入矩陣E包含所有嵌入向量Ec的參數(shù),softmax也有thelta的參數(shù)劣针,優(yōu)化這個損失函數(shù)會得到一個比較好的嵌入向量集校镐。
問題:如果使用上面的softmax的計算方式,代價太大速度太慢捺典,需要對詞匯表的詞進行求和運算鸟廓。因此有一些解決方案:
①分級softmax(hierarchical softmax)這是一個樹形的分類器,樹上的每個節(jié)點都是一個二分類器辣苏。這種分類樹的計算成本和詞匯表大小的對數(shù)成正比肝箱。這種分類樹并不是左右分支詞數(shù)對稱的樹,而是把常用詞放在頂部稀蟋,不常用的詞在樹的更深處煌张。
②負采樣(negative sampling)
一旦選擇了上下文c,問題就變成了在c的一個正負窗口內(nèi)對目標詞進行采樣退客。那么怎么選擇上下文c骏融?如果對語料庫進行均勻且隨機的采樣,會出現(xiàn)大量無意義的詞萌狂,如:the,a,and等等档玻。這會使得在上下文到目標詞的映射會頻繁的得到這些詞,進而導致較為頻繁的更新softmax中的e_c 茫藏。所以詞p(c)的分布并不是在語料庫上均勻且隨機的采樣得到的误趴,而是采用了不同的分級來平衡更常見的詞和不那么常見的詞。
生成訓練數(shù)據(jù)的方法:選擇一個上下文詞务傲,在此基礎上選擇一個目標詞凉当,給這個pair一個標簽1,然后再選擇K次其他的詞售葡,將(上下文看杭,其他詞)的標簽設置為0。(其中的K挟伙,小數(shù)據(jù)集中選擇5-20楼雹,大數(shù)據(jù)中選擇2-5)
這就變成了一個監(jiān)督學習的模型,給定(c,t),預測輸出的y是0還是1尖阔≈澹可以定義一個邏輯回歸模型。每一個正樣本都有K個對應的負樣本來訓練一個類似于邏輯回歸的模型介却。
假設輸入詞是orange(詞6257)谴供,我們要做的就是輸入one-hot向量,傳遞給嵌入矩陣E筷笨,兩者相乘得到嵌入向量e_6257,就得到了10000個可能的邏輯回歸的分類問題,但并不是每次迭代都訓練全部的10000個胃夏,我們只訓練其中的一個正樣本和K個負樣本轴或,所以這個成本相比于開始的會變的很低。
那么如何選取負樣本仰禀?根據(jù)論文作者Mikolov的經(jīng)驗照雁,它們發(fā)現(xiàn)使用一下方式采樣最好:
F(wi)是觀測到的在語料庫中的某個英文詞的詞頻。通過3/4次方的計算答恶,使其處于完全獨立的分布和訓練集的觀測分布兩個極端之間饺蚊。
GloVe ?悬嗓?污呼??
CBOW適用于小型語料庫包竹,skip-gram適用于大型語料
5.情感分析
One-hot===>詞嵌入===>對這一句的詞嵌入取和或平均
取和或者平均實際上會把所有單詞的意思平均起來燕酷,并未考慮詞語出現(xiàn)的順序,如果有not good這種表示周瞎,更不能理解真實的情感苗缩。解決方法可以用一個RNN:
6.序列模型和注意力機制
decoder網(wǎng)絡和之前的那個語言模型非常相似,區(qū)別就是語言模型是從0向量開始預測輸出的句子声诸,而decoder是會在encoder網(wǎng)絡計算出的表示輸入的句子的條件下輸出句子的翻譯酱讶。
在機器翻譯中,我們并不想得到的是隨機的輸出彼乌,也就是說并不是從得到的分布中進行隨機取樣泻肯,二是要找到一個y,使得p(y1,y2,….yt|x)的概率最大,解決這個問題最常用的就是beam search囤攀。為什么不用greedy search呢软免,因為貪心搜索是在選中第一個最有可能的詞的基礎上再去選擇最有可能的第二個詞,再去選最有可能的第三個詞焚挠,但在機器翻譯中膏萧,這種做法并不好。比如我們現(xiàn)在要翻譯成的句子有兩種方法:
he is visiting Africa in September
he is going to be visting Africa in September.
假設現(xiàn)在貪心搜索選中了前兩個詞"he is"蝌衔,那么在語料中榛泛,is going to 更常見,所以第二個句子可能概率會更高噩斟,但這個翻譯并不好曹锨;此外,如果翻譯有10個詞這么長剃允,詞典中有10000個詞沛简,那么就要考慮10000的10次方這么多齐鲤。
7.Beam Search
1.概念
集束搜索算法有一個參數(shù)B叫做集束寬,假設我們把B設為3椒楣。
第一步给郊,將法語句子輸入到encoder,然后進入decoder捧灰,softmax層會輸出10000個概率值淆九,得到這10000個概率值,取前三個存起來毛俏。
第二步炭庙,已經(jīng)知道了作為第一個單詞的最有可能的三個選擇,然后針對這三個選擇煌寇,把詞匯中的所有單詞列出來焕蹄,按下圖的式子列出來,再取最大的前三個唧席。也就是說這一步就是評估3*10000個可能的結(jié)果擦盾。
重復執(zhí)行,直到出現(xiàn)句尾終止符號淌哟。
2.改進集束搜索(長度歸一化)
優(yōu)化目標:
概率值都是小于1的迹卢,概率乘積連乘會造成數(shù)值下溢,因此在實踐中徒仓,我們不會最大化這個連乘的形式腐碱,而是會對齊取個log,最大化這個取log之后的值掉弛。對于這個目標函數(shù)症见,如果有一個很長的句子,那么這個句子的概率會很低殃饿,就會傾向于選擇一個比較短的句子作為最紅的結(jié)果谋作,因此我們可以把它歸一化,通過除以翻譯結(jié)果的單詞數(shù)量乎芳,就是取每個單詞的概率對數(shù)值的平均了遵蚜,這樣能減少對輸出長的結(jié)果的懲罰。在實踐中奈惑,相比于直接除以句子的單詞總數(shù)吭净,還可以在這個總數(shù)上加一個指數(shù)α。這個叫做歸一化的對數(shù)似然目標函數(shù)肴甸。
3.B的選擇:工業(yè)上常把束寬設到10寂殉,科研上經(jīng)常設到1000或3000。
4.Beam search的誤差分析
假設在dev集中原在,人工翻譯和已完成的學習的翻譯模型運行束搜索算法不一致時友扰,怎么判斷是模型的問題彤叉,還是beam search的問題?
人工翻譯:jane visits Africa in September. *
模型翻譯:jane visted Africa last September. ^
我們的seq2seq模型會計算P(y|x)村怪,所以我們用這個模型計算P(y|x)的概率和p(y^|x)的概率姆坚。
如果P(y|x)>p(y^|x) 那么就意味著y應該是可能的結(jié)果,但是beam search輸出了y^实愚,所以是beam search的問題。
如果P(y|x)<p(y^|x) 那么就意味著seq2seq模型出了問題兔辅。
8.BLEU得分
http://www.reibang.com/p/15c22fadcba5 這篇寫的不錯