知乎算法團隊負責人孫付偉:Graph Embedding在知乎的應用實踐

  • 2019 年 10 月 4 日
  • 筆記

演講嘉賓 | 孫付偉

出品 | AI科技大本營(ID:rgznai100)

9月6-7日,在由CSDN主辦的2019中國AI開發者大會(AI ProCon 2019)的 機器學習專場中,知乎算法團隊負責人孫付偉在機器學習專場中分享了《Graph Embedding及其在知乎的實踐》。

Graph Embedding 技術是一種將圖的拓撲結構進行向量表示的方法,從而獲取到網絡關係信息,應用於推薦等多種場景。在本報告中,孫付偉重點講了Graph Embedding 技術,以及在知乎的具體實踐,包括知乎用戶embedding 的實踐和在在知乎收藏夾數據中的應用。未來,知乎還計劃用Graph Embedding進行會員購買預測,以及個性化推送的召回。

以下為演講內容實錄:

很高興能夠參加這次AI開發者大會。我今天分享的是GraphEmbedding及其在知乎的一些實踐。

什麼是Graph Embedding呢?這些年來深度學習發展速度非常快,但是一直遇到一個問題,我們現實的世界當中很多是以圖存在的,比如社交關係,比如搜索行為、購買行為,它形成的都是一種圖的表示關係。但是傳統的Embedding,包括在自然當中圖關係的挖掘,其實做的遠遠不夠。從2014年開始,已經有一些業內學者在這方面做一些深入研究,研究Embedding是否可以做圖的表徵,接下來我會簡單做個介紹。之後我會分享一下Graph Embedding在知乎的兩個應用,一個是用戶Embedding的表示,一個是知乎收藏夾數據的Embedding挖掘。最後是對今天分享的總結,以及我們未來的具體工作規劃。

首先講一下知乎的業務背景。知乎現在已經是一個綜合性的問答社區,截止到今年1月份,我們的用戶數超過2.2億,累計超過3000萬的問題提出,並由此帶來1.3億的優質回答。除此之外,我們還有大量的文章,鹽選專欄、電子書等等其他多種產品形態。在這樣一個大的問答社區當中,本質上來說,其實一個問答社區是一種連接關係,萬物都是一個連接關係。

在問答社區裏面包含了三大塊:一塊是人和人之間的連接,一塊是人與內容之間的連接。比如說在知乎的搜索和推薦當中,就存在着大量的連接關係,我們會根據用戶的關注頁關係來推薦內容。還有一塊是內容自身的連接,在知乎有一個特殊的功能「收藏夾」,並且這個收藏夾是公開的,大概有幾千萬個,意味着其他用戶是可以看到別人的收藏。這就會形成內容和內容之間的連接。在知乎這樣一個萬物都是連接的問答社區當中,如何有效表徵這種連接關係,是我們這幾年一直在思考一個點。

上圖我們以站內一些數據做了一個連接關係的展現,其實一種大的連接點,會形成千千萬萬的連接。用戶關係挖掘會有助於我們社群關係的連接提升,也有助於用戶群體的發現。

既然是圖關係,我們為什麼要用到Graph Embedding呢?在面對圖結構的時候,我們傳統的序列Embedding經常不知道該怎麼去處理。圖這種連接關係是沒有序列狀的表示,怎麼去做這件事?為了解決這樣一個問題,從2014年一直到現在,Graph Embedding變成了業內一個全新的研究方向。

我先介紹一些經典的技術和方法。首先我們看第一個,2014年deep walk提出可以算作Graph Embedding邁出來的第一步工作。這篇文章的思想相對來說還是比較簡單的,它是藉助了word2Vec之前的圖表序列,隨機遊走方式,將圖以序列方式表徵。舉一個例子,這個圖更容易跟我們現實當中結合起來,最左側是用戶購買,或者貢獻購買之間的關係。根據貢獻購買之間的關係之後,走一步randomwalk生成,形成商品關係之間的序列,形成序列之後,就可以藉助於Graph Embedding思想進行表示。可以說,它已經打開了Graph Embedding這扇門,讓大家了解其實圖也是一個我們需要去深入連接的點。

