www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]今天為大家分享下京東電商推薦系統(tǒng)實(shí)踐方面的經(jīng)驗(yàn),主要包括: 簡介 排序模塊 實(shí)時(shí)更新 召回和首輪排序 實(shí)驗(yàn)平臺 ▌簡介 說到推薦系統(tǒng),最經(jīng)典的就是協(xié)同過濾,上圖是一個(gè)協(xié)同過濾的例子。協(xié)同過濾主要分為倆種:user-based 基于用戶的協(xié)同過濾和 item-based

京東電商推薦系統(tǒng)實(shí)踐

今天為大家分享下京東電商推薦系統(tǒng)實(shí)踐方面的經(jīng)驗(yàn),主要包括:

  • 簡介

  • 排序模塊

  • 實(shí)時(shí)更新

  • 召回和首輪排序

  • 實(shí)驗(yàn)平臺

簡介

京東電商推薦系統(tǒng)實(shí)踐

說到推薦系統(tǒng),最經(jīng)典的就是協(xié)同過濾,上圖是一個(gè)協(xié)同過濾的例子。協(xié)同過濾主要分為倆種:user-based 基于用戶的協(xié)同過濾和 item-based 基于商品的協(xié)調(diào)過濾。

但是,現(xiàn)在絕大多數(shù)推薦系統(tǒng)都不會直接使用協(xié)同過濾來做推薦。目前主要用的是 learning to rank 框架。

京東電商推薦系統(tǒng)實(shí)踐

這里,是推薦系統(tǒng)的框架,整個(gè)推薦系統(tǒng)可以分為兩部分,在線部分和離線部分。

  • 在線部分主要負(fù)責(zé)當(dāng)用戶訪問時(shí),如何把結(jié)果拼裝好,然后返回給用戶。主要模塊有召回、排序和對結(jié)果的調(diào)整。

  • 離線部分主要是對用戶日志的數(shù)據(jù)分析,應(yīng)用于線上。

整個(gè)推薦系統(tǒng)大概就是這樣的一個(gè)框架。

和新聞、視頻這類的內(nèi)容推薦相比,電商推薦系統(tǒng)又有一些特殊的地方,比如:

優(yōu)化方向(點(diǎn)擊、銷售額、時(shí)長、用戶留存等)。另外,電商中推薦的內(nèi)容也會有很多種,尤其像是活動(dòng)類的內(nèi)容,很多推薦都是算法和人工運(yùn)營共同完成的。這就是電商推薦和新聞推薦等的區(qū)別之處。

京東電商推薦系統(tǒng)實(shí)踐

我們展開看下在線推薦系統(tǒng):

除了剛才說的召回和排序以及最終的調(diào)整之外,還有實(shí)踐過程中的一些細(xì)節(jié)。

  • 召回:這里召回會有很多種方法,如協(xié)同過濾,熱門商品、實(shí)時(shí)促銷等和應(yīng)用場景相關(guān)的召回,還有一些基于 KNN 的召回。

  • 過濾:召回之后,會進(jìn)行過濾,主要是和應(yīng)用場景相關(guān),如已購商品過濾掉、沒有庫存的過濾掉,或者敏感的商品過濾掉等等這些邏輯。

  • 排序:排序目前主要用到的是 DNN 模型,某些流量比較小的地方會用到 GBDT。

  • 過濾:排序之后還會有些分頁、同商品過濾等邏輯。

調(diào)整:最終調(diào)整過程中,主要有兩部分邏輯,多樣性和探索邏輯。

排序模塊

1. 模型結(jié)構(gòu)

京東電商推薦系統(tǒng)實(shí)踐

深度學(xué)習(xí) ranking 模型結(jié)構(gòu)我們不作為重點(diǎn)討論,這里列舉了一種最經(jīng)典的模型,它們都用到了很多 id 的 Embedding,然后這些 Embedding 規(guī)模都很大,這樣訓(xùn)練和上線都比較耗時(shí)。因此,我們做了一些優(yōu)化,比如做分布式的訓(xùn)練,并且會有一套 Pipeline 來完成模型的上線。另外,雖然模型很復(fù)雜,并且能帶來很好的效果,但是特征工程還是必不可少的,很多指標(biāo)的提升還是依賴于特征工程,當(dāng)然也包括一些模型調(diào)整的工作。

2. 實(shí)踐

京東電商推薦系統(tǒng)實(shí)踐

那么如何把這些模型落地呢?我們看下整個(gè)模型的上線過程:

首先最重要的部分是模型訓(xùn)練平臺和排序服務(wù),因?yàn)楹芏嗌疃饶P陀?jì)算量要求很高,為了能達(dá)到比較快的效果,需要部署單獨(dú)的排序服務(wù)。目前比較流行的是 TensorFlow serving,可以很快速的來上線一個(gè)深度模型,并充分利用對分片、單機(jī)并行,達(dá)到很高的計(jì)算效率。

