大規模圖算法在京東廣告的實踐

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"京東的9N算法框架已經被廣泛應用於推薦廣告、搜索廣告、以及其他的站內外廣告場景。本文將爲大家介紹如何實現大規模的圖算法在京東廣告場景的落地實踐,主要內容包括:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"基礎介紹"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"9N GRAPH工業化End2End算法解決方案"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"算法建模:BVSHG"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"未來展望"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"基礎介紹"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1. 電商推薦問題的特點"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/5e\/5e1abae23ae18d17c4f9f266d59e8c5d.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"電商場景下推薦系統的問題特點:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"用戶的行爲少:電商是一個典型的貨多人少的場景,用戶行爲非常稀疏,且具有“極度長尾效應”,這個效應我們後面會展開詳細講。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"商品的規模大:前面說了貨多人少,整個平臺的商品規模能達到數十億,算上冷門商品及歷史商品的話,甚至能到百億規模。對於推薦問題來說,數十億的候選商品集合實在是太大了。對於工程同學,算法同學都是一個不小的挑戰。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"用戶的需求識別難:電商不像新聞、媒體類的場景,這些場景的用戶需求和反饋都是來自於線上,比如某某上了熱搜,這種場景下,信息源來自線上,用戶的反饋也會作用於線上,相對單純一些;而電商場景,大家的購物需求的產生和具體消費其實是在線下的,比如今天家裏做飯少了一瓶醬油,這種信息,線上系統很難感知到。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"用戶的興趣轉移快:用戶的購買行爲完成後,興趣會呈現不規則的快速轉移,舉個例子,有些用戶買了一臺電冰箱,按道理說這是一個大件兒,重複購買的週期很長,日常生活中不會有人每天都去看,都去購買的,但是中國消費者有個奇特的行爲,叫做“我再回去看看買虧了沒”,沒事兒就回去刷一下商品看看價格。再舉一個有意思的例子,用戶買了一部手機,那是不是有可能購買手機殼、手機膜這種搭配呢?確實有不少消費者這麼幹的,但如果趕上618大促節,你會發現用戶的上一個行爲是去買手機,下一個興趣就是關於如何買拖把和抹布,這就是用戶興趣以及時效性帶來的挑戰。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"熱點更新快:尤其是現代電商網站每天有新品,每週有活動,每月有節日,半年一大促,用戶對新品的交互行爲更爲稀疏,想要讓模型和算法學到甚至能有預測能力,簡直難上加難。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2. Why GRAPH?"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/6d\/6de0e9224b3cd62eafc7dce5af14dd26.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"剛剛介紹了電商推薦的問題和難處,我們回到推薦的本質上來思考這個問題,對於推薦系統來說,其中的重要參與方就是用戶和商品,而推薦系統的本質就是在找用戶和商品的關聯性:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以用戶方來說:人與人之間存在天然的關係圖譜,不論是顯式的這種朋友親屬還是隱式的社交關聯等等,相信很多偏社交屬性的公司早就深入研究過人與人之間的圖關係了;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以商品方來說:商品本身的材質、屬性、價格本身就存在關聯,甚至是同品牌、店鋪、競品的關聯關係等等,通常很多偏新聞和資訊類的公司早就已經構建了知識圖譜。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"能否將用戶圖和商品圖連通起來,利用用戶和商品關聯性,構建成一張充滿不同關係邊的圖?這就是一張簡單的U-I二部圖,如上所示。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"9N GRAPH工業化End2End算法解決方案"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/73\/73837f17791dd8f929566187dcf65292.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如何把這張U-I圖在工業場景下完成落地和應用?我們實現了一整套9N GRAPH工業化端到端的算法解決方案,它不僅包含數據能力、算法框架、算法模型還有一系列的應用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"實現工業化場景的端到端學習,我們遇到了不少挑戰,這裏舉幾點出來:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在數據和樣本層面,我們遇到了超大規模的圖樣本生成及存儲問題、圖的在線服務以及服務內圖信息時效性的問題。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在訓練框架層面:如何實現一個訓練框架,以及大規模圖如何在工業場景中訓練,我們基於9N Lite框架進行了延伸開發,實現了9N GL ( 即Graph Learning )。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"算法建模層面:如何解決端到端建模以及主模型和圖模型聯合訓練,我們提出了一個典型建模方法,最終也在業務場景上落地取得了收益。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"9N GRAPH的整體方案如右圖所示,它包含6個層次,圖中暗黃色的部分包含圖學習的多元化,圖的探索和創新,是我們還在進行中的部分,其他顏色部分已經在提供穩定服務了,其中淺黃色是在線工程團隊幫助我們一起建設的在線圖服務。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1. 9N GRAPH數據&樣本"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"① 如何實現大規模的圖樣本生成及存儲問題?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/5f\/5fe065284751fb0632636cd43e03f3e5.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通過對電商場景的用戶行爲進行分析,我們發現:行爲數據呈現“極度長尾效應”,換句話說是“旱的旱死,澇的澇死”。像圖中呈現的,在99分位數之上的用戶行爲居然差不多等於剩下的所有用戶行爲之和。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這種現象,對於傳統的深度學習來講,其實很不友好,傳統的深度學習建模方法,和訓練策略比較適用於中高活躍的用戶,他們的行爲數據較多,但又不過分集中,在多輪迭代的訓練方式下,數據利用效果好。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"反過來看,對於99分位數之上的那些極度活躍用戶,他們的行爲數據過於豐富 ( 比如單日瀏覽了好幾百個上千個商品 ),在工業場景上通常會因爲工程性能問題做出截斷,導致僅有少數最近期的行爲信息參與在線預估,反而會導致建模失真,效果不佳。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於長尾用戶,他們的行爲稀疏,甚至還有不少的噪聲,建模較難,數據利用的效果也很差。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們希望用圖的方式,解決這兩類數據失真的問題:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於極度活躍用戶:我們通過圖的方式記錄下來他的行爲,在進行預估時,通過各種採樣的方法,讓採出來的信息不像截斷那樣僅包含最近期的,還有大量長期的信息。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於長尾用戶:通過圖的方式進行不同層面的信息抽取,增加泛化能力,增強對長尾用戶的建模能力。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以最簡單U-I二部圖爲例,我們將用戶大量的歷史行爲,通過U-I關係抽取模塊,建立起圖關係數據差不多有400TB左右;又通過訓練日誌進行label處理,兩者進行關聯後,形成圖訓練樣本,通常能達到800-1000TB;然後送入到模型訓練框架中,進行主模型和圖模型的聯合訓練。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"② 如何解決圖服務及信息時效性問題?"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/b2\/b2d39255b9a8c46e67572bbdc09ba869.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"高實時的信息可以帶來不小的效果提升,因此在線的服務中除了需要包含歷史長期的圖信息外,還要對最近期的信息有感知,所以我們設計並實現了一套秒級別更新的在線服務。如上圖所示,上面一條通路是包含數月信息的長期圖信息,下面的這一條通路是秒級別的實時信息更新,最終打造成了一個高時效性的圖數據服務系統。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2. 9N Lite 算法框架 Overview"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/a6\/a6c6d6ee558f425351de5c24582004fe.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"接下來看如何實現一個訓練框架,以及大規模圖如何在工業場景中訓練問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們在介紹大規模圖訓練前,先介紹下9N ( 即九數 ) 算法框架整體,因爲圖訓練也是基於這一套實現的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"九數算法框架是一個使用Tensorflow作爲後端計算引擎的、深度定製的、支持彈性擴展和高性能推理服務的算法框架。它基於廣告精排的任務特點研發的,支持了數年來京東廣告的高速迭代發展。它包含四大基礎設施:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"模型數據流:流批一體、離在線一體化的高性能數據流系統"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"算子庫:解決了特徵系統及多模態、多業務的高性能實現"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"核心訓練框架:支持了多種業務場景,9N Lite中不僅支持了複雜的有監督深度學習,還額外擴展支持了9N RL強化學習、9N OL在線學習、9N FL聯邦學習、9N GL(圖學習)。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"NormGuard ( 一站式模型管理、檢測、推送平臺 ):是模型管控中心,也是一站式模型檢測及推送中心,還支持了模型指標的異常檢測等等。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3. 9N GRAPH End2End 訓練"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/d6\/d61913b933d21b9f2f79700855f69b62.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如右圖所示,從下向上看,整個9N GL框架做了多個層級的模塊抽象,通過subgraph的方式,抽象出了訓練日誌相關的子圖結構,通過unify interface抽象出了各種圖算子,通過encoder抽象了多種信息聚合方式;"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"整個9N GL將外部數據與樣本關聯的圖信息抽象成了SubGraph,支持多種不同形式的SubGraph,不僅可以支持數據樣本級別,甚至可以直接關聯到在線檢索系統甚至圖引擎。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"9N GL也支持多種方式的主模型+圖模型訓練模式,多階段訓練以及端到端聯合訓練。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/0c\/0c4612bc48845b6143f058ad9bb65543.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"9N GL中的API設計相對簡單易用,主要包含有幾個層次的訓練接口:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"圖結構的點、邊設計,支持多種行爲類型,屬性類型"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"圖的採樣方法種類包含有隨機、帶權、Meta-Path等等"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"圖算法層面包含有常見的GNN和Graph  Embedding兩大類"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"左側是一段實例代碼,僅需簡單的函數調用,即可完成圖解析,圖鄰居獲取等操作。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"4. 圖在推薦、電商場景的典型 End2End 建模思路"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/0a\/0aacb028b70f61944b121047368fb850.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"接下來,向大家介紹一下圖在推薦、廣告場景中的典型端到端建模思路。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以CTR模型爲例,在信息源部分引入用戶和商品的交互圖結構化信息,通過圖的統一操作接口獲取出建模所需要的圖特徵,然後經過特徵編碼器編碼爲常見的id類特徵,後續可以通過一系列的Graph Encoder獲取到用戶、商品的高階關係表徵。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此外,在異構圖網絡中,我們可以對不同語義空間進行節點信息聚合,來捕捉到用戶的潛在行爲意圖。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當然,以上是一個常見的End2End聯合建模、聯合訓練的思路。接下來的部分,給大家詳細介紹我們提出的一個具體模型BVSHG是如何做的。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"BVSHG"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1. BVSHG:業界常見圖算法 Graph Embedding"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/b2\/b208820e908aca5713fa8852bbff4118.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們在詳細介紹BVSHG模型之前,還是先來看一下業界常見的圖算法和圖應用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先是Graph Embedding類算法,顧名思義,GE類的算法本質上就是將低階特徵進行Embedding化,業界常用的有DeepWalk、Node2Vec、LINE、EGES,他們的思路大同小異,如下圖舉例來說:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"將用戶的行爲序列按某種標準拆分"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"將拆分後的item構建一張同質圖"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在圖上隨機遊走,生成不同的遊走序列\/遊走詞"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"按不同應用送入到類似於Skip-Gram的結構中"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但這種做法通常適用於無監督學習,其監督信號與最終目標通常不一致,只適用於多階段訓練。也沒有充分發掘高階的潛在關聯關係。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2. BVSHG:業界常見圖算法 Graph Neural Network"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/73\/73d43238c283251d6964964471a1dd71.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們再來看下GNN系列的常見算法和模型。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"主要有這幾類:U-I二部圖、用戶session圖、社交網絡、知識圖譜。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在建模中也通常是圍繞U-U、U-I、I-I三大類關係進行特徵及屬性關係挖掘。但他的好處是可以結合最終建模的目標進行端到端學習。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3. BVSHG:Multi-behavior Multi-view Session-based Heterogeneous GNN"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/c4\/c495821d30e7c74c333f6b12b8b63692.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以上的兩類建模適用場景不同,我們在其中發現存在一些不足,如:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"樸素的U-I關係圖中並沒有充分利用Side Information(如商品的類別,商品的品牌、商家店鋪等等)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"U-I之間的關係類型很豐富,不僅僅是常見的點擊、購買關係,在用戶與商品的長期交互中,往往存在加購、分享、打賞、點贊、收藏等等。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"常見的Session-Based Transformer建模,並沒有考慮Item間豐富的關聯關係,也沒有考慮session之間的關係。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"針對我們之前跟大家提及的“極度長尾效應”,不同用戶的行爲序列長短差距很大,在工業化場景下,出現的效果與性能Trade-off難題。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"而我們非常貪心地希望既要對短期用戶行爲序列建模,又要對長期用戶商品交互信息的多視圖抽取,還要在一定程度上解決序列化建模帶來的性能挑戰。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"作爲成年人,想全都要!因此我們提出了BVSHG,即 Multi-behavior Multi-view Session-based Heterogeneous GNN 建模方式。它的大致示意圖如下,左側爲圖信息的構建,右側爲圖建模方式圖,接下來我們會分部分詳細講講。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"① BVSHG:Long-term Multi-Behavior Session Heterogeneous Graph"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/2f\/2f38f0875ab597b87a4c89c32135535e.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先,我們重點講講如何構建的這一張長期用戶多種行爲session-based 異構圖。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是一張多元異構圖,在圖中你可以看到至少4類節點,比如紅色的User節點,藍色的Item節點,黃色的Category節點,綠色的Brand節點等等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此外,構圖時,我們採用了用戶和商品、類目、品牌之間複雜的交互關係,比如上方的這個白色框中描述的是我們構建圖時候用了用戶的長期瀏覽session關係,比如session1中包含item序列,對應的category序列,對應的brand序列;"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"下方的框中,描述的是我們採用了用戶的長期複雜行爲數據,比如User1分享了Item4,也就分享了對應的類目C3和對應的品牌B3;"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在右側的圖中,可以看出來,U1對I1、I2、I3都有瀏覽邊連接,但是對於I4有share 分享邊鏈接,U2對I3有AddCart加購邊鏈接。而圖中的I1、I2、I3之間由於存在同一個session內,有共同出現的關係,有共現邊。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"右側中間的圖描述的是User跟類目之間的邊情況,右下方的圖描述的是用戶和品牌之間的邊的情況。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在此特別說明的是,我們只有一張包含多種節點、多種行爲邊的異構大圖,右側的三個小圖,是在大圖中截取的一小段示意圖。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當然了,在構建這張大圖的時候,我們也有一些超參數需要調節,比如session切分的時間準則,通常採用30min作爲gap,但是並不是最優。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"② BVSHG:Multi-Behavior Sample"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/1a\/1ae5d2ac573e469280a44d9653cfc76d.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這一頁我們的模型分爲三個部分:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"傳統主模型部分,包含有UserFeature、ItemFeature、ContextFeature經過像DCN等經典結構後,計算出一個Embedding"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"圖模型輸出一個Embedding"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"短期用戶session信息經過Transformer輸出一個Embedding"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"將上述3個Embedding Concat在一起,最終經過MLP輸出pCTR。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們先重點介紹紅框中的部分,這部分是我們的TargetUser從我們的大圖中採樣找到的交互過的Item,排成一個list,用作target user的一種表達,也可以簡單理解爲1階鄰居。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於 target user,我們首先採用 Behavior-Weighted Random Sample 的方式採樣得到他的一跳 item 鄰居,具體而言,該採樣方式通過業務自定義的行爲權重,對用戶的不同行爲類型的鄰居節點進行加權的隨機採樣。而對於 target item 以及第一次採樣得到的 user 的一跳 item 鄰居,我們採用同質採樣(Homogeneous Sample)的方式,從圖中得到相同類型的鄰居節點。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"③ BVSHG:Multi-View Attention-Based Item SAGE"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/b3\/b30dc145cc224c46aba0dae5004637bf.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在,我們重點介紹BVSHG的精髓,Multi-View信息的抽取和Attention玩法。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對應到上方的I1,我們在大圖中,找到I1的i-i關係表徵,也找到I1對應的類別C的c-c關係表徵,同理,我們也找到了I1對應的品牌B的b-b關係表徵,這三段向量與I、C、B構建出相應的Attention 變換後concat在一起,形成一個O。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"同理,I2、I3到In形成O2、O3到On"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"同理,TargetItem It形成Ot,將O1~On的向量與Ot進行Attention計算。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"④ BVSHG:Transformer-based Short-term Behavior Modeling"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/44\/448455aff53cc2046651287de954dcd8.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"上圖的紅色框中,我們仍然借用Transformer對用戶的短期行爲local session進行序列關係的抽取,用來提取短期興趣。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們的BVSHG的思路大致介紹完畢了,模型結構雖然複雜,但是建模思路比較清晰容易理解。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"4. 業務效果"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/2c\/2ceab5adaad444256cb88f5679ffe305.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們將BVSHG模型在京東推薦廣告的精排場景進行了實驗,模型的點擊消費有相應上漲。當然模型結構也可以作爲拋磚引玉,圖表徵信息與主模型可以採用多種方式進行交互作用,End2End訓練。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"5. 圖算法的其他玩法"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/ad\/add4d3e246a3376f232be2d5526832e0.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們再來看看我們嘗試過的其他圖算法的玩法:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們藉助實時圖,建立了User Item之間的二部圖,並實時更新圖內點邊關係,從中發掘出了連通的節點簇,我們以最大團、正則化割構成更加合理的興趣簇的分類標準。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在工業化場景上,很多時候,數據中是存在缺失和錯誤的,我們利用了U-I、U-C的事實圖,兩者進行聯合修正,對數據做了增強和清洗。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"未來展望"}]},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/ca\/f4\/ca94cb9e4f9a24b673f3ef22948853f4.jpg","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"未來展望,我們最近一年在圖上玩了不少花樣,但總起來看,還有兩個點我們還有很強的興趣繼續探索:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"AutoML on Graph,由於我們構建一張圖,進行聯合建模的試驗調試成本高,尤其是在超參的調試上耗費了不少人力,亟待一個可以解放人力的超參調整方法,我們後續希望藉助AutoML的方法用資源換人力加快實驗迭代速度。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"基於圖的強化學習,開篇我們找到了推薦系統的本質問題是在解決用戶和商品之間的關聯關係,但這種關聯關係既有短期的、也有長期的,但業務評價標準更多是短期內能帶來多少點擊、多少商品購買,很難對長期的獎勵進行評估和建模,我們目前正在結合RL的方法,對用戶長期購物路徑、對京東購物的喜好性分析、品牌影響力分析等等問題進行嘗試中。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們一系列關於廣告、推薦算法的探索及工程實踐將不止於圖,9N AI團隊後續也會嘗試通過開源或分享的方式進一步與同行更好地交流和互相學習。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"嘉賓介紹:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"張澤華"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"京東 | 算法工程師"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"畢業於中科院軟件研究所,目前是京東9N AI負責人,京東廣告大規模機器學習框架作者,九數商業分析平臺研發負責人,負責京東廣告算法創新工作,其創新算法廣泛應用於京東推薦廣告、搜索廣告等場景。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本文轉載自:DataFunTalk(ID:dataFunTalk)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文鏈接:"},{"type":"link","attrs":{"href":"https:\/\/mp.weixin.qq.com\/s\/k3bHwxH_pgMat9pQkHzrww","title":"xxx","type":null},"content":[{"type":"text","text":"大規模圖算法在京東廣告的實踐"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章