推薦系統難精準?試試這個圖學習模型

在 “精準推薦者得民心” 的今天,推薦系統已成爲各大互聯網公司的標配。但由於現實中很多數據是非歐氏空間生成的(例如,社交網絡、信息網絡等),一些複雜場景下的業務需求很難通過協同過濾等基於歷史行爲挖掘用戶或產品相似性的傳統算法來滿足。圖神經網絡作爲一種約束性較少、極其靈活的數據表徵方式,在深度學習各主要領域中嶄露頭角,一系列圖學習模型湧現並得到越來越多的應用。

01

網易雲在推薦領域的探索

作爲國民級的音樂 App,網易雲音樂很久之前就將定位從傳統的音樂工具軟件轉移到音樂內容社區,致力於聯結泛音樂產品與用戶,打造最懂用戶的音樂 App。在音樂內容社區中,直播可以說是用戶參與度極高的場景了,雲音樂內部投入了大量的人力物力以求將匹配度更高的主播推薦給用戶,但仍然面臨多重嚴峻的挑戰。

如何破解歷史評論行爲稀少的用戶冷啓動問題

衆所周知,推薦系統的整體框架主要包括召回、粗排和精排 3 個部分。其中,最底層的召回模型具有舉足輕重的作用,而成功的召回推理需要依賴充足的歷史數據。但在雲音樂的業務場景中,通過站內廣告看到直播推薦的用戶很大比例是直播功能的新用戶,即沒有產生過觀看直播行爲數據的用戶。如何向這類數據稀疏的用戶推薦合適的內容成了亟待解決的難題,這類問題也通常被稱爲冷啓動。

大規模圖模型如何訓練

雲音樂現有計算資源已全面實現容器化部署,對於各個業務團隊來說,計算資源都是有限的,需要以最高效合理的方式利用有限的資源。如何在有限的分佈式資源調控策略下低本高效地完成大規模圖神經網絡的模型訓練,成爲必須攻克的難題。

PGL 圖神經網絡助力推薦場景落地

爲了解決以上問題,網易雲音樂的研發團隊調研了大量開源方案,最終選擇了對大規模圖訓練更加友好的百度飛槳分佈式圖學習框架 PGL,作爲雲音樂的基礎框架。

基於 PGL 的行爲域知識遷移解決冷啓動問題

雲音樂直播場景的新用戶中,有很多在音樂、歌單、Mlog 等業務中產生過較豐富的歷史行爲,能否通過將這部分歷史行爲知識映射到直播領域,來解決 “行爲” 數據不足的問題呢?

帶着疑問,雲音樂引入了圖模型結構,以多種不同類型的實體(如歌曲、DJ、Query、RadioID 等)爲節點,通過用戶與主播、用戶與歌曲、Query 與主播等歷史行爲關係,構建了一張統一的圖關係網絡。

然後,基於飛槳圖學習框架 PGL 對圖模型進行訓練。先採用 DeepWalk、Metapath2Vec、GraphSage 等模型學習出足夠強大的 Graph Embedding 表示來建模實體 ID;再通過向量召回,將用戶在歌曲、Query 等處的行爲遷移到主播領域,達到召回合適主播的目的。

02

基於 PGL 通用的分佈式能力進行訓練

雲音樂的數據規模非常龐大,數據關係即使經過裁剪也高達億級別以上。在常用的硬件資源配備情況下,此等量級規模的數據早已成爲某些開源的圖神經網絡框架的瓶頸,需要使用極其昂貴的計算資源才能解決。對於數據規模必將持續增大的雲音樂來說,相較於使用什麼類型的模型,能否在這種數據規模下訓練出模型纔是優先要考慮的關鍵問題,也是網易雲音樂與 PGL 成功牽手的關鍵因素!

