人工智能算法分析 課件 【ch09】文本挖掘_第1頁
人工智能算法分析 課件 【ch09】文本挖掘_第2頁
人工智能算法分析 課件 【ch09】文本挖掘_第3頁
人工智能算法分析 課件 【ch09】文本挖掘_第4頁
人工智能算法分析 課件 【ch09】文本挖掘_第5頁
已閱讀5頁,還剩82頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

人工智能算法分析新知識體系人工智能教材文本挖掘第九章9.1.1文本挖掘概念根據(jù)IBM的數(shù)據(jù),2017年,每天都會生成2.5艾字節(jié)(1字節(jié)=1073741824千兆字節(jié))的數(shù)據(jù),而且該量級還在不斷增加。從這個角度來看,如果這些數(shù)據(jù)全都要被處理,我們每個人每天將要處理約300MB的數(shù)據(jù)。因為人們每天都會產(chǎn)生數(shù)量龐大的電子郵件、社交媒體內(nèi)容及語音電話,而在所有這些數(shù)據(jù)中,很大一部分是非結(jié)構(gòu)化的文本和語音。文本挖掘,即自然語言處理,是計算機(jī)科學(xué)領(lǐng)域與人工智能領(lǐng)域的一個重要方向。它研究能實現(xiàn)人與計算機(jī)之間用自然語言進(jìn)行有效通信的各種理論和方法。自然語言是一門融合語言學(xué)、計算機(jī)科學(xué)、數(shù)學(xué)于一體的科學(xué)。因此,這一領(lǐng)域的研究涉及自然語言,即人們?nèi)粘J褂玫恼Z言,所以它與語言學(xué)的研究有著密切的聯(lián)系,但又有很大的區(qū)別。自然語言處理并不是傳統(tǒng)意義上的研究自然語言,而是指使用一些文本或語言處理算法對文本或語言問題進(jìn)行處理。9.1.2文本挖掘現(xiàn)狀文本挖掘自1995年被提出以后,國外就開始進(jìn)行了相關(guān)的研究。國內(nèi)從國外引進(jìn)文本挖掘這一概念,然后開展研究,因此相對較晚。目前,國內(nèi)對于文本挖掘的研究主要包括闡述文本挖掘的相關(guān)技術(shù),如文本分類、文本聚類、自動文摘、中文分詞:介紹文本挖掘與數(shù)據(jù)挖掘、信息檢索、信息抽取之間的聯(lián)系與區(qū)別:描述文本挖掘的應(yīng)用;電子郵件管理、文檔管理、自動問答系統(tǒng)、市場研究、情報收集等,以及目前的文本挖掘工具等。當(dāng)前,文本挖掘的模型或算法包括Word2vec-詞嵌入、即制、LSTM、CNN等經(jīng)典模型或算法,本章將對Word2vec-詞嵌入和遞歸神經(jīng)網(wǎng)絡(luò)(RNN)算法進(jìn)行介紹,這也是目前主主芥挖掘領(lǐng)域應(yīng)用最多的兩種方法。Word2vec-詞嵌入029.2.1背景介紹背景介紹“含義”本身是什么意思?這更像是一個哲學(xué)問題,而不是技術(shù)問題。因此,我們不會試圖找出這個問題的最佳答案,而是接受一個折中的答案,即含義是一個單詞所表達(dá)的想法或某種表示。由于NLP的主要目標(biāo)是在語言任務(wù)中達(dá)到和人類一樣的表現(xiàn),因此為機(jī)器尋找表示單詞的原則性方法是有用的。為了實現(xiàn)這一目標(biāo),我們使用可以分析給定文本語料庫并給出單詞的良好數(shù)字表示(詞嵌入〉的算法,它可以便屬于類似上下文的單詞(如one和two、I和we)與不相關(guān)的單詞(如cat和volcano)相比有更相似的數(shù)字表示。首先我們將討論實現(xiàn)這一目標(biāo)的一些經(jīng)典方法,然后介紹目前采用的更復(fù)雜的方法,后者使用神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)這些特征表示,并具有最好的性能。在本節(jié)中,我們將討論用數(shù)字表示單詞的一些經(jīng)典方法。這些方法主要可以分為兩類:使用外部資源表示單詞的方法和不使用外部資源表示單詞的方法。首先,我們將討論WordNet:一種使用外部資源表示單詞的最流行的方法。019.2.1背景介紹WordNet是處理單詞表示的最流行的經(jīng)典方法和統(tǒng)計NLP方法之一。它依賴外部詞匯知識庫,該知識庫對給定單詞的定義、同義詞、祖先、派生詞等信息進(jìn)行編碼。WordNet允許用戶推斷給定單詞的各種信息,如前一句中討論的單詞的各種信息和兩個單詞之間的相似性。如前面所述,WordlNet是一個詞匯數(shù)據(jù)庫,用于對單詞之間的詞性標(biāo)簽關(guān)系(包括名詞、動詞、形容詞和副詞)進(jìn)行編碼。WordNet由美國普林斯頓大學(xué)心理學(xué)系首創(chuàng),目前由普林斯頓大學(xué)計算機(jī)科學(xué)系負(fù)責(zé)。WordNet考慮單詞之間的同義性來評估單詞之間的關(guān)系。用于英語的WordNet目前擁有超過150000個單詞和超過100000個同義詞組Csynset)。此外,WordNet不僅限于英語,自成立以來,已經(jīng)建立了許多基于不同語言的WordNet。為了學(xué)習(xí)使用WordNet,需要對WordNet中使用的術(shù)語有堅實的基礎(chǔ)。首先,WordNet使用術(shù)語synset來表示一群或一組同義詞。接下來,每個synset都有個definition,用于解釋synset表示的內(nèi)容。synset中包含的同義詞稱為lemma。9.2.1背景介紹在WordNet中,單詞表示是分層建模的,它在給定的synset與另個synset之間進(jìn)行關(guān)聯(lián),形成一個復(fù)雜的圖。有兩種不同類別的關(guān)聯(lián)方式:is-a關(guān)系或is-made-of關(guān)系。首先,我們將討論is-a關(guān)系。對于給定的synset,存在兩類關(guān)系:上位詞和下位詞。synset的上位詞是所考慮的synset的一般(更高一層)含義的同義詞。例如,vehicle是同義詞car的上位詞。接下來,下位詞是比相應(yīng)的同義詞組更具體的同義詞。例如,Toyotacar是同義詞car的下位詞。在讓我們討論一個synset的is-made-of關(guān)系。一個synset的整體詞是可以表示所考慮的這個synset的全部實體的synset。例如,tires的整體詞是cars。部分詞是is-made-of類別的關(guān)系,是整體詞的反義詞,部分詞是組成相應(yīng)synset的一部分,我們可以在圖9.2中看到它們。9.2.1背景介紹雖然WordNet是個令人驚嘆的資源,任何人都可以在NLP任務(wù)中用它學(xué)習(xí)單詞的含義,但使用WordNet有很多不足之處,如下所示。缺少細(xì)微差別是WordNet的個關(guān)鍵問題。WordNet在理論和實際應(yīng)用中都有不可行的原國。從理論的角度來看,對兩個實體之間微妙差異的定義進(jìn)行建模并不恰當(dāng)。實際上,定義細(xì)微差別是主觀的。例如,單詞want和need具有相似的含義,但其中一個(need)更具有主張性,這被認(rèn)為是種細(xì)微差別。一9.2.1背景介紹接下來,WordNet本身就是主觀的,因為WordNet是由一個相對較小的社區(qū)設(shè)計的。根據(jù)你要解決的具體問題判斷WordNet是否合適,或者可以通過更加寬泛的方式來定義單詞,以提高WordNet的性能。維護(hù)WordNet也存在問題,這是需要大量人力的。維護(hù)和添加新的synset、definitionslemma等的代價可能非常昂貴。這會對WordNet的可擴(kuò)展性產(chǎn)生負(fù)面影響,因為人力對更新WordNet至關(guān)重要。為其他語言開發(fā)WordNet成本可能很高。有一些人努力為其他語言構(gòu)建WordNet并將其與英語WordNet鏈接為MultiWordNetCMWN),但尚未完成。接下來,我們將討論幾種不依賴外部資源的單詞表示技術(shù)。(1)獨熱編碼方式。表示單詞的更簡單的方法是使用獨熱編碼表示。這意味著,如果我們有一個V大小的詞匯表,對于第i個詞叭,我們將用一個長度為Y的向量[0,0,0,0,1,0,···,0,0]來表示單詞9.2.1背景介紹其中,第i個元素為1,其他元素為零。舉個例子,考慮一下下面這句話:BobandMaryaregoodfriends,其每個單詞的獨熱編碼表示如下所示。但是,正如你可能己經(jīng)想到的那樣,這種表示有許多缺點。該表示并沒有用任何方式對單詞之間的相似性進(jìn)行編碼,并且完全忽略了單詞的上下文。讓我們考慮單詞向量之間的點積作為相似性度量方法,兩個矢量越相似,這兩個矢量的點積越高。例如,單詞car和cars的單詞表示的相似距離是0,而car和pencil也有相同的值。對于大型詞匯表,此方法變得效果甚微。此外,對于典型的NLP任務(wù),詞匯量很容易超過50000。因此,用50000單詞表示矩陣將形成非常稀疏的50000×50000的矩陣。然而,即使在最先進(jìn)的詞嵌入學(xué)習(xí)算法中,獨熱編碼也起著重要作用。我們使用獨熱編碼方式將單詞表示為數(shù)字向量,并將其送入神經(jīng)網(wǎng)絡(luò),以便神經(jīng)網(wǎng)絡(luò)可以學(xué)習(xí)單詞的更好和更短的數(shù)字特征表示。9.2.1背景介紹然而,即使在最先進(jìn)的詞嵌入學(xué)習(xí)算法中,獨熱編碼也起著重要作用。我們使用獨熱編碼方式將單詞表示為數(shù)字向量,并將其送入神經(jīng)網(wǎng)絡(luò),以便神經(jīng)網(wǎng)絡(luò)可以學(xué)習(xí)單詞的更好和更短的數(shù)字特征表示。(2)TF-IDF方法。TF-IDF是一種基于頻率的方法,它考慮了單詞在語料庫中出現(xiàn)的頻率。這是一種表示給定文檔中特定單詞的重要性的單詞表示。直觀地說,單詞的頻率越高,該單詞在文檔中就越重要。例如,在關(guān)于貓的文檔中,單詞cats會出現(xiàn)更多次。然而,僅僅計算頻率是行不通的,因為像this和is這樣的詞有很多,但是它們并沒有攜帶很多信息。TF-IDF將此考慮在內(nèi),并把這些常用單詞的值置為零。同樣,TF代表詞頻率,IDF代表逆文檔頻率。TF(

)=單詞中

