用NLP研究《了不得的蓋茨比》,包你閱讀理解拿滿分!

全文共3951字,預計學習時長8分鐘git

F. Scott Fitzgerald《了不得的蓋茨比》封面,初版,1925年github



對美國的高中生來講,若是每個高一新生在英語課上都有一項相同的做業,那這項做業必定是寫一篇關於《了不得的蓋茨比》的大意總結。《了不得的蓋茨比》是一部引人入勝的文學做品,它的中心主題貫穿於社會與階級、財富與地位、過去與如今。因而可知,對於一個高中生來講,寫一篇關於這部小說的既簡明又有說服力的總結並不是易事。數組

在本文中,咱們將使用天然語言處理(NLP)中的一些方法來總結《了不得的蓋茨比》。天然語言處理是人工智能和機器學習的一個子領域,其分析領域爲計算機如何處理和理解天然語言通訊方法(例如書面語言)。這些術語可能聽起來有些高深莫測,可是其基本概念仍是容易理解的。微信

清除與整理網絡

在作總結以前,首先須要得到這本書。因此,咱們拿到了一份由澳大利亞古登堡項目所提供的該書的副本。接下來,第一步須要刪除書中的停用詞,即the、and、in、for、an等詞。要寫出格式良好的句子,使用停用詞是必需的,但它們卻並不爲句子增長任何容易辨別的含義,且它們會影響詞頻的分析。因此,咱們將使用此處的停用詞列表。第二步,將把《了不得的蓋茨比》分解爲(鍵,值)對的映射。映射中的鍵是完整的句子(包含停用詞和全部內容),而值表示已清除版本的數組。機器學習

停用詞列表傳送門:https://gist.github.com/sebleier/554280學習

具備餘弦類似性的馬爾可夫鏈

就算對於不熟悉圖論的人來講,理解這個概念也是十分簡單的。初等圖由兩部分組成:節點和邊。節點表明現實世界中的一個概念,如人、電話號碼或城市等。邊則是兩個節點之間的鏈接。以下圖所示,Facebook就是一個常見的圖形例子。圖中的這些節點就表明Facebook用戶。若是兩個Facebook用戶是朋友,那麼這兩個節點之間就會有一條邊。人工智能

爲了實現目標,可把《了不得的蓋茨比》也表示爲這樣一個圖,每一個句子都表明一個節點。兩個節點之間就會有一條邊,而這條邊就等於它們的句子類似性(對於這一點咱們將在下文進一步介紹)。可是在作這件事以前,咱們要明白,這種表示法爲何會有用呢?翻譯

這種圖示其實是將這本書表示爲一個馬爾可夫鏈。馬爾可夫鏈是一種機率模型,經過定義從一種狀態到另外一種狀態的轉換機率來描述一系列狀態。3d

好比,假設想用馬爾可夫鏈來表示我開車到達的地點。那麼,先假設我只開車往返於4個地點,即家、工做、商店和健身房,每一個地點我都有可能開車到達。下面以圖示來講明。若是節點之間沒有鏈接,則開車往返於兩個地點之間的機率爲0%。例如,在下圖中,我從不開車直接往返於商店與健身房,而是每每先回家一趟。

經過以上的馬爾可夫鏈,能夠得出我可能位於的任何給定地點的平穩機率。從上圖中直觀來看,在任何給定時間內,我最有多是在家。這是由於有不少節點以極高的機率指向了家這個位置。

如今,讓咱們回到《了不得的蓋茨比》上來。同理,將兩個句子之間的轉移機率定義爲兩個句子之間的餘弦類似度。而後咱們就能夠得到該馬爾可夫鏈的平穩機率分佈。其中,在圖中有着最多鏈接的節點就是具備最高平穩機率的句子。如在下面的示例中,節點A可能具備最高的平穩機率。

因而可知,高度鏈接的節點具備高平穩機率。而在這本書中,這樣的節點就能表明一個關鍵主題的總結,由於這些節點與許多句子之間有着很高的相關性。可是,在咱們說得太遠以前,須要定義什麼是餘弦類似性。

假設這裏有兩個句子—「Jack and Jill went up the hill」和「Jill and Jack run down the hill」。餘弦類似性就將這兩個句子視爲詞的向量,並使用下面的公式計算它們的重疊度。餘弦類似將計算兩個詞彙向量的點積,並將其除以每一個向量大小的積。

理解這些以後,準備進行下一步了。咱們將把圖表示爲一個矩陣。索引(x,y)處的值將是句子x和句子y之間的餘弦類似性。該值是句子x和句子y之間的轉換機率。使用這些轉換機率來得到每一個節點的平穩機率。

