全書分為三個部分,共計(jì)10章內(nèi)容。第壹部分為基礎(chǔ)篇,介紹機(jī)器閱讀理解的基礎(chǔ)知識。其中包括機(jī)器閱讀理解任務(wù)的定義,閱讀理解模型中常用的自然語言處理技術(shù)和深度學(xué)習(xí)網(wǎng)絡(luò)模塊等。第二部分為架構(gòu)篇,對機(jī)器閱讀理解任務(wù)進(jìn)行分類,然后介紹解決各類任務(wù)的基本模型架構(gòu)和前沿算法,并剖析對機(jī)器閱讀理解研究有著革命性影響的預(yù)訓(xùn)練模型(如BERT和GPT)。第三部分為實(shí)戰(zhàn)篇,包括筆者在2018年獲得CoQA閱讀理解競賽第一名的模型SDNet的代碼解讀,機(jī)器閱讀理解在各種工業(yè)界應(yīng)用中的具體落地過程和挑戰(zhàn),以及筆者對于機(jī)器閱讀理解未來發(fā)展方向的思考。
微軟人工智能首席技術(shù)官黃學(xué)東、中國計(jì)算機(jī)學(xué)會秘書長杜子德聯(lián)袂推薦,微軟高級研究員撰寫
閱讀是人類獲取知識、認(rèn)識世界的重要手段。傳承人類文明的語言文字中包含了豐富的信息、經(jīng)驗(yàn)和智慧,而語言高度濃縮的特性也決定了閱讀能力本身就是一項(xiàng)重要的智能。著名科幻小說作家劉慈欣先生在《鄉(xiāng)村教師》中曾經(jīng)這樣描述人類語言交流的效率:
你是想告訴我們,一種沒有記憶遺傳,相互間用聲波進(jìn)行信息交流,并且是以令人難以置信的每秒1至10比特的速率進(jìn)行交流的物種,能創(chuàng)造出5B級文明?! 而且這種文明是在沒有任何外部高級文明培植的情況下自行進(jìn)化的?!
根據(jù)測算,人類閱讀的平均速度約為說話語速的2~3倍。因此,粗略估算一下,一個人哪怕50年如一日地每天閱讀8個小時,最終獲取的文字信息量也只有4.9GB左右。但人類的文明和智慧程度遠(yuǎn)遠(yuǎn)超過了這個量級?梢哉f,閱讀是一種通過理解將精簡的文字抽象成概念和思想以及衍生知識的復(fù)雜過程。
在人工智能浪潮席卷世界的今天,讓計(jì)算機(jī)學(xué)會閱讀有著重要的意義。一方面,閱讀能力涉及人類的核心智能,也是終極人工智能必不可少的組成部分;另一方面,隨著文本數(shù)據(jù)的爆炸式增長,利用模型將文本信息的理解過程自動化,可節(jié)省大量人力物力成本,在許多行業(yè)有著廣泛的使用價值。
因此,最近三四年,自然語言處理十分熱門、前沿的研究課題之一就是機(jī)器閱讀理解。其研究目標(biāo)是讓計(jì)算機(jī)讀懂文章,并像人類一樣回答與文章相關(guān)的問題。大量人工智能和深度學(xué)習(xí)中的核心技術(shù)被運(yùn)用到這一領(lǐng)域,各種機(jī)器閱讀理解任務(wù)層出不窮。筆者有幸作為最早涉足這一領(lǐng)域的研究者之一,設(shè)計(jì)并實(shí)現(xiàn)了若干閱讀理解模型,并在斯坦福大學(xué)主辦的機(jī)器閱讀理解競賽SQuAD中獲得了第一名的成績,在CoQA競賽中讓計(jì)算機(jī)模型的得分首次超越了人類的得分。
然而,隨著計(jì)算機(jī)模型在越來越多的數(shù)據(jù)集上得分超過人類,一些媒體在相關(guān)報道中都冠以“計(jì)算機(jī)閱讀理解水平已超人類”的標(biāo)題,這也在一定程度上對“人工智能已經(jīng)可以取代人類”的說法有推波助瀾的作用。而作為實(shí)際參與模型設(shè)計(jì)的研究者,筆者深深感覺計(jì)算機(jī)與人類理解文章和進(jìn)行思考的能力相差甚遠(yuǎn)。當(dāng)前的機(jī)器閱讀理解模型和十年前的成果相比已經(jīng)有了巨大的飛躍,但只是在特定的數(shù)據(jù)集與限定的任務(wù)上超過了人類水平。已有研究表明,如果在文章中加入一個對于人類來說很容易判斷的迷惑性句子,就會使計(jì)算機(jī)模型的表現(xiàn)大打折扣。
另外,與機(jī)器閱讀理解研究熱潮不匹配的是,到目前為止,市面上還沒有這方面的書籍,大多數(shù)模型都是以學(xué)術(shù)論文方式發(fā)表的,而機(jī)器閱讀理解在工業(yè)界應(yīng)用方面的資料更是寥寥無幾。筆者寫這本書的目的在于客觀地展現(xiàn)當(dāng)前機(jī)器閱讀理解研究的現(xiàn)狀,從最基礎(chǔ)的模塊、閱讀理解模型的基本架構(gòu)直到最前沿的算法,完整地展現(xiàn)機(jī)器閱讀理解模型的核心知識。書中有大量筆者在構(gòu)建閱讀理解模型過程中精煉出的代碼實(shí)例,這些實(shí)例有著很強(qiáng)的實(shí)戰(zhàn)價值。所有代碼均上傳至https://github.com/zcgzcgzcg1/MRC_book,并可直接運(yùn)行。本書還詳細(xì)闡述了機(jī)器閱讀理解模型在智能客服、搜索引擎等各種工業(yè)界應(yīng)用中落地的方法、難點(diǎn)和挑戰(zhàn),并探討了這項(xiàng)研究未來的發(fā)展方向。
雖然當(dāng)前機(jī)器閱讀理解的能力遠(yuǎn)遜于人類,但我們可以利用計(jì)算機(jī)的超快運(yùn)算速度和超大存儲能力找到“彎道超車”的方法。所謂“熟讀唐詩三百首,不會吟詩也會吟”,而現(xiàn)在的計(jì)算機(jī)一秒內(nèi)就可以讀詩千萬首,我們完全有理由期待它能取得突破性的成果。例如,2018年橫空出世的BERT模型融合了大數(shù)據(jù)和大模型,在機(jī)器閱讀理解等多個自然語言處理領(lǐng)域取得了可喜的突破。筆者希望本書能夠給大家?guī)韱l(fā)和思考,在不遠(yuǎn)的將來能夠真正使計(jì)算機(jī)達(dá)到并超過人類閱讀理解的水平。
全書分為3篇,共8章內(nèi)容。
基礎(chǔ)篇(第1~3章),主要介紹機(jī)器閱讀理解的基礎(chǔ)知識和關(guān)鍵支撐技術(shù)。其中包括機(jī)器閱讀理解任務(wù)的定義、閱讀理解模型中常用的自然語言處理技術(shù)和深度學(xué)習(xí)網(wǎng)絡(luò)模塊,例如如何讓計(jì)算機(jī)表示文章和問題、做多項(xiàng)選擇題和生成回答等。
架構(gòu)篇(第4~6章),介紹解決各類機(jī)器閱讀理解任務(wù)的基本模型架構(gòu)和前沿算法,并剖析對機(jī)器閱讀理解研究有著革命性影響的預(yù)訓(xùn)練模型(如BERT和GPT)。
實(shí)戰(zhàn)篇(第7~8章),其中包括筆者在2018年獲得CoQA閱讀理解競賽第一名時所用的模型SDNet的代碼解讀、機(jī)器閱讀理解在各種工業(yè)界應(yīng)用中的具體落地過程和挑戰(zhàn),以及筆者對機(jī)器閱讀理解未來發(fā)展方向的思考。
由于筆者的水平有限,且編寫時間倉促,書中難免會存在疏漏,懇請讀者朋友批評指正。如果您有更多的寶貴意見,歡迎通過郵箱zcg.stanford@gmail.com聯(lián)系我,期待能夠得到讀者朋友的反饋,在技術(shù)之路上互勉共進(jìn)。
致謝
感謝微軟公司語音與語言研究團(tuán)隊(duì)黃學(xué)東、曾南山和各位同事給予我指導(dǎo)和幫助。
感謝中國計(jì)算機(jī)學(xué)會秘書長杜子德先生一直以來對我的鼓勵和支持。
感謝高婧雅編輯在本書策劃、寫作和完稿過程中給予我巨大幫助。
特別感謝我的太太夢云和女兒,在寫作這本書的過程中,我犧牲了很多陪伴她們的時間,有了她們的付出與支持,我才能堅(jiān)持寫下去。
同時,感謝我的父母幫助我們照顧女兒,有了你們的支持,我才有時間和精力完成寫作。
謹(jǐn)以此書獻(xiàn)給我最親愛的家人,以
朱晨光,微軟公司自然語言處理高級研究員、斯坦福大學(xué)計(jì)算機(jī)系博士。負(fù)責(zé)自然語言處理研究與開發(fā)、對話機(jī)器人的語義理解、機(jī)器閱讀理解研究等,精通人工智能、深度學(xué)習(xí)與自然語言處理,尤其擅長機(jī)器閱讀理解、文本總結(jié)、對話處理等方向。帶領(lǐng)團(tuán)隊(duì)負(fù)責(zé)客服對話機(jī)器人的語義理解與分析,進(jìn)行機(jī)器閱讀理解研究,在斯坦福大學(xué)舉辦的SQuAD 1.0機(jī)器閱讀理解競賽中獲得全球名,在CoQA對話閱讀理解競賽中成績超過人類水平并獲得名。在人工智能和自然語言處理會議ICLR、ACL、EMNLP、NAACL、ICLR中發(fā)表多篇文章。
序一
序二
前言
第一篇 基礎(chǔ)篇
第1章 機(jī)器閱讀理解與關(guān)鍵支撐技術(shù) 2
1.1 機(jī)器閱讀理解任務(wù) 2
1.1.1 機(jī)器閱讀理解模型 3
1.1.2 機(jī)器閱讀理解的應(yīng)用 4
1.2 自然語言處理 5
1.2.1 研究現(xiàn)狀 5
1.2.2 仍需解決的問題 6
1.3 深度學(xué)習(xí) 7
1.3.1 深度學(xué)習(xí)的特點(diǎn) 7
1.3.2 深度學(xué)習(xí)的成果 10
1.4 機(jī)器閱讀理解任務(wù)的測評方式 11
1.4.1 機(jī)器閱讀理解的答案形式 11
1.4.2 自由回答式答案評分標(biāo)準(zhǔn)ROUGE 12
1.5 機(jī)器閱讀理解數(shù)據(jù)集 14
1.5.1 單段落式數(shù)據(jù)集 14
1.5.2 多段落式數(shù)據(jù)集 19
1.5.3 文本庫式數(shù)據(jù)集 22
1.6 機(jī)器閱讀理解數(shù)據(jù)的生成 23
1.6.1 數(shù)據(jù)集的生成 23
1.6.2 標(biāo)準(zhǔn)答案的生成 24
1.6.3 如何設(shè)計(jì)高質(zhì)量的數(shù)據(jù)集 26
1.7 本章小結(jié) 30
第2章 自然語言處理基礎(chǔ) 31
2.1 文本分詞 31
2.1.1 中文分詞 32
2.1.2 英文分詞 33
2.1.3 字節(jié)對編碼BPE 35
2.2 語言處理的基石:詞向量 37
2.2.1 詞的向量化 37
2.2.2 Word2vec詞向量 39
2.3 命名實(shí)體和詞性標(biāo)注 42
2.3.1 命名實(shí)體識別 42
2.3.2 詞性標(biāo)注 44
2.4 語言模型 48
2.4.1 N元模型 49
2.4.2 語言模型的評測 52
2.5 本章小結(jié) 53
第3章 自然語言處理中的深度學(xué)習(xí) 54
3.1 從詞向量到文本向量 54
3.1.1 利用RNN的最終狀態(tài) 55
3.1.2 利用CNN和池化 55
3.1.3 利用含參加權(quán)和 58
3.2 讓計(jì)算機(jī)做選擇題:自然語言理解 59
3.2.1 網(wǎng)絡(luò)模型 59
3.2.2 實(shí)戰(zhàn):文本分類 60
3.3 讓計(jì)算機(jī)寫文章:自然語言生成 62
3.3.1 網(wǎng)絡(luò)模型 62
3.3.2 實(shí)戰(zhàn):生成文本 63
3.3.3 集束搜索 65
3.4 讓計(jì)算機(jī)專心致志:注意力機(jī)制 67
3.4.1 注意力機(jī)制的計(jì)算 68
3.4.2 實(shí)戰(zhàn):利用內(nèi)積函數(shù)計(jì)算注意力 69
3.4.3 序列到序列模型 69
3.5 本章小結(jié) 70
第二篇 架構(gòu)篇
第4章 機(jī)器閱讀理解模型架構(gòu) 72
4.1 總體架構(gòu) 72
4.2 編碼層 74
4.2.1 詞表的建立和初始化 74
4.2.2 字符編碼 75
4.2.3 上下文編碼 77
4.3 交互層 79
4.3.1 互注意力 79
4.3.2 自注意力 81
4.3.3 上下文編碼 82
4.4 輸出層 83
4.4.1 構(gòu)造問題的向量表示 83
4.4.2 多項(xiàng)選擇式答案生成 84
4.4.3 區(qū)間式答案生成 85
4.4.4 自由式答案生成 87
4.5 本章小結(jié) 93
第5章 常見機(jī)器閱讀理解模型 94
5.1 雙向注意力流模型 94
5.1.1 編碼層 94
5.1.2 交互層 95
5.1.3 輸出層 98
5.2 R-net 99
5.2.1 基于注意力的門控循環(huán)神經(jīng)網(wǎng)絡(luò) 100
5.2.2 網(wǎng)絡(luò)架構(gòu) 101
5.3 融合網(wǎng)絡(luò) 104
5.3.1 單詞歷史 104
5.3.2 全關(guān)注注意力 105
5.3.3 總體架構(gòu) 106
5.4 關(guān)鍵詞檢索與閱讀模型 109
5.4.1 檢索器 110
5.4.2 閱讀器 112
5.5 本章小結(jié) 115
第6章 預(yù)訓(xùn)練模型 116
6.1 預(yù)訓(xùn)練模型和遷移學(xué)習(xí) 116
6.2 基于翻譯的預(yù)訓(xùn)練模型CoVe 118
6.2.1 機(jī)器翻譯模型 119
6.2.2 上下文編碼 120
6.3 基于語言模型的預(yù)訓(xùn)練模型ELMo 121
6.3.1 雙向語言模型 122
6.3.2 ELMo的使用 123
6.4 生成式預(yù)訓(xùn)練模型GPT 125
6.4.1 Transformer 125
6.4.2 GPT模型架構(gòu) 129
6.4.3 GPT使用方法 129
6.5 劃時代的預(yù)訓(xùn)練模型BERT 131
6.5.1 雙向語言模型 131
6.5.2 判斷下一段文本 132
6.5.3 BERT預(yù)訓(xùn)練細(xì)節(jié) 133
6.5.4 BERT在目標(biāo)任務(wù)中的使用 133
6.5.5 實(shí)戰(zhàn):在區(qū)間答案型機(jī)器閱讀理解任務(wù)中微調(diào)BERT 137
6.6 本章小結(jié) 138
第三篇 實(shí)戰(zhàn)篇
第7章 機(jī)器閱讀理解模型SDNet代碼解析 140
7.1 多輪對話式閱讀理解模型SDNet 140
7.1.1 編碼層 141
7.1.2 交互層與輸出層 142
7.2 SDNet代碼介紹與運(yùn)行指南 143
7.2.1 代碼介紹 143
7.2.2 運(yùn)行指南 143
7.2.3 配置文件 145
7.3 預(yù)處理程序 147
7.3.1 初始化函數(shù) 148
7.3.2 預(yù)處理函數(shù) 149
7.4 訓(xùn)練程序 154
7.4.1 訓(xùn)練基類 154
7.4.2 訓(xùn)練子類 155
7.5 批次數(shù)據(jù)產(chǎn)生器 159
7.5.1 掩碼 160
7.5.2 準(zhǔn)備BERT數(shù)據(jù) 164
7.6 SDNet模型 166
7.6.1 網(wǎng)絡(luò)模型類 166
7.6.2 計(jì)算層 171
7.6.3 生成BERT編碼 177
7.7 本章小結(jié) 178
第8章 機(jī)器閱讀理解的應(yīng)用與未來 179
8.1 智能客服 179
8.1.1 建立產(chǎn)品客服知識庫 180
8.1.2 理解用戶意圖 181
8.1.3 答案生成 183
8.1.4 智能客服中的其他模塊 183
8.2 搜索引擎 184
8.2.1 搜索引擎技術(shù) 185
8.2.2 搜索引擎中的機(jī)器閱讀理解 187
8.2.3 未來與挑戰(zhàn) 188
8.3 醫(yī)療衛(wèi)生 189
8.4 法律 190
8.4.1 智能審判 191
8.4.2 確定適用條款 192
8.5 金融 193
8.5.1 股價預(yù)測 193
8.5.2 新聞?wù)?195
8.6 教育 196
8.7 機(jī)器閱讀理解的未來 196
8.7.1 機(jī)器閱讀理解研究面臨的挑戰(zhàn) 197
8.7.2 機(jī)器閱讀理解的產(chǎn)業(yè)化 202
8.8 本章小結(jié) 203
附錄A 機(jī)器學(xué)習(xí)基礎(chǔ) 205
附錄B 深度學(xué)習(xí)基礎(chǔ) 208