出現(xiàn)的次數(shù)IDF(

)=log(文檔總數(shù)/包含

的文檔數(shù)量)9.2.1背景介紹(3)共現(xiàn)矩陣。與獨熱編碼表示方法不同,共現(xiàn)矩陣對單詞的上下文信息進(jìn)行編碼,但是需要維持V×V矩陣。為了理解共現(xiàn)矩陣,請看以下兩個例句:? JerryandMaryare企1ends.? JerrybuysflowersforMary.共現(xiàn)矩陣看起來像下面的矩陣,我們只顯示矩陣的上三角,因為矩陣是對稱的,如表9.19.2.1背景介紹不難看出,因為矩陣的大小隨著詞匯量的大小而呈多項式增長,維持這樣的共現(xiàn)矩陣是一有代價的。此外,上下文窗口擴(kuò)展到大小大于1并不簡單。種選擇是引入加權(quán)計數(shù),其中,上下文中的單詞的權(quán)重隨著與中心單詞的距離增大而減小。所有這些缺點促使我們研究更有原則、更健壯和更可擴(kuò)展的推斷單詞含義的學(xué)習(xí)方法。Word2vec一詞嵌入是分布式單詞表示學(xué)習(xí)技術(shù),目前被用作許多NLP任務(wù)的特征工程技術(shù)(如機(jī)器翻譯、聊天機(jī)器人和圖像標(biāo)題生成)。從本質(zhì)上講,Word2vec詞嵌入通過查看所使用的單詞的周圍單詞(上下文)來學(xué)習(xí)單詞表示。更具體地說,我們試圖通過神經(jīng)網(wǎng)絡(luò)根據(jù)給定的一些單詞來預(yù)測上下文單詞(反之亦然),這使得神經(jīng)網(wǎng)絡(luò)被迫學(xué)習(xí)良好的詞嵌入方法。我們將在下節(jié)中詳細(xì)討論這種方法。Word2vec一詞嵌入方法與之前描述的方法相比具有以下優(yōu)點。9.2.1背景介紹1.Word2vec-詞嵌入方法并不像基于WordNet的方法那樣對于人類語言知識具有主觀性。2.與獨熱編碼表示和共現(xiàn)矩陣不同,Word2vec一詞嵌入所表示的向量的大小與詞匯量大小無關(guān)。3.Word2vec一詞嵌入是一種分布式表示方法。與表示向量取決于單個元素的激活狀態(tài)的(如獨熱編碼)局部表示方法不同,分布式表示方法取決于向量中所有元素的激活狀態(tài)。這為Word2vec一詞嵌入提供了比獨熱編碼表示更強的表達(dá)能力。在下一節(jié)中,我們將首先通過一個示例來建立對學(xué)習(xí)詞嵌入的直觀感受。然后我們將定義一個損失函數(shù),以便使用機(jī)器學(xué)習(xí)方法來學(xué)習(xí)詞嵌入。此外,我們將討論兩種Word2vec一詞嵌入方法,即skip-gram和連續(xù)詞袋(CBOW)算法。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示W(wǎng)ord2vec一詞嵌入利用給定單詞的上下文來學(xué)習(xí)它的語義。Word2vec一詞嵌入是一種開創(chuàng)性的方法,可以在沒有任何人為干預(yù)的情況下學(xué)習(xí)單詞的含義。此外,Word2vec一詞嵌入通過查看給定單詞周圍的單詞來學(xué)習(xí)單詞的數(shù)字表示。我們可以想象一個真實世界中存在的場景來測試上述說法的正確性。例如,你正在參加考試,你在第一個問題中找到了這句話:“Maryisaverystubbornchild.Herpervicaciousaturealwaysgetsherintrouble.”除非你非常聰明,否則你可能不知道pervicacious是什么意思。在這種情況下,你會自動查看感興趣的單詞周圍的短語。在此例子中,pervicacious的周圍是stubbom、nature和trouble,這3個詞就足以說明,pervicacious事實上是指頑固狀態(tài)。我認(rèn)為這足以證明語境對于認(rèn)識一個詞的含義的重要性?,F(xiàn)在,讓我們討論Word2vec一詞嵌入的基礎(chǔ)知識。如前面所述,Word2vec一詞嵌入通過查看單詞上下文并以數(shù)字方式表示它,來學(xué)習(xí)給定單詞的含義。所謂“上下文”,指的是在感興趣的單詞的前面和后面的固定數(shù)量的單詞。假設(shè)我們有一個包含N個單詞的語料庫,在數(shù)學(xué)上,這可以由以w0,w1…wi和wn表示的一系列單詞表示,其中,w是語料庫中的第i個單詞。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示接下來,如果我們想找到一個能夠?qū)W習(xí)單詞含義的好算法,那么在給定一個單詞之后,我們的算法應(yīng)該能夠正確預(yù)測上下文單詞。這意味著對于任何給定的單詞wi,以下概率應(yīng)該較高為了得到等式右邊,我們需要假設(shè)給定目標(biāo)單詞(wi)的上下文單詞彼此獨立(如wi-?和wi-1,是獨立的)。雖然不完全正確,但這種近似使得學(xué)習(xí)更切合實際,并且在實際中的效果良好。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示1.損失函數(shù)即使是簡單的現(xiàn)實世界中的任務(wù),其詞匯量也很容易超過10000個單詞。因此,我們不能手動為大型文本語料庫開發(fā)詞向量,而需要設(shè)計一種方法來使用一些機(jī)器學(xué)習(xí)算法(如神經(jīng)網(wǎng)絡(luò)),自動找到好的詞嵌入方法,以便有效地執(zhí)行這項繁重的任務(wù)。此外,要在任何類型的任務(wù)中使用任何類型的機(jī)器學(xué)習(xí)算法,需要定義損失,這樣,完成任務(wù)就轉(zhuǎn)化為讓損失最小化。接下來我們就開始介紹損失函數(shù)。首先,讓我們回想以下在本節(jié)中開頭討論過的等式有了這個等式之后,我們?yōu)樯窠?jīng)網(wǎng)絡(luò)定義成本函數(shù)9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示記住,J(θ)是損失(成本),而不是獎勵,另外,我們想要使P(w)lw)最大化。因此,式最小我們需要在表達(dá)式前面加一個減號將其轉(zhuǎn)換為損失函數(shù)?,F(xiàn)在,讓我們將其轉(zhuǎn)換對數(shù)空間,而不是使用點積運算符。將等式轉(zhuǎn)換為對數(shù)空間會增加一致性和數(shù)值穩(wěn)定性.這種形式的成本函數(shù)稱為“負(fù)對數(shù)似然”。現(xiàn)在,因為有一個精心設(shè)計的成本函數(shù),我們可以用神經(jīng)網(wǎng)絡(luò)來優(yōu)化這個成本函數(shù)。這樣做會迫使詞向量或詞嵌入根據(jù)單詞含義很好地被組織起來。下面介紹如何使用上述成本函數(shù)來提出更好的詞嵌入算法。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示2.skip-gram算法我們將討論的第一個算法稱為skip-gram算法,它由Mikolov等人在2013年提出,該算法是一種利用文本單詞上下文來學(xué)習(xí)好的詞嵌入方法的算法。讓我們一步一步地了解skip-gram算法。首先,我們將討論數(shù)據(jù)準(zhǔn)備過程,然后介紹理解算法所需要的表示法,最后我們將討論需要在算法本身。正如我們前面所討論的那樣,單詞的含義可以從圍繞該單詞的上下文單詞中得到。但是,建立一個利用這種性質(zhì)來學(xué)習(xí)單詞含義的模型并不是很容易。首先,我們需要設(shè)計一種方法來提取可以送入學(xué)習(xí)模型的數(shù)據(jù)集,這樣的數(shù)據(jù)集應(yīng)該是格式為(輸入,輸出)的一類元組。而且,這需要以無監(jiān)督學(xué)習(xí)的方式創(chuàng)建。也就是說,人們不應(yīng)形式的應(yīng)該手動設(shè)置數(shù)據(jù)標(biāo)簽??傊?,數(shù)據(jù)準(zhǔn)備過程應(yīng)該執(zhí)行以下操作。。獲取給定的那個單詞周圍的單詞。。以無監(jiān)督學(xué)習(xí)的方式執(zhí)行。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示skip-gram模型使用以下方法來構(gòu)建這樣的數(shù)據(jù)集。(1)對于給定的單詞w,假設(shè)上下文窗口大小為mo上下文窗口大小指的是單側(cè)被視為上下文的單詞數(shù)。因此,對于wi,上下文窗口(包括目標(biāo)詞Wi)大小為2m+1,如下所示:[wi-m,...,Wi-1,wi,Wi+1,...,Wi+m]。(2)接下來,輸入輸出元組的格式為[...,(wi,wi-m),?..,(wi,wi-1,(wi,wi+1,),...,(wi,wi+m).,.]這里,m+1<=i<=N-m。N是文本中用于獲得實際含義的單詞數(shù)。讓我們假設(shè)以下句子的上下文窗口大小m為1:Thedogbarkedatthemailman.對于此示例,數(shù)據(jù)集如下所示:(dog,The),(dog,barked),(barked,dog),(barked,at),...,(the,at),(the,mailman)9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示下面介紹如何使用神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)詞嵌入。一旦數(shù)據(jù)是(輸入,輸出)格式,我們就可以使用神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)詞嵌入。首先,讓我們確定學(xué)習(xí)詞嵌入所需要的變量。為了存儲詞嵌入,我們需要一個Y×D矩陣,其中,Y是詞匯量大小,D是詞嵌入的維度(在向量中表示單個單詞的元素數(shù)量)。D是用戶定義的超參數(shù),D越大,學(xué)習(xí)到的詞嵌入的表達(dá)力越強。該矩陣被稱為嵌入空間或嵌入層。接下來,有一個softmax層,其權(quán)重大小為DxV,偏置大小為V。每個詞將被表示為大小為V的獨熱編碼向量,其中,一個元素為1,所有其他元素為0。因此,輸入單詞和相應(yīng)的輸出單詞各自的大小為V。讓我們把第i個輸入記為xi,xi的對應(yīng)嵌入為zi,對應(yīng)輸出為yi。此時,我們定義了所需要的變量。接下來,對于每個輸入xi,我們將從對應(yīng)于輸入的嵌入層中查找嵌入向量。該操作向我們提供zi,它是大小為D的向量(長度為D的嵌入向量)。然后,我們做以下轉(zhuǎn)換以計算xi的預(yù)測輸出:9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示其中,logit(x)表示非標(biāo)準(zhǔn)化分?jǐn)?shù)Clogit),真是大小為Y的預(yù)測輸出(表示輸出是大小為V的詞匯表的單詞的概率),w是D×V權(quán)重矩陣,b是V×1偏置矢量,softmax就是softmax激活函數(shù)。我們將可視化skip-gram模型的概念圖(見圖9.3)和實現(xiàn)圖(見圖9.4)。以下是對符號的總結(jié)。?V:詞匯量的大小。?D:嵌入層的維度。?Xi:第i個輸入單詞,表示為獨熱編碼向量?!i:與xi對應(yīng)的嵌入(表示)向量?!i:與xi對應(yīng)的輸出單詞的獨熱編碼向量?!?xi的預(yù)測輸出。。logit(x):輸入xi的非標(biāo)準(zhǔn)化得分。·:單詞wj的獨熱編碼表示。。W:softmax權(quán)重矩陣。b:softmax的偏置。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示通過使用現(xiàn)有單詞和計算得到的實體,可以使用負(fù)對數(shù)似然損失函數(shù)來計算給定數(shù)據(jù)點(xi,yi)的損失。如果想知道是什么,它可以從已定義的實體派生出來。接下來,讓我們討論如何從計算并得到一個正式的定義。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示(1)制定實際的損失函數(shù)。讓我們更仔細(xì)地查看損失函數(shù),得出的損失如下所示:但是,根據(jù)目前掌握的信息,計算這一特定損失并不是很容易。首先,讓我們理解P(wj|wi)代表什么。為此,我們將從單個單詞表示法轉(zhuǎn)為單個數(shù)據(jù)點表示法。也就是說,我們會說P(wj|wi)由第n個數(shù)據(jù)點給出,其中,wi的獨熱編碼向量作為輸入(xn),wj的獨熱編碼表示作為真實輸出(yn)。這由以下等式給出:9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示其中,logit(xn)項表示給定輸入xn,獲得的非標(biāo)準(zhǔn)化預(yù)測得分(logit)向量(大小為V),而logit(xn)wj的獨熱編碼表示中非零的索引所對應(yīng)的得分值(從現(xiàn)在開始,我們稱之為wj的索引)。以所有單詞所對應(yīng)的logit值作為基準(zhǔn),對wj索引處的logit值進(jìn)行標(biāo)準(zhǔn)化。這種特定類型的歸一化稱為softmax激活(或歸一化)。現(xiàn)在,通過將其轉(zhuǎn)換為對數(shù)空間,可以得到以下等式:為了有效地計算logit函數(shù),可以調(diào)整變量,從而得出以下表示法:其中,