在馬爾可夫鏈中得到平穩機率是相對簡單的。能夠重複地將轉移機率矩陣相乘,直到達到一個穩定狀態—即當全部轉移機率都收斂到單個值時。除此以外,更有效的解決方案是使用左特徵向量。

既然已經達到了一個穩定狀態,就能夠尋找最高几率值了。如下,就是具備最高穩態機率的句子。

"I'm Gatsby," he said suddenly.

--------------------------------------------------

"You two start on home, Daisy," said Tom. "In Mr. Gatsby's car."

--------------------------------------------------

"I told you I went there," said Gatsby.

--------------------------------------------------

"I want you and Daisy to come over to my house," he said, "I'd like to show her around."

--------------------------------------------------

She had told him that she loved him, and Tom Buchanan saw. He was astounded. His mouth opened a little and he looked at Gatsby and then back at Daisy as if he had just recognized her as some one he knew a long time ago.

如今,就來到了數據科學中最有趣的部分——得出了數據並不支持的結論。來評價一下下方得出的摘要吧。

In our last sentence, Daisy tells Gatsby she loves him and Tom Buchanan, her husband, sees. This sentence captures the complex relationship between Gatsby, Daisy, and Tom. In our fourth sentence, we see Gatsby wanting to show Daisy around his house. He’s convinced Daisy will want to be with him if she sees that he is now rich and successful. This captures Gatsby’s struggle to obscure his past with his current success, a central theme in the novel. And our first sentence captures the iconic moment of Gatsby introducing himself. Our model has done it! We have summarized The Great Gatsby!

(上述內容翻譯以下:在最後一句中,黛西告訴蓋茨比她愛他,但她的丈夫湯姆·布坎南看到了這一切。這個句子描述了蓋茨比、黛西和湯姆三人之間複雜的關係。在第四句中,咱們看到蓋茨比想帶黛西參觀他的房子,他相信黛西在看到他如今的富有與成功以後,會願意和他在一塊兒。這一點反映了蓋茨比爲了用如今的成功來掩蓋本身的過去而進行的鬥爭,而這正是小說的中心主題。而且,咱們第一句就抓住了蓋茨比進行自我介紹的標誌性時刻。咱們的模型成功了!咱們成功總結了《了不得的蓋茨比》!)

來源:《了不得的蓋茨比》華納兄弟2013

分析是如何得出這般總結的呢?其中的方法再簡單不過,只須要跳過、跳過、再跳過。但根據以前的數據,是毫不會得出上述結果的。由於咱們的方法是十分強大的,分析是通過深思熟慮的。可是上述結論的得出也因爲引入了不少外部知識。

強調這一點並非爲失敗開脫,而是要認識到這種方法的侷限性。咱們能夠合理地得出結論,即蓋茨比、黛西和湯姆是相關的人物,且蓋茨比和黛西之間存在着某種關係。的確,咱們找到了一些關鍵點,但還遠遠不能得出一個完整的總結。

展望將來

固然,咱們能夠經過一些方式來改進方法,主要是圍繞如何肯定句子類似性。好比,可使用TF*IDF公式來計算句子中哪些單詞是最相關的,並對它們進行相應的加權。以及,在計算餘弦類似度時,不要只考慮嚴格的相等性,也要考慮詞義類似但拼寫不一樣的單詞(例如,高興和興高采烈)。若是想更大膽一點,還可使用先進的主題模型,如隱含狄利克雷分佈模型(LDA)。

自動總結分爲兩個主要領域—提取方法和抽象方法。以上所討論的一切都使用的是提取方法,即試圖從文本自己中提取相關信息。但這種方法產生出來的摘要是不盡人意的,沒有人會這麼寫。人類的思考方式是,先理清概念,再概括總結,再考慮模式,最後產出結果。這是一種抽象的方法。爲此,咱們須要運用計算機科學中最流行的一個概念:深度神經網絡。

代碼傳送門:https://github.com/andrewjoliver/NLPSummarization/tree/master/src

衆所周知,清理數據和計算鄰接矩陣是須要必定時間的,但若是使用Jupyter筆記本,則能一次性快速運行。而且,其方法的定義及代碼結構都與這篇文章所講到的相似,所以理解起來也相對容易。


留言 點贊 關注

咱們一塊兒分享AI學習與發展的乾貨

歡迎關注全平臺AI垂類自媒體 「讀芯術」

(添加小編微信:dxsxbb,加入讀者圈,一塊兒討論最新鮮的人工智能科技哦~)

相關文章
相關標籤/搜索