要做文本自動摘要,你得先了解PageRank算法

2021-01-11 計算機java編程

前言

因為想做一下文本自動摘要,文本自動摘要是NLP的重要應用,搜了一下,有一種TextRank的算法,可以做文本自動摘要。其算法思想來源於Google的PageRank,所以先把PageRank給了解一下。

馬爾科夫鏈

我感覺說到PageRank,應該要提起馬爾科夫鏈,因為PageRank在計算的過程中,和馬爾科夫鏈轉移是十分相似的,只是PageRank在馬爾科夫鏈的轉移上做了一些動。

馬爾科夫鏈的維基百科裡是這麼說的:

形式定義好像有點複雜。我這裡只想介紹自己所認識的馬氏鏈,一個簡單通俗易懂的馬氏鏈。

假設有一個離散型隨機變量,表示的是當前社會中貧窮,中等和富有的人的概率,其初始分布是:

表示社會中貧窮的人佔28%,中等的人佔68%,富有的人佔11%,

這是初始狀態,可以想像成這是我們所處地球的第一代人X1(那個時候就有貧富差距了),接下來第一代人要生小孩,形成第二代人X2,這個叫做狀態的轉移,從X1轉移到X2。怎麼轉移呢,這是有一個概率的:

上述表格代表的是,父親屬於哪個階級,那兒子屬於某個階級的概率。比如父親是富人,兒子也是富人的概率是 0.52,這表示大概一半的富二代以後都會敗光家產。所以根據以上表格,第二代窮人X2的概率是

以上的計算過程實際上矩陣相乘,表格裡的數據組成一個矩陣P 叫做概率轉移矩陣

以此類推,不斷計算,不斷狀態轉移,我們發現從第7代開始,就穩定不變了:

這不是偶然,從任意一個X1的分布出發,經過概率轉移矩陣,都會收斂到一個穩定的分布

這個轉移的鏈條就是馬爾科夫鏈,它最終會收斂到穩定分布π ,也就是π.P=π ,至於為什麼會這樣,肯定是和狀態轉移矩陣有關,最終的穩定分布不是由初始狀態X1決定的,而是由轉移矩陣P決定的,具體就不細究了。

總之,我們得出這樣一個結論,如果有一個隨機變量分布為X 和狀態轉移矩陣P,隨機變量分布的下一個狀態X(next) 可以由上一個狀態X(pre) 乘以矩陣P得來,那麼經過n步迭代,最終會得到一個不變的,平穩的分布。

PageRank

PageRank 是谷歌搜尋引擎的進行網頁排名算法,它是把所有網頁都構成一張圖,每個網頁是一個節點,如果一個網頁中有鏈向其他網頁的連結,那麼就有一條有向邊連接這兩個點。

有了這張圖可以幹嘛嗎?PageRank 認為,每條邊都是一個投票動作,A > B 是A在給B投票,B的權重就會增加。

舉個例子就非常清楚了,假設網際網路上一共就4個頁面,全球幾十億網名,每天只能看這個4個web頁面,這四個頁面分別是A,B,C,D,其中B頁面有兩個超連結指向A,C,C中有1個超連結指向A,D中有三個超連結指向A。其畫成一張圖,就是這樣的:

這裡要清楚 PageRank 計算的值是什麼,PageRank 計算的最終值,是每個網頁被往點擊瀏覽的概率,也就相當於權重。所以這還是一個離散型隨機變量,

。一開始假設每個網頁被瀏覽的概率都是相同的,每個頁面被網民點擊的概率都是0.25,