是wj,的獨熱編碼向量。現(xiàn)在,logit操作縮減為對乘積求和。由于對應(yīng)單詞wj,

僅有一個非零元素,因此在計算中將僅使用向量的該索引。這比通過掃描詞匯量大小的向量找到對應(yīng)非零元素的索引的logit向量中的值的計算效率更高。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示現(xiàn)在,通過將獲得的計算結(jié)果賦給logit,對于損失函數(shù),可以得到以下結(jié)果:接下來,讓我們考慮輸入輸出元組(like,I)。當(dāng)我們通過skip-gram學(xué)習(xí)模型輸入like時-,假設(shè)按照該順序獲得了Like、I和NLP這些單詞的以下logit值:2,10,5現(xiàn)在,詞匯表中每個單詞的softmax輸出如下所示:9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示P(likellike)=exp(2)/(exp(2)+exp(10)+exp(5))=0.118P(Illike)=exp(10)/(exp(2)+exp(10)+exp(5))=0.588P(NLPIlike)=exp(5)/(exp(2)+exp(10)+exp(5))=0.294有了這個損失函數(shù),對于減號之前的項,y向量中只有一個非零元素對應(yīng)于單詞,因此,我們只考慮概率P(Illike),這就是我們想要的。但是,這不是理想解決方案。從實際角度來看,該損失函數(shù)的目標(biāo)是使預(yù)測給定單詞的上下文單詞的概率最大化,同時使預(yù)測給出單詞的“所有”非上下文單詞的概率最小化。我們很快就會發(fā)現(xiàn),有一個良好定義的損失函數(shù)并不能在實踐中有效地解決我們的問題,需要設(shè)計一個更聰明的近似損失函數(shù),以在可行的時間內(nèi)學(xué)習(xí)良好的詞嵌入。(2)有效的近似損失函數(shù)我們很幸運有一個在數(shù)學(xué)上和感覺上都很正確的損失函數(shù),但是,困難并沒有就此結(jié)束。如果我們像前面討論的那樣嘗試以封閉形式計算損失的數(shù),將不可避免地面對算法執(zhí)行得非常緩慢的問題,這種緩慢是由于詞匯量大而導(dǎo)致的性能瓶頸。下面來看損失函數(shù)9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示可以看到計算單個示例的損失需要計算詞匯表中所有單詞的logit。與通過數(shù)百個輸出類別就足以解決大多數(shù)現(xiàn)有的真實問題的計算機(jī)視覺問題不同,skip-gram并不具備這些特性。因此,我們需要在不失去模型效果的前提下尋找有效的損失近似方案。下面我們將討論兩種主流的近似選擇:負(fù)采樣。分層softmaxo(1)對softmax層進(jìn)行負(fù)采樣。在這里,我們將討論第一種方法:對so伽1ax層進(jìn)行負(fù)采樣。負(fù)采樣是對噪聲對比估計(NCE)方法的近似。NCE要求,一個好的模型應(yīng)該通過邏輯回歸來區(qū)分?jǐn)?shù)據(jù)和噪聲。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示考慮到這個屬性,讓我們重新設(shè)計學(xué)習(xí)詞嵌入的目標(biāo)。我們不需要完全概率模型,該模型給出的是詞匯表中給定單詞的確定概率。我們需要的是高質(zhì)量的詞向量。因此,我們可以簡化問題,將其變?yōu)閰^(qū)分實際數(shù)據(jù)(輸入輸出對)與噪聲(K個虛擬噪聲輸入輸出對)。噪聲指的是使用不屬于給定單詞的上下文的單詞所創(chuàng)建的錯誤輸入輸出對。我們還將擺脫softmax激活,并將其替換為signoid激活(也稱為邏輯函數(shù))。這使得我們能夠在使輸出保持在[0,1]之間的同時,消除損失函數(shù)對完整詞匯表的依賴。我們可以可視化如圖9.5所示的負(fù)采樣過程。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示我們花一點時間來理解這個等式所說的內(nèi)容。為簡化起見,我們假設(shè)k=1,這樣可以得到以下等式其中,wj表示wi的上下文單詞,wq表示其非上下文單詞。這個等式表示,為了使J(0)最小化,我們應(yīng)該使σ(logit(xn)wj)=1,這意味著logit(xn)wq)=1應(yīng)該是一個大的正值。然后,o(logit(xn)wq)=1意味著logit(xn)wq需要是一個大的負(fù)值。換句話說,表示真實目標(biāo)單詞和上下文單詞的真實數(shù)據(jù)點應(yīng)該獲得大的正值,而表示目標(biāo)單詞和噪聲的偽數(shù)據(jù)點應(yīng)該獲得大的負(fù)值。這與使用softmax函數(shù)獲得的效果相同,但具有更高的計算效率。這里,σ表示sigmoid激活函數(shù)。直觀地看,在計算損失的時候,我們應(yīng)進(jìn)行以下兩步。計算w的非零列的損失(推向正值)。。計算k個噪聲樣本的損失(拉向負(fù)值)。(2)分層sofimax。分層softmax比負(fù)采樣略復(fù)雜,但與負(fù)采樣的目標(biāo)相同,也就是說,其與softmax類似,而不必計算所有訓(xùn)練樣本的詞匯表中所有單詞的激活狀態(tài)。但是,與負(fù)采樣不同,分層softmax僅使用實際數(shù)據(jù),并且不需要噪聲采樣。圖9.6所示為可視化的分層softmax模型。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示要了解分層softmax,讓我們考慮一個例子:IlikeNLP.Deeplearn工ngisamazing.其詞匯表如下:工,like,NLP,deep,learning,is,amazing:使用上述詞匯表構(gòu)建一個二叉樹,其中,詞匯表中的所有單詞都以葉子節(jié)點的形式出現(xiàn)。添加一個特殊的標(biāo)記PAD,以確保所有葉子節(jié)點都有兩個成員。最后一個隱藏層將完全連接到分層結(jié)構(gòu)中的所有節(jié)點。注意,與經(jīng)典的softmax模型相比,該模型具有相似的總權(quán)重,但是,對于給定的計算,它僅使用其中一部分。分層softmax是如何連接到嵌入層的如圖9.7所示。假設(shè)需要推斷P(NLPllike)的概率,其中,like是輸入詞,那么我們只需要權(quán)重的子集即可計算概率,如圖9.8所示。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示計算概率的過程如下:現(xiàn)在我們己經(jīng)知道如何計算P{飛[w;},可以使用原始的損失函數(shù)。注意,該方法僅使用連接到路徑中的節(jié)點的權(quán)重進(jìn)行計算,從而提高了計算效率。(3)學(xué)習(xí)分層結(jié)構(gòu)。雖然分層sofunax是有效的,但一個重要的問題仍然沒有答案。如何確定樹的分支?更準(zhǔn)確地說,哪個詞會跟隨哪個分支?有下面幾種方法可以解決上述問題。隨機(jī)初始化層次結(jié)構(gòu):此方法確實存在一些性能下降,因為隨機(jī)分配無法保證特定單詞在最佳分支上。使用WordNet確定層次結(jié)構(gòu):WordNet可用于確定樹中單詞的合適順序,該方法明顯比隨機(jī)初始化有更好的性能。(4)優(yōu)化學(xué)習(xí)模型。點由于有了一個精心設(shè)計的損失函數(shù),因此優(yōu)化就是從深度學(xué)習(xí)庫調(diào)用正確函數(shù)。要使用的優(yōu)化過程是隨機(jī)優(yōu)化過程,這意味著我們不會一次輸入完整數(shù)據(jù)集,只需要在許多步中隨機(jī)提供批量數(shù)據(jù)。9.2.3案例分析通過以上內(nèi)容講解,相信讀者對Word2vec-詞嵌入算法已經(jīng)有了一定的了解。下面,將采用Python中的gensim包實現(xiàn)Word2vec-詞嵌入,并介紹相關(guān)函數(shù)功能。我們將本次案例按步驟進(jìn)行介紹。1.獲取文本語料一詞這里采用網(wǎng)上的文本語料,語料大小將近100MB。下載之后,可以查看語料內(nèi)容,方便可用后面對語料數(shù)據(jù)進(jìn)行讀取,具體程序如下:可以發(fā)現(xiàn),語料已經(jīng)按空格分好詞,并且去除了所有的標(biāo)點符號,也沒有換行符,語料輸出圖如圖9.9所示。9.2.3案例分析9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示這一行表示程序會輸出日志信息,形式(format)為日期(asctime):信息級別(levelname):日志信息(message),信息級別為正常信息(loggingINFO)。當(dāng)然,logging.basicConfig函數(shù)里面可以添加各個參數(shù),這里只添加了format參數(shù),也可以根據(jù)需要增加參數(shù),建議只添加自己想知道的東西。logging.basicConfig函數(shù)各參數(shù)的含義如下。filename:指定日志文件名。filemode和file函數(shù)的意義相同,指定日志文件的打開模式,'w’或'a‘。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示format:指定輸出的格式和內(nèi)容,format可以輸出很多有用信息。%(levelno)s:打印日志級別的數(shù)值。%(levelname)s:打印日志級別的名稱。%(pathname)s:打印當(dāng)前執(zhí)行程序的路徑,其實就是sys.argv[O]。%(filename)s:打印當(dāng)前執(zhí)行程序名。%(funcName)s:打印日志的當(dāng)前函數(shù)。%(lineno)d:打印日志的當(dāng)前行號。%(asctime)s:打印日志的時間。%(thread)d:打印線程ID。%(也readName)s:打印線程名稱。%(process)d:打印進(jìn)程ID.%(message)s:打印日志信息。datefmt:指定時間格式,同time礎(chǔ)武ime()。level:設(shè)置日志級別,默認(rèn)為logging.W成NINGo9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示stream:指定將日志的輸出流輸出到sys.stderr,sys.stdout或文件,默認(rèn)輸出到sys.stderr,當(dāng)stream和filename同時指定時,stream被忽略。logging打印信息函數(shù)如下:logging.debug('Thisisdebugmessage’);('Thisisinfomessage’);logging.warning('Thisiswarningmessage’)。運行上述程序,可以得到如圖9.10所示的日志輸出結(jié)果圖。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示(2)將語料保存在sentence中。輸入:Sentences=word2vec.TextsCorpus(`texts')這里采用的'text8’語料已經(jīng)按空格分好詞,并且去除了所有的標(biāo)點符號,也沒有換行符,所以不需要任何預(yù)處理。對于大規(guī)模數(shù)據(jù)集,sentences可以采用word2vec.BrownCorpus()、word2vec.Text8Corpus(或word2vec.LineSentence0來讀取;對于小規(guī)模數(shù)據(jù)集,sentences可以是一個List的形式,如sentences=[["I","love","China","very","much"]或["China","is","a","strong","country"]]。(3)生成詞向量空間模型。model=word2vec.Word2Vec(sentences,sg=1,size=100,window=5,min_count=5,negative=3,sample=0.001,hs=1,workers=4)此行通過設(shè)置各個參數(shù)來配置Word2vec-詞嵌入模型,具體參數(shù)的含義如下。sentences:可以是一個List,對于大語料集,建議使用BrownCorpus、Text8Corpus或lineSentence構(gòu)建。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示sg:用于設(shè)置訓(xùn)練算法,默認(rèn)為0,對應(yīng)CBOW算法;若sg=1,則采用skip-gram算法。size:輸出的詞的向量維數(shù),默認(rèn)為100。若size大,則需要更多的訓(xùn)練數(shù)據(jù),但是效果會更好,推薦size值為幾十到幾百。window:訓(xùn)練的窗口大小,8表示每個詞考慮前8個詞與后8個詞(實際代碼中還有一個隨機(jī)選窗口的過程,窗口大小≤5),默認(rèn)值為5。alpha:學(xué)習(xí)速率。seed:用于隨機(jī)數(shù)發(fā)生器,與初始化詞向量有關(guān)。min_count:可以對字典做截斷,詞頻少于min_count次數(shù)的單詞會被丟棄掉,默認(rèn)min_count值為5。max_vocab_size:設(shè)置詞向量構(gòu)建期間的RAM限制。如果所有獨立單詞個數(shù)超過此限制,就消除其中出現(xiàn)得最不頻繁的一個。每一千萬個單詞大約需要1GB的RAM。若設(shè)置成None,則沒有限制。sample:采樣閾值,一個詞在訓(xùn)練樣本中出現(xiàn)的頻率越大,就越容易被采樣。默認(rèn)為e-3,范圍是(0,e~)workers:參數(shù)控制訓(xùn)練的并行數(shù)。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示hs:是否使用hs方法,0表示不使用,1表示使用,默認(rèn)為0。negative:若>0,則會采用negativesampling,用于設(shè)置有多少個noisewords。cbow_mean:若為0,則采用上下文詞向量的和,若為I(default),則采用均值。cbow_mean只有在使用CBOW的時候才起作用。hashfxn:hash函數(shù)用來初始化權(quán)重。默認(rèn)使用Python的hash函數(shù)。iter:迭代次數(shù),默認(rèn)為5。trim_rule:用于設(shè)置詞匯表的整理規(guī)則,指定哪些單詞要留下,哪些單詞要被刪除??梢栽O(shè)置為None(mincount會被使用)或者一個接受O并返回RULEDISCARDutils.RULE_KEEP或utils.RULE_DEFAULT的函數(shù)。sorted_vocab:若為1(default),則在分配wordindex的時候會先對單詞基于頻率降序排序。batch_words:每一批傳遞給線程的單詞數(shù)量,默認(rèn)為10000。9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示(4)保存模型。輸入:model.save(text8word2vec.model')將模型保存起來,以后再使用的時候就不用重新訓(xùn)練了,直接加載訓(xùn)練好的模型就可以直接使用了。下面介紹加載模型后,直接使用Word2vec-詞嵌入來實現(xiàn)各種功能。3.保存模型,實現(xiàn)功能9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示9.2.2Word2vec-詞嵌入——基于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)單詞表示遞歸神經(jīng)網(wǎng)絡(luò)039.3.1遞歸神經(jīng)網(wǎng)絡(luò)介紹遞歸神經(jīng)網(wǎng)絡(luò)(RNN)是一個特殊的神經(jīng)網(wǎng)絡(luò)系列,旨在處理序列數(shù)據(jù)(時間序列數(shù)據(jù)),如一系列文本(如可變長度句子或文檔)或股票市場價格。RNN維護(hù)一個狀態(tài)變量,用于捕獲序列數(shù)據(jù)中存在的各種模式,因此,它們能夠?qū)π蛄袛?shù)據(jù)建模。傳統(tǒng)的全連接神經(jīng)網(wǎng)絡(luò)不具備這種能力,除非用捕獲到的序列中重要模式的特征表示來表示數(shù)據(jù)。然而,提取這樣的特征表示是非常困難的。對序列數(shù)據(jù)建模的全連接模型的另一替代方案是時間/序列中的每個位置有單獨的參數(shù)集,這樣,分配給某個位置的參數(shù)集就可以學(xué)習(xí)在該位置發(fā)生的模式。但是,這將大幅增加模型對內(nèi)存的需求。然而,與全連接網(wǎng)絡(luò)在每個位置都要有單獨的參數(shù)集相反,RNN隨時間共享相同的參數(shù)集。在時間跨度上進(jìn)行參數(shù)共享是RNN的重要特點,實際上這是RNN能學(xué)習(xí)序列每一時刻模式的主要原因之一。對于我們在序列中觀察到的每個輸入,狀態(tài)變量將隨時間更新。在給定先前觀察到的序列值的情況下,這些隨時間共享的參數(shù)通過與狀態(tài)向量組合,能夠預(yù)測序列的下一個值。此外,由于我們一次只處理序列的一個元素(如一次處理文檔中的一個單詞),因此RNN可以處理任意長度的數(shù)據(jù),而無須使用特殊標(biāo)記填充數(shù)據(jù)。9.3.1遞歸神經(jīng)網(wǎng)絡(luò)介紹下面仔細(xì)探討RNN是什么,并為RNN中的計算定義數(shù)學(xué)等式。讓我們先從xi學(xué)習(xí)yi的近似函數(shù)開始:正如我們所看到的那樣,神經(jīng)網(wǎng)絡(luò)由一組權(quán)重和偏置,以及一些非線性激活函數(shù)組成。因此,我們可以將上面的關(guān)系寫成如下形式:其中,tanh是激活函數(shù),U是大小為mxd的權(quán)重矩陣,m是隱藏神經(jīng)元的數(shù)量,d是輸入的維數(shù)。此外,W是從h,到循環(huán)鏈的權(quán)重矩陣,大小為mxm。y,養(yǎng)系由以下等式給出:9.3.1遞歸神經(jīng)網(wǎng)絡(luò)介紹其中,V是大小為cxm的權(quán)重矩陣,c是輸出的維數(shù)(可以是輸出類別的數(shù)量)。圖9.11說明了這些權(quán)重如何形成RNN。到目前為止,我們已經(jīng)看到如何用包含計算節(jié)點的圖來表示RNN,其中,邊表示相應(yīng)計算。此外,我們探討了RNN背后的數(shù)學(xué)原理。現(xiàn)在讓我們看看如何優(yōu)化(或訓(xùn)練)RNN的權(quán)重,以學(xué)習(xí)序列數(shù)據(jù)。9.3.1遞歸神經(jīng)網(wǎng)絡(luò)介紹1.基于時間的反向傳播訓(xùn)練RNN需要使用一種特殊的反向傳播(BP),稱為基于事件的反向傳播(BPTT)。但是,要了解BPTT,首先需要了解BP的工作原理。然后,我們將討論為什么BP不能直接應(yīng)用于RNN,經(jīng)過調(diào)整的BP如何適應(yīng)RNN,從而產(chǎn)生BPTT。反向傳播是用于訓(xùn)練全連接神經(jīng)網(wǎng)絡(luò)的技術(shù)。在BP中,將執(zhí)行以下操作。計算給定輸入的預(yù)測結(jié)果。比較預(yù)測結(jié)果與輸入的實際標(biāo)簽,以計算預(yù)測誤差E(如均方誤差和交叉熵?fù)p失)。通過在所有wij的梯度

