商品推薦系統淺析

来源:https://www.cnblogs.com/jingdongkeji/archive/2023/08/09/17617430.html
-Advertisement-
Play Games

本文主要做推薦系統淺析,主要介紹推薦系統的定義,推薦系統的基礎框架,簡單介紹設計推薦的相關方法以及架構。適用於部分對推薦系統感興趣的同學以及有相關基礎的同學,本人水平有限,歡迎大家指正。 ...


一、綜述

本文主要做推薦系統淺析,主要介紹推薦系統的定義,推薦系統的基礎框架,簡單介紹設計推薦的相關方法以及架構。適用於部分對推薦系統感興趣的同學以及有相關基礎的同學,本人水平有限,歡迎大家指正。

二、商品推薦系統

2.1 推薦系統的定義

推薦系統本質上還是解決信息過載的問題,幫助用戶找到他們感興趣的物品,深度挖掘用戶潛在的興趣。

2.2 推薦架構

其實推薦系統的核心流程只有召回、排序、重排。

請求流程

當一個用戶打開一個頁面,這個時候前端會攜帶用戶信息(pin或者uuid等)去請求後臺介面(通過color間接調用),當後臺收到請求後一般會先根據用戶標識進行分流獲取相關策略配置(ab策略),這些策略去決定接下來會調用召回模塊、排序模塊以及重排模塊的哪個介面。一般召回模塊分多路召回,每路召回負責召回多個商品,排序和重排負責調整這些商品的順序。最後挑選出合適的商品併進行價格、圖片等相關信息補充展現給用戶。用戶會根據自己是否感興趣選擇點擊或者不點擊,這些涉及用戶的行為會通過日誌上報到數據平臺,為之後效果分析和利用用戶行為推薦商品奠定基礎。

其實有些問題想說一說:

為什麼要採取召回、排序、重排這種漏斗分層架構?

(1)從性能方面

終極:從百萬級的商品庫篩選出用戶感興趣的個位數級別的商品。

複雜的排序模型線上推斷耗時嚴重,需要嚴格控制進入排序模型的商品數量。需要進行拆解

(2)從目標方面

召回模塊:召回模塊的任務是快速從大量的物品中篩選出一部分候選物品,目的是不要漏掉用戶可能會喜歡的物品。召回模塊通常採用多路召回,使用一些簡化的特征或模型。

排序模塊:排序模塊的任務是精準排序,根據用戶的歷史行為、興趣、偏好等信息,對召回模塊篩選出的候選物品進行排序。排序模塊通常使用一些複雜的模型。

重排模塊:重排模塊的任務是對排序模塊的結果進行二次排序或調整,以進一步提高推薦的準確性和個性化程度。重排模塊通常使用一些簡單而有效的演算法。

什麼是ab實驗?

參考論文:Overlapping Experiment Infrastructure: More, Better, Faster Experimentation(google2010)

只有線上實驗才能真正評估模型優劣,ab實驗可以快速驗證實驗的效果,快速迭代模型。減少上線新功能的風險。

ab演算法:Hash(uuid+實驗id+創建時間戳)%100

特性:分流+正交

2.3召回

召回層的存在僅僅是為用戶從廣闊的商品池子中初篩出一批還不錯的商品。為了平衡計算速度與召回率(正樣本占全部正樣本的比例)指標之間的矛盾,採用多路召回策略,每路召回策略只考慮其中的單一特征或策略。

2.3.1多路召回的優劣

多路召回:採用不同的策略、特征或者簡單模型分別召回一部分候選集,然後把候選集混合在一起供排序使用。召回率高,速度快,多路召回相互補充。

多路召回中每路召回的截斷個數K是個超參數,需要人工調參,成本高;召回通路存在重合問題,冗餘。

是否存在一種召回可以替代多路召回,向量召回應用而生,就目前而言,仍然是以向量召回為主,其他召回為輔的架構。

2.3.2召回分類

主要分為非個性化召回,個性化召回兩大類。非個性化召回主要是進行熱點推送,推薦領域馬太效應嚴重,20%的商品貢獻80%的點擊。個性化召回主要是發掘用戶感興趣的商品,著重處理每個用戶的差異點,提高商品的多樣性,保持用戶的粘性。

非個性化召回

(1) 熱門召回

近7天高點擊、高點贊、高銷量商品召回

