[翻譯6.2下] Word Vector Embeddings

本篇是 Word Vector Embeddings的實(shí)現(xiàn)部分。

該章節(jié)位于Tensroflow For Machine Inteligence這本書的自然語(yǔ)言處理部分。

在第六章的翻譯中把6.2 分為了上下兩部分,上半部分相當(dāng)于前言,先半部分是實(shí)現(xiàn)。


第六章的world Vector Embeddings結(jié)構(gòu)

6.2.1Preparing the Wikipedia Corpus

在準(zhǔn)備去詳細(xì)介紹skip-gram模型之前,需要先準(zhǔn)備數(shù)據(jù)集---在本案中使用英文維基百科數(shù)據(jù)集。默認(rèn)的數(shù)據(jù)集含所有頁(yè)面的完整修訂歷史記錄,當(dāng)前頁(yè)面版本的文本大約有100GB,但已經(jīng)有足夠了。這次的練習(xí)也使用其他的語(yǔ)言可以用,您可以在Wikimedia下載網(wǎng)站上查看可用轉(zhuǎn)儲(chǔ)的概述:https://dumps.wikimedia.org/backup-index.html.




為了可以將獲取的數(shù)據(jù)中轉(zhuǎn)化成正確的格式,這里需要有兩部操作。正如你之前在本書中看到的,數(shù)據(jù)收集和數(shù)據(jù)的清洗都是必須且重要的任務(wù)。最終,我們要遍歷維基百科頁(yè)面,將他們表示為one-hot編碼詞。采用一下步驟:

1.???????? 下載數(shù)據(jù)集,提取頁(yè)面和單詞。

2.????????? 統(tǒng)計(jì)單詞形成最常用單詞的vocabulary

3.????????? 使用vocabulary對(duì)提取的頁(yè)面編碼。


在主存上對(duì)整個(gè)文集(維基數(shù)據(jù)集)修改做起來(lái)不太容易,所以我們必須使用數(shù)據(jù)流(data stream)一行一行的讀取文件,并把中間(intermediate)結(jié)果寫入到磁盤上。如果這樣照做,我們?cè)谶@些步驟之間就有檢查點(diǎn),如果有什么出現(xiàn)崩潰的話,不必從頭開始。我們使用以下類來(lái)處理維基百科。在Init()上對(duì)文件是否存在進(jìn)行檢查。



實(shí)現(xiàn)init()

注意,我們還不得不去實(shí)現(xiàn)Wclass的兩個(gè)重要函數(shù)。第一個(gè)是_read_pages() 會(huì)下載Wikipedia數(shù)據(jù)庫(kù),并從該數(shù)據(jù)庫(kù)中解壓出XML文件,然后迭代頁(yè)面并提取純文本以擺脫任何格式。為了讀取壓縮文件,我們需要bz2模塊提供的open()方法,它的工作方式與其標(biāo)準(zhǔn)的等效工具類似,但是即使在流式傳輸文件時(shí)也需要處理壓縮和解壓縮。我們節(jié)約存儲(chǔ)空間,我們會(huì)對(duì)中間結(jié)果壓縮。用于提取單詞的正則表達(dá)式僅捕獲連續(xù)字母的序列和個(gè)別出現(xiàn)的某些特殊字符。


我們需要一個(gè)用于one-hot 編碼的vocabulary. 然后我們可以用詞匯表中的intex來(lái)對(duì)每個(gè)單詞進(jìn)行編碼。為了移除拼寫錯(cuò)誤的和未知的單詞,vocabulary中只包含vocabulary-1個(gè)最常用的單詞以及一個(gè) 符號(hào)用于替代vocabulary中不存在的單詞。這個(gè)符號(hào)也會(huì)在word-vector中給出,以后我們可以用它來(lái)代表未曾見過(guò)的單詞。

由于我們提取到的是純文本,并為單詞定義了編碼,我們可以現(xiàn)場(chǎng)形成以訓(xùn)練實(shí)例。(one the fly應(yīng)該是俚語(yǔ),大意是隨后,現(xiàn)場(chǎng))這樣的做法很棒,因?yàn)榇鎯?chǔ)示例需要大量的存儲(chǔ)空間。由于大部分時(shí)間都會(huì)花在訓(xùn)練上,所以這對(duì)性能影響不大。我們也希望將所得到的樣本分批分組,以便更有效地進(jìn)行訓(xùn)練。由于分類器并不需要太多的內(nèi)存,我們可以使用很大的批次。


那么我們?nèi)绾涡纬捎?xùn)練實(shí)例呢?請(qǐng)記住,skip-gram模型預(yù)測(cè)的是當(dāng)前單詞的上下文單詞。在遍歷文本的時(shí)候,將當(dāng)前單詞作為數(shù)據(jù)將它周圍的單詞作為target,用這種方式創(chuàng)建訓(xùn)練樣本。假設(shè)上下文距離是R=5, 我們可以對(duì)每個(gè)單詞產(chǎn)生10個(gè)訓(xùn)練樣本,左右五個(gè)單詞作為目標(biāo)。然而,有人可能會(huì)認(rèn)為近鄰比遠(yuǎn)鄰更重要的語(yǔ)義語(yǔ)境。因此,我們通過(guò)隨機(jī)選擇一個(gè)上下文大小來(lái)創(chuàng)建較少的帶有遠(yuǎn)端語(yǔ)境的訓(xùn)練樣例,對(duì)于每個(gè)單詞來(lái)說(shuō),上下文的大小在[1,D=10]中隨機(jī)產(chǎn)生。