的相反方向上前進(jìn)一小步,更新全連接網(wǎng)絡(luò)的權(quán)重,以最小化上一步中計算的預(yù)測誤差,其中,wij,是第i層的第j個權(quán)重。為了更清楚地理解,請考慮圖9.12中描述的全連接網(wǎng)絡(luò)。它圖9.12全連接網(wǎng)絡(luò)的計算有兩個單一權(quán)重w1和w2,計算得到兩個輸出h和y,如圖9.12所示。為簡單起見,我們假設(shè)模型中沒有非線性激活。9.3.1遞歸神經(jīng)網(wǎng)絡(luò)介紹9.3.1遞歸神經(jīng)網(wǎng)絡(luò)介紹2.為什么RNN不能直接使用反向傳播現(xiàn)在,讓我們嘗試對圖9.13中的RNN進(jìn)行相同的處理?,F(xiàn)在我們多了額外的循環(huán)權(quán)重w3。為了明確我們試圖強調(diào)的問題,這里省略了輸入和輸出中的時間成分。9.3.1遞歸神經(jīng)網(wǎng)絡(luò)介紹

會產(chǎn)生問題,因為這是個遞歸的變量,最終會得到無窮多的導(dǎo)數(shù)項,因為h是遞26歸的(也就是說,計算力包括h本身),而h不是常數(shù)并依賴w。若要解決這一問題,可以將25輸入序列隨時間展開,為每個輸入x創(chuàng)建RNN的副本,分別計算每個副本的導(dǎo)數(shù),并通過計算梯度的總和將它們回滾,以計算需要更新的權(quán)重大小。接下來將討論細(xì)節(jié)。3.訓(xùn)練RNN30計算RNN反向傳播的技巧是不考慮單個輸入,而考慮完整的輸入序列。然后,如果計算w3第4個時間步的會得到如下結(jié)果9.3.1遞歸神經(jīng)網(wǎng)絡(luò)介紹這意味著我們需要計算直到第4個時間點的所有時間步的梯度之和。換句話說,首先展開序列,以便可以對每個時間步j(luò)計算

