您現在的位置是:首頁 > 棋牌

NLP實戰:利用Python理解、分析和生成文字|贈書

  • 由 AI科技大本營 發表于 棋牌
  • 2022-09-27
簡介自然語言處理實戰 利用Python理解、分析和生成文字作者:[美]霍布森萊恩(Hobson Lane) ,科爾霍華德(Cole Howard) ,漢納斯馬克斯哈普克(Hannes Max Hapke)譯者: 史亮 ,魯驍 ,唐可欣 ,王斌注

怎麼分析對話語料

NLP實戰:利用Python理解、分析和生成文字|贈書

導讀:本文內容參考自

《自然語言處理實戰:利用Python理解、分析和生成文字》

一書,由Hobson Lane等人所著。

本書是介紹自然語言處理(NLP)和深度學習的實戰書。NLP已成為深度學習的核心應用領域,而深度學習是NLP研究和應用中的必要工具。本書面向中高階Python開發人員,兼具基礎理論與程式設計實戰,是現代NLP領域從業者的實用參考書。

瞭解關於自然語言處理的更多幹貨知識,關注AI科技大本營並評論分享你對自然語言處理的見解

,我們將從中

選出10條優質評論

,各送出《自然語言處理實戰:利用Python理解、分析和生成文字》一本。

活動截止時間為11月15日晚8點。

1950年,艾倫·圖靈(Alan Turing)發表了一篇題為“ 計算機機械與智慧(Computing Machinery and Intelligence) ” 的文章,提出了著名的“圖靈測試(Turing Test)”。這當中涉及了自動解釋和自然語言的生成,作為判斷智慧的條件,這就是自然語言處理(Natural Language Processing,NLP)發展的開端。

自然語言處理是計算機科學和人工智慧(artificial intelligence,AI)的一個研究領域,它關注自然語言(如英語或漢語普通話)的處理。這種處理通常包括將自然語言轉換成計算機能夠用於理解這個世界的資料(數字)。同時,這種對世界的理解有時被用於生成能夠體現這種理解的自然語言文字(即自然語言生成)。

語言的發明是為了便於溝通交流,是人類建立共識的基礎。而現在,奮鬥在自然語言處理技術的程式設計師們都有一個目標:讓計算機也能理解人類的語言。

NLP實戰:利用Python理解、分析和生成文字|贈書

NLP的魅力——創造會交流的機器

自從計算機被髮明出來,機器一直在處理語言。然而,這些“形式”語言(如早期語言Ada、COBOL和Fortran)被設計成只有一種正確的解釋(或編譯)方式。

目前,維基百科列出了700多種程式語言。相比之下,Ethnologue已經確認的自然語言總數是當前世界各地人們所用的自然語言的10倍。谷歌的自然語言文件索引遠超過1億吉位元組,而且這只是索引而已,當前線上的實際自然語言內容大小肯定超過1000億吉位元組,同時這些文件並沒有完全覆蓋整個網際網路。

“自然語言”與“自然世界”中“自然”一詞的意義相同。世界上自然的、進化的事物不同於人類設計和製造的機械的、人工的東西。能夠設計和構建軟體來閱讀和處理大家現在正在閱讀的語言,該語言正是關於如何構建軟體來處理自然語言的,這非常高階,也十分神奇。

起初,Google等搜尋網站需要一些技巧才能找到我們要找的東西,但很快就變得更加智慧了,可以接受越來越多的詞彙搜尋。然後智慧手機的文字自動補全功能開始變得先進起來,中間按鈕給出的通常就是我們要找的詞。這些就是自然語言處理的魅力——讓機器理解我們的想法。

越來越多的娛樂、廣告和財務報告內容在不需要人動一根手指的情況下就可以生成。NLP機器人可以編寫整個電影指令碼。影片遊戲和虛擬世界經常會出現與我們對話的機器人,它們有時甚至會談論機器人和人工智慧本身。這種“戲中戲”將得到更多的關於電影的元資料,然後現實世界中的機器人會據此撰寫評論以幫助大家決定看哪部電影。