2014年deep walk打開這扇門之後,2015年微軟發表了LINE這篇文章,這篇文章有兩個核心的概念需要說明一下,它明確定義了圖當中的相似度如何表徵,這裡表徵用了兩個概念,一個是1階相似度,節點和節點之間存在直接的連接,叫1階相似度。比如右側的6和7,7和8,這種連接關係都是1階連接,當它存在邊,它的邊就是它的相似度,如果不存在邊,它的1階相似度就是0。2階相似度主要說的是它們的兩個節點之間並不存在直接連接關係,但是它的鄰居是大量重合的,主要衡量的是兩個節點的網絡結構相似度的程度是多少。

比方說在這個圖裏面,5和6,1階相似度是0,2階相似度可以是另外一種值。通過這種方式我們就可以把圖的這種關係用這樣的定義來刻畫出來,我們在現實當中經常需要去挖掘的是,除了它的1階關係,還要用到它的2階關係,從而能夠應用到把這個Embedding學出來它們的網絡結構的表徵,從而應用於推薦這些場景。講完概念之後我們再來看1階相似度和2階相似度如何定義問題的。

我們先說一個機器學習的問題,裏面有一個叫預測概率、經驗概率、和優化目標。在優化目標上,核心點主要預測的是交叉商的優化目標,這部分只是表徵了一個正樣本,我們其實還存在負樣本,對負樣本採用負採樣的方式,把優化目標作為一個改造,形成這樣一個表徵,這是1階相似度。2階相似度,優化目標和上面是類似的。這是基於上面這種關係我們把它的優化目標做一個簡單說明,這篇文章裏面做了三點優化技巧。

首先,1階和2階可以分開訓練的,因為每個都有自己的優化目標,這篇文章裏面特殊的技巧,分開訓練,在一些應用場景裏面把它concat到一起做預測。其次是wij,權重範圍相當大,所以我們在去做預測推廣的時候它的學習率是很難控制的,這裡採用了一個技術方案,邊採樣,EdgeSample,從而降低這個問題。對於冷啟動的事,當一個節點邊較少的時候,怎麼去處理,在現實當中冷啟動經常會遇到這樣的問題,這篇文章已經開始考慮了節點冷啟動問題,它用的一個手段是,往外擴充,用它的2階鄰居,它的3階點來去處理它們2階相似度,放在2階相似度上來表明。這個是2015年的一篇文章。

2016年有兩篇文章,一篇文章在Deep walk的擴展,我們可以想一下randomwalk整個流程,類似於深度優先搜索的挖掘路徑,這篇文章和Deep walk唯一差別是,它既考慮了DFS,又考慮了BFS,可以把結構信息學得更全面一些。分為同質性和結構性,它們形成的序列越接近,Embedding表徵越相似,比如說U和S1、S2這些,表徵越接近越好。結構性,兩個結構越接近,學出來的Embedding表徵越相似。如果我要更傾向於BFS,U和S6更接近一些。如果是DFS,相近的這些Embedding表徵更相似。所以,這篇文章是做了結構性和同質性的某種中和,但是怎麼來調節它們倆之間的權重,怎麼來控制,其實用了一個跳轉概率,來控制BFS和DFS的傾向性。

以下圖為例,當一個T節點進入到下一個節點V的時候,到V這個節點之後,下一步應該朝哪個節點走呢?這裡定義兩個參數,分別是p和q,通過這兩個參數來控制我到底v朝X2、X3隨機走,還是返回。在v到t的跳轉概率反而越來越小,越大就偏重於DFS,如果t越小就偏重於BFS。這篇文章把p和q做了一系列參數實驗。整個效果看一看是不是我剛才說的內容。

當它越靠近DFS的時候,它們學出來的是這種促的信息,學Embedding表徵越來越相近。如果是靠近BFS,節點連接的關係信息學的會更相近一些。

這是2016年的第一篇文章,在Deepwalk基礎上做了進一步演進,主要是解決結構性的問題。

第二篇文章,SDNE這篇文章,這兩篇文章都發表在KDD2016年的兩篇文章,上面那篇文章是在Deep walk基礎上做擴展,這篇文章是在LINE基礎上做擴張。圖的網絡結構信息分成local和global的,local是LINE裏面1階關係,直接相連關係,global說的是鄰居之間跟它的連接關係,這是它的一個對應。