,這是通過創(chuàng)建4份RNN的副本完成的。因此,為了計算

,我們需要t-j+1個RNN副本。將副本匯總到單個RNN中,求所有先前時間步長的梯度和,得到一個梯度,并用梯度

更新RNN。然而,隨著時間步數(shù)的增加,這會使計算代價變得更大。為了獲得更高的計算效率,我們可以使用BPTT的近似,即截斷的基于時間的反向傳播(TBPTT),來優(yōu)化遞歸模型。4.TBPTT:更有效地訓(xùn)練RNN在TBPTT中,我們僅計算固定數(shù)量的T個時間步長的梯度(與在BPTT中計算到序列的最開始不同)。更具體地說,當(dāng)計算時間步長t的

時,我們只計算導(dǎo)數(shù)到時間步長t-T(也就是說,我們不計算所有的導(dǎo)數(shù))9.3.1遞歸神經(jīng)網(wǎng)絡(luò)介紹這比標(biāo)準(zhǔn)BPTT的計算效率高得多。在標(biāo)準(zhǔn)BPTT中,對于每個時間步長,我們計算直到序列最開始的導(dǎo)數(shù)。但隨著序列長度變得越來越大(如逐字處理文本文檔),這在計算上變遞得不可行。但是,在TBPTT中,我們僅向后計算固定數(shù)量的導(dǎo)數(shù),可以得知,隨著序列變長,計算成本不會改變。5.BPTT的限制,梯度消失和梯度爆炸擁有計算遞歸權(quán)重梯度的方法和高效的近似計算算法(如TBPTT)并沒能讓我們完全沒有問題地訓(xùn)練RNN,計算時可能現(xiàn)問題。明白為什么會這樣,讓我們展開