隨著NLP技術的發展,資訊流和計算能力也不斷增強。我們現在只需在搜尋欄中輸入幾個字元,就可以檢索出完成任務所需的準確資訊。搜尋提供的前幾個自動補全選項通常非常合適,以至於讓我們感覺是有一個人在幫助我們進行搜尋。

NLP實戰:利用Python理解、分析和生成文字|贈書

入門NLP的幾個基礎知識

1.正則表示式

正則表示式使用了一類特殊的稱為正則語法(regular grammar)的形式語言語法。正則語法的行為可預測也可證明,而且足夠靈活,可以支援市面上一些最複雜的對話引擎和聊天機器人。Amazon Alexa和Google Now都是依賴正則語法的主要基於模式的對話引擎。深奧、複雜的正則語法規則通常可以用一行稱為正則表示式的程式碼來表示。Python中有一些成功的聊天機器人框架,如Will,它們完全依賴這種語言來產生一些有用的和有趣的行為。Amazon Echo、Google Home和類似的複雜而又有用的助手也都使用了這種語言,為大部分使用者互動提供編碼邏輯。

2.詞序和語法

詞的順序很重要。那些在詞序列(如句子)中控制詞序的規則被稱為語言的語法(grammar,也稱文法)。這是之前的詞袋或詞向量例子中所丟棄的資訊。幸運的是,在大多數簡短的短語甚至許多完整的句子中,上述詞向量近似方法都可以奏效。如果只是想對一個短句的一般意義和情感進行編碼的話,那麼詞序並不十分重要。看一下“Good morning Rosa”這個例子中的所有詞序結果:

>>> from itertools import permutations>>> [“ ”。join(combo) for combo in\。。。 permutations(“Good morning Rosa!”。split(), 3)][‘Good morning Rosa!’,‘Good Rosa! morning’,‘morning Good Rosa!’,‘morning Rosa! Good’,‘Rosa! Good morning’,‘Rosa! morning Good’]

現在,如果試圖孤立地解釋這些字串中的每一個(不看其他字串),那麼可能會得出結論,即這些字串可能都有相似的意圖或含義。我們甚至可能注意到Good這個詞的大寫形式,並把它放在腦海中短語的最前面。但是我們也可能認為Good Rosa是某種專有名詞,如餐館或花店的名字。儘管如此,一個聰明的聊天機器人或者布萊切利公園20世紀40年代的聰明女士可能會用同樣無傷大雅的問候語來回應這6種情況中的任何一種:“Good morning my dear General。”

我們(在腦海中)再用一個更長、更復雜的短語來嘗試一下,這是一條邏輯語句,其中詞的順序非常重要:

>>> s = “”“Find textbooks with titles containing ‘NLP’,。。。 or ‘natural’ and ‘language’, or。。。 ‘computational’ and ‘linguistics’。”“”>>> len(set(s。split))12>>> import numpy as np>>> np。arange(1, 12 + 1)。prod # factorial(12) = arange(1, 13)。prod479001600

詞排列的數量從簡單的問候語factorial(3) == 6激增到更長的語句factorial(12)

== 479001600

很明顯,詞序所包含的邏輯對任何希望正確回覆的機器而言都很重要。儘管普通的問候語通常不會因為詞袋處理而造成混淆,但如果把更復雜的語句放入詞袋中,就會丟失大部分意思。就像前面示例中的自然語言查詢一樣,詞袋並不是處理資料庫查詢的最佳方式。

3.詞向量

2012年,微軟實習生Thomas Mikolov發現了一種用一定維度的向量表示詞的含義的方法。Mikolov訓練了一個神經網路來預測每個目標詞附近的共現詞。2013年,Mikolov和他的隊友在谷歌釋出了建立這些詞向量的軟體,稱為Word2vec。

