探索計(jì)算圖和監(jiān)督學(xué)習(xí)范式。掌握PyTorch優(yōu)化張量庫(kù)的基礎(chǔ)。概述傳統(tǒng)的NLP概念和方法。學(xué)習(xí)構(gòu)建神經(jīng)網(wǎng)絡(luò)的基本思想。檢查前饋神經(jīng)網(wǎng)絡(luò),例如多層感知器。使用嵌入方式來表示單詞、句子、文檔等。了解如何使用遞歸神經(jīng)網(wǎng)絡(luò)對(duì)序列數(shù)據(jù)建模。探索序列預(yù)測(cè)并生成sequence-to-sequence模型。學(xué)習(xí)用于構(gòu)建NLP系統(tǒng)的設(shè)計(jì)模式。
前言
本書旨在將新手帶入自然語(yǔ)言處理(Natural Language Processing,NLP)和深度學(xué)習(xí)的領(lǐng)域,為讀者打造涵蓋這兩個(gè)領(lǐng)域關(guān)鍵主題的試驗(yàn)臺(tái)。如今,這兩個(gè)主題領(lǐng)域都呈指數(shù)增長(zhǎng)狀態(tài)。在介紹深度學(xué)習(xí)和NLP 并著重于實(shí)現(xiàn)的同時(shí),這本書定位于重要的中間立場(chǎng)。寫這本書時(shí),我們?cè)谑∪ツ男┎牧仙献龀隽耸制D難的選擇。對(duì)于初學(xué)者而言,我們希望本書能幫助你打下堅(jiān)實(shí)的知識(shí)基礎(chǔ),并讓你認(rèn)識(shí)到更高級(jí)實(shí)現(xiàn)的可能性。機(jī)器學(xué)習(xí),尤其是深度學(xué)習(xí),是一門與知識(shí)科學(xué)不同的經(jīng)驗(yàn)學(xué)科。每章中大量的端到端代碼示例可以讓你更好地參與到編程體驗(yàn)中來。
當(dāng)我們開始編寫本書時(shí),我們從PyTorch 0.2 開始。 隨著PyTorch 從0.2 更新到0.4,我們也在修訂我們的示例。PyTorch 1.0 即將在本書發(fā)行時(shí)發(fā)布。本書中的代碼示例與PyTorch 0.4 兼容,并應(yīng)與即將發(fā)布的PyTorch 1.0 版本一起使用。注1
關(guān)于本書風(fēng)格的注釋。我們?cè)诖蠖鄶?shù)地方有意避免使用數(shù)學(xué),不是因?yàn)樯疃葘W(xué)習(xí)數(shù)學(xué)特別困難(其實(shí)沒有那么難),而是因?yàn)樗谠S多情況下都偏離了本書的主要目標(biāo)——鼓勵(lì)初學(xué)者。同樣,在許多情況下,無(wú)論是在代碼方面還是在文本方面,我們都傾向于詳細(xì)闡述而非簡(jiǎn)潔。高級(jí)讀者和經(jīng)驗(yàn)豐富的編程人員可能有能力和方法簡(jiǎn)化代碼,但是我們選擇盡可能明確,以覆蓋到接觸本書的最廣泛受眾。
本書內(nèi)容約定
在本書中,按以下約定進(jìn)行排版:
斜體英文(Italic)
表示新名詞、URL、電子郵件地址、文件名以及文件擴(kuò)展名。
等寬英文字體(Constant width)
用于程序代碼,以及在正文中引用變量、函數(shù)名稱、數(shù)據(jù)類型、環(huán)境變量、語(yǔ)句、關(guān)鍵字等代碼中的元素。
粗體等寬字體(Constant width bold)
需要用戶輸入的命令或其他文本。
斜體等寬字體(Constant width italic)
需要替換成用戶自定義的值或根據(jù)上下文決定的值。
使用代碼示例
補(bǔ)充材料(代碼示例,練習(xí)等)可從以下網(wǎng)站下載:
https://nlproc.info/PyTorchNLPBook/repo/。
這本書可以幫助您完成工作。通常,如果本書提供了示例代碼,則可以在程序和文檔中使用它。除非您要復(fù)制大部分代碼,否則無(wú)需與我們聯(lián)系以獲取許可。例如,編寫使用本書中若干代碼段的程序無(wú)需許可。以CD-ROM 形式出售或發(fā)布O’Reilly 書籍中的示例需要獲得許可。引用本書并引用示例代碼來回答問題無(wú)需許可。要將本書中的大量示例代碼納入產(chǎn)品的文檔時(shí)需獲得許可。
我們不強(qiáng)制要求署名,但如果你這么做,我們深表感激。署名一般包括書名、作者、出版社和國(guó)際標(biāo)準(zhǔn)書號(hào)(ISBN)。例如:“Natural LanguageProcessing with PyTorch by Delip Rao and Brian McMahan (O’Reilly).Copyright 2019, Delip Rao and Brian McMahan, 978-1-491-97823-8. ”。如果你覺得你對(duì)示例代碼的使用行為超出了合理的方式或超出了上述的允許不獲取授權(quán)的場(chǎng)景,可以與我們?nèi)〉寐?lián)系:permissions@oreilly.com。
O’Reilly 在線學(xué)習(xí)平臺(tái)(O’Reilly Online Learning)
近40 年來,O’Reilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識(shí)和卓越見解,來幫助眾多公司取得成功。
我們擁有獨(dú)一無(wú)二的專家和革新者組成的龐大網(wǎng)絡(luò),他們通過圖書、文章、會(huì)議和我們的在線學(xué)習(xí)平臺(tái)分享他們的知識(shí)和經(jīng)驗(yàn)。O’Reilly 的在線學(xué)習(xí)平臺(tái)允許你按需訪問現(xiàn)場(chǎng)培訓(xùn)課程、深入的學(xué)習(xí)路徑、交互式編程環(huán)境,以及O’Reilly 和200 多家其他出版商提供的大量文本和視頻資源。有關(guān)的更多信息,請(qǐng)?jiān)L問http://oreilly.com。
聯(lián)系我們
請(qǐng)將有關(guān)本書的建議和問題發(fā)送給出版社:
美國(guó):
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國(guó):
北京市西城區(qū)西直門南大街2號(hào)成銘大廈C座807室(100035)
奧萊利技術(shù)咨詢(北京)有限公司
我們?yōu)楸緯峁┝艘粋(gè)網(wǎng)頁(yè),上面有勘誤表、示例和其他相關(guān)的信息,請(qǐng)?jiān)L問:http://bit.ly/nlprocbk。
有關(guān)本書的建議或者技術(shù)問題,請(qǐng)發(fā)郵件到bookquestions@oreilly.com。
有關(guān)其他圖書、講座、會(huì)議、新聞的信息,請(qǐng)?jiān)L問我們的網(wǎng)站:http://www.oreilly.com。
我們的Facebook:http://facebook.com/oreilly。
我們的Twitter:http://twitter.com/oreillymedia。
我們的YouTube:http://www.youtube.com/oreillymedia。
致謝
本書經(jīng)歷了各種各樣的演變,本書的每個(gè)版本看上去都與以前的版本不同。每個(gè)版本涉及不同的人員(甚至不同的DL 框架)。
作者要感謝Goku Mohandas 最初參與本書的工作。在Goku 因工作原因不得不離開之前,Goku 為該項(xiàng)目投入了很多精力。Goku 對(duì)PyTorch 的熱情和他的積極性無(wú)與倫比,作者想念與他共事的經(jīng)歷。我們期待他帶來卓越的成績(jī)!如果沒有我們的技術(shù)評(píng)論員Liling Tan 和Debasish Gosh 的高質(zhì)量反饋,這本書就無(wú)法達(dá)到如此的技術(shù)層次。Liling 貢獻(xiàn)了他在先進(jìn)的NLP 產(chǎn)品開發(fā)方面的專業(yè)知識(shí),而Debasish 從開發(fā)人員的角度提供了非常有價(jià)值的反饋。我們同樣感謝Alfredo Canziani,Soumith Chintala 和其他許多來自PyTorch 開發(fā)人員論壇的杰出人員所給予的鼓勵(lì)。該社區(qū)對(duì)本書的許多見解的影響與我們自身的實(shí)踐一樣重要。
如果不感謝我們的編輯Jeff Bleiel 給予我們的出色支持,那會(huì)是我們的失職。沒有他的指導(dǎo),這本書就無(wú)法呈現(xiàn)在各位讀者面前。Bob Russell 的文字編輯和Nan Barber 的產(chǎn)品支持將這份手稿從草稿轉(zhuǎn)變成了可印刷的書。我們還要感謝Shannon Cutt 在本書早期所給予的支持。
書中的大部分內(nèi)容都是根據(jù)作者在O’Reilly 的AI and Strata 會(huì)議上所提供的NLP 培訓(xùn)發(fā)展而來,該培訓(xùn)為期2 天。我們要感謝Ben Lorica,Jason Perdue和Sophia DeMartini 與我們一起參與培訓(xùn)。
Delip 非常感謝Brian McMahan 作為合著者。Brian 竭盡全力支持這本書的發(fā)展。這是一次與Brian 同甘共苦的旅程! Delip 還想感謝O’Reilly 的Ben Lorica 最初堅(jiān)持要寫一本關(guān)于NLP 的書。
Brian 要感謝Sara Manuel 的無(wú)盡支持,并感謝Delip Rao 作為推動(dòng)本書完成的中堅(jiān)力量。如果沒有Delip 的堅(jiān)持不懈和超凡毅力,就不會(huì)有現(xiàn)在這本書。
Delip Rao是Joostware的創(chuàng)始人,Joostware是一家總部位于舊金山的咨詢公司,專門從事機(jī)器學(xué)習(xí)和NLP研究。他還是Fake News Challenge的聯(lián)合創(chuàng)始人,該活動(dòng)旨在將黑客和AI研究人員召集在一起,共同研究新聞中與事實(shí)相關(guān)的問題。Delip之前曾在Twitter和Amazon(Alexa)從事NLP研究和產(chǎn)品的工作。
Brian McMahan是Wells Fargo的NLP研究科學(xué)家。 在此之前,他曾在Joostware從事NLP研究。
目錄
前言 1
第1 章 概述 7
監(jiān)督學(xué)習(xí)范式 9
隨機(jī)梯度下降法 11
樣本和目標(biāo)編碼 12
獨(dú)熱表示(one-hot) 12
詞頻表示(TF) 14
TF-IDF 表示 15
目標(biāo)編碼 16
計(jì)算圖 17
PyTorch 基礎(chǔ) 19
動(dòng)態(tài)與靜態(tài)計(jì)算圖 19
安裝PyTorch 20
創(chuàng)建張量 21
張量的類型和大小 23
張量操作 25
索引、切片、連接 27
張量和計(jì)算圖 31
CUDA 張量 32
練習(xí)題 34
答案 35
小結(jié) 36
參考文獻(xiàn) 36
第2 章 自然語(yǔ)言處理 37
語(yǔ)料庫(kù)、詞和類型 38
特征工程 40
一元,二元,三元,…,n 元模型 41
詞形還原和詞干提取 41
文檔分類 42
單詞分類: 詞性標(biāo)注 42
廣度分類: 分塊和命名實(shí)體識(shí)別 43
句子結(jié)構(gòu) 44
詞義與語(yǔ)義 45
小結(jié) 46
參考文獻(xiàn) 47
第3 章 神經(jīng)網(wǎng)絡(luò)基礎(chǔ) 49
感知器: 最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò) 49
激活函數(shù) 51
sigmoid 52
Tanh 53
ReLU 53
Softmax 54
損失函數(shù) 55
均方誤差損失 56
分類交叉熵?fù)p失 56
交叉熵?fù)p失 58
深入監(jiān)督訓(xùn)練 59
構(gòu)造樣例數(shù)據(jù) 59
綜合起來: 基于梯度的監(jiān)督學(xué)習(xí) 62
輔助訓(xùn)練的概念 63
正確度量模型性能:評(píng)估指標(biāo) 64
正確度量模型性能:分割數(shù)據(jù)集 64
知道何時(shí)停止訓(xùn)練 65
找到合適的超參數(shù) 65
規(guī)范化 66
案例: 餐館評(píng)論分類 67
Yelp 評(píng)論數(shù)據(jù)集 68
理解PyTorch 的數(shù)據(jù)集表示 70
詞匯表(Vocabulary)、矢量化器(Vectorizer) 和數(shù)據(jù)轉(zhuǎn)換器(DataLoader) 73
一種感知器分類器 79
訓(xùn)練程序 80
評(píng)估、推斷和檢查 86
測(cè)試數(shù)據(jù)評(píng)估 87
小結(jié) 90
參考文獻(xiàn) 91
第4 章 用于自然語(yǔ)言處理的前饋網(wǎng)絡(luò) 93
多層感知器 94
一個(gè)簡(jiǎn)單的例子: 二分類 96
在PyTorch 中實(shí)現(xiàn)MLP 98
示例:用MLP 進(jìn)行姓氏分類 102
姓氏數(shù)據(jù)集 103
Vocabulary、Vectorizer 和DataLoader 104
姓氏分類器模型 106
訓(xùn)練程序 108
模型評(píng)估及預(yù)測(cè) 110
正則化MLP: 權(quán)重正則化和結(jié)構(gòu)正則化( 或Dropout) 112
卷積神經(jīng)網(wǎng)絡(luò) 114
CNN 超參數(shù) 115
在PyTorch 中實(shí)現(xiàn)CNN 120
示例:使用CNN 對(duì)姓氏進(jìn)行分類 123
姓氏數(shù)據(jù)集類 124
詞匯表、矢量化程序和數(shù)據(jù)轉(zhuǎn)換器 125
用卷積網(wǎng)絡(luò)重新實(shí)現(xiàn)姓氏分類器 126
培訓(xùn)程序 128
模型評(píng)估及預(yù)測(cè) 129
CNN 中的雜項(xiàng)主題 130
池化 130
批規(guī)范化(BatchNorm) 131
網(wǎng)絡(luò)中的網(wǎng)絡(luò)連接(1x1 卷積) 131
殘差連接/ 殘差塊 132
小結(jié) 133
參考文獻(xiàn) 134
第5 章 嵌入單詞和類型 135
為什么學(xué)習(xí)嵌入? 136
嵌入的效率 137
學(xué)習(xí)單詞嵌入的方法 138
預(yù)置字的實(shí)際使用 138
示例:連續(xù)詞袋模型的嵌入 145
Frankenstein 數(shù)據(jù)集 146
Vocabulary、Vectorizer 和DataLoader 148
CBOWClassifier 模型 149
訓(xùn)練程序 150
模型評(píng)估及預(yù)測(cè) 151
示例:使用預(yù)先訓(xùn)練的嵌入進(jìn)行文檔分類 151
新聞數(shù)據(jù)集 152
Vocabulary、Vectorizer 和DataLoader 153
NewsClassifier 模型 156
訓(xùn)練程序 159
模型評(píng)估及預(yù)測(cè) 160
小結(jié) 161
參考文獻(xiàn) 162
第6 章 自然語(yǔ)言處理的序列建模 165
遞歸神經(jīng)網(wǎng)絡(luò)簡(jiǎn)介 166
實(shí)現(xiàn)Elman RNN 169
示例:使用字符RNN 對(duì)姓氏國(guó)籍進(jìn)行分類 171
SurnameDataset 類 171
矢量化數(shù)據(jù)結(jié)構(gòu) 173
姓氏分類器模型 174
訓(xùn)練程序和結(jié)果 177
小結(jié) 178
參考文獻(xiàn) 178
第7 章 自然語(yǔ)言處理的中級(jí)序列建模 179
普通RNN(或Elman RNN)的問題 180
用門控方法解決普通RNN 存在的問題 181
示例:用于生成姓氏的字符RNN 183
SurnameDataset 類 183
矢量化數(shù)據(jù)結(jié)構(gòu) 185
從ElmanRNN 到GRU 187
模型1:無(wú)條件的姓氏生成模型 187
模型2:條件姓氏生成模型 189
訓(xùn)練程序和結(jié)果 190
訓(xùn)練序列模型的技巧和竅門 196
參考文獻(xiàn) 198
第8 章 自然語(yǔ)言處理的高級(jí)序列建模 199
序列到序列模型,編碼器- 解碼器模型和條件生成 199
從序列中捕獲更多信息:雙向遞歸模型 203
從序列中捕獲更多信息:注意力 205
深度神經(jīng)網(wǎng)絡(luò)中的注意力 207
評(píng)估序列生成模型 209
示例:神經(jīng)機(jī)器翻譯 211
機(jī)器翻譯數(shù)據(jù)集 212
NMT 的矢量化管道 213
NMT 模型中的編碼和解碼 218
訓(xùn)練程序和結(jié)果 229
小結(jié) 231
參考文獻(xiàn) 232
第9 章 經(jīng)典,前沿與下一步發(fā)展 235
到目前為止,我們學(xué)到了什么? 235
NLP 中的永恒主題 236
對(duì)話與交互系統(tǒng) 236
話語(yǔ) 237
信息提取與文本挖掘 239
文件分析與檢索 239
NLP 前沿 239
生產(chǎn)NLP 系統(tǒng)的設(shè)計(jì)模式 241
接下來呢? 246
參考文獻(xiàn) 247
作者介紹 249
封面介紹 249