鏈結分析演算法之 SALSA演算法

2021-09-08 04:05:07 字數 4850 閱讀 7484

salsa演算法的初衷希望能夠結合pagerank和hits演算法兩者的主要特點,既可以利用hits演算法與查詢相關的特點,也可以採納pagerank的「隨機遊走模型」,這是salsa演算法提出的背景。由此可見,salsa演算法融合了pagerank和hits演算法的基本思想,從實際效果來說,很多實驗資料表明,salsa的搜尋效果也都優於前兩個演算法,是目前效果最好的鏈結分析演算法之一。

pagerank的計算物件是網際網路所有網頁,salsa演算法與此不同,在本階段,其與hits演算法思路大致相同,也是先得到「擴充網頁集合」,之後將網頁關係轉換為二分圖形式。

擴充網頁集合

salsa演算法在接收到使用者查詢請求後,利用現有搜尋引擎或者檢索系統,獲得一批與使用者查詢在內容上高度相關的網頁,以此作為「根集」。並在此基礎上,將與「根集」內網頁有直接鏈結關係的網頁納入,形成「擴充網頁集合」(參考圖6.4.3-1)。之後會在「擴充網頁集合」內根據一定鏈結分析方法獲得最終搜尋結果排名。

轉換為無向二分圖

在獲得了「擴充網頁集合」之後,salsa根據集合內的網頁鏈結關係,將網頁集合轉換為乙個二分圖。即將網頁劃分到兩個子集合中,乙個子集合是hub集合,另外乙個子集合是authority集合。劃分網頁節點屬於哪個集合,則根據如下規則:

如果乙個網頁包含出鏈,這些出鏈指向「擴充網頁集合」內其它節點,則這個網頁可被歸入hub集合;

如果乙個網頁包含「擴充網頁集合」內其它節點指向的入鏈,則可被歸入authority集合。

由以上規則可以看出,如果某個網頁同時包含入鏈和出鏈,則可以同時歸入兩個集合。同時,hub集合內網頁的出鏈組成了二分圖內的邊,根據以上法則,將「擴充網頁集合」轉換為二分圖。

圖6-15和圖6-16給出了乙個示例,說明了這個轉換過程。假設「擴充網頁集合」如圖6-15所示,由6個網頁構成,其鏈結關係如圖所示,同時為便於說明,每個網頁給予乙個唯一編號。圖6-16則是將圖6-15中的網頁集合轉換為二分圖的結果。以網頁6為例,因為其有出鏈指向網頁節點3和網頁節點5,所以可以放入hub集合,也因為編號為1、3、10的網頁節點有鏈結指向網頁節點6,所以也可以放入authority集合中。網頁節點6的兩個出鏈保留,作為二分圖的邊,

圖6-15 擴充網頁集合示例

但是這裡需要注意的是,在轉換為二分圖後,原先的有向邊不再保留方向,轉換為無向邊,而hits演算法仍然保留為有向邊,這點與salsa略有不同。

圖6-16   二分圖

到這一步驟為止,除了salsa將「擴充網頁集合」轉換為無向二分圖,而hits仍然是有向二分圖外,其它步驟和流程,salsa演算法與hits演算法完全相同,正因此,salsa保證了是與使用者查詢相關的鏈結分析演算法。

在鏈結關係傳播階段,salsa放棄了hits演算法的hub節點和authority節點相互增強的假設,轉而採納pagerank的「隨機遊走模型」。

鏈結關係傳播概念模型

如圖6-16所示,假設存在某個瀏覽者,從某個子集合中隨機選擇乙個節點出發(為方便說明,圖中所示為從hub子集的節點1出發,實際計算往往是從authority子集出發),如果節點包含多條邊,則以相等概率隨機選擇一條邊,從hub子集跳躍到authority集合內節點,圖中所示為由節點1轉移到節點3,之後從authority子集再次跳回hub子集,即由節點3跳到節點6。如此不斷在兩個子集之間轉移,形成了salsa自身的鏈結關係傳播模式。

儘管看上去與pagerank的鏈結傳播模式不同,其實兩者是一樣的,關鍵點在於:其從某個節點跳躍到另外乙個節點的時候,如果包含多個可供選擇的鏈結,則以等概率隨機選擇一條路徑,即在權值傳播過程中,權值是被所有鏈結平均分配的。而hits演算法不同,hits演算法屬於權值廣播模式,即將節點本身的權值完全傳播給有鏈結指向的節點,並不根據鏈結多少進行分配。

salsa的上述權值傳播模型與hits模型關注重點不同,hits模型關注的是hub和authority之間的節點相互增強關係,而salsa實際上關注的是hub-hub以及authority-authority之間的節點關係,而另外乙個子集合節點只是充當中轉橋梁的作用。所以,上述權值傳播模型可以轉化為兩個相似的子模型,即hub節點關係圖和authority節點關係圖。

authority節點關係圖

圖6-17是由6-16的二分圖轉化成的「authority節點關係圖」,「hub節點關係圖」與此類似,兩者轉化過程是相似的,我們以「authority節點關係圖」為例來看如何從二分圖轉化為節點關係圖。

圖6-17  authority節點關係圖

這裡需要注意的是:authority集合內從某個節點i轉移到另外乙個節點j的概率,與從節點j轉移到節點i的概率是不同的,即非對稱的,所以轉換後的authority節點關係圖是個有向圖,以此來表示其轉移概率之間的差異。

對於圖6-17這個「authority節點關係圖」來說,圖中包含的節點就是二分圖中屬於authority子集的節點,關鍵在於節點之間的邊如何建立以及節點之間轉移概率如何計算。

節點關係圖中邊的建立