Word2vec僅僅基於大型未標記文字語料庫來學習詞的含義,而不需要標記Word2vec詞彙表中的詞。我們不需要告訴Word2vec演算法瑪麗·居里是一個科學家、伐木者是一個足球隊、西雅圖是一個城市、波特蘭是俄勒岡州和緬因州的一個城市,也不需要告訴Word2vec足球是一項運動、一個團隊是一群人,或者城市既是地點也是社群。Word2vec完全可以靠自己學到更多的知識!大家需要做的只是準備一個足夠大的語料庫,其中在科學、足球或城市相關的詞附近提到瑪麗·居里、伐木者隊和波特蘭。

正是Word2vec這種無監督的特性使它無比強大,因為世界上充滿了未標記、未分類、非結構化的自然語言文字。

4.Word2vec和GloVe

Word2vec是一個巨大的突破,但它依賴於必須經反向傳播來訓練的神經網路模型。反向傳播在效率上通常不如使用梯度下降法直接最佳化的代價函式。由Jeffrey Pennington領導的斯坦福大學NLP研究團隊研究了Word2vec的工作原理,並從中找到可最佳化的代價函式。他們計算詞的共現次數並記錄在一個正方形矩陣中。他們發現可以對這個共現矩陣進行奇異值分解,分解得到的兩個權重矩陣的意義與Word2vec產生的完全相同。關鍵點在於用同樣的方法對共現矩陣進行歸一化。在某些情況下,Word2vec模型無法收斂,而斯坦福大學的研究人員能夠透過他們提出的SVD方法得到全域性最優解。這個方法是對詞共現的全域性向量(在整個語料庫中的共現)直接進行最佳化,因此命名為GloVe(global vectors of word co-occurrences)。

GloVe可以產生相當於Word2vec輸入權重矩陣和輸出權重矩陣的矩陣,其生成的語言模型具有與Word2vec相同的精確率,而且花費的時間更少。GloVe透過更高效地使用資料來加速訓練程序。它可以在較小的語料庫進行訓練,並仍然能夠收斂。SVD演算法已經改進了幾十年,所以GloVe在除錯和演算法最佳化方面很有優勢。相比之下,Word2vec依賴反向傳播來更新表示詞嵌入的權重,而神經網路的反向傳播效率低於GloVe使用的SVD這種更成熟的最佳化演算法。

儘管Word2vec首先普及了基於詞向量進行語義推理的概念,不過大家還是應當儘量使用GloVe來訓練新的詞向量模型。透過GloVe,大家更有可能找到詞向量表示的全域性最優解,從而得到更精確的結果。

GloVe的優點如下:

1。訓練過程更快;

2。更有效地利用CPU、記憶體(可以處理更大規模的文件);

3。更有效地利用資料(對小型語料庫有幫助);

4。在相同訓練次數的情況下精確率更高。

5.知識方法

A。L。I。C。E。和其他AIML聊天機器人完全依賴模式匹配。在構想AIML之前,第一個流行的聊天機器人ELIZA也使用了模式匹配和模板。但是這些聊天機器人的開發人員在模式和模板中硬編碼了回覆的邏輯。硬編碼不能很好地“擴充套件”,這種擴充套件不是從處理效能而是從人力的角度來說的。以這種方式構建的聊天機器人的複雜性隨著投入人力的增加呈線性增長。事實上,隨著這個聊天機器人的複雜性不斷增長,我們開始看到自己努力的回報卻在遞減,這是因為隨著“活動元件”之間互動的增加,聊天機器人的行為變得越來越難以預測和除錯。

如今,資料驅動程式設計是應對大多數複雜程式設計挑戰的現代方法。如何使用資料對聊天機器人進行程式設計?在上一章中,我們學習瞭如何使用資訊提取從自然語言文字(非結構化資料)中建立結構化知識。僅僅基於讀入文字,就可以構建關係或事實組成的網路,這些文字可以是維基百科文章,甚至是大家自己的個人日誌。

