CIKM最佳應用論文:11億節點的大型圖,看閒魚如何用圖卷積過濾垃圾評論

機器之心發表於2019-11-28

訓練並推斷 11 億節點的圖,閒魚垃圾評論過濾系統也用上了最前沿的圖卷積神經網路阿里巴巴的這項研究獲得了 ACM CIKM 2019 最佳應用論文獎,這足以說明圖卷積在傳統任務中的強大潛力。

垃圾資訊過濾一直是我們關注的問題,雖然表面上它只是一個最簡單的二分類問題,但要做好還是非常困難的。尤其是閒魚這種開放性評論機制,評論的維度及角度非常多種多樣,再來篩選垃圾資訊就非常困難了。

從最開始我們通過關鍵字判斷垃圾資訊,到採用樸素貝葉斯等淺層模型,再到 TextCNN 等深度神經網路,我們已經採用很多演算法從文字層面判斷評論是不是垃圾評論。

但很多時候,光使用文字是不夠的,因為在閒魚的場景中,灰產和模型一直在對抗,垃圾評論變異得很快,閒魚需要結合一些難以變異的特徵判斷評論是不是垃圾評論,這些難以變異的資訊包括髮送這條評論的使用者資訊、接收這條評論的商品特徵,甚至是傳送這條資訊的使用者,他的其它評論行為;以及與它類似的文字都有什麼特徵。

如果要利用這些多模態資訊與複雜的圖結構資訊,我們就需要更強大的前沿模型——圖卷積神經網路

在這篇文章中,機器之心將介紹阿里如何把圖卷積網路用於閒魚的垃圾評論過濾。目前該系統已經部署到了閒魚使用環境中,它每天能處理百萬級的閒魚評論,並在其他強有力的深度學習模型基礎上,額外篩選出一千多條非常隱祕的垃圾評論。

阿里研究者表示:「基於圖卷積的垃圾資訊篩選是一種非常通用的思想,它的應用範圍遠不止垃圾評論過濾,淘寶資訊的智慧財產權保護、淘寶商品管控和使用者惡意評價等方面都可以採用。本身阿里的業務場景非常廣,再加上神經網路可以利用複雜圖資料的結構資訊和多模態屬性資訊,神經網路還是非常有前景的。」

閒魚評論過濾為什麼難?

閒魚是國內最大的二手交易平臺,我們可以瀏覽賣家釋出的各種商品,並根據描述與評論選擇合適的物品。然而,這個每天交易超過 20 萬商品的平臺,卻會受到垃圾評論的困擾。這主要是因為它與淘寶不一樣,淘寶只有買過商品才能評價,但是對於閒魚,評論充當著買賣雙方的溝通工具,很多評論行為發生在購買之前

正式這種提前溝通與議價的機制,為垃圾評論提供了合適的平臺。想象一下,如果灰產使用者在許多受關注的商品中留言自己的廣告,這樣豈不是非常「划算」?為此,阿里的研究者一直與垃圾評論做著對抗,垃圾評論越來越「隱祕」,而判別演算法也越來越「聰明」。

我們先看看廣告評論怎樣越來越隱祕:

  • 換個說法:使用不同的方式表達相同的意思,例如「撥打電話獲得更多兼職資訊」和「閒餘時間掙點錢?聯絡我」,這兩者都引導我們關注相同的兼職廣告。

  • 關鍵字替換:使用少見的中文字元、筆誤,甚至表情符號替換關鍵字,例如「加我的 VX/V/WX」都表示加我的微信。

垃圾評論釋出者的這些小技巧很容易欺騙一般的機器學習系統,與此同時,如果釋出者發現這些方法不太管用,他們又會挖掘一些新技巧。因此這樣總是防不勝防,已經部署的防控演算法的效果也會逐步降低。所以如果是一個好的垃圾評論過濾系統,它首先要捕捉到現有的各種模式,與此同時還應該降低對抗行為對系統的影響。

解決思路是什麼?

解決垃圾資訊過濾的核心思想在於上下文,我們只有把文字資訊放入對應的環境,才能準確判斷它到底是不是垃圾評論。阿里研究者定義了兩種上下文,即區域性上下文和全域性上下文。其中區域性上下文包含發這條評論的買家特徵及行為和這條評論對應的商品特徵等資訊,而全域性上下文表示當前評論在全部評論中的扮演的角色。

  • 論文:Spam Review Detection with Graph Convolutional Networks

  • 論文地址:https://arxiv.org/abs/1908.10679

以兩種上下文資訊為出發點,研究者設計了名為 GCN-based Anti-Spam System(GAS) 的垃圾評論過濾系統。如下所示為 GAS 的整體概覽,其中模型會從左側圖抽取出表示商品、使用者和評論的資訊,從右側抽取出類似評論表示的意義。最後結合這些資訊進行分類,模型就能很好地識別垃圾資訊了。

