在本章中由于篇幅較長(zhǎng),特意將6.2分為上下兩部分。
PS: 找到一些資料https://www.zhihu.com/question/32275069

本節(jié)會(huì)實(shí)現(xiàn)用于學(xué)習(xí)word Embeddings 的模型,Word Embeddings很有力地表示NLP任務(wù)的單詞。由于在大型的文本語料庫上運(yùn)行的時(shí)候,方法變得有效,所以word vector embeddings的話題近期受到歡迎。雖然暫時(shí)不使用RNN去完成這個(gè)任務(wù),但是會(huì)將在后期的任務(wù)中依靠這部分。如果您熟悉word2vec這樣的詞向量和工具的概念,對(duì)自己實(shí)現(xiàn)它并不感興趣,可以隨時(shí)跳到下一節(jié)。
為什么要用向量表達(dá)單詞呢?把單詞送入學(xué)習(xí)系統(tǒng)的最直接的方法(straight-forward way to feed)就是使用one-hot編碼(單編碼)。也就是說,在一個(gè)大小和詞匯量一樣的向量里面,除了該單詞的位置置為1以外,其他的所有元素都是0. 這種方法有兩個(gè)問題:首先,在實(shí)際的應(yīng)用中,由于自然語言中會(huì)有很多不同的單詞,所以向量會(huì)非常的長(zhǎng)。其次,one-hot的表示方法無法提供單詞與單詞之間的任何語義相關(guān)性。

長(zhǎng)久以來,共同表達(dá)詞匯的思想作為語義相關(guān)性的一種解決方案已經(jīng)存在很長(zhǎng)時(shí)間了。簡(jiǎn)單的說來就是:運(yùn)行了大量的文本,對(duì)于每個(gè)單詞計(jì)算出距離周圍單詞的距離,比如說是周圍5個(gè)單詞的距離,然后用附近的單詞的標(biāo)準(zhǔn)化計(jì)數(shù)表示每個(gè)單詞。然后用附近的單詞的標(biāo)準(zhǔn)化計(jì)數(shù)表示每個(gè)單詞。這種思想的背后的依據(jù)是在相似的上下文中使用的詞匯,其語義也是相似的。隨后,我們可以通過使用PCA或類似的方法來獲得更密集的表示,將發(fā)生向量壓縮到更少的維度。雖然這種方法表現(xiàn)的效果很好,但是需要跟蹤所有的共現(xiàn)(這里),這是我們?cè)~匯量的一個(gè)方形矩陣。(這句話翻譯的不是太準(zhǔn)確,貼上原文:While this approach leads to quite good performance, it requires us to keep track of the whole cooccurrence that is a square matrix of the size of our vocabulary.)

在2013年,Mikolov等人相處了一種既切實(shí)可行又高效的方式去計(jì)算上下文中的單詞表達(dá)。這篇文章是Mikolov, Tomas, et al. “Efficient estimation of word representations in vector space.” arXiv preprint arXiv:1301.3781 (2013)。文中使用的skip-game model 隨機(jī)的初始化表達(dá),該模型用一個(gè)簡(jiǎn)單的分類器去預(yù)測(cè)當(dāng)前單詞上下文單詞。通過分類器權(quán)重和詞表示來傳播錯(cuò)誤,并調(diào)整兩者以減少預(yù)測(cè)誤差。目前已經(jīng)發(fā)現(xiàn)在大興的語料庫上訓(xùn)練該模型可以使得表示向量近似于壓縮的共發(fā)向量。我們現(xiàn)在就來介紹如何在tensorflow上實(shí)現(xiàn)skip-gram 模型。