近年來,自然語言處理技術備受矚目,一方面受益于計算機硬件和機器學習等相關技術的快速發(fā)展,自然語言處理的技術性能得到了快速提高,讓人們真實地看到和切身感受到了該技術所帶來的便利; 另一方面,隨著計算機網(wǎng)絡和移動通訊技術的快速發(fā)展和普及應用,人們對自然語言處理技術的需求愈加迫切,對技術性能和服務方式的要求也越來越高,從機器翻譯、問答系統(tǒng)和人機對話系統(tǒng),到自動文摘、情感分析和觀點挖掘等,再從輿論監(jiān)督、社會管理和國家安全,到工商業(yè)界的業(yè)務需求和普通百姓的日常生活服務,自然語言處理技術都以其不可替代的地位和作用得到了廣泛關注和重視。尤其2022年底大規(guī)模語言模型騰空出世,徹底刷新了人們對自然語言處理技術的傳統(tǒng)認知,甚至顛覆和改變了整個人工智能領域的研究范式和發(fā)展方向。自然語言處理學科方向從鮮為人知的丑小鴨一躍而成為備受追捧的白天鵝,這門課程也在大多數(shù)高校的人工智能學院或人工智能專業(yè)中理所當然地成為專業(yè)必修課。自然語言處理的春天來到了。
在春暖花開的季節(jié)里,不同模態(tài)數(shù)據(jù)之間的邊界變得越來越模糊,自然語言文本、語音、圖像和視頻處理幾乎進入了同一種范式。與此同時,學術界和工業(yè)界研發(fā)機構(gòu)所從事的工作越來越趨于同質(zhì)化。越來越多的共享數(shù)據(jù)、技術和平臺,為該領域的迅速成長和壯大提供了強有力的支持。這對于技術初學者來說,何嘗不是一件幸事!但是,面對蜂擁而出的各類算法和模型,如何為初學者提供一個快速入門的切入點呢?大語言模型席卷全球,其最基本的理論方法和實現(xiàn)技術是什么?通過一種什么樣的方式讓初學者快速地了解每一種算法和模型是如何實現(xiàn)的,數(shù)據(jù)應如何處理,參數(shù)該如何配置和優(yōu)化,系統(tǒng)要如何搭建,平臺可如何使用?這些基本問題和需求像線蟲一樣蠕動在我的心里,讓我時不時地產(chǎn)生要撰寫一部介紹技術實現(xiàn)方法著作的沖動,有時候這種蠕動如芒刺在背讓我坐臥不安。當百度飛槳技術團隊通過清華大學出版社聯(lián)系我,有意合作撰寫本書時,讓我頓時眼前一亮,因為我知道飛槳團隊有足夠的實力協(xié)助我完成這一任務,他們不僅有經(jīng)驗豐富的專業(yè)技術人員,而且有成熟可靠的飛槳平臺。我自己團隊得力干將趙陽博士(副研究員)的加盟更讓我信心倍增。于是,我們一拍即合。自那一刻起,我便堅信芒刺將不復存在。
本書默認讀者對自然語言處理的基礎理論和方法有一定的了解,所以理論部分僅點到為止,而主要筆墨用于介紹技術具體實現(xiàn)方法。在內(nèi)容分配上,以當前主流的神經(jīng)網(wǎng)絡和深度學習方法為主,適當涉及n元文法模型和條件隨機場等統(tǒng)計自然語言處理的經(jīng)典方法; 既有關鍵技術,也有應用系統(tǒng),通過具體案例從不同層面全方位地貫穿整個自然語言處理全域。書中提供的每個代碼都已經(jīng)通過調(diào)試,并以Jupyter Notebook形式托管在百度AI Studio星河社區(qū)上。讀者按照書中的說明就可以直接使用AI Studio星河社區(qū)提供的免費GPU算力卡在線編譯運行書中的程序代碼,為讀者實踐、練習提供了極大的便利。
作為共同作者的趙陽博士和飛槳技術團隊為本書的寫作給予了最有力的支持和幫助,如果沒有他們的鼎力相助和友好合作,恐怕一切還只會停留在我的空想和沖動之中。在此向他們表示最誠摯的謝意!
本書的撰寫工作得到了中國科學院大學教材出版中心的資助。學校教務處的田晨晨老師、人工智能學院的肖俊副院長和屈曉春老師給予了大力幫助和支持。同行專家趙鐵軍、王厚峰、王小捷、黃民烈和張家俊等對本書的初始結(jié)構(gòu)提出了寶貴的修改建議。中國科學院自動化研究所自然語言處理團隊的向露博士對書中的部分內(nèi)容進行了審閱和補充。清華大學出版社的孫亞楠編輯和王倩編輯給予了最貼心的幫助。一并向他們表示衷心的感謝!
本書從2021年6月開始策劃,基本內(nèi)容確定之后實施代碼編寫、調(diào)試和優(yōu)化工作,在組織準備過程中對部分內(nèi)容進行了微調(diào),至2022年初基本完成。2022年底大模型出現(xiàn)之后,根據(jù)最新技術發(fā)展我們又對書中部分內(nèi)容重新作了調(diào)整。由于時間十分倉促,再加上作者的水平有限,書中難免有不妥之處,甚至可能存在疏漏或錯誤。作者真誠地歡迎讀者給予批評指正,或提出修改建議。謝謝!
宗成慶
2023年12月
第1章緒論
1.1自然語言處理方法概述
1.2本書的內(nèi)容組織
1.3本書的實踐平臺
1.3.1本地運行
1.3.2AI Studio星河社區(qū)運行
1.3.3本書使用的API
1.3.4本書使用的數(shù)據(jù)集
第2章神經(jīng)網(wǎng)絡基礎
2.1概述
2.2神經(jīng)元與感知機
2.2.1神經(jīng)元
2.2.2感知機
2.2.3常見的激活函數(shù)
2.3前饋神經(jīng)網(wǎng)絡
2.4卷積神經(jīng)網(wǎng)絡
2.4.1卷積
2.4.2池化
2.4.3卷積神經(jīng)網(wǎng)絡
2.5循環(huán)神經(jīng)網(wǎng)絡
2.5.1簡單循環(huán)神經(jīng)網(wǎng)絡
2.5.2長短時記憶網(wǎng)絡
2.5.3門控循環(huán)單元
2.5.4循環(huán)神經(jīng)網(wǎng)絡拓展知識
第3章分布式表示
3.1詞的分布式表示
3.1.1靜態(tài)詞向量
3.1.2動態(tài)詞向量
3.2短語的分布式表示
3.3句子的分布式表示
3.3.1基于循環(huán)神經(jīng)網(wǎng)絡的表示方法
3.3.2基于預訓練語言模型的表示方法
第4章序列生成模型
4.1基于循環(huán)神經(jīng)網(wǎng)絡的Seq2Seq模型
4.1.1基于RNN的Seq2Seq模型原理
4.1.2解碼策略
4.2融合注意力機制的Seq2Seq模型
4.3基于Transformer的Seq2Seq模型
4.3.1自注意力模型
4.3.2Transformer的網(wǎng)絡結(jié)構(gòu)
4.3.3Transformer編碼器
4.3.4Transformer解碼器
4.3.5知識延伸: 基于Transformer結(jié)構(gòu)的模型
第5章基礎語言模型
5.1統(tǒng)計語言模型
5.1.1模型定義
5.1.2數(shù)據(jù)平滑方法
5.1.3語言模型評價
5.2神經(jīng)網(wǎng)絡語言模型
5.2.1前饋神經(jīng)網(wǎng)絡語言模型
5.2.2循環(huán)神經(jīng)網(wǎng)絡語言模型
5.2.3語言模型與詞向量
第6章預訓練大模型
6.1GPT語言模型
6.1.1GPT模型預訓練
6.1.2GPT在下游任務中的應用
6.2BERT語言模型
6.2.1BERT模型的預訓練任務
6.2.2BERT在下游任務中的應用
6.3ERNIE 語言模型
6.4預訓練大模型
6.4.1基礎大模型
6.4.2指令微調(diào)
6.4.3基于人類反饋的強化學習
第7章詞語切分
7.1基于BERT實現(xiàn)中文分詞
7.1.1任務目標
7.1.2實現(xiàn)思路及流程
7.1.3數(shù)據(jù)處理
7.1.4模型構(gòu)建
7.1.5訓練配置
7.1.6模型訓練
7.1.7模型評估
7.1.8模型預測
7.2基于BPE算法實現(xiàn)子詞切分
7.2.1任務目標
7.2.2實現(xiàn)思路及流程
7.2.3構(gòu)建BPE詞表
7.2.4文本子詞切分
7.2.5語料還原
7.3實驗思考
第8章文本情感分類方法實踐
8.1基于LSTM模型的情感分類方法
8.1.1任務目標
8.1.2實現(xiàn)思路及流程
8.1.3數(shù)據(jù)處理
8.1.4模型構(gòu)建
8.1.5訓練配置
8.1.6模型訓練
8.1.7模型評估
8.1.8模型預測
8.2基于BERT模型實現(xiàn)情感分類
8.2.1數(shù)據(jù)處理
8.2.2模型構(gòu)建
8.2.3訓練配置
8.2.4模型訓練
8.2.5模型評估
8.2.6模型預測
8.3基于BERT的屬性級情感分類
8.3.1任務目標
8.3.2實現(xiàn)思路及流程
8.3.3屬性和觀點抽取
8.3.4屬性級情感分類
8.3.5全流程模型推理
8.4實驗思考
第9章信息抽取實踐
9.1基于Bi-LSTM和CRF的命名實體識別方法
9.1.1任務目標和實現(xiàn)流程
9.1.2數(shù)據(jù)處理
9.1.3模型構(gòu)建
9.1.4訓練配置
9.1.5模型訓練
9.1.6模型評估
9.1.7模型預測
9.2基于ERNIE-UIE實現(xiàn)實體關系抽取
9.2.1任務目標和實現(xiàn)流程
9.2.2數(shù)據(jù)處理
9.2.3模型構(gòu)建
9.2.4訓練配置
9.2.5模型訓練
9.2.6模型評估
9.2.7模型預測
9.3實驗思考
第10章文本語義匹配實踐
10.1基于SimNet的文本語義匹配
10.1.1任務目標和實現(xiàn)流程
10.1.2數(shù)據(jù)處理
10.1.3模型構(gòu)建
10.1.4訓練配置
10.1.5模型訓練
10.1.6模型評估
10.1.7模型預測
10.2基于RocketQA的文本語義匹配
10.2.1任務目標和實現(xiàn)流程
10.2.2數(shù)據(jù)處理
10.2.3模型構(gòu)建
10.2.4訓練配置
10.2.5模型訓練
10.2.6模型評估
10.2.7模型預測
10.3實驗思考
第11章基于PEGASUS的中文文本摘要實踐
11.1任務目標和實現(xiàn)流程
11.2數(shù)據(jù)處理
11.2.1數(shù)據(jù)集確定
11.2.2數(shù)據(jù)加載
11.2.3將數(shù)據(jù)轉(zhuǎn)換成特征形式
11.2.4構(gòu)造DataLoader
11.3模型構(gòu)建
11.4訓練配置
11.4.1BLEU算法
11.4.2ROUGE算法
11.5模型訓練
11.6模型評估
11.7模型預測
11.8實驗思考
第12章基于ERNIE 3.0實現(xiàn)意圖識別
12.1任務目標和實現(xiàn)流程
12.2數(shù)據(jù)處理
12.2.1數(shù)據(jù)集確定
12.2.2數(shù)據(jù)加載
12.2.3將數(shù)據(jù)轉(zhuǎn)換成特征形式
12.2.4構(gòu)造DataLoader
12.3模型構(gòu)建
12.4訓練配置
12.5模型訓練
12.6模型評估
12.7模型預測
12.8實驗思考
第13章機器閱讀理解實踐
13.1任務目標
13.2實現(xiàn)流程
13.3數(shù)據(jù)處理
13.3.1數(shù)據(jù)集確定
13.3.2數(shù)據(jù)加載
13.3.3將數(shù)據(jù)轉(zhuǎn)換成特征形式
13.3.4構(gòu)造DataLoader
13.4模型構(gòu)建
13.5訓練配置
13.6模型訓練
13.7模型評估
13.8模型預測
13.9實驗思考
第14章機器翻譯實踐
14.1任務目標和實現(xiàn)流程
14.2數(shù)據(jù)處理
14.2.1數(shù)據(jù)集確定
14.2.2數(shù)據(jù)加載
14.2.3將數(shù)據(jù)轉(zhuǎn)換成特征形式
14.2.4構(gòu)建DataLoader
14.2.5后處理
14.3模型構(gòu)建
14.3.1嵌入層的代碼實現(xiàn)
14.3.2組裝Transformer模型
14.4訓練配置
14.5模型訓練
14.6模型評估
14.6.1數(shù)據(jù)讀取
14.6.2權(quán)重加載
14.6.3模型評估
14.7模型預測
14.8實驗思考
第15章基于大模型的自動問答實踐
15.1任務目標和設計方案
15.2通過飛槳零代碼開發(fā)工具實現(xiàn)
15.3通過PaddleNLP實現(xiàn)
15.3.1代碼實現(xiàn)邏輯
15.3.2配置大模型
15.3.3配置向量檢索模型
15.3.4定義document store
15.3.5構(gòu)建文檔索引
15.3.6構(gòu)建問答應用
15.3.7(可選)在線推理部署
15.4實驗思考
附錄 術語與縮略語
參考文獻