CIKM最佳應用論文:11億節點的大型圖,看閒魚如何用圖卷積過濾垃圾評論

研究者表示:「GAS 會使用兩個圖來引入不同的上下文的資訊。閒魚 Graph 是一個異構圖,它引入區域性上下文資訊,另一個是同構圖 Comment Graph,它引入了全域性上下文資訊。在這兩個圖上,研究者分別執行不同的圖卷積演算法,並最終融合兩個圖模型的上下文資訊,從而共同判斷一個評論是不是有問題。」

這項研究比較重要的地方在於,研究者基於他們對業務的理解,所設計的圖網絡結構能夠完成兩種上下文資訊的抽取,從而真正提升業務場景的效果。研究者說:「這是我們論文最主要的貢獻之一,我們會把傳統的文字分類的問題抽象成異構圖上的邊分類問題,把圖卷積演算法和文字分類做一個很好的結合。」

不光是在做垃圾檢測的過程當中,阿里在研究與業務中都會遇到很多特定問題。研究者表示:「很多情況下,我們很難從學術界直接套用一些好的方法,因此經常要把成熟或新穎的演算法匹配到業務上,這些匹配很可能做出一些新的貢獻。」

如何優雅地理解圖卷積

圖卷積是非常神奇的一個模型,它能處理圖這種結構化的資料。但是如果要理解圖卷積,我們又會發現它要求的數學基礎似乎非常高,傅立葉變換、拉普拉斯運算元等一大波數學在等著我們,這就是最初的頻域思路。

阿里研究者說:「自 ICLR 2017 Kipf 的文章發表以來,圖卷積才逐漸受到更多的關注,該論文從頻域的角度將 CNN 轉移到了 Graph,並推匯出了非常簡單優雅的形式。後來研究者又從空域的角度提出了 GraphSAGE,它利用直觀的節點取樣與特徵聚合高效地生成節點向量,後面還有 Bengio 組的 GAT 與 MIT 的 jumping knowledge net。想了解圖卷積的同學可以從這幾篇文章入手。」

  • 圖卷積開山之作:Semi-Supervised Classification with Graph Convolutional Networks

  • 論文地址:https://arxiv.org/abs/1609.02907

圖卷積的核心思想是希望利用近鄰節點的資訊進行聚合而生成當前節點的新表徵,這樣的節點表示可以進一步用於下游任務。如果我們直接從核心表示式出發,跳過推導過程,其實能更容易地理解。如下所示為兩層圖卷積網路之間的傳播方法,它看起來只不過比常規的神經網路多了 D tilde 與 A tilde 這幾項。

CIKM最佳應用論文:11億節點的大型圖,看閒魚如何用圖卷積過濾垃圾評論

如果我們的圖有 n 個節點,那麼節點與節點之間的關係可以用 n*n 的鄰接矩陣表示,它再加上由節點特徵向量組成的矩陣 H 就是圖卷積的輸入。在上式中,A tilde 以及 D tilde 就是由鄰接矩陣算出來的東西,它對於同一張圖是不變的,因此可以預先計算好。

現在,剩下的 H×W 就是輸入Embedding H經過一層全連線層了,以這樣方式進行層級傳播的卷積網路就是圖卷積,我們可以將傳播理解為每個節點拿到鄰居節點資訊,並聚合到自身嵌入向量上

CIKM最佳應用論文:11億節點的大型圖,看閒魚如何用圖卷積過濾垃圾評論

如上圖所示,圖卷積網路的輸入是表示節點及邊的特徵向量,經過一系列隱藏層的變換,可以計算出每個節點的深度表徵。這樣的 Z 再來做預測或生成就會非常有效。直觀而言,圖卷積將圖片的 RGB 畫素值替換成節點特徵,並且通過邊的關係引入了鄰居的概念,完成卷積運算。

異構圖上的圖卷積

阿里 GAS 一共有兩種輸入圖,它們分別用來表示區域性資訊與全域性資訊。首先我們看看異構圖,一般只要邊的種類加上節點的種類大於 2,我們就可以稱之為異構圖。如下所示閒魚 Graph 為一個標準的異構圖,目前圖卷積網路大部分都關注更簡單的同構圖,閒魚 Graph 這種異構圖很難處理。

CIKM最佳應用論文:11億節點的大型圖,看閒魚如何用圖卷積過濾垃圾評論

從上圖我們可以看到,閒魚 Graph 有商品 I 和使用者 U 這兩種節點,它們的邊為評論 E。如上,e2、e4 和 e5 都是垃圾評論,它們都來自於同一使用者。利用圖來判斷垃圾評論,能利用更多的額外資訊,準確率也會比純文字好得多。

現在回到圖卷積,一般圖卷積的層級可以分為聚合(aggregation)與結合(combination)兩大操作。其中 AGG 會聚合鄰近節點的嵌入向量,例如最大池化或基於注意力權重的加權和等。COMBINE 操作會結合自身的嵌入向量與前面聚合的嵌入向量,很多 GCN 方法將 COMBINE 操作放到了 AGG 裡面。

