<del id="nnjnj"></del><track id="nnjnj"></track>

<p id="nnjnj"></p>

<address id="nnjnj"></address>

    <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

      <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>

      • 自動秒收錄
      • 軟件:1973
      • 資訊:57811|
      • 收錄網站:279872|

      IT精英團

      圖系列中推薦算法的召回與粗排實踐

      圖系列中推薦算法的召回與粗排實踐

      瀏覽次數:
      評論次數:
      編輯: 景同
      信息來源: ITPUB
      更新日期: 2022-09-16 15:33:42
      摘要

      一、轉轉推薦算法介紹1.1什么是推薦系統?1.2轉轉推薦主要場景及流程二、圖算法原理介紹及轉轉實踐2.1經典GraphEmbedding方法:DeepWalk2.2結構性與同質性:node2

      • 正文開始
      • 相關閱讀
      • 推薦作品

      1.推薦算法簡介

      1.1什么是推薦系統?

      1.2推薦周邊主要場景和流程。

      第二,介紹圖算法的原理和實踐。

      2.1經典的圖嵌入方法:DeepWalk

      2.2結構和同質性:node2vec

      2.3融合輔助信息:EGES

      2.4將輔助信息集成到地圖構建中:遷移回憶的實踐

      2.5異形表示:車削粗排的練習。

      三。摘要

      參考數據

      1.推薦算法簡介

      1.1什么是推薦系統?

      隨著信息技術和互聯網的飛速發展,通過互聯網傳遞的信息也在迅速膨脹。人類已經從信息短缺時代走向信息過載時代,推薦系統開始在互聯網技術中發揮不可或缺的作用。推薦系統幫助人們更高效地建立與信息的聯系,節省信息篩選的時間,為用戶匹配和發掘興趣,使平臺的高效分發成為可能。對于轉轉來說,推薦系統在為用戶推薦產品和內容方面起著重要的作用。一方面鏈接了用戶和產品的關系,節省了用戶篩選自己喜歡的產品的時間,幫助用戶在平臺上琳瑯滿目的產品中找到感興趣的產品。另一方面幫助商家讓自己的產品從海量的產品中脫穎而出,推薦給合適的用戶。在推薦系統中,推薦算法起到了引擎的作用。

      推薦算法的功能

      1.2推薦周邊主要場景和流程。

      推薦主要場景在轉轉APP中,推薦算法涉及的主要場景有首頁推薦、業務詳情頁推薦、收藏夾推薦等。用戶進入APP后,向下滑動主頁面進入首頁推薦場景,由算法推薦,幫助用戶篩選和探索產品。當用戶點擊一個商品時,會進入詳細的商家頁面推薦更多與主商品相似的商品供用戶選擇;當用戶收藏商品時,也會根據用戶的收藏行為和歷史興趣,向用戶推薦更多的商品。

      推薦算法的主要流程如圖,整個流程呈漏斗狀。對商品庫進行層層篩選,最終將推薦結果呈現給用戶。

      這是召回推薦算法的第一步。根據用戶和商品的信息,快速篩選出用戶可能感興趣的商品集,傳遞給下一步的粗、細部分。由于商品集合較大,召回階段對性能要求較高,因此需要使用相對簡單的型號和功能。

      粗排名承擔篩選產品的召回,對用戶推薦的候選集進行評分,篩選出細排名候選。作為承上啟下的環節,模型和特性的復雜度相對折中;

      精細排序通常只對少數商品進行排序,可以使用更多的特征和復雜的模型,對推薦的準確率要求更高;

      最后會根據業務特點等目標重新安排,這里就不贅述了。

      這次主要介紹圖算法的原理以及在依次回憶和粗排階段的實踐。

      第二,介紹圖算法的原理和實踐。

      圖是一種基本的、常用的數據結構,它也廣泛存在于現實世界的很多場景中,比如社交網絡中人與人之間的聯系、生物中蛋白質的作用以及電子商務中用戶與商品的關系。

      在逛逛場景中,通過建立用戶與商品的關系圖,并在此基礎上學習圖的表示,可以得到低維、稠密、實值的向量,這些向量可以表示節點。

      之間內在的關系。

      利用得到的向量,既可以作為排序層的預訓練特征,也可以直接計算向量相似度,尋找相似的商品,并直接推薦給用戶。

      圖結構以及對應的節點向量(引自DeepWalk論文)

      2.1 經典Graph Embedding方法:DeepWalk

      首先介紹經典的Graph Embedding方法——DeepWalk。

      DeepWalk的基本流程(引自阿里EGES論文)

      DeepWalk在電商場景應用的大體流程可以分為以下四個步驟:

      1. 獲取用戶原始行為序列,并根據一定規則進行切分(如點擊間隔超過1小時)。
      2. 基于這些切分的用戶序列,構建商品圖結構。例如用戶A依次產生了D、A、B的行為,則構建D->A的有向邊、A->B的有向邊。將所有用戶序列產生的商品共現對如(D,A)都建立有向邊后,即建立起全局的商品圖。
      3. 選取多個起始點(實際上可以以每個節點為起始點)進行隨機游走,得到多條序列。
      4. 將重新生成的物品序列利用word2vec模型里的skip-gram算法進行圖向量的訓練和獲取。

      其中關鍵是第三步的隨機游走過程,即如何選擇下一個游走的節點。DeepWalk定義節點的轉移概率如下:

      其中的所有出邊集合,是節點的邊權重。

      2.2 結構性與同質性:node2vec

      圖的BFS和DFS遍歷(引自node2vec論文)

      在DeepWalk的基礎上,node2vec改進了隨機游走過程的游走概率,引入了兩個超參數來平衡圖的兩類游走方式——廣度優先BFS和深度優先DFS。

      node2vec的節點轉移概率

      通過引入超參數p和q,算法能夠控制節點的游走傾向性。將節點的游走概率定義為,其中是邊vx的權重,定義如下:

      其中,指節點到節點的距離,超參數p被稱為返回參數,p越小,返回原節點的概率越大,游走偏向BFS,更關注結構性相似;q被稱為進出參數,q越小,則隨機游走向更遠節點的概率越大,游走偏向DFS,更關注同質性相似。

      同質性與結構性(引自node2vec論文)

      在推薦系統中,同質性相似的物品體現在同品類、同屬性或者經常被一同點擊、購買的商品;而結構性相似的物品則體現在各品類的爆款、各品類的最佳湊單商品等趨勢類似的商品。node2vec相比DeepWalk擁有更強的靈活性,能夠幫助我們根據應用場景的不同選擇不同的游走策略,得到合理的向量表示。

      2.3 融合輔助信息:EGES

      回顧下DeepWalk一節中介紹的算法流程,能夠發現一個問題:對于新商品或者用戶交互較少的商品,很可能是孤立的節點或者節點權重很小,導致不能游走到該節點或游走到該節點的概率很低。如何解決這類冷啟動問題?

      阿里2018年提出的EGES(Enhanced Graph Embedding with Side Information)在skip-gram的向量嵌入過程中,除了采用序列的ID類embedding之外,還引入了帶權的輔助信息(side information)來緩解該問題。

      EGES到生成商品序列前的流程與DeepWalk介紹的一致,但是在最后的嵌入過程中,引入了如類別、品牌、所在城市等輔助信息的多個embedding共同訓練。對于多個embedding,最簡單的融合方法即average pooling,形式化定義如下:

      利用以上公式即平均操作,將不同的輔助信息向量與原物品向量融合,其中代表原始物品的embedding,代表每種side information對應的embedding。

      但是在實際問題中,不同的輔助信息對于物品的貢獻應有所不同,如一個購買了iPhone的用戶,傾向于查看MacBook和iPad,是因為品牌。引入加權形式的輔助信息利用,能夠得到更準確的embedding。

      在GES模型的基礎上,引入權重,通過Hidden Representation層執行加權平均操作,并輸入softmax層,通過反向傳播求得權重。

      通過代替,保持權重大于0,分母則起到normalize weights的作用。

      最后進行skip-gram的方式訓練得到每個商品的embedding和side infomation及對應的權重。

      阿里EGES的向量訓練模型結構

      2.4 輔助信息融入建圖:轉轉召回實踐

      在轉轉的實際實踐中,采用EGES的加強輔助信息融合方式遇到了一些困難,特別是輔助信息融合訓練的性能問題。

      融入輔助信息的有向帶權商品圖

      因此,我們采取了影響圖權重的方式來引入輔助信息。主要有以下步驟:

      1. 獲取用戶序列切分生成共現對,并同步獲取相應商品的輔助信息
      2. 將全局共現對聚合,根據用戶交互行為數目確定初始權重
      3. 根據節點間邊的預先定義的幾類輔助信息調整權重,例如同類或同價格區間即上調權重
      4. 進行node2vec隨機游走過程并進行向量嵌入訓練

      通過輔助信息融入建圖過程的方法,大大提高了訓練速度,并減少了embedding參數量,在實際應用中向量的質量也能夠滿足需要。在node2vec參數上,可以通過調整同質性相似與結構性相似,來應用于詳情頁推薦場景與首頁推薦場景。

      得到商品向量即可進行向量相似度計算,從而進行商品的item2item推薦,或者利用用戶交互過的商品進行user2item2item的推薦。

      2.5 異構圖表示:轉轉粗排實踐

      對于粗排來說,需要得到同空間內的用戶向量及商品向量,利用內積操作,能夠對于用戶的召回候選集進行快速的打分和篩選。通常的粗排模型往往采用雙塔模型,通過拆分用戶塔和商品塔,可以使得向量產出由離線計算完成,線上則采用內積??梢?,粗排的關鍵問題即是用戶和商品的向量生成。那么能不能通過圖算法來得到用戶和商品的向量呢?答案是肯定的。

      前幾節介紹了Graph Embedding的原理以及一些改進的思路,和轉轉的召回實踐,這些介紹中的圖都為同構圖,圖中的節點都為商品。要同時得到用戶和商品的向量,則需要將用戶節點也加入到圖中,構成異構圖。

      用戶商品二部圖生成無向帶權圖

      具體的實現步驟如下:

      1. 獲取用戶行為序列,并切分為用戶-商品二部圖
      2. 根據二部圖中的(用戶,商品)共現對,建立無向帶權圖
      3. 在圖中進行隨機游走過程,得到形如u1-i1-u2-i2...的序列
      4. 進行向量嵌入訓練,得到用戶及商品的向量

      離線訓練得到向量后,線上分別取得用戶及商品向量,進行簡單內積后即得商品打分。

      三、總結

      本次分享介紹了轉轉的主要場景及算法流程,并介紹了三種常見的圖算法:

      • 經典的Graph Embedding方法DeepWalk,是各類隨機游走算法的基礎
      • node2vec在DeepWalk的基礎上引入超參數控制游走傾向,學習結構性及同質性相似
      • EGES則提出融合加權輔助信息,緩解節點冷啟動的問題

      介紹了上述圖算法在轉轉推薦算法召回及粗排的實踐。

      圖算法目前仍是工程和學術領域研究和實踐的熱點,除了本次分享介紹的方法,還有如隨機游走類的LINE、SDNE以及圖卷積類的GAT、GraphSAGE的方法,感興趣的讀者可以深入了解。圖卷積算法也在轉轉有相應的落地和實踐,有機會再向大家分享。謝謝!

      參考資料

      [1]Perozzi B, Al-Rfou R, Skiena S. Deepwalk: Online learning of social representations[C]//Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining. 2014: 701-710.

      [2]Grover A, Leskovec J. node2vec: Scalable feature learning for networks[C]//Proceedings of the 22nd ACM SIGKDD international conference on Knowledge discovery and data mining. 2016: 855-864.

      [3]Wang J, Huang P, Zhao H, et al. Billion-scale commodity embedding for e-commerce recommendation in alibaba[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018: 839-848.

      [4]王喆:深度學習中不得不學習的Graph Embedding方法 https://zhuanlan.zhihu.com/p/64200072

      標簽:商品 向量 用戶
      數據庫發展史II-數據倉庫
      ? 上一篇 2022-09-16
      平均負載和CPU利用率有什么區別?
      下一篇 ? 2022-09-16
      • 如何在Ubuntu中保留文件系統并備份當前開發板鏡像
        0閱讀 0條評論 個贊
        在Ubuntu保留文件系統或者說備份當前開發板鏡像的需求在不斷增加。比如Ubuntu文件系統需要安裝庫文件的話直接使用apt-get工具就可以下載,但由于需要下載的核心板較多,比較費時間,這時需要將安……
      • 國產核心板全志T507助力消防系統升級
        0閱讀 0條評論 個贊
        9月16日下午,位于湖南長沙市區內的中國電信大樓發生火災,建筑高度218米,現場濃煙滾滾,數十層樓體燃燒劇烈。消防救援人員趕到現場后很快將火勢控制住,目前大樓火勢已被撲滅,所幸未發現人員傷亡。湖南電信……
      • 教大家如何處理Spring Boot易流中的用戶和群體!
        0閱讀 0條評論 個贊
        1.準備工作2.用戶操作2.1添加用戶2.2修改用戶2.3刪除用戶2.4查詢用戶3.組操作3.1添加組3.2修改組3.3刪除組3.4查詢組4.查看表詳情雖然說我們在實際開發中,……
      • 從PG15開始WAL壓縮優化
        0閱讀 0條評論 個贊
        PG15傳聞中的超級令人激動的功能大多數跳票了,年初我也寫過一個關于PG15新功能跳票的文章。PG15BETA已經發出幾個月了,似乎PG15里令人激動人心的功能不多,不過從長長的新功能列表里,……
      • 深入了解美團葉子發射器開源方案
        0閱讀 0條評論 個贊
        大家好,我是樹哥。之前我們有聊過「如何設計一個分布式ID發號器」,其中有講過4種解決方案,分別是:UUID類雪花算法數據庫自增主鍵Redis原子自增美團以第2、3種解決方案為基礎,開發出……
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • Java精進-手寫持久層框架
        0閱讀 0條評論 個贊
        前言本文適合有一定java基礎的同學,通過自定義持久層框架,可以更加清楚常用的mybatis等開源框架的原理。JDBC操作回顧及問題分析學習java的同學一定避免不了接觸過jdbc,讓我們來回顧下初學……
      • 舉例說明庫伯內特公司的豆莢核心資源
        3閱讀 0條評論 個贊
        目錄一、Pod定義二、Pod入門yaml描述文件三、共享NetworkNamespace四、共享PID五、容器生命周期六、初始化容器6.1、簡介6.2、與普通容器的區別6.3、實驗七、Pod探針7.1……
      • 從PG15開始WAL壓縮優化
        0閱讀 0條評論 個贊
        PG15傳聞中的超級令人激動的功能大多數跳票了,年初我也寫過一個關于PG15新功能跳票的文章。PG15BETA已經發出幾個月了,似乎PG15里令人激動人心的功能不多,不過從長長的新功能列表里,……
      • 碼頭工人日常工作的常用命令
        0閱讀 0條評論 個贊
        容器生命周期管理Docker創建新容器并運行[run]語法:dockerrun[OPTIONS]IMAGE[COMMAND][ARG...]OPTIONS說明:-astdin:指定標準輸入……
      • Sql Server系列:分區表操作
        0閱讀 0條評論 個贊
        1.分區表簡介分區表在邏輯上是一個表,而物理上是多個表。從用戶角度來看,分區表和普通表是一樣的。使用分區表的主要目的是為改善大型表以及具有多個訪問模式的表的可伸縮性和可管理性。分區表是把數據……
      • 深入理解Redis數據結構-字典
        0閱讀 0條評論 個贊
        字典,又稱為符號表、關聯數組或映射,是一種用于保存鍵值對的抽象數據結構。在字典中,一個鍵可以和一個值進行關聯,這些關聯的鍵和值稱為鍵值對。鍵值對中鍵是唯一的,我們可以根據鍵key通過映射查找或者更新對……
      • 構建docker鏡像庫(1):用注冊表構建本地鏡像庫
        0閱讀 0條評論 個贊
        目錄一.系統環境二.前言三.使用registry搭建私有鏡像倉庫3.1環境介紹3.2k8smaster節點配置鏡像倉庫3.3k8sworker1節點配置從私有倉庫上傳和拉取鏡像3.3.1上傳鏡……
      • spring MVC(II)——請求處理參數和響應數據處理
        0閱讀 0條評論 個贊
        1、請求處理參數1.1請求參數@RequestParam1.1.1不使用@RequestParam注解請求參數處理,不使用參數注解:1.如果請求參數名和請求處理的形參名一致,springMv……
      • sql server索引I摘要
        0閱讀 0條評論 個贊
        一、存儲結構在SQLServer中,有許多不同的可用排列規則選項。二進制:按字符的數字表示形式排序(ASCII碼中,用數字32表示空格,用68表示字母"D")。因為所有內容都表示為數字,所以……
      • 三萬字肝爆《數據倉庫體系》
        0閱讀 0條評論 個贊
        文章很長,前言一定要看擁有本篇文章,意味著你擁有一本完善的書籍,本篇文章整理了數據倉庫領域,幾乎所有的知識點,文章內容主要來源于以下幾個方面:源于「數據倉庫交流群」資深數據倉庫工程師的交流討論,如《s……
      • 新零售SaaS架構:商品系統架構設計
        0閱讀 0條評論 個贊
        SaaS產品就像一座冰山,冰山以上的部分是功能、數據(可見部分)、用戶界面,冰山以下是系統架構、完整的數據模型、開放體系、非功能性需求(擴展性、可維護性、性能、安全等)。短期內想要快速上線產品,可能只……
      • 如何使用helm優雅地安裝prometheus-operator并監控k8s集群微服務
        0閱讀 0條評論 個贊
        前言:隨著云原生概念盛行,對于容器、服務、節點以及集群的監控變得越來越重要。Prometheus作為Kubernetes監控的事實標準,有著強大的功能和良好的生態。但是它不支持分布式,不支持數據……
      • 平均負載和CPU利用率有什么區別?
        2閱讀 0條評論 個贊
        大家好,我是樹哥。在性能優化中,我們經常會關注CPU平均負載這個指標。但如果讓你來跟我解釋一下什么是平均負載,你能說得清楚嗎?它跟CPU使用率有什么區別?我想可能很多人都數不清楚,今天我們就來……
      • 解決ShardingJdbc不支持復雜SQL問題的說明
        18閱讀 0條評論 個贊
        背景介紹公司最近做分庫分表業務,接入了ShardingJDBC,接入完成后,回歸測試時發現好幾個SQL執行報錯,關鍵這幾個表都還不是分片表。報錯如下:這下糟了嘛。熟悉ShardingJDB……
      • 面試官:談談你對mysql事務的認識?
        0閱讀 0條評論 個贊
        引言今天回頭繼續講講數據庫系列的文章。這篇文章屬于mysql數據庫系列,我們來談談事務方面的常見面試題。那么,具體題目有下面這些:1、講講為什么用事務?事務的四大特性?事務的隔離級別知道吧,你們生產……
      • 我們能從AlloyDb的架構中學到什么
        0閱讀 0條評論 個贊
        前些天我發了一篇解讀信通所分布式數據庫發展報告內容的文章,有些朋友對我把Aurora、AlloyDB、PolarDB等也歸類于分布式數據庫感到有些不解。實際上這是信通所在報告里的歸類,和國際上的常見歸……
      • 金牛座入門 MVC微服務框架開發教程:項目部署:4 微服務應用發布到Docker進行部署
        0閱讀 0條評論 個贊
        前言:本篇教程,演示ASP.NETCore微服務應用程序,如何最簡方式發布到Docker中部署,并運行起來。新手兩個簡易概念:1、映像:可以理解為Class,用于定義;2、容器:可以理解為Clas……
      • Java接口自動測試框架系列(1)自動測試框架
        0閱讀 0條評論 個贊
        一、什么是自動化測試自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程。通常,在設計了測試用例并通過評審之后,由測試人員根據測試用例一步步執行測試,得到實際結果與期望結果的比較。為了節省人力、……
      • 用戶自定義注釋 AOP實現的日志保存(數據庫) 所有代碼都可以粘貼復制
        0閱讀 0條評論 個贊
        前言1,在一些特定的場景我們往往需要看一下接口的入參,特別是跨系統的接口調用(下發,推送),這個時候的接口入參就很重要,我們保存入參入庫,如果出問題就可以馬上定位是上游還是下游的問題(方便扯皮)2,還……
      • SQL Server的常用分頁SQL
        0閱讀 0條評論 個贊
        今天無聊和朋友討論分頁,發現網上好多都是錯的。網上經常查到的那個TopNotin或者Max大部分都不實用,很多都忽略了Order和性能問題。為此上網查了查,順帶把2000和2012版本的也補上……
      最近發布資訊
      更多
      警花高潮嗷嗷叫
      <del id="nnjnj"></del><track id="nnjnj"></track>

      <p id="nnjnj"></p>

      <address id="nnjnj"></address>

        <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

          <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>