3

6.2.2 Model structure

現(xiàn)在,Wikipedia 數(shù)據(jù)集已經(jīng)準(zhǔn)備好了,開始定義模型來(lái)計(jì)算word embeddings.


word embeddings.類

每個(gè)單詞開始由一個(gè)隨機(jī)向量表示。從單詞的中間表示中,分類器將嘗試預(yù)測(cè)其上下文單詞之一的當(dāng)前表示。然后,我們將傳播錯(cuò)誤來(lái)調(diào)整輸入詞的權(quán)重和表示。因此,使用tf.Variabale表達(dá)表示。如下圖


使用tf.Variabale表達(dá)表示

使用MomentumOptimizer并不是太好,但這種優(yōu)化器的優(yōu)勢(shì)是可以很快的收斂。這使得它在龐大的維基百科語(yǔ)料庫(kù)上表現(xiàn)的很好,Skip-gram背后的思想是可以在更聰明的算法上使用更多的數(shù)據(jù)。


使用MomentumOptimizer

我們模型中現(xiàn)在唯一缺少的就是分類器了。這是skip-gram模型成功的關(guān)鍵,下面我們會(huì)介紹這個(gè)分類器如何工作。


6.2.3 Noise Contrastive Classifier

對(duì)于skip-gram模型來(lái)說(shuō),可以使用很多種代價(jià)函數(shù)(cost function), 但是noise-constrastive estimation loss代價(jià)函數(shù)被認(rèn)為是效果最好的。理想情況下(ideallly),我們不僅要讓預(yù)測(cè)接近目標(biāo),而且還要遠(yuǎn)離當(dāng)前單詞不是目標(biāo)的單詞。雖然都可以很好地模擬為softmax分類器,但我們不希望每次都計(jì)算和訓(xùn)練字母表中所有單詞的輸出。總是使用一些新的隨機(jī)向量作為負(fù)面的例子的方法,也被稱為對(duì)比的樣本。雖然需要幾十個(gè)類,平均到softmax分類器需要經(jīng)過(guò)足夠的訓(xùn)練迭代。為此,Tensorflow 提供了一個(gè)較為方便的函數(shù)tf.nn.nce_loss函數(shù)。


Noise Contrastive Classifier 實(shí)現(xiàn)

? 6.2.4 Training the model

如今已經(jīng)準(zhǔn)備好數(shù)據(jù)庫(kù),也定義好了模型。還剩一些代碼需要把所有的東西連在一起。訓(xùn)練過(guò)后,我們將最后的embeddings存儲(chǔ)到另一個(gè)文件中。下面的示例是在普通CPU下,使用Wikipedia的子集訓(xùn)練需要5個(gè)小時(shí)左右。如果要使用全集,只需要將URL切換成https://dumps.wikimedia.org/enwiki/20160501/enwiki-20160501-pages-meta-current.xml.bz2即可。

正如你所看到的,我們會(huì)使用一個(gè)AttrDict類。它相當(dāng)于一個(gè)python的dict, 只不過(guò)我們?cè)谠L問(wèn)關(guān)鍵字(key)的時(shí)候,可以得到其屬性(attributes)。更多細(xì)節(jié),請(qǐng)參閱代碼結(jié)構(gòu)和實(shí)用程序一章(the chapter Code Structure and Utilities )。


trainging model

經(jīng)過(guò)大約5個(gè)小時(shí)的訓(xùn)練以后,我們將把學(xué)習(xí)的embeddings作為一個(gè)Numpy數(shù)組存儲(chǔ)。當(dāng)我們?cè)谝院蟮恼鹿?jié)中想要使用這個(gè)embeddings的時(shí)候就沒(méi)有必要在計(jì)算了。直接拿來(lái)使用就行。在網(wǎng)上有預(yù)先訓(xùn)練的詞語(yǔ)嵌入(pre-trained word embeddings),我們稍后會(huì)在需要時(shí)給出這些embeddings。


2018年1月2日。


下周:

第三節(jié)? 6.3 Sequence Classification

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,382評(píng)論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,616評(píng)論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,112評(píng)論 1 323
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,355評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,869評(píng)論 1 334
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,727評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,928評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,165評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評(píng)論 1 282
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,585評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,892評(píng)論 2 372

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,781評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,615評(píng)論 25 708
  • 這個(gè)系列的第六個(gè)主題,主要談一些搜索引擎相關(guān)的常見技術(shù)。 1995年是搜索引擎商業(yè)公司發(fā)展的重要起點(diǎn),《淺談推薦系...
    我偏笑_NSNirvana閱讀 6,681評(píng)論 3 24
  • 個(gè)人知識(shí)管理是幫助個(gè)人整合自己的信息資源,提升學(xué)習(xí)與工作效率,提高個(gè)人競(jìng)爭(zhēng)力的一種管理方法。作為一名當(dāng)代大學(xué)生...
    既然青春留不住_520閱讀 454評(píng)論 0 0
  • 當(dāng)時(shí)天都要塌下來(lái)的feel,如今好像也沒(méi)什么大不了,其實(shí)過(guò)了那個(gè)橋,又怎會(huì)害怕那鴻溝。在此十分感謝你,也許沒(méi)有你,...
    公子月辰閱讀 210評(píng)論 0 0