百度飛槳深度學習平臺 PaddlePaddle 2019 年開源的分佈式圖學習框架 PGL,原生支持圖學習中較爲獨特的分佈式圖存儲(Distributed Graph Storage)和分佈式採樣(Distributed Sampling),可以方便地通過上層 Python 接口,將圖的特徵(如 Side Feature 等)存儲在不同的 Server 上,也支持通用的分佈式採樣接口,將不同子圖的採樣分佈式處理,並基於 PaddlePaddle Fleet API 來完成分佈式訓練(Distributed Training),實現在分佈式的 “瘦計算節點” 上加速計算。這些能力對雲音樂內容社區直播推薦遇到的訓練問題來說,極具魅力!

實驗對比顯示,在主播推薦場景採用圖計算帶來有效觀看大幅提升,尤其在新用戶和新主播冷啓動上引入其它域數據後有了明顯提升。

03

能力領先的飛槳 PGL 圖學習框架

完整覆蓋主流模型和場景

飛槳 PGL 已經在搜索、廣告、信息流推薦、金融風控、貼吧、用戶畫像、智能地圖等多個場景全面落地,可支持百億巨圖場景。飛槳 PGL 模型完備,多類別主流模型和自研特色模型,涵蓋了社交網絡、推薦、生物計算等多種場景。

HeterGraph 支持異構圖

PGL 通過 HeterGraph 接口支持了異構圖,即支持圖中的節點、邊分別具有不同的類型。比如在網易雲音樂中就支持了包括用戶、主播、音樂、搜索詞等異構節點,以及關注、收藏、查詢等異構邊關係。在此基礎上,異構圖的 message passing 支持根據邊類型來對鄰居消息進行聚合。

動態圖調試更簡單更靈活

基於最新開源的 PGL V2.0 版本,PGL 全面支持動態圖機制,動態圖具有所見即所得的優點,方便初學者調試。如下所示,僅需幾行 PGL 代碼即可實現圖卷積網絡:

import paddle
import pgl
edges = paddle.to_tensor([[0, 1][1, 2][3, 2][1, 3]])
feat = paddle.randn([4, 128])
g = pgl.Graph(edges, node_feat={"h": feat})
out = pgl.nn.GCNConv(128, 10)(g, g.node_feat["h"])

除了動態圖機制,PGL 也保留了原有的靜態圖機制。動靜結合的雙機制,使用戶在獲得動態圖調試方便的同時,僅需通過簡單的代碼修改就能支持靜態圖,並能方便高效的使用分佈式訓練以及線上的部署能力。

支持百億級別大圖訓練

飛槳 PGL 具有高可擴展性,最大支持百億級別大圖訓練,在網易雲音樂中就支持了海量的用戶行爲數據。飛槳開源核心框架的分佈式能力爲 PGL 提供堅實的底座,它可以提供兩種常見的並行訓練實現架構,即中心化的參數服務器架構、去中心化的集合通信架構。其中參數服務器架構幫助 PGL 僅通過幾行代碼即可輕鬆完成配置,具備通用的高性能訓練能力。飛槳框架個性化推薦任務中的模型由於需要保存的海量稀疏特徵對應的模型參數,通常採用參數服務器架構。這是因爲參數服務器架構可以對模型參數進行分佈式保存,尤其對於存儲超大規模模型參數的訓練場景十分友好。神經網絡模型的前向、後向放在設備中執行,模型的更新部分放在參數服務器一端。

飛槳從開源伊始就重視分佈式能力的構建,基於百度內部大規模業務實踐的打磨,形成一套簡單易用的高層分佈式接口 Fleet API。Fleet 象徵一個艦隊中的多隻雙槳船協同工作,集成高性能、高擴展的能力。在易用性方面進行了精心的優化,從單機到多機,僅需三步修改即可開啓分佈式訓練,示例如下:

import paddle
import paddle.distributed.fleet as fleet
import paddle.fluid as fluid
import paddle.distributed.fleet.base.role_maker as role_maker
# step1 初始化
role = role_maker.PaddleCloudRoleMaker()
fleet.init(role)
...
# step2 分佈式優化器
optimizer = fluid.optimizer.Adam(learning_rate=0.0001)
optimizer = fleet.distributed_optimizer(optimizer, fleet.DistributedStrategy())
optimizer.minimize(model.loss)
...
# step3 第三步:開始訓練
if fleet.is_server():
    fleet.init_server()
    fleet.run_server()
