第1章教你使用內(nèi)置的NLTK語料庫和頻率分布。我們還將學(xué)習(xí)什么是WordNet,并探索其特點(diǎn)和用法。
第2章演示如何從各種格式的數(shù)據(jù)源中提取文本。我們還將學(xué)習(xí)如何從網(wǎng)絡(luò)源提取原始文本。*后,我們將從這些異構(gòu)數(shù)據(jù)源中對原始文本進(jìn)行規(guī)范并構(gòu)建語料庫。
第3章介紹一些關(guān)鍵的預(yù)處理步驟,如分詞、詞干提取、詞形還原和編輯距離。
第4章介紹正則表達(dá)式,它是*基本、*簡單、*重要和*強(qiáng)大的工具之一。在本章中,你將學(xué)習(xí)模式匹配的概念,它是文本分析的一種方式,基于此概念,沒有比正則表達(dá)式更方便的工具了。
第5章將學(xué)習(xí)如何使用和編寫自己的詞性標(biāo)注器和文法規(guī)則。詞性標(biāo)注是進(jìn)一步句法分析的基礎(chǔ),而通過使用詞性標(biāo)記和組塊標(biāo)記可以產(chǎn)生或改進(jìn)文法規(guī)則。
第6章幫助你了解如何使用內(nèi)置分塊器以及訓(xùn)練或編寫自己的分塊器,即依存句法分析器。在本章中,你將學(xué)習(xí)評估自己訓(xùn)練的模型。
第7章介紹信息抽取和文本分類,告訴你關(guān)于命名實(shí)體識別的更多信息。我們將使用內(nèi)置的命名實(shí)體識別工具,并使用字典創(chuàng)建自己的命名實(shí)體。我們將學(xué)會使用內(nèi)置的文本分類算法和一些簡單的應(yīng)用實(shí)例。
第8章介紹高階自然語言處理方法,該方法將目前為止你所學(xué)的所有課程結(jié)合到一起,并創(chuàng)建應(yīng)對你現(xiàn)實(shí)生活中各種問題的適用方法。我們將介紹諸如文本相似度、摘要、情感分析、回指消解等任務(wù)。
第9章介紹深度學(xué)習(xí)應(yīng)用于自然語言處理所必需的各種基本原理,例如利用卷積神經(jīng)網(wǎng)絡(luò)(CNN)和長短型記憶網(wǎng)絡(luò)(LSTM)進(jìn)行郵件分類、情感分類等,*后在低維空間中可視化高維詞匯。
第10章描述如何利用深度學(xué)習(xí)解決*前沿的問題,包括文本自動生成、情景數(shù)據(jù)問答,預(yù)測下一個*詞的語言模型以及生成式聊天機(jī)器人的開發(fā)。
譯者序
當(dāng)?shù)谝淮伍喿x本書的時候,我深感它就是目前尋求自然語言處理和深度學(xué)習(xí)入門及進(jìn)階方法的讀者所需要的。
眼下自然語言處理在人工智能世界大放異彩,渴望徜徉其中的讀者眾多。我在自然語言處理方面有研究基礎(chǔ),此前也翻譯過一些該領(lǐng)域的前沿文章,希望這份譯本能幫助想通過Python工具深入鉆研自然語言處理的讀者。
本書是利用Python語言解決自然語言處理多種任務(wù)的應(yīng)用指南,旨在幫助讀者快速瀏覽自然語言處理的全貌,進(jìn)而掌握自然語言處理各項(xiàng)任務(wù)的基本原理,最終快速踏入實(shí)踐階段。Python編程語言以其清晰簡潔的語法、易用性和可擴(kuò)展性以及豐富龐大的庫深受廣大開發(fā)者的喜愛。Python內(nèi)置了非常強(qiáng)大的機(jī)器學(xué)習(xí)代碼庫和數(shù)學(xué)庫,使它理所當(dāng)然地成為自然語言處理的開發(fā)利器。而其中的NLTK是使用Python處理自然語言數(shù)據(jù)的領(lǐng)先平臺。它為各種語言資源(比如WordNet)提供了簡便易用的界面,它還能用于高效完成文本預(yù)處理、詞性標(biāo)注、信息抽取和文本分類等多種自然語言處理任務(wù)。
值得一提的是,本書特別涵蓋了自然語言處理的高階任務(wù),比如主題識別、指代消解和創(chuàng)建聊天機(jī)器人等。本書最后兩章介紹了深度學(xué)習(xí)在自然語言處理中的應(yīng)用。每一節(jié)都大致包含三個部分:準(zhǔn)備工作、如何實(shí)現(xiàn)和工作原理,對自然語言處理各種任務(wù)的方方面面都有所涉及。這意味著,如果讀者能夠踏實(shí)地完成本書中給出的所有實(shí)例,就能切實(shí)掌握自然語言處理各種任務(wù)的基礎(chǔ)技術(shù)和原理方法,為進(jìn)一步學(xué)習(xí)和研究奠定基礎(chǔ)。換言之,深入閱讀本書,對讀者探索深度學(xué)習(xí)技術(shù)在自然語言處理中的應(yīng)用會有極大幫助。
最后,感謝機(jī)械工業(yè)出版社華章公司的編輯,是他們的鼓勵和支持使得本書中文版能夠與讀者見面。感謝武文雅和李興亞等多位研究生的輔助和校對,感謝我的家人的支持。盡管我們努力準(zhǔn)確地表達(dá)出作者介紹的思想和方法,但仍難免有不當(dāng)之處。若發(fā)現(xiàn)譯文中的錯誤,敬請指出,我們將非常感激,請將相關(guān)意見發(fā)往chenyf@bjtu.edu.cn。
陳鈺楓
2018年11月
親愛的讀者,感謝你選擇本書來開啟你的自然語言處理(Natural Language Processing, NLP)之路。本書將從實(shí)用的角度帶領(lǐng)你由淺入深逐步理解并實(shí)現(xiàn)NLP解決方案。我們將從訪問內(nèi)置數(shù)據(jù)源和創(chuàng)建自己的數(shù)據(jù)源開始指引你踏上這段旅程。之后你將可以編寫復(fù)雜的NLP解決方案,包括文本規(guī)范化、預(yù)處理、詞性標(biāo)注、句法分析等。
在本書中,我們將介紹在自然語言處理中應(yīng)用深度學(xué)習(xí)所必需的各種基本原理,它們是目前最先進(jìn)的技術(shù)。我們將使用Keras軟件來討論深度學(xué)習(xí)的應(yīng)用。
本書的出發(fā)點(diǎn)如下:
內(nèi)容設(shè)計上旨在通過細(xì)節(jié)分析來幫助新手迅速掌握基本原理。并且,對有經(jīng)驗(yàn)的專業(yè)人員來說,它將更新各種概念,以便更清晰地應(yīng)用算法來選擇數(shù)據(jù)。
介紹了在NLP中深度學(xué)習(xí)應(yīng)用的新趨勢。
本書的組織結(jié)構(gòu)
第1章教你使用內(nèi)置的NLTK語料庫和頻率分布。我們還將學(xué)習(xí)什么是WordNet,并探索其特點(diǎn)和用法。
第2章演示如何從各種格式的數(shù)據(jù)源中提取文本。我們還將學(xué)習(xí)如何從網(wǎng)絡(luò)源提取原始文本。最后,我們將從這些異構(gòu)數(shù)據(jù)源中對原始文本進(jìn)行規(guī)范并構(gòu)建語料庫。
第3章介紹一些關(guān)鍵的預(yù)處理步驟,如分詞、詞干提取、詞形還原和編輯距離。
第4章介紹正則表達(dá)式,它是最基本、最簡單、最重要和最強(qiáng)大的工具之一。在本章中,你將學(xué)習(xí)模式匹配的概念,它是文本分析的一種方式,基于此概念,沒有比正則表達(dá)式更方便的工具了。
第5章將學(xué)習(xí)如何使用和編寫自己的詞性標(biāo)注器和文法規(guī)則。詞性標(biāo)注是進(jìn)一步句法分析的基礎(chǔ),而通過使用詞性標(biāo)記和組塊標(biāo)記可以產(chǎn)生或改進(jìn)文法規(guī)則。
第6章幫助你了解如何使用內(nèi)置分塊器以及訓(xùn)練或編寫自己的分塊器,即依存句法分析器。在本章中,你將學(xué)習(xí)評估自己訓(xùn)練的模型。
第7章介紹信息抽取和文本分類,告訴你關(guān)于命名實(shí)體識別的更多信息。我們將使用內(nèi)置的命名實(shí)體識別工具,并使用字典創(chuàng)建自己的命名實(shí)體。我們將學(xué)會使用內(nèi)置的文本分類算法和一些簡單的應(yīng)用實(shí)例。
第8章介紹高階自然語言處理方法,該方法將目前為止你所學(xué)的所有課程結(jié)合到一起,并創(chuàng)建應(yīng)對你現(xiàn)實(shí)生活中各種問題的適用方法。我們將介紹諸如文本相似度、摘要、情感分析、回指消解等任務(wù)。
第9章介紹深度學(xué)習(xí)應(yīng)用于自然語言處理所必需的各種基本原理,例如利用卷積神經(jīng)網(wǎng)絡(luò)(CNN)和長短型記憶網(wǎng)絡(luò)(LSTM)進(jìn)行郵件分類、情感分類等,最后在低維空間中可視化高維詞匯。
第10章描述如何利用深度學(xué)習(xí)解決最前沿的問題,包括文本自動生成、情景數(shù)據(jù)問答,預(yù)測下一個最優(yōu)詞的語言模型以及生成式聊天機(jī)器人的開發(fā)。
本書需要你做什么
為了成功完成本書的實(shí)例,你需要在Windows或Unix操作系統(tǒng)上安裝Python
3.x及以上版本,硬件要求:CPU
2.0GHz以上,內(nèi)存4GB以上。就Python開發(fā)的IDE而言,市場上有許多可用的IDE,但我最喜歡的是PyCharm社區(qū)版。它是一款由JetBrains開發(fā)的免費(fèi)開源工具,它的技術(shù)支持很強(qiáng)大,會定期發(fā)布該工具的升級和修正版本,你只要熟悉IntelliJ就能保持學(xué)習(xí)進(jìn)度順暢。
本書假設(shè)你已經(jīng)了解Keras的基本知識和如何安裝庫。我們并不要求讀者已經(jīng)具備深度學(xué)習(xí)的知識和數(shù)學(xué)知識,比如線性代數(shù)等。
在本書中,我們使用了以下版本的軟件,它們在最新的版本下都能很好地運(yùn)行:
Anaconda 3 4.3.1 (Anaconda 中包括所有Python及相關(guān)包, Python 3.6.1, NumPy
1.12.1, pandas 0.19.2)
Theano 0.9.0
Keras 2.0.2
feedparser 5.2.1
bs4 4.6.0
gensim 3.0.1
本書的讀者對象
本書適用于想利用NLP提升現(xiàn)有技能來實(shí)現(xiàn)高階文本分析的數(shù)據(jù)科學(xué)家、數(shù)據(jù)分析師和數(shù)據(jù)科學(xué)專業(yè)人員,建議讀者具備自然語言處理的一些基本知識。
本書也適用于對自然語言處理知識毫無了解的新手,或是希望將自己的知識從傳統(tǒng)的NLP技術(shù)擴(kuò)展到最先進(jìn)的深度學(xué)習(xí)應(yīng)用技術(shù)的有經(jīng)驗(yàn)的專業(yè)人士。
小節(jié)
在本書中,有幾個標(biāo)題經(jīng)常出現(xiàn)(準(zhǔn)備工作、如何實(shí)現(xiàn)、工作原理、更多、參見)。為了明確說明如何完成一個實(shí)例,本書使用了如下內(nèi)容排布:
準(zhǔn)備工作
本節(jié)介紹完成實(shí)例的預(yù)期結(jié)果,并說明如何安裝所需的軟件或初步設(shè)置。
如何實(shí)現(xiàn)
本節(jié)包含完成實(shí)例所需遵循的步驟。
工作原理
本節(jié)通常對上一節(jié)的操作進(jìn)行詳細(xì)的解釋。
更多
本節(jié)包含實(shí)例的補(bǔ)充信息,以便讀者對實(shí)例的實(shí)現(xiàn)方法有更多的了解。
參見
本節(jié)為實(shí)例的其他有用信息提供有效的鏈接。
約定
在本書中,你會發(fā)現(xiàn)許多不同類型信息的文本格式。下面是這些格式的一些范例和它們的含義解釋。
讀者反饋
歡迎讀者的反饋。讓我們知道你對本書的看法,哪些部分喜歡還是不喜歡。讀者反饋對我們來說很重要,因?yàn)樗兄谖覀兞私庾x者真正能從中獲益最多的地方。將你的反饋發(fā)送到郵箱feedback@packtpub.com即可,并且在你的郵箱標(biāo)題中提到本書的書名。如果你有一個擅長或是比較感興趣的話題,可以撰寫或投稿書刊,請在www.packtpub.com/authors網(wǎng)站上查看作者指南。
客戶支持
既然你是一本Packt書的擁有者,在購買時能夠獲得很多額外的資源。
示例代碼下載
你可以從http://www.packtpub.com通過個人賬號下載本書的示例代碼文件。如果你在別處購買了本書,可以訪問http://
www. packtpub.com/support并進(jìn)行注冊,就可以直接通過郵件方式獲得相關(guān)文件。你可以按照以下步驟下載代碼文件:
1.使用你的電子郵件地址和密碼登錄或注冊到我們的網(wǎng)站;
2.將鼠標(biāo)指針置于頂部的SUPPORT選項(xiàng)卡上;
3.點(diǎn)擊Code Downloads & Errata;
4.在Search框中輸入圖書的名稱;
5.選擇你要下載的代碼文件的相應(yīng)圖書;
6.從你購買本書的下拉菜單中選擇;
7.點(diǎn)擊Code Download。
你也可以在Packt出版社網(wǎng)站關(guān)于本書的網(wǎng)頁上通過點(diǎn)擊Code Files按鈕來下載代碼文件。通過在Search框中輸入圖書的名稱來訪問該頁面。請注意,你需要登錄到你的Packt賬戶。一旦文件被下載,請確保你使用的是最新版本的工具解壓文件夾:
WinRAR/7-Zip for Windows
Zipeg/iZip/UnRarX for Mac
7-Zip/PeaZip for Linux
本書的代碼可從GitHub下載,托管在https://github.com/PacktPublishing/Natural-Language-Processing-with-Python-Cookbook上。其余代碼包可以從https://github.com/PacktPublishing/上豐富的圖書和視頻目錄中獲取。請檢驗(yàn)測試!
克里希納·巴夫薩(Krishna
Bhavsar)花了大約10年時間在各行業(yè)領(lǐng)域如酒店業(yè)、銀行業(yè)、醫(yī)療行業(yè)等進(jìn)行自然語言處理、社交媒體分析和文本挖掘方面的研究。他致力于用不同的NLP語料庫如Stanford
CoreNLP、IBM的 SystemText和BigInsights、GATE和NLTK來解決與文本分析有關(guān)的行業(yè)問題。克里希納還致力于分析社交媒體給熱門電視節(jié)目和流行零售品牌以及產(chǎn)品帶來的效應(yīng)。2010年,他在NAACL上發(fā)表了一篇關(guān)于情感分析增強(qiáng)技術(shù)的論文。近期,他創(chuàng)建了一個NLP管道/工具集并開源以便公眾使用。除了學(xué)術(shù)和科技,克里希納還熱衷于摩托車和足球,空閑時間喜歡旅行和探索。他騎摩托車參加過環(huán)印度公路旅行并在東南亞和歐洲大部分國家徒步旅行過。
納雷什·庫馬爾(Naresh
Kumar)曾為財富500強(qiáng)企業(yè)設(shè)計、實(shí)施和運(yùn)行超大型因特網(wǎng)應(yīng)用程序,在這方面他擁有超過十年的專業(yè)經(jīng)驗(yàn)。他是一位全棧架構(gòu)師,在電子商務(wù)、網(wǎng)絡(luò)托管、醫(yī)療、大數(shù)據(jù)及分析、數(shù)據(jù)流、廣告和數(shù)據(jù)庫等領(lǐng)域擁有豐富的實(shí)踐經(jīng)驗(yàn)。他依賴開源并積極為其做貢獻(xiàn)。納雷什一直走在新興技術(shù)的前沿,從Linux系統(tǒng)內(nèi)部技術(shù)到前端技術(shù)。他曾在拉賈斯坦邦的BITS-Pilani學(xué)習(xí),獲得了計算機(jī)科學(xué)和經(jīng)濟(jì)學(xué)的雙學(xué)位。
普拉塔普·丹蒂(Pratap
Dangeti)在班加羅爾的研究和創(chuàng)新實(shí)驗(yàn)室開發(fā)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)方法,以用于結(jié)構(gòu)化、圖像和TCS文本數(shù)據(jù)。他在分析和數(shù)據(jù)科學(xué)領(lǐng)域擁有豐富的經(jīng)驗(yàn),并在IIT Bombay獲得了工業(yè)工程和運(yùn)籌學(xué)項(xiàng)目的碩士學(xué)位。普拉塔普是一名人工智能愛好者。閑暇時,他喜歡閱讀下一代技術(shù)和創(chuàng)新方法。他還是Packt出版的《Statistics
for Machine Learning》一書的作者。
譯者序
前言
作者簡介
審校者簡介
第1章 語料庫和WordNet 1
1.1 引言
1
1.2 訪問內(nèi)置語料庫 1
1.3 下載外部語料庫,加載并訪問 3
1.4 計算布朗語料庫中三種不同類別的特殊疑問詞 5
1.5 探討網(wǎng)絡(luò)文本和聊天文本的詞頻分布 7
1.6 使用WordNet進(jìn)行詞義消歧 9
1.7 選擇兩個不同的同義詞集,使用WordNet探討上位詞和下位詞的概念 12
1.8 基于WordNet計算名詞、動詞、形容詞和副詞的平均多義性 15
第2章 針對原始文本,獲取源數(shù)據(jù)和規(guī)范化 17
2.1 引言
17
2.2 字符串操作的重要性 17
2.3 深入實(shí)踐字符串操作 19
2.4 在Python中讀取PDF文件 21
2.5 在Python中讀取Word文件
23
2.6 使用PDF、DOCX和純文本文件,創(chuàng)建用戶自定義的語料庫 26
2.7 讀取RSS信息源的內(nèi)容 29
2.8 使用BeautifulSoup解析HTML 31
第3章 預(yù)處理 34
3.1 引言
34
3.2 分詞學(xué)習(xí)使用NLTK內(nèi)置的分詞器 34
3.3 詞干提取學(xué)習(xí)使用NLTK內(nèi)置的詞干提取器 36
3.4 詞形還原學(xué)習(xí)使用NLTK中的WordnetLemmatizer函數(shù)
38
3.5 停用詞學(xué)習(xí)使用停用詞語料庫及其應(yīng)用 40
3.6 編輯距離編寫計算兩個字符串之間編輯距離的算法 42
3.7 處理兩篇短文并提取共有詞匯 44
第4章 正則表達(dá)式 50
4.1 引言
50
4.2 正則表達(dá)式學(xué)習(xí)使用*、 和? 50
4.3 正則表達(dá)式學(xué)習(xí)使用$和^,以及如何在單詞內(nèi)部(非開頭與結(jié)尾處)進(jìn)行模式匹配 52
4.4 匹配多個字符串和子字符串 54
4.5 學(xué)習(xí)創(chuàng)建日期正則表達(dá)式和一組字符集合或字符范圍 56
4.6 查找句子中所有長度為5的單詞,并進(jìn)行縮寫 58
4.7 學(xué)習(xí)編寫基于正則表達(dá)式的分詞器 59
4.8 學(xué)習(xí)編寫基于正則表達(dá)式的詞干提取器 60
第5章 詞性標(biāo)注和文法 63
5.1 引言
63
5.2 使用內(nèi)置的詞性標(biāo)注器 63
5.3 編寫你的詞性標(biāo)注器 65
5.4 訓(xùn)練你的詞性標(biāo)注器 70
5.5 學(xué)習(xí)編寫你的文法 73
5.6 編寫基于概率的上下文無關(guān)文法 76
5.7 編寫遞歸的上下文無關(guān)文法 79
第6章 分塊、句法分析、依存分析 82
6.1 引言
82
6.2 使用內(nèi)置的分塊器 82
6.3 編寫你的簡單分塊器 84
6.4 訓(xùn)練分塊器 87
6.5 遞歸下降句法分析 90
6.6 shift-reduce句法分析
93
6.7 依存句法分析和主觀依存分析 95
6.8 線圖句法分析 97
第7章 信息抽取和文本分類 101
7.1 引言
101
7.2 使用內(nèi)置的命名實(shí)體識別工具 102
7.3 創(chuàng)建字典、逆序字典和使用字典 104
7.4 特征集合選擇 109
7.5 利用分類器分割句子 113
7.6 文本分類 116
7.7 利用上下文進(jìn)行詞性標(biāo)注 120
第8章 高階自然語言處理實(shí)踐 124
8.1 引言
124
8.2 創(chuàng)建一條自然語言處理管道 124
8.3 解決文本相似度問題 131
8.4 主題識別 136
8.5 文本摘要 140
8.6 指代消解 143
8.7 詞義消歧 147
8.8 情感分析 150
8.9 高階情感分析 153
8.10 創(chuàng)建一個對話助手或聊天機(jī)器人 157
第9章 深度學(xué)習(xí)在自然語言處理中的應(yīng)用 163
9.1 引言
163
9.2 利用深度神經(jīng)網(wǎng)絡(luò)對電子郵件進(jìn)行分類 168
9.3 使用一維卷積網(wǎng)絡(luò)進(jìn)行IMDB情感分類
175
9.4 基于雙向LSTM的IMDB情感分類模型 179
9.5 利用詞向量實(shí)現(xiàn)高維詞在二維空間的可視化 183
第10章 深度學(xué)習(xí)在自然語言處理中的高級應(yīng)用 188
10.1 引言
188
10.2 基于莎士比亞的著作使用LSTM技術(shù)自動生成文本 188
10.3 基于記憶網(wǎng)絡(luò)的情景數(shù)據(jù)問答 193
10.4 使用循環(huán)神經(jīng)網(wǎng)絡(luò)LSTM進(jìn)行語言建模以預(yù)測最優(yōu)詞 199
10.5 使用循環(huán)神經(jīng)網(wǎng)絡(luò)LSTM構(gòu)建生成式聊天機(jī)器人 203