PyTorch自然語(yǔ)言處理入門(mén)與實(shí)戰(zhàn)
運(yùn)用PyTorch 探索自然語(yǔ)言處理與機(jī)器學(xué)習(xí)!
這是一本兼顧理論基礎(chǔ)和工程實(shí)踐的入門(mén)級(jí)教程,基于 PyTorch,揭示自然語(yǔ)言處理的原理,描繪經(jīng)典學(xué)術(shù)研究脈絡(luò),通過(guò)實(shí)踐與項(xiàng)目展現(xiàn)技術(shù)與應(yīng)用的細(xì)節(jié),并提供可擴(kuò)展閱讀的論文出處。
運(yùn)用PyTorch 探索自然語(yǔ)言處理與機(jī)器學(xué)習(xí)!
這是一本兼顧理論基礎(chǔ)和工程實(shí)踐的入門(mén)級(jí)教程,基于 PyTorch,揭示自然語(yǔ)言處理的原理,描繪學(xué)術(shù)研究脈絡(luò),通過(guò)實(shí)踐與項(xiàng)目展現(xiàn)技術(shù)與應(yīng)用的細(xì)節(jié),并提供可擴(kuò)展閱讀的論文出處。
1.路線(xiàn)圖:從基礎(chǔ)工具、基本原理,到常用模型,再到領(lǐng)域前沿。
2.有項(xiàng)目:中文地址解析 + 詩(shī)句補(bǔ)充。
3.可實(shí)踐:給出代碼、數(shù)據(jù)集和論文出處。
孫小文:畢業(yè)于北京郵電大學(xué)計(jì)算機(jī)學(xué)院(國(guó)家示范性軟件學(xué)院),目前就職于微軟(中國(guó)),研究領(lǐng)域包括自然語(yǔ)言處理、分布式存儲(chǔ)和計(jì)算、搜索技術(shù)。
王薪宇:畢業(yè)于北京郵電大學(xué)計(jì)算機(jī)學(xué)院(國(guó)家示范性軟件學(xué)院),曾在知名互聯(lián)網(wǎng)公司工作,主要研究領(lǐng)域?yàn)樽匀徽Z(yǔ)言處理。
楊談:北京郵電大學(xué)計(jì)算機(jī)學(xué)院(國(guó)家示范性軟件學(xué)院)副教授,作為主研人或項(xiàng)目負(fù)責(zé)人參與了多個(gè)國(guó)家項(xiàng)目和企業(yè)合作項(xiàng)目。
目 錄
第 1篇 自然語(yǔ)言處理基礎(chǔ)篇
第 1章 自然語(yǔ)言處理概述 2
1.1 什么是自然語(yǔ)言處理 2
1.1.1 定義 2
1.1.2 常用術(shù)語(yǔ) 3
1.1.3 自然語(yǔ)言處理的任務(wù) 3
1.1.4 自然語(yǔ)言處理的發(fā)展歷程 4
1.2 自然語(yǔ)言處理中的挑戰(zhàn) 5
1.2.1 歧義問(wèn)題 5
1.2.2 語(yǔ)言的多樣性 6
1.2.3 未登錄詞 6
1.2.4 數(shù)據(jù)稀疏 6
1.3 自然語(yǔ)言處理中的常用技術(shù) 8
1.4 機(jī)器學(xué)習(xí)中的常見(jiàn)問(wèn)題 10
1.4.1 Batch和Epoch 10
1.4.2 Batch Size的選擇 11
1.4.3 數(shù)據(jù)集不平衡問(wèn)題 11
1.4.4 預(yù)訓(xùn)練模型與數(shù)據(jù)安全 12
1.4.5 通過(guò)開(kāi)源代碼學(xué)習(xí) 12
1.5 小結(jié) 13
第 2章 Python自然語(yǔ)言處理基礎(chǔ) 14
2.1 搭建環(huán)境 14
2.1.1 選擇Python版本 14
2.1.2 安裝Python 15
2.1.3 使用pip包管理工具和Python虛擬環(huán)境 17
2.1.4 使用集成開(kāi)發(fā)環(huán)境 18
2.1.5 安裝Python自然語(yǔ)言處理常用的庫(kù) 21
2.2 用Python處理字符串 25
2.2.1 使用str類(lèi)型 25
2.2.2 使用StringIO類(lèi) 29
2.3 用Python處理語(yǔ)料 29
2.3.1 從文件讀取語(yǔ)料 29
2.3.2 去重 31
2.3.3 停用詞 31
2.3.4 編輯距離 31
2.3.5 文本規(guī)范化 32
2.3.6 分詞 34
2.3.7 詞頻-逆文本頻率 35
2.3.8 One-Hot 編碼 35
2.4 Python的一些特性 36
2.4.1 動(dòng)態(tài)的解釋型語(yǔ)言 36
2.4.2 跨平臺(tái) 37
2.4.3 性能問(wèn)題 37
2.4.4 并行和并發(fā) 37
2.5 在Python中調(diào)用其他語(yǔ)言 38
2.5.1 通過(guò)ctypes調(diào)用C/C++代碼 38
2.5.2 通過(guò)網(wǎng)絡(luò)接口調(diào)用其他語(yǔ)言 40
2.6 小結(jié) 41
第 2篇 PyTorch入門(mén)篇
第3章 PyTorch介紹 44
3.1 概述 44
3.2 與其他框架的比較 45
3.2.1 TensorFlow 45
3.2.2 PaddlePaddle 45
3.2.3 CNTK 46
3.3 PyTorch環(huán)境配置 46
3.3.1 通過(guò)pip安裝 46
3.3.2 配置GPU環(huán)境 47
3.3.3 其他安裝方法 48
3.3.4 在PyTorch中查看GPU是否可用 49
3.4 Transformers簡(jiǎn)介及安裝 49
3.5 Apex簡(jiǎn)介及安裝 50
3.6 小結(jié) 50
第4章 PyTorch基本使用方法 51
4.1 張量的使用 51
4.1.1 創(chuàng)建張量 51
4.1.2 張量的變換 53
4.1.3 張量的索引 59
4.1.4 張量的運(yùn)算 59
4.2 使用torch.nn 60
4.3 激活函數(shù) 63
4.3.1 Sigmoid函數(shù) 63
4.3.2 Tanh函數(shù) 64
4.3.3 ReLU函數(shù) 64
4.3.4 Softmax函數(shù) 65
4.3.5 Softmin函數(shù) 65
4.3.6 LogSoftmax函數(shù) 66
4.4 損失函數(shù) 66
4.4.1 0-1損失函數(shù) 66
4.4.2 平方損失函數(shù) 66
4.4.3 絕對(duì)值損失函數(shù) 68
4.4.4 對(duì)數(shù)損失函數(shù) 68
4.5 優(yōu)化器 69
4.5.1 SGD優(yōu)化器 69
4.5.2 Adam優(yōu)化器 70
4.5.3 AdamW優(yōu)化器 70
4.6 數(shù)據(jù)加載 70
4.6.1 Dataset 70
4.6.2 DataLoader 71
4.7 使用PyTorch實(shí)現(xiàn)邏輯回歸 73
4.7.1 生成隨機(jī)數(shù)據(jù) 73
4.7.2 數(shù)據(jù)可視化 73
4.7.3 定義模型 74
4.7.4 訓(xùn)練模型 75
4.8 TorchText 76
4.8.1 安裝TorchText 76
4.8.2 Data類(lèi) 76
4.8.3 Datasets類(lèi) 78
4.8.4 Vocab 79
4.8.5 utils 80
4.9 使用TensorBoard 81
4.9.1 安裝和啟動(dòng)TensorBoard 81
4.9.2 在PyTorch中使用TensorBoard 81
4.10 小結(jié) 81
第5章 熱身:使用字符級(jí)RNN分類(lèi)帖子 82
5.1 數(shù)據(jù)與目標(biāo) 82
5.1.1 數(shù)據(jù) 82
5.1.2 目標(biāo) 84
5.2 輸入與輸出 84
5.2.1 統(tǒng)計(jì)數(shù)據(jù)集中出現(xiàn)的字符數(shù)量 85
5.2.2 使用One-Hot編碼表示標(biāo)題數(shù)據(jù) 85
5.2.3 使用詞嵌入表示標(biāo)題數(shù)據(jù) 85
5.2.4 輸出 86
5.3 字符級(jí)RNN 87
5.3.1 定義模型 87
5.3.2 運(yùn)行模型 87
5.4 數(shù)據(jù)預(yù)處理 89
5.4.1 合并數(shù)據(jù)并添加標(biāo)簽 90
5.4.2 劃分訓(xùn)練集和數(shù)據(jù)集 90
5.5 訓(xùn)練與評(píng)估 90
5.5.1 訓(xùn)練 91
5.5.2 評(píng)估 91
5.5.3 訓(xùn)練模型 91
5.6 保存和加載模型 93
5.6.1 僅保存模型參數(shù) 93
5.6.2 保存模型與參數(shù) 93
5.6.3 保存詞表 94
5.7 開(kāi)發(fā)應(yīng)用 94
5.7.1 給出任意標(biāo)題的建議分類(lèi) 94
5.7.2 獲取用戶(hù)輸入并返回結(jié)果 95
5.7.3 開(kāi)發(fā)Web API和Web界面 96
5.8 小結(jié) 97
第3篇 用PyTorch完成自然語(yǔ)言處理任務(wù)篇
第6章 分詞問(wèn)題 100
6.1 中文分詞 100
6.1.1 中文的語(yǔ)言結(jié)構(gòu) 100
6.1.2 未收錄詞 101
6.1.3 歧義 101
6.2 分詞原理 101
6.2.1 基于詞典匹配的分詞 101
6.2.2 基于概率進(jìn)行分詞 102
6.2.3 基于機(jī)器學(xué)習(xí)的分詞 105
6.3 使用第三方工具分詞 106
6.3.1 S-MSRSeg 106
6.3.2 ICTCLAS 107
6.3.3 結(jié)巴分詞 107
6.3.4 pkuseg 107
6.4 實(shí)踐 109
6.4.1 對(duì)標(biāo)題分詞 109
6.4.2 統(tǒng)計(jì)詞語(yǔ)數(shù)量與模型訓(xùn)練 109
6.4.3 處理用戶(hù)輸入 110
6.5 小結(jié) 110
第7章 RNN 111
7.1 RNN的原理 111
7.1.1 原始RNN 111
7.1.2 LSTM 113
7.1.3 GRU 114
7.2 PyTorch中的RNN 115
7.2.1 使用RNN 115
7.2.2 使用LSTM和GRU 116
7.2.3 雙向RNN和多層RNN 117
7.3 RNN可以完成的任務(wù) 117
7.3.1 輸入不定長(zhǎng),輸出與輸入長(zhǎng)度相同 117
7.3.2 輸入不定長(zhǎng),輸出定長(zhǎng) 118
7.3.3 輸入定長(zhǎng),輸出不定長(zhǎng) 118
7.4 實(shí)踐:使用PyTorch自帶的RNN完成帖子分類(lèi) 118
7.4.1 載入數(shù)據(jù) 118
7.4.2 定義模型 119
7.4.3 訓(xùn)練模型 119
7.5 小結(jié) 121
第8章 詞嵌入 122
8.1 概述 122
8.1.1 詞表示 122
8.1.2 PyTorch中的詞嵌入 124
8.2 Word2vec 124
8.2.1 Word2vec簡(jiǎn)介 124
8.2.2 CBOW 125
8.2.3 SG 126
8.2.4 在PyTorch中使用Word2vec 126
8.3 GloVe 127
8.3.1 GloVe的原理 127
8.3.2 在PyTorch中使用GloVe預(yù)訓(xùn)練詞向量 127
8.4 實(shí)踐:使用預(yù)訓(xùn)練詞向量完成帖子標(biāo)題分類(lèi) 128
8.4.1 獲取預(yù)訓(xùn)練詞向量 128
8.4.2 加載詞向量 128
8.4.3 方法一:直接使用預(yù)訓(xùn)練詞向量 129
8.4.4 方法二:在Embedding層中載入預(yù)訓(xùn)練詞向量 130
8.5 小結(jié) 131
第9章 Seq2seq 132
9.1 概述 132
9.1.1 背景 132
9.1.2 模型結(jié)構(gòu) 133
9.1.3 訓(xùn)練技巧 134
9.1.4 預(yù)測(cè)技巧 134
9.2 使用PyTorch實(shí)現(xiàn)Seq2seq 134
9.2.1 編碼器 134
9.2.2 解碼器 135
9.2.3 Seq2seq 136
9.2.4 Teacher Forcing 137
9.2.5 Beam Search 138
9.3 實(shí)踐:使用Seq2seq完成機(jī)器翻譯任務(wù) 138
9.3.1 數(shù)據(jù)集 138
9.3.2 數(shù)據(jù)預(yù)處理 139
9.3.3 構(gòu)建訓(xùn)練集和測(cè)試集 141
9.3.4 定義模型 143
9.3.5 初始化模型 145
9.3.6 定義優(yōu)化器和損失函數(shù) 146
9.3.7 訓(xùn)練函數(shù)和評(píng)估函數(shù) 146
9.3.8 訓(xùn)練模型 147
9.3.9 測(cè)試模型 148
9.4 小結(jié) 149
第 10章 注意力機(jī)制 150
10.1 注意力機(jī)制的起源 150
10.1.1 在計(jì)算機(jī)視覺(jué)中的應(yīng)用 150
10.1.2 在自然語(yǔ)言處理中的應(yīng)用 151
10.2 使用注意力機(jī)制的視覺(jué)循環(huán)模型 151
10.2.1 背景 151
10.2.2 實(shí)現(xiàn)方法 152
10.3 Seq2seq中的注意力機(jī)制 152
10.3.1 背景 152
10.3.2 實(shí)現(xiàn)方法 153
10.3.3 工作原理 154
10.4 自注意力機(jī)制 155
10.4.1 背景 155
10.4.2 自注意力機(jī)制相關(guān)的工作 156
10.4.3 實(shí)現(xiàn)方法與應(yīng)用 156
10.5 其他注意力機(jī)制 156
10.6 小結(jié) 157
第 11章 Transformer 158
11.1 Transformer的背景 158
11.1.1 概述 158
11.1.2 主要技術(shù) 159
11.1.3 優(yōu)勢(shì)和缺點(diǎn) 159
11.2 基于卷積網(wǎng)絡(luò)的Seq2seq 159
11.3 Transformer的結(jié)構(gòu) 159
11.3.1 概述 160
11.3.2 Transformer中的自注意力機(jī)制 160
11.3.3 Multi-head Attention 161
11.3.4 使用Positional Encoding 162
11.4 Transformer的改進(jìn) 164
11.5 小結(jié) 164
第 12章 預(yù)訓(xùn)練語(yǔ)言模型 165
12.1 概述 165
12.1.1 為什么需要預(yù)訓(xùn)練 165
12.1.2 預(yù)訓(xùn)練模型的工作方式 166
12.1.3 自然語(yǔ)言處理預(yù)訓(xùn)練的發(fā)展 166
12.2 ELMo 167
12.2.1 特點(diǎn) 167
12.2.2 模型結(jié)構(gòu) 167
12.2.3 預(yù)訓(xùn)練過(guò)程 168
12.3 GPT 168
12.3.1 特點(diǎn) 168
12.3.2 模型結(jié)構(gòu) 168
12.3.3 下游任務(wù) 169
12.3.4 預(yù)訓(xùn)練過(guò)程 169
12.3.5 GPT-2和GPT-3 169
12.4 BERT 170
12.4.1 背景 171
12.4.2 模型結(jié)構(gòu) 171
12.4.3 預(yù)訓(xùn)練 171
12.4.4 RoBERTa和ALBERT 171
12.5 Hugging Face Transformers 171
12.5.1 概述 172
12.5.2 使用Transformers 172
12.5.3 下載預(yù)訓(xùn)練模型 173
12.5.4 Tokenizer 173
12.5.5 BERT的參數(shù) 175
12.5.6 BERT的使用 176
12.5.7 GPT-2的參數(shù) 180
12.5.8 常見(jiàn)錯(cuò)誤及其解決方法 181
12.6 其他開(kāi)源中文預(yù)訓(xùn)練模型 181
12.6.1 TAL-EduBERT 181
12.6.2 Albert 182
12.7 實(shí)踐:使用Hugging Face Transformers中的BERT做帖子標(biāo)題分類(lèi) 182
12.7.1 讀取數(shù)據(jù) 182
12.7.2 導(dǎo)入包和設(shè)置參數(shù) 183
12.7.3 定義Dataset和DataLoader 183
12.7.4 定義評(píng)估函數(shù) 184
12.7.5 定義模型 185
12.7.6 訓(xùn)練模型 185
12.8 小結(jié) 186
第4篇 實(shí)戰(zhàn)篇
第 13章 項(xiàng)目:中文地址解析 188
13.1 數(shù)據(jù)集 188
13.1.1 實(shí)驗(yàn)?zāi)繕?biāo)與數(shù)據(jù)集介紹 188
13.1.2 載入數(shù)據(jù)集 190
13.2 詞向量 195
13.2.1 查看詞向量文件 195
13.2.2 載入詞向量 196
13.3 BERT 196
13.3.1 導(dǎo)入包和配置 196
13.3.2 Dataset和DataLoader 198
13.3.3 定義模型 199
13.3.4 訓(xùn)練模型 200
13.3.5 獲取預(yù)測(cè)結(jié)果 202
13.4 HTML5演示程序開(kāi)發(fā) 203
13.4.1 項(xiàng)目結(jié)構(gòu) 203
13.4.2 HTML5界面 204
13.4.3 創(chuàng)建前端事件 206
13.4.4 服務(wù)器邏輯 207
13.5 小結(jié) 211
第 14章 項(xiàng)目:詩(shī)句補(bǔ)充 212
14.1 了解chinese-poetry數(shù)據(jù)集 212
14.1.1 下載chinese-poetry數(shù)據(jù)集 212
14.1.2 探索chinese-poetry數(shù)據(jù)集 213
14.2 準(zhǔn)備訓(xùn)練數(shù)據(jù) 214
14.2.1 選擇數(shù)據(jù)源 214
14.2.2 載入內(nèi)存 214
14.2.3 切分句子 215
14.2.4 統(tǒng)計(jì)字頻 218
14.2.5 刪除低頻字所在詩(shī)句 220
14.2.6 詞到ID的轉(zhuǎn)換 221
14.3 實(shí)現(xiàn)基本的LSTM 222
14.3.1 把處理好的數(shù)據(jù)和詞表存入文件 222
14.3.2 切分訓(xùn)練集和測(cè)試集 224
14.3.3 Dataset 224
14.3.4 DataLoader 225
14.3.5 創(chuàng)建Dataset和DataLoader對(duì)象 226
14.3.6 定義模型 226
14.3.7 測(cè)試模型 228
14.3.8 訓(xùn)練模型 228
14.4 根據(jù)句子長(zhǎng)度分組 229
14.4.1 按照句子長(zhǎng)度分割數(shù)據(jù)集 229
14.4.2 不用考慮填充的DataLoader 230
14.4.3 創(chuàng)建多個(gè)DataLoader對(duì)象 230
14.4.4 處理等長(zhǎng)句子的LSTM 231
14.4.5 評(píng)估模型效果 231
14.4.6 訓(xùn)練模型 232
14.5 使用預(yù)訓(xùn)練詞向量初始化Embedding層 235
14.5.1 根據(jù)詞向量調(diào)整字表 235
14.5.2 載入預(yù)訓(xùn)練權(quán)重 240
14.5.3 訓(xùn)練模型 240
14.6 使用Transformer完成詩(shī)句生成 244
14.6.1 位置編碼 245
14.6.2 使用Transformer 245
14.6.3 訓(xùn)練和評(píng)估 246
14.7 使用GPT-2完成對(duì)詩(shī)模型 247
14.7.1 預(yù)訓(xùn)練模型 248
14.7.2 評(píng)估模型 249
14.7.3 Fine-tuning 252
14.8 開(kāi)發(fā)HTML5演示程序 257
14.8.1 目錄結(jié)構(gòu) 257
14.8.2 HTML5界面 257
14.8.3 創(chuàng)建前端事件 259
14.8.4 服務(wù)器邏輯 260
14.8.5 檢驗(yàn)結(jié)果 263
14.9 小結(jié) 264
參考文獻(xiàn) 265