在阿里的 GAS 中,研究者使用拼接的方式將資訊聚合到邊上。比如說如果 GAS 需要將資訊聚合到不同的邊(即評論)上,那麼比較核心的表示式可以寫為:

CIKM最佳應用論文:11億節點的大型圖,看閒魚如何用圖卷積過濾垃圾評論

其中 h^l 表示第 l 層邊的隱藏向量,它需要聚合 l-1 層自身的特徵向量以及與它相連的兩個節點向量,聚合的方法是拼接三個向量。W^l 表示該神經網路層所需要學習的權重,σ 表示啟用函式。看上去它其實和一般的卷積網路並沒有什麼差別,只不過輸入都是圖的各種資訊,這樣也能基於區域性上下文判斷該評論是否是垃圾評論。

當然上面只是展示了邊的聚合案例,其它節點的 AGG 操作和 COMBINE 運算在原論文中都有詳細的介紹。

此外,如果從異構圖卷積網路的輸入與輸出來考慮,阿里研究者說:「對於單個使用者節點,輸入就是鄰近商品節點以及鄰近評價邊的特徵。例如一個使用者評論了 10 件商品,那麼每一個商品向量拼接上對應評論向量,這 10 個特徵向量就可以作為輸入,後續圖卷積就會對它們進行基於注意力機制的聚合等一系列操作。」

同構圖上的圖卷積

對於閒魚 Graph 這種大型圖,我們能處理鄰近節點這些區域性資訊,但與此同時還應該能處理全域性資訊,這樣才能有效地減輕使用者的對抗行為。為此,模型應該站在所有評論的角度,看看與當前相似的評論都是什麼樣,它們是不是垃圾評論。

阿里的研究者基於閒魚 Graph 構建了一種新的 Comment Graph,它是一種同構圖,每一個節點為評論內容,節點之間的邊為兩條評論之間的相似性。因為相似的評論距離非常近,因此模型可以考慮與當前評論相近的評論,從而更好地判斷當前評論是不是垃圾評論。

CIKM最佳應用論文:11億節點的大型圖,看閒魚如何用圖卷積過濾垃圾評論

如上所示為一小部分 Comment Graph,如果說區域性模型無法根據「add v」判斷出意思是加微信,那麼放在 Comment Graph 中就非常明確了,它與類似的說法都應該被判斷為垃圾評論。

簡單而言,Comment Graph 的構建主要分為四個步驟:移除所有重複的評論;通過詞嵌入模型為評論生成嵌入向量;利用 KNN Graph 演算法獲得相似的評論對;移除同一使用者提出的評論對,或者同一賣家提出的評論,因為之前的閒魚 Graph 已經考慮了這些資訊。

構建了 Comment Graph,再用圖卷積就能抽取節點資訊了,因為每一個節點輸出向量都聚合了周圍節點的資訊,它就能代表全域性上這一些相似評論的意義。

最後,結合異構圖卷積與同構圖卷積的結果,再來做個簡單的分類就很合理了。

從部署到產品

除了模型與研究上的創新,阿里研究者在工程上也做了很多努力。因為對於閒魚 Graph 這種超過 10 億商品與 1 億使用者的節點量,要做訓練和推斷都是比較複雜的。

目前該系統已經基於 TensorFlow 分散式框架部署在服務端,研究者說:「最開始沒有成熟的大規模圖框架,我們團隊就嘗試基於 TensorFlow引數伺服器框架自己寫一個。我們會將圖和特徵放到引數伺服器上,而後最核心的取樣與卷積操作都是從上面獲取資料,整個就是一個分散式系統。」

當然後來阿里內部研發了大規模圖框架 AliGraph,研究團隊將系統遷移到 AliGraph 後進一步提升了效率。

此外,如上所述,GAS 的核心思想還能用於廣闊的任務。阿里研究者表示:「整個團隊將近 30 人,我們的業務主要分為幾類:首先是假貨或與智慧財產權相關的業務,其次還有商品的禁限售管控,這兩類都屬於商品相關;還有另外一塊即營商環境相關的業務,比如惡意評價或投訴等買家和賣家互動的業務。」

這一領域的應用很廣闊,阿里也希望有更多關注圖卷積或安全方面的人才能共同探索新應用。如果你至少有一篇高質量機器學習演算法一作論文,在圖卷積網路和自監督深度學習有深入研究或非常感興趣,阿里現在也招聘研究實習生和正式研究者(三年以上 ML 經驗),感興趣的讀者可聯絡 shiping@alibaba-inc.com。

  • 獲獎論文:Spam Review Detection with Graph Convolutional Networks

  • 論文地址:https://arxiv.org/abs/1908.10679

相關文章