之所以在「authority節點圖」中,節點3有邊指向節點5,是因為在二分圖中,由節點3通過hub子集的節點6中轉,可以通達節點5,所以兩者之間有邊建立。

這裡需要注意的是:在二分圖中,對於authority集合內某個節點來說,一定可以通過hub子集的節點中轉後再次返回本身,所以一定包含一條指向自身的有向邊。節點1因為只有中轉節點2使得其返回authority子集中自身節點,所以只有指向自身的一條邊,和其它節點沒有邊聯絡,所以例子中的「authority節點關係圖」由兩個連通子圖構成,乙個只有節點1,另外乙個連通子圖由剩餘幾個節點構成。

節點之間的轉移概率

至於為何「authority節點關係圖」中,節點3到節點5的轉移概率為0.25,是因為前面介紹過,salsa的權值傳播模型遵循「隨機遊走模型」。在圖6-16的二分圖中,從節點3轉移到節點5的過程中,節點3有兩條邊可做選擇來跳轉到hub子集,所以每條邊的選擇概率為1/2,可以選擇其中一條邊到達節點6,同樣,從節點6跳回到authority子集時,節點6也有兩條邊可選,選中每條邊的概率為1/2。所以從節點3出發,經由節點6跳轉到節點5的概率為兩條邊權值的乘積,即為1/4。

對於指向自身的有向邊,其權重計算過程是類似的,我們仍然以節點3為例,指向自身的有向邊代表從authority子集中節點3出發,經由hub子集的節點再次返回節點3的概率。從6-16的二分圖可以看出,完成這個過程有兩條路徑可走,一條是從節點3到節點1返回;另外一條是從節點3經由節點6後返回;每一條路徑的概率與上面所述計算方法一樣,因為兩條路徑各自的概率為0.25,所以節點3返回自身的概率為兩條路徑概率之和,即為0.5。圖中其它邊的轉移概率計算方式也是類此。

建立好「authority節點關係圖」後,即可在圖上利用「隨機遊走模型」來計算每個節點的authority權值。在實際計算過程中,salsa將搜尋結果排序問題進一步轉換為求authority節點矩陣的主秩問題,矩陣的主秩即為每個節點的相應authority得分,按照authority得分由高到低排列,即可得到最終的搜尋排序結果。

圖6-18  salsa節點權值計算公式

經過數學推導,可以得出salsa與求矩陣主秩等價的authority權值計算公式。圖6-18示意圖表明了salsa演算法中某個網頁節點的authority權值是如何計算的。如圖右上角公式所示,決定某個網頁i的authority權值涉及到4個因子:

authority子集中包含的節點總數|a|。其實這個因子對於authority集合中任意節點來說都是相同的,所以對於最終的根據節點authority權值進行排序沒有影響,只是起到保證權值得分在0到1之間,能夠以概率形式表示權值的作用;

網頁i所在連通圖中包含的節點個數|aj|。網頁所在的連通圖包含的節點個數越多,則網頁的authority權值越大;

網頁i所在連通圖中包含的入鏈總數|ej|。網頁所在的連通圖包含的入鏈總數越少,則網頁的authority權值越大;

網頁i的入鏈個數|bi|。節點入鏈越多,則authority權值越大,這個因子是唯一乙個和節點本身屬性相關的。由此可見,salsa權值計算和節點入鏈個數成正比。

之前圖6-17的「authority節點關係圖」由兩個連通子圖組成,乙個由唯一的節點1構成,另外乙個由節點3、5、6三個節點構成,兩個連通子圖在圖6-18中也被分別圈出。

我們以節點3為例,看其對應的四個計算因素取值:

authority子集共包括4個節點;

節點3所在連通圖包含3個節點;

節點3所在連通圖共有6個入鏈;

節點3的入鏈個數為2;

所以,節點3的authority權值為:(3/4)*(2/6)=0.25。其它節點權值的計算過程與此類似。salsa根據節點的authority權值由高到低排序輸出,即為搜尋結果。

由上述權值計算公式可以推論出:如果整個authority子集所有節點形成乙個完整的連通圖,那麼在計算authority權值過程中,對於任意兩個節點,4個因子中除了節點入鏈個數外,其它三個因子總是相同,即只有入鏈個數起作用,此時,salsa演算法退化為根據節點入鏈個數決定排序順序的演算法。

從salsa計算authority得分過程中可看出,salsa演算法不需像hits演算法一樣進行不斷迭代計算,所以從計算效率角度看要快於hits演算法。另外,salsa演算法解決了hits演算法的計算結果主題漂移的問題,所以搜尋質量也優於hits演算法。salsa演算法是目前效果最好的鏈結演算法之一。

《這就是搜尋引擎:核心技術詳解》

鏈結分析演算法之 HITS演算法

hits hits hyperlink induced topic search 演算法是由康奈爾大學 cornell university 的jon kleinberg 博士於1997 年首先提出的,為ibm 公司阿爾馬登研究中心 ibm almaden research center 的名為 c...

短鏈結演算法收集與分析

yun.io 如何實現呢,大概有三個步驟 1 定義乙個url對映演算法,可以將長的url對映成短字串 2 使用乙個儲存 資料庫?nosql?來儲存完成的對映 3 實現自己的url對映演算法 一般來說,第三步是我們比較頭疼的,如何將乙個長的url字串,對映成乙個較短的字串呢。我總結了三種辦法 普通實現...

STL演算法分析之Copy()演算法

在看sgi stl原始碼的時候,畢竟會碰到很多的演算法,不理解這些演算法對我們的閱讀產生了很大的影響,現在先來分析下幾個已經碰到的了的演算法。第乙個copy 演算法。copy演算法說起來很簡單就是將迭代器裡面的 first,last 區間裡的元素賦值到指定的 result 指定的區間裡面去 resu...