模型線上線下一致性問題對于模型效果非常重要,我們使用特征日志來實(shí)時(shí)記錄特征,保證特征的一致性。這樣離線處理的時(shí)候會把實(shí)時(shí)的用戶反饋,和特征日志做一個(gè)結(jié)合生成訓(xùn)練樣本,然后更新到模型訓(xùn)練平臺上,平臺更新之后在推送到線上,這樣整個(gè)排序形成了一個(gè)閉環(huán)。

3. 實(shí)時(shí)更新

京東電商推薦系統(tǒng)實(shí)踐

我們的特征和模型都需要做實(shí)時(shí)的更新。因?yàn)槲覀兘?jīng)常需要很快的 catch 一些實(shí)時(shí)的信號,比如需要實(shí)時(shí)的用戶畫像來抓住實(shí)時(shí)的用戶興趣的變化,還比如需要抓住實(shí)時(shí)的商品畫像,因?yàn)榻?jīng)常會有一些活動(dòng)或者爆品,我們需要快速的捕捉這些信號,并應(yīng)用到推薦中。另外還有一些實(shí)時(shí)的召回和特征,比如一些交叉的特征,實(shí)時(shí)的點(diǎn)擊率,實(shí)時(shí)訂單等特征。

除了特征外,模型也需要實(shí)時(shí)更新,對于電商場景來說這是有一定困難的,因?yàn)橛唵问怯醒訒r(shí)的,延時(shí)可能是十幾分鐘到十幾小時(shí)不等,這樣實(shí)時(shí)模型更新上就會采取一些保守的策略,比如用點(diǎn)擊率對模型做些微調(diào),然后訂單數(shù)據(jù)再通過離線來獲得,這屬于業(yè)務(wù)場景的限制。

思考

京東電商推薦系統(tǒng)實(shí)踐

排序可以算是推薦系統(tǒng)中比較重要的一個(gè)環(huán)節(jié),但是只有排序肯定是不夠的,事實(shí)上,有一些問題是目前的排序框架無法解決的:

  • 排序得到的結(jié)果非常相似,影響體驗(yàn)。

  • 有多個(gè)優(yōu)化目標(biāo),需要一個(gè)平衡(點(diǎn)擊率、訂單金額、用戶交互時(shí)長等)。

  • 計(jì)算能力有限,如果有無限的計(jì)算力,可以直接對全部候選集進(jìn)行排序。

1. 多樣性

京東電商推薦系統(tǒng)實(shí)踐

使用模型輸出的結(jié)果一般都會非常相似,如果直接給用戶看體驗(yàn)會很差,因此在模型之后我們需要加入多樣性的邏輯。

比較通用的解決辦法是多樣性的 ranking,這是一個(gè)貪心算法,從第一個(gè)商品開始選,當(dāng)選第二個(gè)商品的時(shí)候,會重新計(jì)算下候選集中每個(gè)商品的 score,然后選擇一個(gè) score 最高的。我們的方法是看 novelty score 候選商品的產(chǎn)品詞分布和之前 N 個(gè)商品的產(chǎn)品詞分布的 KL 距離。這樣做的思路,就是選一個(gè)和已有商品最不像的商品,來更好的保證商品推薦結(jié)果的多樣性。

由于純基于算法的多樣性可能會出現(xiàn) badcase,因此還需要一個(gè)規(guī)則來進(jìn)行兜底,確保在極端情況下結(jié)果也能接受。

最后,我們思考一個(gè)問題,有沒有更好的方法實(shí)現(xiàn)多樣性的邏輯呢?當(dāng)然有,比如是否可以考慮使用 list wise ranking。這里只是為大家分享一個(gè)比較容易的,并且效果比較好的方法。

2. 多目標(biāo)

京東電商推薦系統(tǒng)實(shí)踐

我們的優(yōu)化目標(biāo)有很多,比如點(diǎn)擊、轉(zhuǎn)化、時(shí)長等,問題會變得比較復(fù)雜,單一的模型訓(xùn)練很難覆蓋到所有指標(biāo)。另外,經(jīng)常我們需要在各個(gè)指標(biāo)之間進(jìn)行權(quán)衡,因此可調(diào)試性也非常重要。

一種很有用的方式是多模型 ranking,然后用某種方式把所有模型的結(jié)果 combine。

這也體現(xiàn)了一個(gè)思想,在算法的實(shí)際應(yīng)用中,其實(shí)需要在算法的先進(jìn)性和系統(tǒng)可維護(hù)性、可調(diào)試性之間做一個(gè)平衡。往往 paper 里很有創(chuàng)意的算法落地的時(shí)候是有些困難的。

3. 多輪排序

京東電商推薦系統(tǒng)實(shí)踐