這篇文章又用了另外一種思路,非監督的autoencoder方式,來得到Embedding表示,我們先來看右側這個圖,globalEmbedding的圖的結構。它的Embedding表示什麼呢?和我相連的那些節點權重就是這裏面的表徵,xi是這樣表徵,autoencoder之後會形成新的表徵,我們去衡量它原始的表徵和新的表徵之間的相似度,就是我們優化的一個點。xi用鄰居的信息來表徵它自身特徵的,其實是global的概念。(原文當中的圖是錯的,這個地方是local,這個是global,其實我們反過來看,應該是畫錯了,這個詞畫錯了。)

這個是針對i這個節點,針對j這個節點也一樣,也會學出來這個表徵,最終i這個節點的表示是中間這一層,我們是要去度量中間這兩個節點的相似度,來去表徵。它的優化函數,加了一個因子。這篇文章可以說是用了我們N的更複雜的autoencoder的思想,在LINE的基礎上做了擴展。

這篇文章其實也有應用,在阿里,湊單系統裏面,這是他們開放的一個博客裏面有所提到,湊單系統裏面做這件事,怎麼做呢?拿到用戶同時購買的內容序列,形成這樣一個圖的表示。在這個圖的表示裏面去用加權的walk做採樣,為什麼做採樣?這個表徵是說它與它相連的那些節點之間的權重,當我這個數據量規模,像淘寶這樣一個大的數據規模裡邊,連接關係是特別特別多的。先對樣本做採樣,採樣的方式是對熱門數據做加權,它想表徵出來讓熱門數據推薦的更充分一些,然後做了這樣一個加權,這個裏面用的結構其實就是SDNE。

不過它在SDNE裡邊加了這樣一個全連接,能跟它的現有系統做一個比較,這是它的一個變化。它在雙11預熱期間,在點擊和多樣性這兩個指標上,據它的公開表述說,它的點擊提升了13%,它做成實時化之後,在這個基礎上又提升了4%。它們內部多樣性指標直接翻了接近 1倍。

這是2016年的第二篇文章。

在2018年阿里又寫了一篇文章,主要用在解決我們在圖裏面表徵冷啟動的一些問題,有些節點它的信息較少,我們怎麼去處理。EGES是在2018年KDD上發表的,核心點主要是在Deepwalk基礎之上加入了對冷啟動商品的處理,加入的方式叫side information,兩個商品之間儘管沒有共現的關係,儘管共現關係特別少,但是還有其他額外的知識信息,知識圖的信息是可以用起來的。比如說屬於同一個店鋪,屬於同一個品類,屬於同一類價格區間等等,大概十幾類sideinformation,把這個信息變成了它在圖當中利用特殊的相似度鏈接,把它拼接起來,形成一個新的更完備的圖。後面的工作就比較簡單了,形成這個鏈接之後,不同的連接關係,通過sideinformation信息學的某種表徵,把向上連接作為不同權重來去學習它。

這篇文章思路是比較簡單的,但是它具有很強的實操性,在業內已經有幾個公司都在用這篇思路來做Embedding召回,一會兒我們可以去看在知乎上的效果。

上面簡單說了一下Graph Embedding這些年主要的技術點,當然,還有最新的我還沒有講到。我下面主要講一講GraphEmbedding在知乎的兩個實踐,現在Graph Embedding在知乎應該有三四個分別的應用,我先拿這兩個,因為這兩個和上面的文章是一一對應的。

第一個,關於用戶Embedding表示,這個是我們在2017年的時候做的一個嘗試,我們在知乎大概有幾千萬的存在大量鏈接關係的用戶,為了強化他們在社區上的互相影響,並且讓他們形成一種社區的概念,做用戶的推薦,或者說用戶群體的挖掘,變成我們不得不考慮的一件事。當時考慮一個點,用GraphEmbedding思路,我們去學一下Embedding,看看它的效果。這裏面的思想其實比較簡單,就是純的Deepwalk,通過篩選,大概篩選出2400萬用戶群體,根據它的關係挖掘,形成這樣的關係鏈路,形成關係序列,最後就是用Deepwalk思想做了預測。

上圖是我們跑完之後的效果圖,做機器學習和深度學習的會比較了解這些同學。

