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