PageRank 的計算過程就和上面所說的馬爾科夫鏈一樣,初始狀態0就是全球網民同時上網,每個網民每次都只點擊一次網頁,每個網頁被訪問的概率。那麼狀態2 1就是全體網民開始點擊瀏覽第二個網頁時,每個網頁被訪問的概率。PageRank 也有一個概率轉移矩陣,而就存在於上圖中,其中,表i網頁鏈向j的連接數除以i網頁的所有外鏈數。其實意思就是,當你訪問到i網頁的時候,有多大的概率訪問j網頁。所以對於某個特定的狀態,全體網民開始訪問第n個網頁,它是由上一個狀態1全體網民訪問到第n-1個網頁,通過某種概率得來。這和上面的窮人,富人非常相似。我們計算A頁面在第n次,也就是狀態n的時候被訪問的概率

所以

整個PageRank 計算直到得到平穩分布,這就是最終每個網頁被網民點擊的概率,或者叫做權重,排名。

接下來咱們具體計算一下,上述四個頁面A,B,C,D的最終權重是多少。我們寫一段C++ 程序來模擬PageRank 的計算過程。

其中p是轉移矩陣,a是我們要求的隨機變量的分布。

運行結果如下

我們發現,到最後的平穩分布居然是,為什麼會發生這樣的情況呢?因為D這個網頁,沒有任何網頁連結到它,所以在轉移的過程中,它的下一個狀態肯定為0,又因為D變成0了,所以影響到它所連結的網頁,最終會導致所有網頁的概率值都變成0。

為了避免這樣的情況,PageRank 引入了一個阻尼係數d和隨機訪問的概念 ,d是一個概率值在0-1之間,這個d的物理意義是當你瀏覽到一個網頁的時候,繼續點擊網頁中的連結瀏覽下一個網頁的概率。那麼1-d 表示的就是瀏覽到一個網頁的時候,不通過網頁中的連結,而是額外新開了一個窗口隨機訪問其他網頁的概率。所以PageRank 認為訪問網頁,要麼是通過網頁中的連結點擊,要麼是隨機訪問。

有了這個阻尼係數d,原先圖中的情況就發生變化了,每個網頁,都有很多條隱形的邊,指向所有其他的網頁,這些隱形的邊表示的是隨機訪問不通過連結點擊。因此在計算A頁面在第n次,也就是狀態n的時候被訪問的概率公式就要發生變化了

物理意義也很好了解,原先從別的網頁通過連結點擊過來的是有一定概率的,概率就是d。而從任意一個網頁隨機訪問而來的概率是1/N,還要乘以1-d 。

因此

修改一下程序,再運行一下

最終四個網頁的權重再第五步的時候就收斂了,可以看到A網頁的權重是最高的,因為它被指向的連結是最多的。

我對 PageRank 算法的初步了解就這麼多了,我覺得PageRank 也應該算是馬爾科夫鏈的應用之一吧。