上面的思想比較簡單,2017年做的,今年上半年我又做了第二件事,EGES,阿里2018年的那篇文章,知乎有幾千萬收藏夾的數據,這是兩個例子,深度學習,用戶自己編輯的收藏夾,我們可以看到相關文章,常用的,什麼是梯度下降法,機器學習最好的課程是什麼等等,一系列文章,形成了收藏夾。這些是成長相關的文章,比如自律,提升自我競爭力等等。當然,這些數據全是用戶自己對外公開的數據,因為收藏夾數據要麼是自己看的收藏夾,要麼是公開的收藏夾,我們用的數據都是公開的,用戶願意分享的收藏夾數據。

這個收藏夾數據包含了大量有價值的內容,2018年的時候,我們大量都在用一些協同過濾思想來做這件事,挖掘它們之間的關係。當時遇到兩個問題沒太好解決。第一個問題,長尾的內容不太好表示。第二個問題,默認了用戶的這個序列,在我們協同過濾裡邊瀏覽的序列,但是在實際當中,它這個先後是沒有任何關係的。所以,在矩陣協同分解的時候,我們認為它無法表達更強的傳播能力,讓它學的多樣性不夠,總體效果也可能會有些損失,等一會兒我們來看看是不是這樣。

其實思想還是藉助於業內他們的思路,他們是基於共同購買,我們是基於收藏夾的內容,做一些篩選,構建Graph,節點為內容,而沒有把收藏夾變成其中一個節點,這個其實是有一個考慮的。大家可以想想為什麼,我們的內容可能和收藏夾是不成比例的,在我們收藏的內容,如果把它變成一個節點,它可能學出來的會有些問題,當然,這是我們睬的一些坑,後面挖掘出來的東西。如果它貢獻了,我們就認為它存在一條邊。

在收藏夾數據裡邊,我們跟淘寶可能不太一樣的地方是,我們更期望的是推薦出來它的真正Embedding相似,而不是推薦一些熱門的。所以,在這裡我們會對熱門內容降採樣,並且考慮做序列挖掘的時候,考慮了BFS挖掘信息。我們還引入了自身的side information信息,例如topic,兩篇文章同一作者等等這樣的信息,加入到我們的Embedding學習當中。這是我們做的幾個概念。

訓練集,110萬節點,構建3億條邊,Random walk和EGES差不多,每個節點會進行10次walk,最終效果是下面這個結果。本來還有它作為Embedding召回在線上應用的東西,但是那些東西不太適合在這個場景去說,所以我就沒有把那些東西添上。我們先以一個事例說明效果。

同樣是兩個回答,這兩個回答都是說為什麼白居易寫了《琵琶行》卻不娶琵琶女,我們可以看用協同過濾推出來的效果,右側是我們基於EGES推出來的。基本上是偏重於詩詞,還有一些是雅稱,還有一些是關於魯迅文學相關的,大概是這樣一個推薦的效果,這是在召回上。我們現在這個東西會用在好幾個推薦場景,比方說個性化推送,比方說做內容回答的推薦等等等等,還有問題的推薦。這是兩個在知乎的具體實踐。

最後做一個簡單總結,我們認為Graph Embedding在這些年已經成為推薦系統、計算廣告等領域一種新的流行做法,並且Graph這種圖的表徵還在如火如荼的開展當中。我們認為它的影響會持續放大。我們現在跟着業內最前沿的腳步往前走,看看如何達到更好地把最新的技術前沿應用到知乎具體的算法場景當中。

其次,關於未來規劃,我們在這裏面會涉及到兩點,一是會員購買預測,知乎現在的會員業務中涉及到像淘寶一樣購買場景,但是這裏面存在一個問題,它的數據更稀疏,如何在稀疏的數據當中學出來Embedding表示,是我們要考慮的一個點。第二個是個性化推送的召回,目前已經上線。二是更多的技術嘗試,我們在用戶畫像當中只用到了Embedding挖掘,但用戶的持續興趣、關注興趣、瀏覽文章等等,有大量信息是可以去用的,但是這個信息我們現在還沒有做進一步的嘗試,這將是我們下一步要嘗試的點。第二點,根據SDNE那篇文章,我們認為它那個表徵會更自然一些,現在想法是會把side information信息與SDNE結合,看看會不會有別樣的效果提升。

(*本文為AI科技大本營原創文章,轉載請微信聯繫 1092722531)