(2)新品召回

最新上架的商品召回

個性化召回

(1)標簽召回、地域召回

標簽召回:用戶感興趣的品類、品牌、店鋪召回等

地域召回:根據用戶的地域召回地域內的優質商品。

(2)cf召回

協同過濾演算法是基於用戶行為數據挖掘用戶的行為偏好,從而根據用戶的行為偏好為其推薦物品,其根據的是用戶和物品的行為矩陣(共現矩陣)。用戶行為一般包括瀏覽、點贊、加購、點擊、關註、分享等等。

協同過濾分為三大類:基於用戶的協同過濾(UCF)和基於物品的協同過濾(ICF)和基於模型的協同過濾(隱語義模型)。是否為用戶推薦某個物品,首先要把用戶和物品進行關聯,而進行關聯的點是另一個物品還是另一個用戶,決定了這屬於哪個類型的協同過濾。而基於隱語義模型是根據用戶行為數據進行自動聚類挖掘用戶的潛在興趣特征。從而通過潛在興趣特征對用戶和物品進行關聯。

基於物品的協同過濾(ICF):判斷是否為用戶推薦某個物品,首先根據用戶歷史行為記錄的物品和這個物品的相似關係來推斷用戶對這個物品的興趣度,從而判斷我們是否推薦這個物品。整個協同過濾過程主要分為以下幾步:計算物品之間的相似度,計算用戶對物品的興趣度,排序截取結果。

商品相似度計算:

衡量相似度主要有以下幾種方式:夾角餘弦距離,傑卡德公式。由於用戶或物品的表示方式的多樣性,使得這些相似度的計算非常靈活。我們可以利用用戶和物品的行為矩陣來去計算相似度,也可以根據用戶行為、物品屬性和上下文關係構造用戶和物品的向量表示去計算相似性。

夾角餘弦距離公式: cos⁡θ=(x1*x2+y1*y2)/(√(x12+y12 )*√(x22+y22 ))

傑卡德公式J(A,B)=(|A⋂B|)/(|A⋃B|)

商品a 商品b 商品c 商品d
用戶A 1 0 0 1
用戶B 0 1 1 0
用戶C 1 0 1 1
用戶D 1 1 0 0

夾角餘弦距離公式計算商品a和b的相似度:

Wab=(1*0+0*1+1*0+1*1)/(√(12+02+12+12 )*√(02+12+02+12 ))=1/√6

spark實現ICF:https://zhuanlan.zhihu.com/p/413159725

問題:冷啟動問題,長尾效應。

(3)向量召回

向量化召回:通過學慣用戶與物品低維向量化表徵,將召回建模成向量空間內的近鄰搜索問題,有效提升了召回的泛化能力與多樣性,是推薦引擎的核心召回通道。

向量:萬物皆可向量化,Embedding就是用一個低維稠密的向量表示一個對象(詞語或者商品),主要作用是將稀疏向量轉換成稠密向量(降維的效果),這裡的表示蘊含著一定的深意,使其能夠表達出對象的一部分特征,同時向量之間的距離反映對象之間的相似性。

向量召回步驟:離線訓練生成向量,線上向量檢索。

1.離線訓練生成向量

word2vec:詞向量的鼻祖,由三層神經網路:輸入層,隱藏層,輸出層,隱藏層沒有激活函數,輸出層用了softmax計算概率。

目標函數

網路結構:

總的來說:輸入是詞語的序列,經過模型訓練可以得到每個詞語對應的向量。應用在推薦領域就是輸入是用戶的點擊序列,經過模型訓練得到每個商品的向量。

優劣:簡單高效,但是只考慮了行為序列,沒有考慮其他特征。

雙塔模型:

網路結構:分別稱為User塔和物品塔;其中User塔接收用戶側特征作為輸入比如用戶id、性別、年齡、感興趣的三級品類、用戶點擊序列、用戶地址等;Item塔接受商品側特征,比如商品id、類目id、價格、近三天訂單量等。數據訓練:(正樣本數據,1)(負樣本,0)正樣本:點擊的商品,負樣本:全局隨機商品樣本(或者同批次其他用戶點擊樣本)

優劣:高效,完美契合召回特性,線上請求得到用戶向量,檢索召回item向量,泛化性高;用戶塔和item塔割裂,只在最後做了交互。

2.線上向量檢索

