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

下載本文檔

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

文檔簡(jiǎn)介

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

)=單詞中

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

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

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

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

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

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

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

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

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

更新RNN。然而,隨著時(shí)間步數(shù)的增加,這會(huì)使計(jì)算代價(jià)變得更大。為了獲得更高的計(jì)算效率,我們可以使用BPTT的近似,即截?cái)嗟幕跁r(shí)間的反向傳播(TBPTT),來(lái)優(yōu)化遞歸模型。4.TBPTT:更有效地訓(xùn)練RNN在TBPTT中,我們僅計(jì)算固定數(shù)量的T個(gè)時(shí)間步長(zhǎng)的梯度(與在BPTT中計(jì)算到序列的最開(kāi)始不同)。更具體地說(shuō),當(dāng)計(jì)算時(shí)間步長(zhǎng)t的

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

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論