下面我們討論一下多輪排序的問題。多輪排序是 learning to rank 實(shí)踐中很重要的一個(gè)思想。使用多輪排序主要是因?yàn)橛?jì)算資源的限制,無法使用復(fù)雜的模型進(jìn)行大規(guī)模的候選集排序。右圖描述了一個(gè)多輪排序的框架。這像是一個(gè)漏斗模型,從上往下模型的復(fù)雜度是遞增的,同時(shí)候選集是逐漸減少的,就是越到后面用越復(fù)雜的模型來保證效果更好,越到前面可能只需要簡單的模型來保證能拿到一些商品就可以了。

這樣會存在一個(gè)問題,由于訓(xùn)練樣本可能有偏,導(dǎo)致只有被用戶看到的樣本才有 label,但是一般不會有太大的影響。

基于索引的首輪排序

1. 索引召回

京東電商推薦系統(tǒng)實(shí)踐

下面我們重點(diǎn)介紹一下第一輪排序。倒排索引很常見,是信息檢索里常用的工具。它通過把 doc 的內(nèi)容索引到 doc id 的方式,快速通過內(nèi)容來查找 doc。我們很多召回都是通過索引實(shí)現(xiàn)的。這里我列舉了一些基于索引的召回方式,如 item cf 的 key、產(chǎn)品詞、熱門類目、促銷產(chǎn)品詞等。

京東電商推薦系統(tǒng)實(shí)踐

雖然索引能夠很大程度上的縮小候選集的范圍,但是經(jīng)常情況下,第一輪排序的 doc 數(shù)量仍然可能會很大。為了保證性能,截?cái)噙壿嬍潜夭豢缮俚?。通過情況下可以通過 quality score 截?cái)啵A糍|(zhì)量好的 doc。經(jīng)過線性的 LR 或者 GBDT 模型就可以有結(jié)果了。另外截?cái)嘀笮枰行┒鄻有缘倪壿?,因?yàn)橹挥性谡倩氐臅r(shí)候保持多樣性,最終結(jié)果才會有多樣性。

京東電商推薦系統(tǒng)實(shí)踐

基于 quality score 截?cái)嗍且环N naive 的算法,這里我們討論另一種業(yè)界也較常用的算法,wand。wand 其實(shí)是 weak and,它的重點(diǎn)是 wand 操作符。wand 操作符是一個(gè)布爾操作符,當(dāng) Xi wi 比 θ 大時(shí),它的值是1,否則是0。之所以叫做 weak-and,是因?yàn)楫?dāng) w 都取1, θ 取 K 時(shí),wand 操作符就變成了 and,當(dāng) w 取1,θ 取1時(shí),wand 操作符就變成了 or。可以看出 wand 是介于 and 和 or 之間的操作。對 Xi wi 求和的操作其實(shí)和我們線性模型很相似。通過 wand 操作符,我們可以定義一些上界,因?yàn)槭堑古潘饕梢越o每個(gè)索引鏈賦予一個(gè)估計(jì)值,這樣就可以拿到權(quán)重上界 UBt,這樣通過和 wand 操作符對比,就可以快速的判斷 UB是否滿足條件,如果滿足條件就可以快速的把一些 doc 扔掉,這樣就可以快速的使用線性模型對全戶做 ranking??梢钥吹?,基于線性模型的分?jǐn)?shù)做截?cái)啵韧耆?quality score 截?cái)嗟牟呗砸晕⒑靡稽c(diǎn)。

京東電商推薦系統(tǒng)實(shí)踐

這里我列了 paper 中 wand 算法的偽代碼。出于時(shí)間關(guān)系,我們不會過算法邏輯的細(xì)節(jié)。我認(rèn)為它的主要的思路是通過快速使用 upper bound 做截?cái)嗪吞D(zhuǎn),可以略過很多明顯不符合的候選 doc,從而減少計(jì)算 score 的次數(shù)。當(dāng)然這種方法對于線性模型來說,有一個(gè)缺點(diǎn),當(dāng)我們需要多樣性的時(shí)候,沒辦法很好的實(shí)現(xiàn)在模型中增加多樣性的。

wand 算法目前已經(jīng)應(yīng)用非常廣泛了,在很多開源的索引如 lucene 中,也會用到這種方法快速計(jì)算文本相關(guān)分。

京東電商推薦系統(tǒng)實(shí)踐

剛剛我們介紹了使用倒排索引做第一輪排序,以及一個(gè)常見的排序加速算法,回過來我們思考一下倒排索引本身,它適用于什么場景,不適用于什么場景。

首先它適用于 kv 查找這種場景,并且 kv 查找也屬于實(shí)際應(yīng)用很多的情況。但是對于更復(fù)雜的方式,類似 graph 的召回方式不友好,比如找用戶看過的商品中相似商品的相關(guān)商品,這時(shí)實(shí)現(xiàn)起來會比較麻煩,這是它的一些限制。再一個(gè),我們需要有較好的截?cái)嗖呗?,例如底層使?relevence score 截?cái)?,排序使?GBDT。