中的單獨一項,如下所示9.3.1遞歸神經(jīng)網(wǎng)絡(luò)介紹我們看到,當(dāng)只有4個時間步時,我們有一項w33。因此,在第n個時間步,它將變?yōu)閣3n-1。如果初始化w3為非常小的值(如00001),那么在n=1的時間步長,梯度將是無窮小(概率為0.1500)。此外,由于計算機(jī)在表示數(shù)字方面的精度有限,因此將忽略這次更新(算術(shù)下溢),這稱為梯度消失。解決梯度消失問題并不容易7沒有容易的方法重新縮放梯度,來讓它們能夠在時間上正確傳播。能夠在一定程度上解決梯度消失問題的幾種技術(shù)是在初始化權(quán)重的時候要格外仔細(xì)(如Xavier初始化),或使用基于動量的優(yōu)化方法(也就是說,除了當(dāng)前的梯度更新,還添加了一個額外項,它是所有過去梯度的累積,稱為速度項)。然而,對于這個問題,我們已經(jīng)發(fā)現(xiàn)更多原則性的解決方法,如對標(biāo)準(zhǔn)RNN的各種結(jié)構(gòu)性的改造。9.3.1遞歸神經(jīng)網(wǎng)絡(luò)介紹另一方面,假設(shè)我們將w初始化為非常大的值(如100000),那么,在n-100的時間步長,梯度將是巨大的(概率為10300)。這會導(dǎo)致數(shù)值不穩(wěn)定,從而在Python中得到諸如Inf或NaN(不是數(shù)字)之類的值,這稱為梯度爆炸。損失函數(shù)的忽大忽小也可能導(dǎo)致發(fā)生梯度爆炸。由于輸入的維數(shù)及模型中存在的大量參數(shù)(權(quán)重),復(fù)雜的非凸損失面在深度神經(jīng)網(wǎng)絡(luò)中很常見。圖94顯示了RNN的損失面,突出顯示了非常高的曲率形成了墻。如圖9.14中的深色線所示,如果優(yōu)化方法碰到這樣的墻,那么梯度將爆炸或過沖。這可能導(dǎo)致無法將損失降到最低或?qū)е聰?shù)值不穩(wěn)定,或兩者兼有。在這種情況下,避免梯度爆炸的簡單解決方案是在梯度大于某個閾值時,將梯度剪裁為合理小的值。9.3.2遞歸神經(jīng)網(wǎng)絡(luò)分類到目前為止,我們所討論的是一對一的RNN,其中,當(dāng)前輸出取決于當(dāng)前輸入序列及先前觀察到的歷史輸入序列。這意味著存在先前觀察到的輸入序列和當(dāng)前輸入序列產(chǎn)生的輸出序列。然而,在實際中,可能存在這樣的情況:一個輸入序列只有一個輸出序列、一個輸入序列產(chǎn)生一個輸出序列,以及一個輸入序列產(chǎn)生一個與其序列大小不同的輸出序列。在本節(jié)中,我們將介紹一些遞歸神經(jīng)網(wǎng)絡(luò)的類型。1.一對一RNN在一對一RNN中,當(dāng)前輸入取決于先前觀察到的輸入(見圖9.15)。這種RNN適用于每個輸入都有輸出的問題,但其輸出取決于當(dāng)前輸入和導(dǎo)致當(dāng)前輸入的輸入歷史。這種任務(wù)的一個例子是股票市場預(yù)測,其中,我們根據(jù)當(dāng)前輸入的值得到輸出,并且該輸出取決于先前輸入的表現(xiàn)。另一個例子是場景分類,我們對圖像中的每個像素進(jìn)行標(biāo)記(如汽車、道路和人的標(biāo)簽)。對于某些問題,有時i+1與yi相同。例如,在文本生成問題中,先前預(yù)測的單詞變?yōu)轭A(yù)測下一個單詞的輸入。圖9.15所示為一對一RNN的時間依存關(guān)系。9.3.2遞歸神經(jīng)網(wǎng)絡(luò)分類9.3.2遞歸神經(jīng)網(wǎng)絡(luò)分類2.一對多RNN一對多RNN接受一個輸入并輸出一個序列,如圖9.16所示。在這里,我們假設(shè)輸入彼此獨立,也就是說,不需要用先前的輸入的相關(guān)信息來預(yù)測當(dāng)前輸入。但是,需要循環(huán)連接,因為盡管處理單個輸入,但輸出是依賴先前輸出值的一系列值。使用這種時刑的一個任務(wù)是生成圖像標(biāo)題。例如,對于給定的輸入圖像,文本標(biāo)題可以由5個或10個單詞組成。換句話說,即仆J將持續(xù)預(yù)測單詞,直到輸出能描述圖像的有意義的短句。圖9.16所示為一對多RNN。9.3.2遞歸神經(jīng)網(wǎng)絡(luò)分類3.多對一RNN多對一賠。4輸入任意長度的序列,產(chǎn)生一個輸出,如圖以17所示。句子分類就是受益于多對-RNN的任務(wù)。句子是任意長度的單詞序列,它被視為網(wǎng)絡(luò)的輸入,用于產(chǎn)生將句子分類為一組預(yù)定義類別之一的輸出。句子分類的一些具體例子如下。 將電影評論分類為正向或負(fù)向陳述(情感分析)。 根據(jù)句子描述的內(nèi)容(如人物、物體和位置)對句子進(jìn)行分類。多對一RNN劇的另一個應(yīng)用是通過一次只處理圖像的一塊,并在整個圖像上移動這個窗口,來對大尺寸圖像進(jìn)行分類。圖9.17所示為多對一RNN。9.3.2遞歸神經(jīng)網(wǎng)絡(luò)分類4.多對多RNN多對多時刑通常根據(jù)任意長度的輸入產(chǎn)生任意長度的輸出,如圖9.18所示,換句話說,輸入和輸出不必具有相同的長度。這在將句子從一種語言翻譯成另一種語言的機(jī)器翻譯中特別有用,可以想象,某種語言的一個句子并不總是能與另一種語言的句子對齊。另一個這樣的例子是聊天機(jī)器人,其中,聊天機(jī)器人讀取一系列單詞(用戶請求),并輸出一系列單詞(答案)。圖9.18所示為多對多臥刑。

圖9.18多對多RNN9.3.2遞歸神經(jīng)網(wǎng)絡(luò)分類我們對RNN的分類進(jìn)行了總結(jié),如表9.2所示9.3.3案例分析下面介紹如何使用時州來對文本進(jìn)行分類。

我們以詞作為基本元素,將每個句子分詞成若干詞。X1、X2等表示的是句子中的單詞,我們可以將一個句子從前

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論