自然語言處理是一門融語言學(xué)、計算機科學(xué)、數(shù)學(xué)于一體的學(xué)科,比較復(fù)雜,學(xué)習(xí)門檻高,但本書巧妙地避開了晦澀難懂的數(shù)學(xué)公式和證明,即便沒有數(shù)學(xué)基礎(chǔ),也能零基礎(chǔ)入門。
本書專注于中文的自然語言處理,以Python及其相關(guān)框架為工具,以實戰(zhàn)為導(dǎo)向,詳細講解了自然語言處理的各種核心技術(shù)、方法論和經(jīng)典算法。三位作者在人工智能、大數(shù)據(jù)和算法領(lǐng)域有豐富的積累和經(jīng)驗,是*、前明略數(shù)據(jù)和七牛云的資深專家。同時,本書也得到了*達摩院高級算法專家、七牛云AI實驗室Leader等專家的高度評價和鼎力推薦。
全書一共11章,在邏輯上分為2個部分:
*部分(第1、2、11章)
主要介紹了自然語言處理所需要了解的基礎(chǔ)知識、前置技術(shù)、Python科學(xué)包、正則表達式以及Solr檢索等。
第二部分(第5-10章)
第3~5章講解了詞法分析相關(guān)的技術(shù),包括中文分詞技術(shù)、詞性標注與命名實體識別、關(guān)鍵詞提取算法等。
第6章講解了句法分析技術(shù),該部分目前理論研究較多,工程實踐中使用門檻相對較高,且效果多是依賴結(jié)合業(yè)務(wù)知識進行規(guī)則擴展,因此本書未做深入探討。
第7章講解了常用的向量化方法,這些方法常用于各種NLP任務(wù)的輸入。
第8章講解了情感分析相關(guān)的概念、場景以及一般做情感分析的流程,情感分析在很多行業(yè)都有應(yīng)用。
第9章介紹了機器學(xué)習(xí)的重要概念,同時重點突出NLP常用的分類算法、聚類算法,還介紹了幾個案例。
第10章節(jié)介紹了NLP中常用的一些深度學(xué)習(xí)算法,這些方法比較復(fù)雜,但是非常實用,需要讀者耐心學(xué)習(xí)。
(1)三位作者資歷深厚,分別是*的數(shù)據(jù)架構(gòu)師和NLP專家、百煉智能的NLP專家(前明略數(shù)據(jù)的技術(shù)合伙人和科學(xué)家)、七牛云AI實驗室NLP&OCR方向負責人
*、前明略數(shù)據(jù)和七牛云的資深NLP專家撰寫
(2)以實戰(zhàn)為導(dǎo)向,繞開各種復(fù)雜數(shù)學(xué)公式與證明,確保讀者零基礎(chǔ)入門,詳細講解自然語言處理
的各種核心技術(shù)、方法論和經(jīng)典算法
(3)*達摩院高級算法專家、百煉智能CEO、七牛云AI LAB負責人、天善智能創(chuàng)始人聯(lián)袂推薦
PREFACE前 言為什么要寫這本書這是一本關(guān)于中文自然語言處理(簡稱NLP)的書,NLP是計算機科學(xué)領(lǐng)域與人工智能領(lǐng)域中的一個重要方向。它研究能實現(xiàn)人與計算機之間用自然語言進行有效通信的各種理論和方法。NLP是一門融語言學(xué)、計算機科學(xué)、數(shù)學(xué)于一體的科學(xué)。本書偏重實戰(zhàn),不僅系統(tǒng)介紹了NLP涉及的知識點,同時也教會讀者如何實際應(yīng)用與開發(fā)。圍繞這個主題,本書從章節(jié)規(guī)劃到具體的講述方式,具有以下兩個特點:
第一個特點是本書的主要目標讀者定位為高校相關(guān)專業(yè)的大學(xué)生(統(tǒng)計學(xué)、計算機技術(shù))、NLP愛好者,以及不具備專業(yè)數(shù)學(xué)知識的人群。NLP是一系列學(xué)科的集合體,其中包含了語言學(xué)、機器學(xué)習(xí)、統(tǒng)計學(xué)、大數(shù)據(jù)以及人工智能等方面,尤其依賴數(shù)學(xué)知識才能深入理解其原理。因此本書對專業(yè)知識的講述過程必須繞過復(fù)雜的數(shù)學(xué)證明,從問題的前因后果、創(chuàng)造者思考的過程、概率或幾何解釋代替數(shù)學(xué)解釋等一系列迂回的路徑去深入模型的本源,這可能多少會犧牲一些嚴謹性,但是卻能換來對大多數(shù)人更為友好的閱讀體驗。
第二個特點是本書是一本介紹中文自然語言處理的書,中文分詞相對于英文分詞來說更為復(fù)雜,讀者將通過例子來學(xué)習(xí),體會到能夠通過實踐驗證自己想法的價值,我們提供了豐富的來自NLP領(lǐng)域的案例。在本書的內(nèi)容編制上,從知識點背景介紹到原理剖析,輔以實戰(zhàn)案例,所有的代碼會在書中詳細列出或者上傳Github方便讀者下載與調(diào)試,幫助讀者快速上手掌握知識點,同時可以應(yīng)用到后續(xù)實際的開發(fā)項目中。在實際項目章節(jié)中,選取目前在NLP領(lǐng)域中比較熱門的項目,將之前的知識點進行匯總,幫助讀者鞏固與提升。本書難度適中屬于入門和擴展級讀物。
讀者將學(xué)到什么如何用NLP 與語言學(xué)的關(guān)鍵概念來描述和分析語言NLP 中的數(shù)據(jù)結(jié)構(gòu)和算法是怎樣的自然語言處理目前主流的技術(shù)與方法論信息檢索技術(shù)與大數(shù)據(jù)應(yīng)用讀者對象1)統(tǒng)計學(xué)或相關(guān)IT專業(yè)學(xué)生本書的初衷是面向相關(guān)專業(yè)的學(xué)生大量基于理論知識的認知卻缺乏實戰(zhàn)經(jīng)驗的人員,讓其在理論的基礎(chǔ)上深入了解。通過本書,學(xué)生可以跟隨本書的教程一起操作學(xué)習(xí),達到對自己使用的人工智能工具、算法和技術(shù)知其然亦知其所以然的目的。
2)信息科學(xué)和計算機科學(xué)愛好者本書是一部近代科技的歷史書,也是一部科普書,還可以作為一部人工智能思想和技術(shù)的教科書去閱讀。通過本書可以了解到行業(yè)先驅(qū)們在探索人工智能道路上所做出的努力和思考,理解他們不同的觀點和思路,有助于開拓自己的思維和視野。
3)人工智能相關(guān)專業(yè)的研究人員本書具體介紹了NLP相關(guān)知識。通過本書可以了解理論知識,了解哪些才是項目所需的內(nèi)容以及如何在項目中實現(xiàn),能夠快速上手。
如何閱讀本書本書內(nèi)容針對NLP從以下幾個方面進行闡述:
第一部分的內(nèi)容包括第1、2、11章,主要介紹了NLP所需要了解的Python科學(xué)包、正則表達式以及Solr檢索。
第二部分的內(nèi)容包括第5~10章的內(nèi)容,主要是介紹NLP相關(guān)的各個知識點。分別是:
第3~5章主要介紹了詞法分析層面的一些技術(shù),這一部分是NLP技術(shù)的基礎(chǔ),需要讀者熟練掌握。
第6章介紹了句法分析技術(shù),該部分目前理論研究較多,工程實踐中使用門檻相對較高,且效果多是依賴結(jié)合業(yè)務(wù)知識進行規(guī)則擴展,因此本書未做深入探討,讀者了解即可。
第7章介紹了常用的向量化方法。這些方法常用于各種NLP任務(wù)的輸入,讀者需重點掌握。
第8章介紹了情感分析相關(guān)的概念、場景以及一般做情感分析的流程,情感分析在很多行業(yè)都有應(yīng)用,所以需要讀者熟練掌握。
第9章介紹了機器學(xué)習(xí)的一些基本概念,重點突出NLP常用的分類算法、聚類算法,同時還介紹了幾個案例,這章是NLP的基礎(chǔ)內(nèi)容,需要重點掌握。
第10章介紹了NLP中常用的深度學(xué)習(xí)算法,這些方法比較復(fù)雜,但是非常實用,需要讀者耐心學(xué)習(xí)。
除了以上內(nèi)容外,以下信息是在本書中涉及特定內(nèi)容的解釋和說明:
內(nèi)容延伸。本書每個章節(jié)都有一定的內(nèi)容延伸章節(jié),其內(nèi)容是對于有興趣深入研究的讀者推薦的資料或進一步了解的知識點,由于每個主題都涵蓋很多內(nèi)容,因此本書僅在內(nèi)容延伸中拋磚引玉,有興趣的讀者可以加以了解和學(xué)習(xí)。
相關(guān)知識點。本書很多章節(jié)中都有相關(guān)知識點的內(nèi)容介紹,其對特定工具、知識、算法、庫等方面做了較為詳細的介紹,它們是本書的知識堡壘。
本章小結(jié)。每章的結(jié)尾都有本章小結(jié),在小結(jié)中包含4部分內(nèi)容。
內(nèi)容小結(jié)。內(nèi)容小結(jié)是有關(guān)本章內(nèi)容的總結(jié)。
重點知識。重點知識是本章重點需要讀者掌握的知識和內(nèi)容。
外部參考。外部參考是本章提到過但是無法詳細介紹的內(nèi)容,都在外部參考中列出,有興趣的讀者可以基于比構(gòu)建自己的知識圖譜。
應(yīng)用實踐;诒菊聝(nèi)容推薦讀者在實踐中落地的建議。
提示。對于知識點的重要提示和應(yīng)用技巧,相對相關(guān)知識點而言,每條提示信息的內(nèi)容量較少,一般都是經(jīng)驗類的總結(jié)。
注意。特定需要引起注意的知識,這些注意點是應(yīng)用過程中需要避免的大坑。
關(guān)于附件的使用方法除了第1章外,本書的每一章都有對應(yīng)源數(shù)據(jù)和完整代碼,該內(nèi)容可在本書中直接找到,有些代碼需要從Github下載,地址是https://github.com/nlpinaction/learning-nlp。需要注意的是,為了讓讀者更好地了解每行代碼的含義,筆者在注釋信息中使用了中文標注,且每個程序文件的編碼格式都是UTF-8。
勘誤和支持由于筆者水平有限,書中難免會出現(xiàn)一些錯誤或者不準確的地方,懇請讀者批評指正。讀者可通過以下途徑聯(lián)系并反饋建議或意見:
即時通訊。添加個人微信(kennymingtu)反饋問題。
電子郵件。發(fā)送E-mail到kenny_tm@hotmail.com。
致謝在本書的撰寫過程中,得到了來自多方的指導(dǎo)、幫助和支持。
首先要感謝的是機械工業(yè)出版社華章公司的楊福川編輯,他在本書出版過程中給予我極大的支持和鼓勵,并為此書的撰寫提供了方向和思路指導(dǎo)。
其次要感謝黃英和周劍老師在自然語言處理項目和工作中提供的寶貴經(jīng)驗和支持。
再次要感謝全程參與審核、校驗等工作的張錫鵬、孫海亮編輯以及其他背后默默支持的出版工作者,是他們的辛勤付出才讓本書得以順利面世。
最后感謝我的父母、家人和朋友,使得我有精力完成本書的編寫。
謹以此書獻給熱愛數(shù)據(jù)工作并為之奮斗的朋友們,愿大家身體健康、生活美滿、事業(yè)有成!
涂銘2018年1月于上海書籍初成,感慨良多。
在接受邀請撰寫本書時,從未想到過程如此艱辛。
感謝我的女友和家人的理解與支持,陪伴我度過寫書的漫長歲月。
感謝我的合著者涂銘和劉樹春,與他們合作輕松愉快,給予我很多的理解和包容。
感謝參與審閱、校驗等工作的孫海亮老師等出版社工作人員,是他們在幕后的辛勤付出保證了本書的出版成功。
再次感謝一路陪伴的所有人!
劉祥2018年1月于北京首先要感謝我的兩位合作者涂銘和劉祥,能夠相聚在一起寫書是緣分。當初聊到出版NLP入門書籍的想法時我們一拍即合,然而真正開始執(zhí)筆才發(fā)現(xiàn)困難重重,業(yè)余時間常常被工作擠占,進度一拖再拖,在伙伴們的支持下,克服了拖延癥,順利完成本書。
特別感謝我的愛人和家人的悉心照料和支持。
感謝孫海亮老師、張錫鵬老師等出版社工作人員,沒有他們的辛勞付出就沒有本書保質(zhì)保量的完成。
最后感謝幫我校稿的林博、謝雨飛、陳敏,謝謝他們在生活和工作上給我的支持與幫助。
最后,祝大家學(xué)習(xí)快樂。
劉樹春2018年1月于上海
涂銘:
*數(shù)據(jù)架構(gòu)師,對大數(shù)據(jù)、自然語言處理、Python、Java相關(guān)技術(shù)有深入的研究,積累了豐富的實踐經(jīng)驗。曾就職于北京明略數(shù)據(jù),是大數(shù)據(jù)方面的高級咨詢顧問。
在工業(yè)領(lǐng)域參與了設(shè)備故障診斷項目,在零售行業(yè)參與了精準營銷項目。在自然語言處理方面,擔任導(dǎo)購機器人項目的架構(gòu)師,主導(dǎo)開發(fā)機器人的語義理解、短文本相似度匹配、上下文理解,以及通過自然語言檢索產(chǎn)品庫,在項目中構(gòu)建了NoSQL 文本檢索等大數(shù)據(jù)架構(gòu),也同時負責問答對的整理和商品屬性的提取,帶領(lǐng)NLP團隊構(gòu)建語義解析層。
劉祥:
百煉智能自然語言處理專家,主要研究知識圖譜、NLG等前沿技術(shù),參與機器自動寫作產(chǎn)品的研發(fā)與設(shè)計。
曾在明略數(shù)據(jù)擔當數(shù)據(jù)技術(shù)合伙人兼數(shù)據(jù)科學(xué)家,負責工業(yè)、金融等業(yè)務(wù)領(lǐng)域的數(shù)據(jù)挖掘工作,在這些領(lǐng)域構(gòu)建了諸如故障診斷、關(guān)聯(lián)賬戶分析、新聞推薦、商品推薦等模型。
酷愛新技術(shù),活躍于開源社區(qū),是Spark
MLlib和Zeppelin的Contributor。
劉樹春:
七牛云高級算法專家,七牛AI實驗室NLP&OCR方向負責人,主要負責七牛NLP以及OCR相關(guān)項目的研究與落地。在七牛人工智能實驗室期間,參與大量NLP相關(guān)項目,例如知識圖譜、問答系統(tǒng)、文本摘要、語音相關(guān)系統(tǒng)等;同時重點關(guān)注NLP與CV的交叉研究領(lǐng)域,主要有視覺問答(VQA),圖像標注(Image Caption)等前沿問題。
曾在Intel
DCSG數(shù)據(jù)與云計算部門從事機器學(xué)習(xí)與云平臺的融合開發(fā),項目獲得IDF大獎。碩士就讀于華東師范大學(xué)機器學(xué)習(xí)實驗室,在校期間主攻機器學(xué)習(xí),機器視覺,圖像處理,并在相關(guān)國際會議發(fā)表多篇SCI/EI論文。
目 錄
序一
序二
前言
第1章 NLP基礎(chǔ) 1
1.1 什么是NLP 1
1.1.1 NLP的概念 1
1.1.2 NLP的研究任務(wù) 3
1.2 NLP的發(fā)展歷程 5
1.3 NLP相關(guān)知識的構(gòu)成 7
1.3.1 基本術(shù)語 7
1.3.2 知識結(jié)構(gòu) 9
1.4 語料庫 10
1.5 探討NLP的幾個層面 11
1.6 NLP與人工智能 13
1.7 本章小結(jié) 15
第2章 NLP前置技術(shù)解析 16
2.1 搭建Python開發(fā)環(huán)境 16
2.1.1 Python的科學(xué)計算發(fā)行版Anaconda 17
2.1.2 Anaconda的下載與安裝 19
2.2 正則表達式在NLP的基本應(yīng)用 21
2.2.1 匹配字符串 22
2.2.2 使用轉(zhuǎn)義符 26
2.2.3 抽取文本中的數(shù)字 26
2.3 Numpy使用詳解 27
2.3.1 創(chuàng)建數(shù)組 28
2.3.2 獲取Numpy中數(shù)組的維度 30
2.3.3 獲取本地數(shù)據(jù) 31
2.3.4 正確讀取數(shù)據(jù) 32
2.3.5 Numpy數(shù)組索引 32
2.3.6 切片 33
2.3.7 數(shù)組比較 33
2.3.8 替代值 34
2.3.9 數(shù)據(jù)類型轉(zhuǎn)換 36
2.3.10 Numpy的統(tǒng)計計算方法 36
2.4 本章小結(jié) 37
第3章 中文分詞技術(shù) 38
3.1 中文分詞簡介 38
3.2 規(guī)則分詞 39
3.2.1 正向最大匹配法 39
3.2.2 逆向最大匹配法 40
3.2.3 雙向最大匹配法 41
3.3 統(tǒng)計分詞 42
3.3.1 語言模型 43
3.3.2 HMM模型 44
3.3.3 其他統(tǒng)計分詞算法 52
3.4 混合分詞 52
3.5 中文分詞工具Jieba 53
3.5.1 Jieba的三種分詞模式 54
3.5.2 實戰(zhàn)之高頻詞提取 55
3.6 本章小結(jié) 58
第4章 詞性標注與命名實體識別 59
4.1 詞性標注 59
4.1.1 詞性標注簡介 59
4.1.2 詞性標注規(guī)范 60
4.1.3 Jieba分詞中的詞性標注 61
4.2 命名實體識別 63
4.2.1 命名實體識別簡介 63
4.2.2 基于條件隨機場的命名實體識別 65
4.2.3 實戰(zhàn)一:日期識別 69
4.2.4 實戰(zhàn)二:地名識別 75
4.3 總結(jié) 84
第5章 關(guān)鍵詞提取算法 85
5.1 關(guān)鍵詞提取技術(shù)概述 85
5.2 關(guān)鍵詞提取算法TF/IDF算法 86
5.3 TextRank算法 88
5.4 LSA/LSI/LDA算法 91
5.4.1 LSA/LSI算法 93
5.4.2 LDA算法 94
5.5 實戰(zhàn)提取文本關(guān)鍵詞 95
5.6 本章小結(jié) 105
第6章 句法分析 106
6.1 句法分析概述 106
6.2 句法分析的數(shù)據(jù)集與評測方法 107
6.2.1 句法分析的數(shù)據(jù)集 108
6.2.2 句法分析的評測方法 109
6.3 句法分析的常用方法 109
6.3.1 基于PCFG的句法分析 110
6.3.2 基于最大間隔馬爾可夫網(wǎng)絡(luò)的句法分析 112
6.3.3 基于CRF的句法分析 113
6.3.4 基于移進歸約的句法分析模型 113
6.4 使用Stanford Parser的PCFG算法進行句法分析 115
6.4.1 Stanford Parser 115
6.4.2 基于PCFG的中文句法分析實戰(zhàn) 116
6.5 本章小結(jié) 119
第7章 文本向量化 120
7.1 文本向量化概述 120
7.2 向量化算法word2vec 121
7.2.1 神經(jīng)網(wǎng)絡(luò)語言模型 122
7.2.2 C&W模型 124
7.2.3 CBOW模型和Skip-gram模型 125
7.3 向量化算法doc2vec/str2vec 127
7.4 案例:將網(wǎng)頁文本向量化 129
7.4.1 詞向量的訓(xùn)練 129
7.4.2 段落向量的訓(xùn)練 133
7.4.3 利用word2vec和doc2vec計算網(wǎng)頁相似度 134
7.5 本章小結(jié) 139
第8章 情感分析技術(shù) 140
8.1 情感分析的應(yīng)用 141
8.2 情感分析的基本方法 142
8.2.1 詞法分析 143
8.2.2 機器學(xué)習(xí)方法 144
8.2.3 混合分析 144
8.3 實戰(zhàn)電影評論情感分析 145
8.3.1 卷積神經(jīng)網(wǎng)絡(luò) 146
8.3.2 循環(huán)神經(jīng)網(wǎng)絡(luò) 147
8.3.3 長短時記憶網(wǎng)絡(luò) 148
8.3.4 載入數(shù)據(jù) 150
8.3.5 輔助函數(shù) 154
8.3.6 模型設(shè)置 155
8.3.7 調(diào)參配置 158
8.3.8 訓(xùn)練過程 159
8.4 本章小結(jié) 159
第9章 NLP中用到的機器學(xué)習(xí)算法 160
9.1 簡介 160
9.1.1 機器學(xué)習(xí)訓(xùn)練的要素 161
9.1.2 機器學(xué)習(xí)的組成部分 162
9.2 幾種常用的機器學(xué)習(xí)方法 166
9.2.1 文本分類 166
9.2.2 特征提取 168
9.2.3 標注 169
9.2.4 搜索與排序 170
9.2.5 推薦系統(tǒng) 170
9.2.6 序列學(xué)習(xí) 172
9.3 分類器方法 173
9.3.1 樸素貝葉斯Naive Bayesian 173
9.3.2 邏輯回歸 174
9.3.3 支持向量機 175
9.4 無監(jiān)督學(xué)習(xí)的文本聚類 177
9.5 文本分類實戰(zhàn):中文垃圾郵件分類 180
9.5.1 實現(xiàn)代碼 180
9.5.2 評價指標 187
9.6 文本聚類實戰(zhàn):用K-means對豆瓣讀書數(shù)據(jù)聚類 190
9.7 本章小結(jié) 194
第10章 基于深度學(xué)習(xí)的NLP算法 195
10.1 深度學(xué)習(xí)概述 195
10.1.1 神經(jīng)元模型 196
10.1.2 激活函數(shù) 197
10.1.3 感知機與多層網(wǎng)絡(luò) 198
10.2 神經(jīng)網(wǎng)絡(luò)模型 201
10.3 多輸出層模型 203
10.4 反向傳播算法 204
10.5 最優(yōu)化算法 208
10.5.1 梯度下降 208
10.5.2 隨機梯度下降 209
10.5.3 批量梯度下降 210
10.6 丟棄法 211
10.7 激活函數(shù) 211
10.7.1 tanh函數(shù) 212
10.7.2 ReLU函數(shù) 212
10.8 實現(xiàn)BP算法 213
10.9 詞嵌入算法 216
10.9.1 詞向量 217
10.9.2 word2vec簡介 217
10.9.3 詞向量模型 220
10.9.4 CBOW和Skip-gram模型 222
10.1