當(dāng)然,索引還會受到機(jī)器本身的內(nèi)存限制,限于機(jī)器的大小,很多時(shí)候我們需要多機(jī)分片部署索引,這樣會帶來一定的復(fù)雜性。雖然有些限制,但是索引是目前應(yīng)用很廣泛、有效的方式,包括在推薦、搜索等領(lǐng)域都會使用到。

2. KNN 召回

京東電商推薦系統(tǒng)實(shí)踐

除了索引召回,KNN 也是現(xiàn)在較常用的一種召回方式。首先,我們把所有的候選集轉(zhuǎn)換成 embedding,我們把用戶興趣也可以轉(zhuǎn)換成 embedding,通過定義 embedding 之間距離計(jì)算公式,我們可以定義 KNN 召回問題,也就是在全部候選池中,找到與用戶最接近的 k 個(gè)結(jié)果。

京東電商推薦系統(tǒng)實(shí)踐

定義好 KNN 召回的問題,下一步就是如何找到最近的 K 個(gè)候選集。由于整個(gè)候選集非常大,每次都使用用戶的 embedding 去全量計(jì)算距離是不現(xiàn)實(shí)的,只能使用一種近似算法。我們今天分享其中的一種近似算法。是 facebook 開源的 KNN 計(jì)算庫 faiss 使用的。其原理:

首先需要對全部候選集進(jìn)行分塊,每一塊都會有自己的質(zhì)心。paper 中使用 Lloyd 算法,將整個(gè)空間劃分開。分塊后,就需要對每一塊構(gòu)建索引,進(jìn)而通過索引實(shí)現(xiàn)快速檢索的功能。

右圖是索引構(gòu)建和檢索的方法。

上半部分是如何構(gòu)建索引(這里的優(yōu)化點(diǎn)是使用了二級索引):首先拿到 y 候選集之后,做一個(gè) quantizer 分類得到一個(gè)一級索引,把它放到索引表中,另外還得到殘差 compute residual,可以對殘差再進(jìn)行一次 quantizer,得到一個(gè)二級索引,通過兩級索引來加快檢索的速度,同理,在真正的 quary 的時(shí)候,拿到的是用戶的向量 x,先做一個(gè) quantizer,得到 k 近鄰的一級索引,然后查找 k 個(gè)一級索引,同時(shí)拿到 k 個(gè)二級索引,然后在二級索引中查找,然后這里還有很多加速的算法(這里就不展開了),通過這樣一種多層的查詢方式來做到加速 K 近鄰的算法。

PS:關(guān)于 KNN 的一些思考,KNN 是一種有效的方式,但是不是唯一有效的方式。比如之后分享的 TDM,能夠比 KNN 更加靈活。

實(shí)驗(yàn)平臺

京東電商推薦系統(tǒng)實(shí)踐

最后簡單介紹下分層實(shí)驗(yàn)平臺,因?yàn)榇蠹蚁肟焖俚卣骱湍P?,離不開實(shí)驗(yàn),經(jīng)常會遇到的情況是實(shí)驗(yàn)流量不夠用了,這時(shí)就需要對實(shí)驗(yàn)做分層。分層的邏輯見右圖,通過在不同的 Layer 使用不同的哈希函數(shù),保證每個(gè) Layer 之間流量是正交的,這樣就可以在不同的 Layer 上做不同的實(shí)驗(yàn)。

京東電商推薦系統(tǒng)實(shí)踐

分層實(shí)驗(yàn)的具體做法:召回->排序->后處理->業(yè)務(wù),另外還有一部分對齊流量,用來做全量的驗(yàn)證。

分層的優(yōu)點(diǎn),可以用于做實(shí)驗(yàn)的流量多,適合快速迭代;缺點(diǎn),需要嚴(yán)格控制層與層之間的關(guān)系,防止相互干擾。本次分享就到這里,謝謝大家。

京東電商推薦系統(tǒng)實(shí)踐

嘉賓介紹


孟崇,京東推薦架構(gòu)負(fù)責(zé)人。負(fù)責(zé)京東推薦系統(tǒng)的 ranking 算法架構(gòu)和模型訓(xùn)練。碩士畢業(yè)于中科院自動(dòng)化所,先后在 yahoo、獵豹移動(dòng)和京東從事推薦的工作,有豐富的推薦算法經(jīng)驗(yàn)。

——END——

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:

京東電商推薦系統(tǒng)實(shí)踐

長按訂閱更多精彩▼

京東電商推薦系統(tǒng)實(shí)踐

如有收獲,點(diǎn)個(gè)在看,誠摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