相關焦點

  • 歷史圖上的PageRank算法設計與實現
    摘要: 近些年來,對於靜態圖的研究越來越全面、深入,已經形成了完善的理論體系。但是,如果考慮到生活中的一些應用問題,如社交網絡中不斷變化的關係等,使用靜態圖表示此類時刻都在變化的關係似乎顯得有些乏力。而歷史圖可以用以表示動態變化。
  • PageRank系列之二:PageRank算法和Google搜索
    看了第一章《 Pagerank 的歷史》,大家應該知道了 PageRank 的由來,聽過了 PageRank 是怎麼在 Larry Page 和 Sergey Brin 的努力下誕生的。  今天 Google PageRank 是什麼第二章,我會開始帶著大家一起初步認識 PageRank 和 Google 搜索結果,看看 Pagerank 的原理。
  • CheckPageRank快速檢測某網站PR值是否作假
    如果該域名具有真實 PR 值,查詢結果返回 「Pagerank is valid!」 的提示信息;反之,如果 PR 值系偽造,返回 「Pagerank seems to be forged!」 的提示信息。除此之外,該工具提供域名在搜尋引擎中的反向連結查詢,以及該域名是否被DMOZ、Google Directory、Yahoo!
  • 人去做文本摘要都挺困難了,機器要怎麼做?
    自動文摘本質上做的一件事情是信息過濾,從某種意義上來說,和推薦系統的功能有一點像,都是為了讓大家更快地找到感興趣的東西,只是用了不同的手段而已。問題描述文本摘要問題按照文檔數量可以分為單文檔摘要和多文檔摘要問題,按照實現方式可以分為提取式(extractive)和摘要式(abstractive)。摘要問題的特點是輸出的文本要比輸入的文本少很多很多,但卻蘊藏著非常多的有效信息在內。
  • 2020 圖算法工程師面試基礎、要點
    為你總結面試必備的知識要點,助你面試成功。 這段時間面試連連,幾輪下來的感受就是,好點兒的公司對細節摳的很細,希望求職者能夠對使用的算法以及這個算法的其它觸類旁通的領域都能夠有系統的理解。
  • 解析|記錄一切的幕後助手——摘要算法
    摘要算法輸入為任意長度數據,輸出為固定長度(這個長度一般較短,在幾十字節以內)的摘要值。 而之所以把摘要算法放到最後面說,是因為摘要算法功能上比較單一——只提供完整性安全服務;使用上又很「輕量級」——不像對稱密碼或公鑰密碼那樣要求數據對齊規整或密碼處理流程嚴格有序。
  • 數字新材料:設計師還得懂算法?
    圖源:unsplash設計者必須了解設計材料的方方面面。從前,這意味著要了解木材、金屬、印刷機,甚至是像素的細微特性。如今的數字設計者必須了解一種更無形的材料:算法。圖源:Maximillian Piras算法必備數字產品顯示的大部分內容都是由算法負責的,如社群摘要feed、購物車建議、電子郵件草稿的常用語推薦。
  • 原來讀論文不能先讀摘要,教你如何正確閱讀一篇文獻
    閱讀一篇論文的時候,相信很多朋友都是直接從摘要開始讀起的,但是呢,這種閱讀方法其實是很糟糕的,摘要一般是整篇論文的概況,看完摘要,對於後面的內容,我們就容易帶著先入為主的態度進行閱讀了。 那麼如何正確、高效的閱讀一篇文獻呢?別急,下面我們就一起來看看吧!
  • 鳥哥:讓你的 PHP 7 更快之 Hugepage
    關於Hugepage是啥,簡單的說下就是默認的內存是以4KB分頁的,而虛擬地址和內存地址是需要轉換的, 而這個轉換是要查表的,CPU為了加速這個查表過程都會內建TLB(Translation Lookaside Buffer), 顯而易見如果虛擬頁越小,表裡的條目數也就越多,而TLB大小是有限的,條目數越多TLB的Cache Miss也就會越高, 所以如果我們能啟用大內存頁就能間接降低這個
  • 摘要翻譯、論文寫作……人工智慧延伸科學交流觸角
    新聞中,小柯先對論文主題、研究單位以及發表期刊進行簡單介紹,後接英文原文摘要的翻譯,大致反映原文內容;翻譯時會對原文進行適當的語句簡化,同時在對專業詞語的翻譯上也使用了如「血管平滑肌細胞」「保護性纖維帽」等專業表述。不過,這也不全是小柯的功勞,因為稿件發出前,還有人工審校這一步驟。北京大學計算機科學技術研究所研究員萬小軍團隊負責小柯的系統總體設計與聯合技術攻關。
  • K-Means聚類講解:算法和Sklearn的實現(附代碼)
    什麼是無監督機器學習無監督機器學習是一種機器學習算法,試圖在沒有任何先驗知識的情況下推斷數據中的模式。與之相反的是有監督的機器學習,這裡我們有一個訓練集,該算法將嘗試通過將輸入與預定義的輸出進行匹配來查找數據中的模式。之所以這樣說,是因為將無監督機器學習任務聚類。在應用聚類算法時,儘管我們可以設置要標識的類別數量,但我們也不會先驗地知道類別。
  • 摘要翻譯、論文寫作、信息檢索、抄襲檢測……人工智慧延伸科學...
    新聞中,小柯先對論文主題、研究單位以及發表期刊進行簡單介紹,後接英文原文摘要的翻譯,大致反映原文內容;翻譯時會對原文進行適當的語句簡化,同時在對專業詞語的翻譯上也使用了如「血管平滑肌細胞」「保護性纖維帽」等專業表述。  不過,這也不全是小柯的功勞,因為稿件發出前,還有人工審校這一步驟。北京大學計算機科學技術研究所研究員萬小軍團隊負責小柯的系統總體設計與聯合技術攻關。
  • 標籤傳播算法(Label Propagation)及Python實現
    本文引用地址:http://www.eepw.com.cn/article/201807/383624.htm一、半監督學習半監督學習(Semi-supervised learning)發揮作用的場合是:你的數據有一些有label,一些沒有。而且一般是絕大部分都沒有,只有少許幾個有label。半監督學習算法會充分的利用unlabeled數據來捕捉我們整個數據的潛在分布。
  • 死磕論文前,不如先找齊一套好用的工具
    另一個原因是缺少能夠在一個界面下滿足我們所有需求的真正好產品,不過說到這個就得另寫一篇博客了。最近,我開始了解 ML 的一個子領域,對該子領域相關文獻的優先排序、閱讀和管理讓我感到非常沮喪……最後我選擇找些工具來幫忙處理這項任務,我想把這些好用的產品和服務分享給你們。希望能夠幫那些需要和科學論文打交道的人改善工作流程。
  • 你了解壓縮算法嗎?常見的壓縮算法都在這裡了
    在認識算法之前我們需要先了解一下文件是如何存儲的文件存儲文件是將數據存儲在磁碟等存儲媒介的一種形式。程序文件中最基本的存儲數據單位是字節。文件的大小不管是 xxxKB、xxxMB等來表示,就是因為文件是以字節 B = Byte 為單位來存儲的。
  • 自動駕駛技術讓機器的道德困境提前到來 算法要如何在生命與財產...
    不過,伴隨著阿里百度等企業的入局,自動駕駛技術作為出行風口,由於可以在弱人工智慧下,依託於複雜的傳感器陣列和完善的電腦算法而實現,已經離我們越來越近。相對的,我們為人工智慧所設想的機器人道德倫理難題,也必然將在自動駕駛技術的落地之後,被更早地提到人們的面前。
  • 專欄| NLP概述和文本自動分類算法詳解
    本文根據達觀數據聯合創始人張健的直播內容《NLP 概述及文本自動分類算法詳解》整理而成。 一、 NLP 概述 1.文本挖掘任務類型的劃分 文本挖掘任務大致分為四個類型:類別到序列、序列到類別、同步的(每個輸入位置都要產生輸出)序列到序列、異步的序列到序列。 同步的序列到序列的例子包括中文分詞,命名實體識別和詞性標註。一部的序列到序列包括機器翻譯和自動摘要。
  • 推薦算法系統/人臉識別/深度學習對話機器人高級實戰課
    推薦系統是偏算法的策略系統,但要達到一個非常好的推薦效果,只有算法是不夠的。比如做算法依賴於訓練數據,數據質量不好,或者數據處理沒做好,再好的算法也發揮不出價值。算法上線了,如果不知道效果怎麼樣,後面的優化工作就無法進行。所以AB測試是評價推薦效果的關鍵,它指導著系統該何去何從。為了能夠快速切換和優化策略,推薦位管理平臺起著舉足輕重的作用。
  • 帶你從不同角度了解強化學習算法的分類
    兩種算法都各有優缺點,如下表所示:基於價值VS 基於政策RL算法的另一種分類方法是考慮算法優化了價值函數還是策略。在深入了解之前,我們先了解策略和價值功能。規則很簡單:· 剪刀克布· 石頭克剪刀· 布克石頭把策略看作是迭代的剪刀石頭布· 確定性策略容易被利用-如果我意識到你出