else:
    fleet.init_worker()
    # model train

另外,DistributedStrategy 作爲用戶配置並行策略的統一入口,支持大規模異步訓練、自動混合精度、深度梯度壓縮、重計算、梯度累計、計算算子自動融合、通信梯度智能融合以及自動並行等功能,極大的滿足了研究人員日常訓練的加速需求。飛槳框架的最新版本同時也開放了能夠面向高級編程用戶的分佈式底層通信接口 paddle.distrbuted,使用戶能夠自主構建諸如自動並行、模型並行等高級並行訓練功能。

在近期發佈的飛槳框架 2.0 版本,創新性地實現了業界首個通用異構參數服務器架構。該架構支持異構硬件自由混布、數據獨立存取傳輸、流水線機制和多種通信方式組合等多項特色技術,一舉解除了傳統參數服務器必須嚴格使用同一種硬件款型訓練節點的枷鎖,訓練任務對硬件型號不敏感,可以同時使用不同的硬件進行混合異構訓練,如 CPU、v100、P40、K40、崑崙芯片等。目前在真實業務模型上,使用單臺 GPU / 崑崙芯片機器 + 10 臺 CPU 機器,可以完成千萬數據千億參數點擊率模型的分鐘級訓練。

在嚴格的內部測試驗證中,異構參數服務器架構對於大規模稀疏特徵特點的模型訓練場景,可以大幅提升訓練效率,尤其是針對帶有複雜計算網絡的模型訓練,訓練速度可以提升 65%。在硬件成本方面,使用異構參數服務器架構時,在 2 GPU 節點 + 2 CPU 節點的組網環境下,訓練速度就可以比肩傳統參數服務器架構在 4 GPU 節點組網上所能達到的訓練速度,但是硬件成本卻可以大大降低,讓用戶的硬件資源真正做到物盡其用,實現訓練效率最優化。

03

寫在最後

圖學習作爲通用人工智能算法之一,勢必成爲這個時代新的基礎設施,賦能各行各業,助推智能經濟騰飛。飛槳深度學習平臺及其 PGL 框架將持續開源開放,歡迎開發者們使用並貢獻你的奇思妙想。期待有志之士加入開源社區,一同共建未來。

PGL 圖學習框架 Github 代碼倉庫:

https://github.com/PaddlePaddle/PGL

飛槳推薦系統:

https://github.com/PaddlePaddle/paddlerec

飛槳分佈式:

https://www.paddlepaddle.org.cn/tutorials/projectdetail/1499143

https://fleet-x.readthedocs.io/en/latest/

飛槳深度學習框架 Github 代碼倉庫:

https://github.com/PaddlePaddle/Paddle

對於想要了解圖神經網絡及其分佈式應用的小夥伴,可以圍觀 PGL 團隊傾力開發的圖神經網絡課程,帶你七天高效入門:

https://github.com/PaddlePaddle/PGL/tree/main/course

飛槳 (PaddlePaddle) 以百度多年的深度學習技術研究和業務應用爲基礎,是中國首個開源開放、技術領先、功能完備的產業級深度學習平臺,包括飛槳開源平臺和飛槳企業版。飛槳開源平臺包含核心框架、基礎模型庫、端到端開發套件與工具組件,持續開源核心能力,爲產業、學術、科研創新提供基礎底座。飛槳企業版基於飛槳開源平臺,針對企業級需求增強了相應特性,包含零門檻 AI 開發平臺 EasyDL 和全功能 AI 開發平臺 BML。EasyDL 主要面向中小企業,提供零門檻、預置豐富網絡和模型、便捷高效的開發平臺;BML 是爲大型企業提供的功能全面、可靈活定製和被深度集成的開發平臺。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/pfr-uNoWNsRWugxloJl34Q