透過邏輯推理來處理知識圖譜,可以回答包含在知識庫中的世界相關的問題。然後可以使用推理答案填寫模板化回覆中的變數,從而建立自然語言答案。問答系統,例如IBM在Jeopardy獲勝的“沃森”(Watson),最初也是以這種方式構建的,儘管最近的版本幾乎必然也採用了搜尋或資訊檢索技術。知識圖譜可以說是將聊天機器人帶到現實世界的“根本”。

基於知識庫的方法不僅限於回答關於世界的問題。知識庫也可以使用正在進行的與對話相關的事實進行實時填充。這可以讓聊天機器人快速瞭解對話目標以及他們的喜好。

6.檢索(搜尋)方法

另一種“傾聽”使用者的資料驅動方法是在歷史對話日誌中搜索之前的語句。這類似於人類傾聽者嘗試回想之前他們在哪裡聽到過該問題、句子或詞。機器人不僅可以搜尋自己的對話日誌,還可以搜尋任何人與人之間的對話記錄、機器人和人之間的對話記錄,甚至是機器人和機器人之間的對話記錄。但和以往一樣,髒資料進髒資料出。因此,我們應該清理並整合歷史對話的資料庫,以確保機器人搜尋(並模仿)高質量的對話。我們希望人類享受與機器人之間的對話。

基於搜尋的聊天機器人應確保其對話資料庫包含令人愉快或有用的對話,並且它們應該是設定個性的機器人預期交流的一些主題。對於基於搜尋的機器人,一些好的對話資源例子包括電影對話指令碼、IRC頻道上的客戶服務日誌(使用者滿意的部分)和人類之間的直接訊息互動(如果那些人願意與我們分享的話)。如果沒有獲得想要使用的對話中涉及的所有人的書面同意,請不要使用大家自己的電子郵件或短訊息日誌。

如果決定將機器人之間的對話合併到語料庫中,那麼請千萬小心。我們的資料庫中只需要那些至少有一個人看起來對互動感到滿意的語句,哪怕只是繼續對話。除非是真正非常智慧的聊天機器人,否則很少採用機器人之間的對話。

基於搜尋的聊天機器人可以使用歷史對話日誌來查詢和機器人的交談物件剛剛說的話類似的語句示例。為了便於搜尋,應該把對話語料庫組織成語句-回覆對。如果回覆作為被回覆的語句,那麼該回復應該在資料庫中出現兩次,一次作為回覆,然後再作為促使回覆的語句。資料庫表中的回覆列隨後可作為“語句”(或促使)列的語句的回覆依據。

光了解上面這些NLP的知識其實對學習NLP來說是完全不夠的。那麼如何去高效完整地掌握NLP的整體框架和所有知識呢?相信這一本

《自然語言處理實戰:利用Python理解、分析和生成文字》

可以幫到你。

NLP實戰:利用Python理解、分析和生成文字|贈書

自然語言處理實戰 利用Python理解、分析和生成文字

作者:[美]霍布森萊恩(Hobson Lane) ,科爾霍華德(Cole Howard) ,漢納斯馬克斯哈普克(Hannes Max Hapke)

譯者: 史亮 ,魯驍 ,唐可欣 ,王斌

注:本書分為3部分:第一部分介紹NLP基礎,包括分詞、TF-IDF向量化以及從詞頻向量到語義向量的轉換;第二部分講述深度學習,包含神經網路、詞向量、卷積神經網路(CNN)、迴圈神經網路(RNN)、長短期記憶(LSTM)網路、序列到序列建模和注意力機制等基本的深度學習模型和方法;第三部分介紹實戰方面的內容,包括資訊提取、問答系統、人機對話等真實世界系統的模型構建、效能挑戰以及應對方法。

NLP實戰:利用Python理解、分析和生成文字|贈書

Top