愛奇藝技術沙龍——廣告算法與架構設計-愛奇藝直播-愛奇藝html
在必定週期,讓儘量多的人產生消費。算法
長週期:品牌廣告(好比阿迪、nike等品牌),短週期:效果廣告(好比平時打開網頁出如今眼簾的廣告)。性能優化
消費行爲:購買、激活、安裝、下載、點擊。網絡
匹配需求:用戶行爲(搜索、瀏覽、點擊等)、統計特徵(性別、年齡、地區等)架構
可以將用戶想要看的廣告適時地推到面前,讓廣告主的廣告獲得合理的投放。app
展現價值:場景(點位)+效果(索引)ide
場景化投放:如用戶颱風天在大街上傘被吹走(這種場景),若是當場有個廣告關於可以抵抗12級颱風的傘,是很合適的。工具
生成/推薦點位:場景性能
輔助創做素材:效果學習
創可貼:廣告內容和視頻內容十分貼切,好比圖一中吃飯場景付費是採用支付寶,則視頻中會出現支付寶支付界面的廣告。
前情提要:圖二能夠看到人物下方會有飲料的廣告,這廣告可能和前情提要有相關的,好比這裏哭得稀里嘩啦的要來點飲料解渴。
video in:視頻中後期加入廣告,在視頻中剪輯進入一個雪碧廣告等。
商業價值點=有消費需求的點位【找到這些點位,而後打上標籤】
聚餐--想喝飲料、地鐵---聽點音樂、海灘----但願防曬、親吻---來束玫瑰
對象【人臉識別、姿態識別、服飾分類、目標檢測、表情識別】
事件【行爲識別、語音識別、意圖理解、事件分類、文本挖掘】
場景【場景識別、地標識別、調性分析、音頻分類、音樂識別】
從各個維度來對視頻分析,給視頻打上標籤,這些標籤能夠在以後被採用作推薦、匹配廣告等。
但若是從這些識別中得到的標籤可能不能很全面地給視頻打上正確的標籤,如在視頻中用戶常但願兩個男女主角有浪漫的場景,而不是男二女二,這就涉及到人物和場景的交叉關聯性。因此但願能更好的去訓練更好的標籤。
規則&算法----業務標籤、語義標籤
節點屬性&當前視頻內容識別---標籤排序
利用圖中的標籤與標籤的距離---提高精度
(1)媒體方在曝光以前將流量發給ADX(至關於將流量交給ADX進行廣告拍賣),360自身也有一個AD Exchange(360 Max)。
(2)ADX發流量給DSP來對此次曝光進行競價(360自身也有一個360點睛DSP)
(3)廣告主對自身的需求設置一些廣告投放返回給DSP
(4)DSP會根據這些廣告投放來匹配相關的候選集,將候選集返回給ADX,DSP響應時間很短,在100ms左右
(5)最後ADX選擇出價最高的DSP投放
(1)廣告側邊欄:具體投放廣告的詳情頁
(2)總體的開屏廣告:品牌廣告
(3)信息流:嵌入新聞上下文中的廣告,和文章內容形式保持一致
(1)流量是從ADX中發給DSP端,
(2)DSP拿到流量以後進行Ad search Root和Ad Search Leaf兩個模塊,
Ad search Root是對流量進行識別,判斷其爲哪一種類型流量,好比是屬於kidword?信息流?banerge流量?,
而後將斷定的流量類型交給Ad search Leaf【對廣告進行召回】,這個模塊選出相匹配的廣告候選集,
以後再交給Ad Selector模塊【精排】,即對廣告的CTR或者CVR進行預估,選出top K個廣告返回給DSP server。
(3)將一些廣告點擊、曝光、後序的日誌寫入kafka,用來作日誌落地模塊和反做弊。
一部分的日誌用來作日誌落地模塊,分爲線上和線下。
離線:將日誌進入ETL以及訓練樣本模型。
一部分的日誌用來作反做弊,好比實時的曝光反饋。
(1)DSP提供的一個流量請求Request包含(用戶、context)。
(2)廣告主設置的廣告投放存在Ad meta db中,而後建成相關的廣告索引(ad index),投放更新以後纔會實時更新這個索引
(3)RTDB是根據用戶和context上下文進行用戶標籤的實時更新和線下處理
(4)召回模塊:結合Ad index和RTDB選出候選集
(5)過濾模塊:根據規則、黑白名單、廣告主的預算、pacing進行過濾等
(6)粗排模塊:
(7)精排:LR、FFM……
基於上下文:
圖片(內容頁:一個明星穿了哪件衣服,根據這件衣服投放哪件商品廣告),作法:將圖片向量化,計算廣告商品和圖片向量的類似度。
標題(文本NLP操做),基於文本召回
lbs(廣告主自身設定某個區域,但願在該區域【標籤】內進行投放)布爾召回
基於用戶行爲:
興趣(根據一些profile打上一些用戶興趣標籤):布爾召回
query(360搜索中的查詢行爲,NLP)基於文本召回
訪問行爲(哪些用戶看了哪些商品,主要針對商品特徵),item based CF、ALS、Neural MF
基於深度召回:
結合user profile、媒體特性、上下文特性等進入深度模型中進行召回
倒排索引怎麼構建?https://www.jianshu.com/p/86bd98551f4b
向量化召回,主要經過模型來學習用戶和物品的興趣向量,並經過內積來計算用戶和物品之間的類似性,從而獲得最終的候選集。
其中,比較經典的模型即是Youtube召回模型。線下,能夠計算用戶embedding和項目embedding的內積。
向量化檢索:可是在實際線上應用時,因爲物品空間巨大,計算用戶興趣向量和全部物品興趣向量的內積,耗時十分巨大,有時候會經過局部敏感Hash等方法來進行近似求解。
①【YouTube DNN將用戶和item的特徵轉成向量進行類似度檢索】
②基於深度語義檢索模型(DSSM)
輸入:用戶query、與該query相關的項目D1,兩個不相關的D2和D3。將query、D一、D二、D3都轉成embedding,進入NN神經網絡。
輸出:最後softmax給三種項目打分α,正例分數儘量高。
KD樹是其下的經典算法。通常而言,在空間維度比較低時,KD樹的查找性能仍是比較高效的;但當空間維度較高時,該方法會退化爲暴力枚舉,性能較差,這時通常會採用下面的哈希方法或者矢量量化方法。由於高維空間的主要特色之一是,隨着維數增長,任意兩點之間最大距離與最小距離趨於相等
LSH(Locality-Sensitive Hashing)是其下的表明算法。文獻[7]是一篇很是好的LSH入門資料。
對於小數據集和中規模的數據集(幾個million-幾十個million),基於LSH的方法的效果和性能都還不錯。這方面有2個開源工具FALCONN和NMSLIB。
矢量量化方法,即vector quantization。在矢量量化編碼中,關鍵是碼本的創建和碼字搜索算法。好比常見的聚類算法,就是一種矢量量化方法。而在類似搜索中,向量量化方法又以PQ方法最爲典型。
對於大規模數據集(幾百個million以上),基於矢量量化的方法是一個明智的選擇,能夠用用Faiss開源工具。
原文連接:https://blog.csdn.net/gaoyanjie55/article/details/81383434
LSH:https://blog.csdn.net/leadai/article/details/89391366
LSH的基本思想以下:咱們首先對原始數據空間中的向量進行hash映射,獲得一個hash table,咱們但願,原始數據空間中的兩個相鄰向量經過相同的hash變換後,被映射到同一個桶的機率很大,而不相鄰的向量被映射到同一個桶的機率很小。所以,在召回階段,咱們即可以將全部的物品興趣向量映射到不一樣的桶內,而後將用戶興趣向量映射到桶內,此時,只須要將用戶向量跟該桶內的物品向量求內積便可。這樣計算量被大大減少。
關鍵的問題是,如何肯定hash-function?在LSH中,合適的hash-function須要知足下面兩個條件:
1)若是d(x,y) ≤ d1, 則h(x) = h(y)的機率至少爲p1;
2)若是d(x,y) ≥ d2, 則h(x) = h(y)的機率至多爲p2;
其中d(x,y)表示x和y之間的距離, h(x)和h(y)分別表示對x和y進行hash變換。
知足以上兩個條件的hash function稱爲(d1,d2,p1,p2)-sensitive。而經過一個或多個(d1,d2,p1,p2)-sensitive的hash function對原始數據集合進行hashing生成一個或多個hash table的過程稱爲Locality-sensitive Hashing。
布爾召回:倒排表的key-value的value值會愈來愈長,檢索性能會愈來愈差。
向量檢索:侷限於模型的向量表達是否夠好,侷限於向量空間。
基於深度樹的檢索:解決檢索性能以及全量檢索。
【全量檢索:由於協同過濾在召回的時候,並不能真正的面向全量商品庫來作檢索,系統只能在用戶歷史行爲過的商品裏面找到侯選的類似商品來作召回】
一、(流量方)左邊的用戶屬性特徵(如性別、年齡等),上下文特徵(媒體廣告位,時間等特徵)
二、左邊特徵進入特徵交叉組合層,選擇IPNN的模型
三、進入FC + BN轉成search embedding(128),線上更新時,左邊這個模型是實時更新的。
四、(廣告主特徵)右邊特徵包含廣告投放的一些特徵(尺寸、類目、行業等),即構成樹的葉子節點。
五、構建樹,將樹的父節點和葉子節點進入FC+ BN,出來Tree Leaf/Parent embedding,而後和左邊的search embedding進行concat,最後計算出一個score。
如何準備樣本?
葉子節點的正例:top 3(ecpm最大),負例:2/3 葉子節點同層隨機負採樣 + 1/3 prerank低分樣本。
父節點的正例:葉子節點向上回溯標正,即葉子節點最大的ecpm也爲父節點最大的ecpm,負例:同層隨機(沒有直接往上回溯,由於易和正節點相交) 規模:7天的數據採樣後5000萬。
每一層的父節點的最大指望和全部子節點中最大指望值是相等的。時間複雜度:2klog2(n)
兩種方式:隨機生成+自下而上合成樹
隨機生成:初始時隨機二分生成一棵樹,將生成樹的葉子embedding拿到,將其進行聚類,根據聚類結果從新生成一棵樹來迭代。
自下而上合成樹:先當這棵樹不存在,而後將右邊的特徵樣本放入DNN模型中先訓練出葉子節點的embedding,而後再根據葉子節點的embedding向上聚類回溯成一顆樹(kmeans或者根據曝光頻次來聚類),以後再不斷迭代聚類更新這棵樹。
模型迭代收斂時,將樹模型導到線上去。
模型loss:
交叉熵loss:擬合對應的樣本是否曝光【點擊加權】
triplet loss:葉子節點的正樣本和用戶特徵距離儘量相近,負樣本距離儘量遠。
如:選出top 3,
第一層:只有一個節點<3,被選出。
第二層:只有兩個節點<3,兩個都被選出。
第三層:選出其被選中的父節點的三個子節點。
第四層:選出其被選中的父節點的三個子節點。
新來一個樣本,將其轉化成embedding,在葉子節點的embedding集合中,計算類似度,找到與新樣本最類似的葉子節點37,將該新樣本加入這個葉子節點37的list中去,【線上訓練時,葉子節點實際是一個cluster,一個列表,並非一個單一的節點。】
避免feed dict。採用dataset API,可並行。
線下和線上分開評估。
線下:AUC、recall等
線上:業務指標:rpm,rpc,ctr等,樹 的指標(檢索時間性能)
召回/排序,評估時進行分桶的A/B Test