大數(shù)據(jù)文摘授權(quán)轉(zhuǎn)載自數(shù)據(jù)派THU
作者:Prateek Joshi
翻譯:王威力
校對(duì):丁楠雅
TextRank 算法是一種用于文本的基于圖的排序算法,通過(guò)把文本分割成若干組成單元(句子),構(gòu)建節(jié)點(diǎn)連接圖,用句子之間的相似度作為邊的權(quán)重,通過(guò)循環(huán)迭代計(jì)算句子的TextRank值,最后抽取排名高的句子組合成文本摘要。本文介紹了抽取型文本摘要算法TextRank,并使用Python實(shí)現(xiàn)TextRank算法在多篇單領(lǐng)域文本數(shù)據(jù)中抽取句子組成摘要的應(yīng)用。
介紹
文本摘要是自然語(yǔ)言處理(NLP)的應(yīng)用之一,一定會(huì)對(duì)我們的生活產(chǎn)生巨大影響。隨著數(shù)字媒體的發(fā)展和出版業(yè)的不斷增長(zhǎng),誰(shuí)還會(huì)有時(shí)間完整地瀏覽整篇文章、文檔、書(shū)籍來(lái)決定它們是否有用呢?值得高興的是,這項(xiàng)技術(shù)已經(jīng)在這里了。
你有沒(méi)有用過(guò)inshorts這個(gè)手機(jī)app?它是一個(gè)創(chuàng)新的新聞app,可以將新聞文章轉(zhuǎn)化成一篇60字的摘要,這正是我們將在本文中學(xué)習(xí)的內(nèi)容——自動(dòng)文本摘要。
自動(dòng)文本摘要是自然語(yǔ)言處理(NLP)領(lǐng)域中最具挑戰(zhàn)性和最有趣的問(wèn)題之一。它是一個(gè)從多種文本資源(如書(shū)籍、新聞文章、博客帖子、研究類論文、電子郵件和微博)生成簡(jiǎn)潔而有意義的文本摘要的過(guò)程。
由于大量文本數(shù)據(jù)的可獲得性,目前對(duì)自動(dòng)文本摘要系統(tǒng)的需求激增。
通過(guò)本文,我們將探索文本摘要領(lǐng)域,將了解TextRank算法原理,并將在Python中實(shí)現(xiàn)該算法。上車,這將是一段有趣的旅程!
目錄
一、文本摘要方法
二、TextRank算法介紹
三、問(wèn)題背景介紹
四、TextRank算法實(shí)現(xiàn)
五、下一步是什么?
一、文本摘要方法
早在20世紀(jì)50年代,自動(dòng)文本摘要已經(jīng)吸引了人們的關(guān)注。在20世紀(jì)50年代后期,Hans Peter Luhn發(fā)表了一篇名為《The automatic creation of literature abstract》的研究論文,它利用詞頻和詞組頻率等特征從文本中提取重要句子,用于總結(jié)內(nèi)容。
參考鏈接:
http://courses.ischool.berkeley.edu/i256/f06/papers/luhn58.pdf
另一個(gè)重要研究是由Harold P Edmundson在20世紀(jì)60年代后期完成,他使用線索詞的出現(xiàn)(文本中出現(xiàn)的文章題目中的詞語(yǔ))和句子的位置等方法來(lái)提取重要句子用于文本摘要。此后,許多重要和令人興奮的研究已經(jīng)發(fā)表,以解決自動(dòng)文本摘要的挑戰(zhàn)。
參考鏈接:
http://courses.ischool.berkeley.edu/i256/f06/papers/luhn58.pdf
文本摘要可以大致分為兩類——抽取型摘要和抽象型摘要:
抽取型摘要:這種方法依賴于從文本中提取幾個(gè)部分,例如短語(yǔ)、句子,把它們堆疊起來(lái)創(chuàng)建摘要。因此,這種抽取型的方法最重要的是識(shí)別出適合總結(jié)文本的句子。
抽象型摘要:這種方法應(yīng)用先進(jìn)的NLP技術(shù)生成一篇全新的總結(jié)??赡芸偨Y(jié)中的文本甚至沒(méi)有在原文中出現(xiàn)。
本文,我們將關(guān)注于抽取式摘要方法。
二、TextRank算法介紹
在開(kāi)始使用TextRank算法之前,我們還應(yīng)該熟悉另一種算法——PageRank算法。事實(shí)上它啟發(fā)了TextRank!PageRank主要用于對(duì)在線搜索結(jié)果中的網(wǎng)頁(yè)進(jìn)行排序。讓我們通過(guò)一個(gè)例子快速理解這個(gè)算法的基礎(chǔ)。
PageRank算法簡(jiǎn)介:
圖 1 PageRank算法
假設(shè)我們有4個(gè)網(wǎng)頁(yè)——w1,w2,w3,w4。這些頁(yè)面包含指向彼此的鏈接。有些頁(yè)面可能沒(méi)有鏈接,這些頁(yè)面被稱為懸空頁(yè)面。
w1有指向w2、w4的鏈接
w2有指向w3和w1的鏈接
w4僅指向w1
w3沒(méi)有指向的鏈接,因此為懸空頁(yè)面
為了對(duì)這些頁(yè)面進(jìn)行排名,我們必須計(jì)算一個(gè)稱為PageRank的分?jǐn)?shù)。這個(gè)分?jǐn)?shù)是用戶訪問(wèn)該頁(yè)面的概率。
為了獲得用戶從一個(gè)頁(yè)面跳轉(zhuǎn)到另一個(gè)頁(yè)面的概率,我們將創(chuàng)建一個(gè)正方形矩陣M,它有n行和n列,其中n是網(wǎng)頁(yè)的數(shù)量。
矩陣中得每個(gè)元素表示從一個(gè)頁(yè)面鏈接進(jìn)另一個(gè)頁(yè)面的可能性。比如,如下高亮的方格包含的是從w1跳轉(zhuǎn)到w2的概率。
如下是概率初始化的步驟:
1. 從頁(yè)面i連接到頁(yè)面j的概率,也就是M[i][j],初始化為1/頁(yè)面i的出鏈接總數(shù)wi
2. 如果頁(yè)面i沒(méi)有到頁(yè)面j的鏈接,那么M[i][j]初始化為0
3. 如果一個(gè)頁(yè)面是懸空頁(yè)面,那么假設(shè)它鏈接到其他頁(yè)面的概率為等可能的,因此M[i][j]初始化為1/頁(yè)面總數(shù)
因此在本例中,矩陣M初始化后如下:
最后,這個(gè)矩陣中的值將以迭代的方式更新,以獲得網(wǎng)頁(yè)排名。
三、TextRank算法
現(xiàn)在我們已經(jīng)掌握了PageRank,讓我們理解TextRank算法。我列舉了以下兩種算法的相似之處:
用句子代替網(wǎng)頁(yè)
任意兩個(gè)句子的相似性等價(jià)于網(wǎng)頁(yè)轉(zhuǎn)換概率
相似性得分存儲(chǔ)在一個(gè)方形矩陣中,類似于PageRank的矩陣M
TextRank算法是一種抽取式的無(wú)監(jiān)督的文本摘要方法。讓我們看一下我們將遵循的TextRank算法的流程:
1. 第一步是把所有文章整合成文本數(shù)據(jù)
2. 接下來(lái)把文本分割成單個(gè)句子
3. 然后,我們將為每個(gè)句子找到向量表示(詞向量)。
4. 計(jì)算句子向量間的相似性并存放在矩陣中
5. 然后將相似矩陣轉(zhuǎn)換為以句子為節(jié)點(diǎn)、相似性得分為邊的圖結(jié)構(gòu),用于句子TextRank計(jì)算。
6. 最后,一定數(shù)量的排名最高的句子構(gòu)成最后的摘要。
讓我們啟動(dòng)Jupyter Notebook,開(kāi)始coding!
備注:如果你想了解更多圖論知識(shí),我推薦你參考這篇文章
https://www.analyticsvidhya.com/blog/2018/09/introduction-graph-theory-applications-python/
三、問(wèn)題背景介紹
作為一個(gè)網(wǎng)球愛(ài)好者,我一直試圖通過(guò)對(duì)盡可能多的網(wǎng)球新聞的閱讀瀏覽來(lái)使自己隨時(shí)了解這項(xiàng)運(yùn)動(dòng)的最新情況。然而,事實(shí)證明這已經(jīng)是一項(xiàng)相當(dāng)困難的工作!花費(fèi)太多的資源和時(shí)間是一種浪費(fèi)。
因此,我決定設(shè)計(jì)一個(gè)系統(tǒng),通過(guò)掃描多篇文章為我提供一個(gè)要點(diǎn)整合的摘要。如何著手做這件事?這就是我將在本教程中向大家展示的內(nèi)容。我們將在一個(gè)爬取得到的文章集合的文本數(shù)據(jù)集上應(yīng)用TextRank算法,以創(chuàng)建一個(gè)漂亮而簡(jiǎn)潔的文章摘要。
請(qǐng)注意:這是一個(gè)單領(lǐng)域多文本的摘要任務(wù),也就是說(shuō),我們以多篇文章輸入,生成的是一個(gè)單要點(diǎn)摘要。本文不討論多域文本摘要,但您可以自己嘗試一下。
數(shù)據(jù)集下載鏈接:
https://s3-ap-south-1.amazonaws.com/av-blog-media/wp-content/uploads/2018/10/tennis_articles_v4.csv
四、TextRank算法實(shí)現(xiàn)
所以,不用再費(fèi)心了,打開(kāi)你的Jupyter Notebook,讓我們實(shí)現(xiàn)我們迄今為止所學(xué)到的東西吧!
1. 導(dǎo)入所需的庫(kù)
首先導(dǎo)入解決本問(wèn)題需要的庫(kù)
2. 讀入數(shù)據(jù)
現(xiàn)在讀取數(shù)據(jù),在上文我已經(jīng)提供了數(shù)據(jù)集的下載鏈接。
3. 檢查數(shù)據(jù)
讓我們快速了解以下數(shù)據(jù)。
數(shù)據(jù)集有三列,分別是‘a(chǎn)rticle_id’,‘a(chǎn)rticle_text’,和‘source’。我們對(duì)‘a(chǎn)rticle_text’列的內(nèi)容最感興趣,因?yàn)樗宋恼碌奈谋緝?nèi)容。讓我們打印一些這個(gè)列里的變量的值,具體看看它們是什么樣。
輸出:
現(xiàn)在我們有兩種選擇,一個(gè)是總結(jié)單個(gè)文章,一個(gè)是對(duì)所有文章進(jìn)行內(nèi)容摘要。為了實(shí)現(xiàn)我們的目的,我們繼續(xù)后者。
4. 把文本分割成句子
下一步就是把文章的文本內(nèi)容分割成單個(gè)的句子。我們將使用nltk庫(kù)中的sent_tokenize( )函數(shù)來(lái)實(shí)現(xiàn)。
打印出句子列表中的幾個(gè)元素。
輸出:
5. 下載GloVe詞向量
GloVe詞向量是單詞的向量表示。這些詞向量將用于生成表示句子的特征向量。我們也可以使用Bag-of-Words或TF-IDF方法來(lái)為句子生成特征,但這些方法忽略了單詞的順序,并且通常這些特征的數(shù)量非常大。
我們將使用預(yù)訓(xùn)練好的Wikipedia 2014 + Gigaword 5 (補(bǔ)充鏈接)GloVe向量,文件大小是822 MB。
GloVe詞向量下載鏈接:
https://nlp.stanford.edu/data/glove.6B.zip
讓我們提取詞向量:
現(xiàn)在我們?cè)谧值渲写鎯?chǔ)了400000個(gè)不同術(shù)語(yǔ)的詞向量。
6. 文本預(yù)處理
盡可能減少文本數(shù)據(jù)的噪聲是一個(gè)好習(xí)慣,所以我們做一些基本的文本清洗(包括移除標(biāo)點(diǎn)符號(hào)、數(shù)字、特殊字符,統(tǒng)一成小寫(xiě)字母)。
去掉句子中出現(xiàn)的停用詞(一種語(yǔ)言的常用詞——is,am,of,in等)。如果尚未下載nltk-stop,則執(zhí)行以下代碼行:
現(xiàn)在我們可以導(dǎo)入停用詞。
接下來(lái)定義移除我們的數(shù)據(jù)集中停用詞的函數(shù)。
我們將在GloVe詞向量的幫助下用clean_sentences(程序中用來(lái)保存句子的列表變量)來(lái)為我們的數(shù)據(jù)集生成特征向量。
7. 句子的特征向量
現(xiàn)在,來(lái)為我們的句子生成特征向量。我們首先獲取每個(gè)句子的所有組成詞的向量(從GloVe詞向量文件中獲取,每個(gè)向量大小為100個(gè)元素),然后取這些向量的平均值,得出這個(gè)句子的合并向量為這個(gè)句子的特征向量。
8. 相似矩陣準(zhǔn)備
下一步是找出句子之間的相似性,我們將使用余弦相似性來(lái)解決這個(gè)問(wèn)題。讓我們?yōu)檫@個(gè)任務(wù)創(chuàng)建一個(gè)空的相似度矩陣,并用句子的余弦相似度填充它。
首先定義一個(gè)n乘n的零矩陣,然后用句子間的余弦相似度填充矩陣,這里n是句子的總數(shù)。
將用余弦相似度計(jì)算兩個(gè)句子之間的相似度。
用余弦相似度初始化這個(gè)相似度矩陣。
9. 應(yīng)用PageRank算法
在進(jìn)行下一步之前,我們先將相似性矩陣sim_mat轉(zhuǎn)換為圖結(jié)構(gòu)。這個(gè)圖的節(jié)點(diǎn)為句子,邊用句子之間的相似性分?jǐn)?shù)表示。在這個(gè)圖上,我們將應(yīng)用PageRank算法來(lái)得到句子排名。
10. 摘要提取
最后,根據(jù)排名提取前N個(gè)句子,就可以用于生成摘要了。
現(xiàn)在我們實(shí)現(xiàn)了一個(gè)棒極了、整齊的、簡(jiǎn)潔、有用的文章總結(jié)!
五、下一步是什么?
自動(dòng)文本摘要是一個(gè)熱門(mén)的研究課題,在本文中我們僅僅討論了冰山一角。展望未來(lái),我們將探索抽象文本摘要技術(shù),其中深度學(xué)習(xí)扮演著重要的角色。此外,我們還可以研究下面的文本摘要任務(wù):
1. 問(wèn)題導(dǎo)向:
多領(lǐng)域文本摘要
單個(gè)文檔的摘要
跨語(yǔ)言文本摘要
(文本來(lái)源是一種語(yǔ)言,文本總結(jié)用另一種語(yǔ)言)
2. 算法導(dǎo)向:
應(yīng)用RNN和LSTM的文本摘要
應(yīng)用加強(qiáng)學(xué)習(xí)的文本摘要
應(yīng)用生成對(duì)抗神經(jīng)網(wǎng)絡(luò)(GAN)的文本摘要
后記
我希望這篇文章能幫助你理解自動(dòng)文本摘要的概念。它有各種各樣的應(yīng)用案例,并且已經(jīng)產(chǎn)生了非常成功的應(yīng)用程序。無(wú)論是在您的業(yè)務(wù)中利用,還是僅僅為了您自己的知識(shí),文本摘要是所有NLP愛(ài)好者都應(yīng)該熟悉的方法。
我將在以后的文章中嘗試使用高級(jí)技術(shù)介紹抽象文本摘要技術(shù)。同時(shí),請(qǐng)隨時(shí)使用下面的評(píng)論部分讓我知道你對(duì)這篇文章的想法或任何問(wèn)題。
數(shù)據(jù)集下載鏈接:
https://s3-ap-south-1.amazonaws.com/av-blog-media/wp-content/uploads/2018/10/tennis_articles_v4.csv
算法代碼鏈接:
https://github.com/prateekjoshi565/textrank_text_summarization
相關(guān)報(bào)道:
https://www.analyticsvidhya.com/blog/2018/11/introduction-text-summarization-textrank-python/
分享題目:手把手|基于TextRank算法的文本摘要(附Python代碼)-創(chuàng)新互聯(lián)
本文鏈接:http://m.rwnh.cn/article26/hsojg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、企業(yè)建站、網(wǎng)站排名、網(wǎng)站導(dǎo)航、Google、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容