向量檢索:是一種基於向量空間模型(Vector Space Model)的信息檢索方法,用於在大規模文本集合中快速查找與查詢向量最相似的文檔向量。在信息檢索、推薦系統、文本分類中得到廣泛應用。

向量檢索的過程是計算向量之間的相似度,最後返回相似度較高的TopK向量返回,而向量相似度計算有多種方式。計算向量相似性得方式有歐式距離、內積、餘弦距離。歸一化後,內積與餘弦相似度計算公式等價。

向量檢索的本質是近似近鄰搜索(ANNS),儘可能減小查詢向量的搜索範圍,從而提高查詢速度。

目前在工業界被大規模用到的向量檢索演算法基本可以分為以下3類:

  • 局部敏感性哈希(LSH)
  • 基於圖(HNSW)
  • 基於乘積量化

簡單介紹LSH

LSH演算法的核心思想是:將原始數據空間中的兩個相鄰數據點通過相同的映射或投影變換後,這兩個數據點在新的數據空間中仍然相鄰的概率很大,而不相鄰的數據點被映射到同一個桶的概率很小。

相比於暴力搜索遍曆數據集中的所有點,而使用哈希,我們首先找到查詢樣本落入在哪個桶中,如果空間的劃分是在我們想要的相似性度量下進行分割的,則查詢樣本的最近鄰將極有可能落在查詢樣本的桶中,如此我們只需要在當前的桶中遍歷比較,而不用在所有的數據集中進行遍歷。當哈希函數數目H取得太大,查詢樣本與其對應的最近鄰落入同一個桶中的可能性會變得很微弱,針對這個問題,我們可以重覆這個過程L次(每一次都是不同得哈希函數),從而增加最近鄰的召回率。

案例:基於word2vec實現向量召回

2.4排序

推薦系統的掌上明珠

排序階段分為粗排和精排,粗排一般出現在在召回結果的數據量級比較大的時候。

進化歷程

簡單介紹Wide&Deep

背景:手動特征組合實現記憶性效果不錯但是特征工程太耗費人力,並且未曾出現的特征組合無法記憶,不能進行泛化。

目的:使模型同時兼顧泛化和記憶能力(有效的利用歷史信息並具有強大的表達能力)​

(1)記憶能力 模型直接學習並利用歷史數據中物品或者特征共現頻率的能力,記憶歷史數據的分佈特點,簡單模型容易發現數據中對結果影響較大的特征或者組合特征,調整其權重實現對強特征的記憶

(2)泛化能力 模型傳遞特征的相關性,以及發掘稀疏或者從未出現過的稀有特征和最終標簽相關性的能力,即使是非常稀疏的特征向量輸入也能得到穩定平滑的推薦概率。提高泛化性的例子:矩陣分解,神經網路

兼顧記憶和泛化能力 (結果的準確性和擴展性) wide部分專註模型記憶,快速處理大量歷史行為特征,deep部分專註模型泛化,探索新世界,模型傳遞特征的相關性,發掘稀疏甚至從外出現過的稀有特征與最終標簽的相關性的能力,具有強大的表達能力。最終將wide部分和deep部分結合起來,形成統一的模型。

wide部分就是基礎的線性模型,表示為y=W^T X+b X特征部分包括基礎特征和交叉特征。交叉特征在wide部分很重要,可以捕捉到特征間的交互,起到添加非線性的作用。

deep部分為embeding層+三層神經網路(relu),前饋公式

聯合訓練

優劣:為推薦/廣告/搜索排序演算法之後的發展奠定了重要基礎,從傳統演算法跨越到深度學習演算法,里程碑意義。兼顧記憶和泛化能力但是Wide側仍需要手工組合特征。

參考論文:Wide & Deep Learning for Recommender Systems

2.5 重排

定義:對精排後的結果順序進行微調,一方面實現全局最優、一方面滿足業務訴求提升用戶體驗。比如打散策略,強插策略,提高曝光,敏感過濾

MMR演算法

實現商品多樣性問題​

目的:在推薦結果準確性的同時保證推薦結果的多樣性,為了平衡推薦結果的多樣性和相關性​

演算法原理,如公式​

D:商品集合,Q:用戶,S:已被選中的商品集合, R\S:R中未被選中的商品集合​

def MMR(itemScoreDict, similarityMatrix, lambdaConstant=0.5, topN=20):
    #s 排序後列表 r 候選項
    s, r = [], list(itemScoreDict.keys())
    while len(r) > 0:
        score = 0
        selectOne = None
        # 遍歷所有剩餘項
        for i in r:
            firstPart = itemScoreDict[i]
            # 計算候選項與"已選項目"集合的最大相似度
            secondPart = 0
            for j in s:
                sim2 = similarityMatrix[i][j]
                if sim2 > second_part:
                    secondPart = sim2
            equationScore = lambdaConstant * (firstPart - (1 - lambdaConstant) * secondPart)
            if equationScore > score:
                score = equationScore
                selectOne = i
        if selectOne == None:
            selectOne = i
        # 添加新的候選項到結果集r,同時從s中刪除
        r.remove(selectOne)
        s.append(selectOne)
    return (s, s[:topN])[topN > len(s)]




意義是選擇一個與用戶最相關的同時跟已選擇物品最不相關的物品。時間複雜度O(n2) 可以通過限制選擇的個數進行降低時間複雜度​

工程實現:需要用戶和物品的相關性和物品之間的相似性作為輸入,用戶和物品的相關性可以用排序模型的結果作為代替,物品之間的相似性可以通過協同過濾等演算法得到商品向量,計算餘弦距離。也可以簡單得是否同一三級類目、同一店鋪等表徵​

三、總結

就簡單嘮叨這麼多啦,主要想讓大家瞭解一下推薦系統,向大家介紹一下整個推薦架構,以及整個推薦都有哪些模塊。由於本人水平有限,每個模塊也沒有講的特別細,希望之後能在工作中繼續學習這個領域,深挖細節,產出更好的東西呈現給大家。感謝!!!

作者:京東零售 閆先東

來源:京東雲開發者社區


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ![](https://img2023.cnblogs.com/blog/3076680/202308/3076680-20230807132720267-1631745639.png) # 1. 計算一年有多少天 ## 1.1. Oracle sql語句實例 ```sql select 'Days ...
  • 一、升級webview版本 (1). 下載需要更新的Webview apk。如果不能翻牆可以用下載好的版本(相容32/64位):Webview-115.0.5790.138 (2). 在路徑\aosp\external\chromium-webview\prebuilt\下替換arm或arm64架構 ...
  • 本文介紹了Android13中的凍結進程功能,它是一種重要的資源管理策略,可以提高系統性能和穩定性,同時最大限度地節省設備的資源和電池消耗。 文章討論瞭如何合理分配資源,包括CPU、記憶體等,以提高設備性能和用戶體驗。此外,文章還提到了凍結進程對應用程式線程的影響,並介紹了Android13與Andr... ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 思路分析 在開始動手之前,分析一下整個功能的實現過程: 根據圖片大小創建 canvas1 畫布,並將原圖片直接定位在 canvas1 上; 在畫布上添加一個蒙層,以區分當前 canvas 圖像是被裁剪的原圖像; 在蒙層上方,對裁剪區域(鼠 ...
  • Avue 是一個基於Element-plus低代碼前端框架,它使用JSON 配置來生成頁面,可以減少頁面開發工作量,極大提升效率; 雖然Avue官網上面都有這些配置說明,但是如果剛開始接觸不熟悉框架的話需要很久才找到自己需要的參數配置,為了方便自己今後查找使用,現將一些開發中常用的配置梳理在下 一、 ...
  • 這幾天在學vue3, 用Element-plus 加 vue3 搭了個框架,在這裡記錄一下項目搭建中遇到的問題。 1、使用 Element-plus 的 icon 圖標,顯示不出來 首先,用命令行中安裝 Element-plus 的圖標: npm install @element-plus/icon ...
  • >我們是[袋鼠雲數棧 UED 團隊](http://ued.dtstack.cn/),致力於打造優秀的一站式數據中台產品。我們始終保持工匠精神,探索前端道路,為社區積累並傳播經驗價值。 >本文作者:景明 ## 升級背景 目前公司產品有關 react 的工具版本普遍較低,其中 react router ...
  • 在現代的 Web 應用程式中,頁面訪問攔截是非常重要的一個方面。它可以用於確保用戶只能訪問他們有許可權的頁面,提高應用程式的安全性和用戶體驗。本篇博文將介紹如何使用 Vue 框架來實現頁面訪問攔截的功能。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...