哈達瑪積(哈達瑪積)
作者:甘肃省 来源:威海市 浏览: 【大中小】 发布时间:2025-07-05 07:09:08 评论数:
很多朋友想了解關於哈達瑪積的一些資料信息,下麵是(揚升資訊www.balincan8.com)小編整理的與哈達瑪積相關的內容分享給大家,一起來看看吧。
本文作者:hannahguo,騰訊 PCG 推薦算法工程師
在推薦係統中,特征工程扮演著重要的角色。俗話說數據和特征決定了機器學習算法的上限,而模型、算法的選擇和優化隻是在不斷逼近這個上限。特征工程的前提是收集足夠多的數據,使用數據學習知識,從大量的原始數據中提取關鍵信息並表示為模型所需要的形式。本文主要說明微視,這種富媒體形態的短視頻平台,是如何通過視頻內容特征以及用戶屬和行為數據,來精準預測用戶對短視頻的喜好的。
引言本文主要是跟各位讀者分享特征工程領域的一些通用方法和技巧,以及微視在特征工程上的相關實踐經驗。微視作為一個短視頻平台,存在其獨有的業務特點,這也給特征構造帶來了一定的難度。比如熱目類目在播放時長、互動率等指標上表現出天然的優勢,長視頻相比於時長較短的視頻在播放完成度、完播率等指標上存在明顯的劣勢,如何消除這些 bias 的影響都是特征構造時需要特別注意的地方,而對於我們線上的多目標排序模型來說,不同單目標對應的最優特征組合也不盡相同,這些不僅需要較強的專業領域知識,更重要的是對自身業務場景的深刻認知以及大量線上實驗的探索嚐試與驗證。
一、特征提取特征工程就是將原始數據空間映射到新的特征向量空間,使得在新的特征空間中,模型能夠更好地學習數據中的規律。因此,特征提取就是對原始數據進行處理與變換的過程。常見的原始數據類型有數值型、離散型,還有文本、圖像、視頻等。如果將這些數據作為一個整體來看待的話,把用戶、視頻、作者看作節點,用戶與視頻、作者的交互看作邊構建出的複雜網絡也是我們的原始數據。
事實上,如果特征工程做的足夠好,即使是簡單的模型,也能表現出非常好的效果。而複雜的模型可以在一定程度上減少特征工程的工作量。例如,對於線模型,我們需要將類別變量進行獨熱編碼等處理,但對於複雜一些的模型如樹模型,則可以直接處理類別變量。像推薦係統中常用的 LR 模型,需要手工構造組合特征,而 FM 模型可以解決特征組合的問題,直接輸入原始特征。而更複雜的 DNN 模型,可以自動學習特征的表示。
在微視場景下,視頻的播放時長、播放完整度、點讚、轉發、分享、評論等多種互動行為都是推薦模型的訓練目標,根據模型所要學習的目標和業務邏輯,我們需要考慮數據中有哪些可能相關的信息,從現有數據中挖掘出對模型預測有用的特征。比如在微視排序中,用戶的興趣,在 App 上的播放、互動等行為以及視頻的類別、標簽、熱度等都是強相關的因素。在確定了哪些因素可能與預測目標相關後,我們需要將此信息抽取成特征,下麵會對不同特征的處理方式做具體介紹。
數值類型的數據具有實際統計意義,例如用戶對不同類目下視頻的興趣分,或者是計數,例如一個視頻被播放了多少次、被點讚、轉發以及評論了多少次等。雖然一些機器學習模型可以直接輸入數值類型的數據,但是通常情況下,對數值型數據進行適當的變換和處理能帶來更優的效果。對於數值特征,我們主要考慮的因素是它的大小和分布。下麵介紹幾種我們用到的數值特征的處理方法。
1)分桶。比如視頻一周內被播放次數應該是一個有用的特征,因為播放次數跟視頻的熱度有很強的相關,但是如果不同視頻的播放次數跨越不同的數量級,則很難發揮想要的作用。例如 LR 模型,模型往往隻對比較大的特征值敏感。對於這種情況,通常的解決方法是進行分桶。分桶操作可以看作是對數值變量的離散化,之後通過二值化進行 one-hot 編碼。
分桶的數量和寬度可以根據業務領域的經驗來指定,也有一些常規做法。(1)等距分桶,每個桶的值域是固定的,這種方式適用於樣本分布較為均勻的情況;(2)等頻分桶,即使得每個桶裏數據一樣多,這種方式可以保證每個桶有相同的樣本數,但也會出現特征值差異非常大的樣本被放在一個桶中的情況;(3)模型分桶,使用模型找到最佳分桶,例如利用聚類的方式將特征分成多個類別,或者樹模型,這種非線模型天生具有對連續型特征切分的能力,利用特征分割點進行離散化。
分桶是離散化的常用方法,將連續特征離散化為一係列 0/1 的離散特征,離散化之後得到的稀疏向量,內積乘法運算速度更快,計算結果方便存儲。離散化之後的特征對於異常數據也具有很強的魯棒。需要注意的是:1)要使得桶內的屬取值變化對樣本標簽的影響基本在一個不大的範圍,即不能出現單個分桶的內部,樣本標簽輸出變化很大的情況;2)使每個桶內都有足夠的樣本,如果桶內樣本太少,則隨機太大,不具有統計意義上的說服力;3)每個桶內的樣本盡量分布均勻。
2)截斷。對於連續型數值特征,有時精度太高可能隻是噪聲,並不具備太多的信息,也使得特征維度急劇上升。因此可以保留一定的精度,之後當作類別特征進行處理。對於長尾的數據,可以先進行對數縮放,再進行精度截斷,之後可以當做類別變量做二值化處理,這也是我們實際應用中的做法。
3)缺失值處理。實際問題中經常會遇到特征缺失的情形,對於特征缺失,可以選擇補一個值,例如使用均值,中位數,眾數等進行替代,需要視具體情況進行選擇;也可直接忽略,即將缺失作為一種信息進行編碼輸入模型讓其進行學習,比如用戶別缺失,可以直接將未知作為一種類別進行處理;還可以使用模型預測缺失值,當然也有一些模型可以直接處理缺失值特征,比如 XGBoost。
4) 特征交叉。特征交叉可以表示特征之間的相互作用,有助於表示非線關係,增強對問題的刻畫,缺點是維度快速增長,需要更多的訓練樣本。提升模型表達能力常見的關聯方式有內積、笛卡爾積、哈達瑪積等。內積是將兩個或多個特征相乘,若向量 a=(a1,b1),向量 b=(a2,b2),則向量 aⷥ量 b=a1a2+b1b2;笛卡積是將所有元素兩兩相乘,例如,A={a,b},B={0,1,2},則 A㗂={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)} ;Hadamard 積是將對應位置的元素相乘,例如,A={a,b},B={0,1},則 A㗂={(a, 0) (b, 1) } 。下圖旨在說明笛卡爾積與 Hadamard 積在具體特征構造上的差異。
特征交叉可以通過一些特征選擇方法來選擇有效的組合特征,比如卡方檢驗、特征相關分析等;也可以根據經驗進行組合, 有些 cross 特征,雖然可能沒有直觀的解釋,但也常常會給模型帶來很大的效果提升。除了手工構造交叉特征外,有些模型可以自動進行特征的交叉組合,比如常用的 FM 和 FFM 模型等。
5)標準化與縮放。數據的標準化或者歸一化是將數據按比例縮放,將其轉化為無量綱的純數值,使得不同單位或量級的特征之間具有可比,對於利用梯度下降來訓練模型參數的算法,有助於提升模型的收斂速度。需要強調的是,不同業務的數據,其數據分布是不同的,縮放的方法一定要符合其特定的數據分布。一般會根據實際數據的情況,對常規做法或者公式進行調整,但大體思路上還是一致的,下麵介紹 3 類相對通用的做法。
0-1 標準化,是對原始數據的線變換,使結果落到[0,1]區間,其中 max 為樣本數據的最大值,min 為樣本數據的最小值。這種方法有一個缺陷就是當有新數據加入時,可能會導致 max 值和 min 值的變化,需要重新定義。如果 max 值和 min 值波動較大,容易使得標準化結果不穩定,因此在實際使用中常用經驗常量值來替代最大最小值。6)數據平滑。
常用的行為次數與曝光次數比值類的特征,由於數據的稀疏,這種計算方式得到的統計量通常具有較大的偏差,需要做平滑處理,比如廣告點擊率常用的貝葉斯平滑技術。而在我們推薦場景中,也會用到很多統計類特征、比率特征。如果直接使用,比如由於不同 item 的下發量是不同的,這會讓推薦偏向熱門的類目,使得越推越窄,無法發現用戶的個體差異,也不利於多樣的探索。我們可以把曝光量進行分段,同一個曝光量級的指標進行比較,也可以用該 item 所屬類目統計量的平均值進行平滑處理。對於離群值較多的數據,我們會使用更加健壯的處理方法,比如使用中位數而不是均值,基於分位數而不是方差。而在短視頻業務上較短或較長的視頻在播放完成度上存在天然的差距,我們按視頻本身長度離散,觀看時長做分位數處理,同時做威爾遜置信區間平滑,使得各視頻時長段播放完成度相對可比,避免出現打分因視頻長度嚴重傾斜的情況。以及短視頻 app 的投稿數量大,對於長尾的視頻和類目都是需要做平滑處理的。下麵介紹兩種較為常用的平滑技術。
貝葉斯平滑電商領域中經常需要計算或預測一些轉化率指標,比如 CTR。這些轉化率可以是模型的預測值,也可以作為模型的特征使用。以商品點擊率預測為例,CTR 的值等於點擊量除以曝光量。理想情況下,例如某個廣告點擊量是 10000 次,轉化量是 100 次,那轉化率就是 1%。但有時,例如某個廣告點擊量是 2 次,轉化量是 1 次,這樣算來轉化率為 50%。但此時這個指標在數學上是無效的。因為大數定律告訴我們,在試驗不變的條件下,重複試驗多次,隨機事件的頻率近似於它的概率。後者點擊量隻有 2 次,不滿足“重複試驗多次”的條件。如果對於一個新上線的商品,其曝光為 0,點擊量也為 0,此時這件商品的 CTR 應該設為 0 還是賦一個初始值?初始值設 0 是可以的,但不太合理。當 CTR 作為特征使用時,表示這個商品完全沒有點擊,不太符合日常推斷,通常是賦一個大於 0 的初始值。
以上兩個問題可以使用平滑技術來解決。貝葉斯平滑的思想是給 CTR 預設一個經驗初始值,再通過當前的點擊量和曝光量來修正這個初始值。如果某商品的點擊量和曝光量都是 0,那麽該商品的 CTR 就是這個經驗初始值;如果商品 A 和商品 B 的曝光量差別很大,那麽可以通過這個經驗初始值來修正。貝葉斯平滑就是確定這個經驗值的過程。貝葉斯平滑是基於貝葉斯統計推斷的,因此經驗值計算的過程依賴於數據的分布情況。對於一件商品或一條廣告,對於某次曝光,用戶要麽點擊,要麽沒點擊,這符合二項分布。因此對於點擊率類的貝葉斯平滑,都可以基於以下假設:對於某件商品或廣告,其是否被點擊是一個伯努利分布。伯努利分布的共軛分布就是 Beta 分布,也就是說,點擊率服從 Beta 分布。而所有的數據有一個自身的點擊率分布,這個分布可以用不同的 beta 分布來擬合。beta 分布可以看做是對點擊率的一個先驗知識,我們可以根據觀測來修改我們的先驗,所以貝葉斯平滑就是估計 Beta 分布中的參數 α 和 β,其中 C 和 I 是點擊次數和曝光量。實際應用時根據曆史數據得到的 α 和 β 可以幫助確定平滑參數的大致範圍,防止設置參數時偏離過大。
在現實生活中我們會接觸到很多評分係統,如豆瓣書評、YouTube 影評,在這些評分中有 1 個共同問題是每個 item 的評分人數是不同的,比如 10000 個人打了 90 分似乎比隻有 10 個人打了 90 分更能被相信該 item 是 90 分的。威爾遜區間法常用來解決此類問題,是一種基於二項分布的計算方法,綜合考慮評論數與好評率,平滑樣本量對評價的影響,我們畫像興趣分上也用到了威爾遜區間平滑。
假設 u 表示正例數(好評),n 表示實例總數(評論總數),那麽好評率 p 就等於 u/n。p 越大,表示這個 item 的好評比例越高,越應該排在前麵。但是,p 的可信,取決於有多少人,如果樣本太小,p 就不可信。我們已知 p 是二項分布中某個事件的發生概率,因此我們可以計算出 p 的置信區間。置信區間實際就是進行可信度的修正,彌補樣本量過小的影響。如果樣本多,就說明比較可信,不需要很大的修正,所以置信區間會比較窄,下限值會比較大;如果樣本少,就說明不一定可信,必須進行較大的修正,所以置信區間會比較寬,下限值會比較小。威爾遜區間就是一個很好的修正公式,在小樣本上也具有很強的魯棒。
在下麵的公式中, p 表示樣本的好評率,n 表示樣本的大小,z 表示對應某個置信水平的 z 統計量,是一個常數。一般情況下,在 95%的置信水平下,z 統計量的值為 1.96。可以看到,當 n 的值足夠大時,這個下限值會趨向 p 。如果 n 非常小,這個下限值會遠小於 p,起到了降低好評率的作用,使得該 item 的打分變低、排名下降。
7)bias 消除。微視會用到一些不同時間窗口以及實時的統計特征,比如不同類目或者不同時長區間下的完播率、平均播放時長等,考慮到冷熱門類目以及長短視頻在統計量上本身存在明顯的差異,平滑之後我們會用統計量均值進行消偏,這也相當於有一個對熱門視頻降權,對長視頻提權的作用。
8)多維度定義。有些特征可以結合多個屬或者統計量來定義,比如用戶所屬用戶群特征,用戶群可以從畫像、操作係統等維度來定義;比如用戶的活躍度特征可以從周/月登錄次數、日播放時長、日播放個數、平均完播率等維度聯合定義。
9)根據目標定製。有效的特征應該是與模型訓練目標、樣本定義緊密相關的,需要從數據中發掘與模型目標強相關的因素。比如視頻的播放時長、播放完整度是我們的直接學習目標,同時考慮到用戶在短視頻 app 上的互動類型比較多,包括點讚、評論、分享、關注等,而不同的行為對於用戶有著不同的價值,點讚表示興趣偏好,評論反映用戶的真實感受,分享利於傳播分發,關注建立了一種好友興趣關係,我們會同時利用這些用戶互動行為進行建模。與廣告點擊率預估中的 ctr 特征類似,我們可以根據不同目標正負樣本的定義,分別為每個單目標模型構造正樣本率特征。以及比如從評論文本中分析用戶對視頻的“內容、bgm、速度、清晰度”等屬的情感傾向,對評論文本進行情感分析,讓文本評論好評率來指導模型根據真實評價推薦視頻就顯得很有意義。
2.類別特征類別特征可以是標簽、屬、類型 ,比如在微視應用中,視頻的 id、作者、類別、標簽、清晰度、質量、topic、bgm 曲風與速度等視頻屬特征。同時也可以將數值特征離散化,從定量數據中獲得定數據。下麵介紹幾種我們對類別變量的處理方法。
1)獨熱編碼。獨熱編碼通常用於處理類別間不具有大小關係的特征,每個特征取值對應一維特征,能夠處理缺失值,在一定程度上也起到了擴充特征的作用。但是當類別的數量很多時,特征空間會變得非常大。在這種情況下,一般可以用 PCA 等方法進行降維。
2)散列編碼。對於有些取值特別多的類別特征,使用獨熱編碼得到的特征矩陣非常稀疏,再加上如果還有笛卡爾積等構造的組合特征,會使得特征維度爆炸式增長。特征數量多的問題自古有之,目前也已經有很多用於降維的方法。比如聚類、PCA 等都是常用的降維方法。但這類方法在特征量和樣本量很多的時候本身就計算量很大,所以對大問題也基本無能為力。特征哈希就是一種簡單的降維方法,在微視使用也較多,特征哈希法的目標就是是把原始的高維特征向量壓縮成較低維特征向量,且盡量不損失原始特征的表達能力,其優勢在於實現簡單,所需額外計算量小;降低特征維度,從而加速算法訓練與預測的時間,以及降低內存消耗;但代價是通過哈希轉換後學習到的模型變得很難檢驗,我們很難對訓練出的模型參數做出合理解釋。特征哈希法的另一個問題是它會把多個原始特征哈希到相同的位置上,出現哈希 collision 現象,但實際實驗表明這種 collision 對算法的精度影響很小。
3)打分排名編碼。比如在對用戶畫像的使用上,我們既直接使用了連續值畫像特征,同時考慮到畫像興趣分之間天然的序列關係,分別對用戶一、二級類目的 top1~top10 興趣進行 one-hot,利用打分的排名對類別特征進行編碼,強化興趣打分排名的信號,且這種方式對於異常點較為不敏感;還有比如用戶活躍度較高的前 topn 類目和不活躍度較高的前 topn 類目也可按次序排名作為離散特征。
4)異常值處理。實際應用中,我們常常關心的一個點是異常值對整個統計以及離散化的影響,對於數值變量我們可以把絕對值處理為一個相對值,作為一個次序變量進行 one-hot 編碼,或者做分箱離散化,都可以較好的減輕離群點的影響。對於分類變量,可以考慮神經網絡中常見的做法,將分類變量做特征嵌入。比如說這裏有 1 萬個不同的標簽,把它投影到 64 維或者 128 維的 vector 上麵,相當於原來一個 1 萬維的 one-hot 特征,現在隻需要 64 維或 128 維就可以進行表示,將原本十分稀疏的向量空間轉換到語義更為豐富且低維的特征 embedding 空間,且內存需求更少,精度也會更高。
5)類別特征之間交叉組合。比如用戶別、操作係統 cross 得到用戶分群特征,視頻類別與標簽之間的組合特征。在實際應用中,類別特征之間的組合方式千變萬化,這類特征一般從業務邏輯的角度出發進行構造。相比類別特征之間的笛卡爾積操作,基於分組統計的特征組合方式計算更加複雜,需要對業務數據有較好的理解。
6)類別特征和數值特征之間交叉組合。這類特征通常是在類別特征某個具體類別中計算一些統計量。例如用戶對不同類目視頻的完播率、平均播放時長,不同用戶群體的互動指標等利用數值特征對類別特征進行處理。
例如我們構造了視頻一二級類目的曝光次數 cross 快劃次數的組合特征,這個可以有很直觀的解釋,比如分析某個用戶的樣本發現類似王者榮耀_31_31 的組合,即我們的推薦係統給這個用戶曝光了 31 個王者榮耀的視頻,但是每個都快速劃過了,如果還是繼續推,這個用戶體驗將會是極度糟糕的,而這個特征會很大程度的解決這個問題,使得盡可能的給這個用戶曝光感興趣的類目。這個特征可以進一步細化為類目曝光次數 cross 一些統計量,比如完播次數、互動次數等,因為沒有快劃可能是用戶願意嚐試去看,完播可能是喜歡這個視頻內容,而互動比如說轉發或者點讚,可以看做是用戶表現出了更為強烈的興趣。
比如為了提升視頻的清晰度,我們給視頻清晰等級打標簽,但是發現直接加入清晰度屬特征後,清晰視頻分布和線上指標並沒有改善。通過對終端屏幕匹配情況,視頻相比於屏幕過度拉伸比例的分析,我們發現約有十分之一的播放體驗表現出過度拉伸,對於部分大屏幕用戶,過度拉伸比例會更高,於是我們進一步嚐試了視頻清晰度分別與用戶手機屏幕拉伸度和手機型號的笛卡爾積特征,清晰視頻播放占比有了較為明顯的提升,這對用戶體驗起到了一定的優化作用。
3.Embedding 特征1)視頻 embedding
視頻 embedding 分為基於內容的 embedding 和基於行為的 embedding,前者使用視頻的標題、封麵、圖像,音頻等視頻自身屬信息,通過 nlp、圖像視覺等技術獲得 embedding,後者是基於用戶與視頻的交互行為數據獲得,比如我們發現用戶在一個 session 中,前後點擊的視頻存在一定的相似,通常會表現出對某類型視頻的興趣偏好,可能是同個風格類別,或者是相似的話題人物等。因此我們將一段時間內用戶點擊的視頻 id 序列作為訓練數據,使用 skip-gram 模型學習視頻的 embedding 特征。由於用戶點擊行為具有上下文承接關係,因此得到的 embedding 特征有很好的聚類效果,使得在特征空間中,同類目的視頻聚集在一起,相似類目的視頻在空間中距離相近。在微視推薦係統裏,視頻 embedding 不僅可以作為排序特征,利用用戶最近點擊過視頻的平均 embedding 進行召回,也是帶來了效果提升。
我們使用 TSNE 對視頻 embedding 進行降維,從可視化結果來看,同一個類目下的視頻是聚在一起的;相似的類目在特征空間中離得較近,如“貓”和“狗”,“親子互動”和“親情”;差異較大的類目離得較遠,如“旅行 Vlog”和“貓”。這還是很符合預期的,一個用戶的主要興趣可能就集中在某幾類,比如有的用戶喜歡“貓”,那這個用戶很大可能對“貓”的視頻有大量的播放以及互動行為,那我們學習出來關於貓這個類目的視頻 embedding 就會很相似,表現出在嵌入空間中聚集在一起的情形。
但是如果隻是簡單的對視頻 id 序列學習 embedding 特征,我們是無法獲得新視頻 embedding 的。針對這個問題,我們使用了 side information 來解決視頻冷啟動問題,side information 指的是視頻的一、二級類目、視頻標簽、視頻時長、清晰度、距離發布的時間等視頻屬信息,像距離發布的時間屬對於新聞資訊類視頻,提升視頻時新有一定的幫助,尤其我們發現用戶比較偏愛新發布的視頻。我們將視頻 embedding 特征轉化為視頻屬的 embedding 特征,取一段時間內同屬視頻的平均 embedding 作為這個屬的 embedding 特征。這樣當有新的視頻進入到推薦庫時,可以計算出新視頻的視頻屬 embedding。這樣做的好處是在同一個語義空間做運算,排序模型不需要再重新學習 embedding 的空間分布。
基於 side information 獲得的視頻 embedding 區分能力還是受到一定限製的,隻要視頻屬相同,不同視頻 embedding 是完全一樣的,而且如果增加了新的類目標簽或者其他屬分類也是沒有辦法處理的。針對以上情況,實際使用中我們采用增量式 skip-gram 模型學習視頻的 embedding,使用推薦庫最新資源線上實時訓練,將新入庫的視頻加入到模型中做增量式學習。Incremental skip-gram 模型與傳統 skip-gram 模型的不同之處在於 embedding 空間分布是動態更新的。
2)user embedding
想讓 embedding 表達什麽,主要在於選擇哪一種方式構建語料,不同的用戶行為序列,表達的興趣也不同,比如快速劃過行為、完播行為,點讚轉發行為等表達的興趣以及程度也都是不同的。因此視頻 embedding 向量最終的作用,是不同 item 在用戶興趣空間中的位置表達。目前使用較多的主要是基於 word2vec 以及相應衍生的 embedding 技術和基於圖神經網絡的 embedding 技術,像我們在隱式畫像上就使用了基於異構圖的 user embedding。
我們也可以把推薦問題建模成一個大規模的多分類問題,使用 softmax loss 學習一個 DNN 模型,即在某一時刻某一上下文信息下為用戶在視頻推薦庫中精準地預測出下一次播放視頻的類別,最後把訓練好的 DNN 模型最後一層隱層輸出作為 user embedding。深度學習模型雖然能夠減少一部分特征工程的工作,但有些原始數據是不能直接輸入到 DNN 中,與 CV、NLP 不同的是,推薦係統對特征工程格外依賴,好的特征能夠起到非常關鍵的作用。我們的輸入融合多種信息,主要包括人口統計學信息,播放曆史,搜索曆史,上下文信息,興趣畫像等,同時使用全場景數據而不是隻使用用戶播放數據。同時考慮了一些泛化能力比較強的數值和時間特征,比如完播該類目的視頻數,最近一次播放該類目視頻距離現在的時間等刻畫用戶與視頻類別關係的特征。除了這些偏正向的特征,用戶對於一些類目曝光但不點擊快速劃過等負反饋的信號同樣非常重要。
簡單一點的做法也可以將一段時間內用戶點擊過的視頻的平均 embedding 作為該用戶的 embedding 特征,當然這裏的“平均”可以是簡單的算術平均,也可以是根據視頻的熱度和時間屬等進行加權平均或者嚐試用 RNN 替換掉平均操作。同時將時間跨度取長一點,可以表達用戶的長期興趣;取短一點,可以用於刻畫用戶的短期興趣,當然用戶覆蓋率也會隨之降低。比如用戶最近一周內主要點擊觀看的都是關於“貓”的視頻,那該用戶 embedding 特征,就會跟“貓”的向量很相近。我們也嚐試將用戶點讚或者分享轉發過的視頻序列作為訓練數據,為用戶互動過的視頻提權。這裏需要注意的是,有時單個用戶行為序列太稀疏了,無法直接訓練,一般可以先對用戶做聚類再訓練。
3)作者 embedding
可以取作者近一個月內發布視頻的平均 embedding,作為該作者的 embedding 特征。這樣做的出發點是,如果兩個作者發布的視頻相似,那麽這兩個作者的 embedding 向量也應該是相近的。假設此時某個用戶喜歡作者 A,那麽我們可以試著把與作者 A 相似的作者 B 發布的視頻推薦給該用戶。
4.context 特征context 特征通常是客戶端帶的信息,在用戶授權的前提下可以直接獲取,比如請求時間、用戶手機品牌、手機型號、操作係統、當前網絡狀態(3g/4g/wifi)、用戶渠道等實時屬特征以及之間的 cross 特征。
5.session 特征session 特征一般是基於用戶最近的行為流水,常見的 session 劃分方法有以下幾種:
固定行為數窗口,例如最近 100 條行為中分視頻類別的完播個數、快速劃過個數;固定時間窗口,例如最近 3 天裏有過正向行為的 item id 或者一些統計量;連續行為窗口,例如用戶 1 次打開 app 到關閉 app 期間的播放互動行為。如上幾種 session 定義的方法沒有優劣之分,一般會結合具體業務場景做混合定義。在獲取到用戶的 session 數據後,可以直接將 session 裏對應的 item id 序列作為特征,或者是 session 內的類別統計數據,也可以將預訓練好的 item embedding 構造成 session 特征。
二、特征選擇特征選擇是指選擇相關特征子集的過程,好的特征選擇能夠提升模型的能,更能幫助我們理解數據的特點、底層結構,這對進一步改善模型、算法都有著重要作用。特征選擇主要有以下兩個目的:
簡化模型,節省存儲和計算開銷;減少特征數量、降維,改善通用、降低過擬合的風險。下麵介紹幾種特征選擇的常用方法。
1.過濾式(Filtering)過濾式特征選擇獨立於學習算法,不需要依賴任何模型,直接由數據集求得,評估依賴於數據集本身。一般主要考慮特征變量和目標變量之間的相關以及特征變量之間的相互關係,一般認為相關度大的特征或者特征子集會對後續學習算法帶來較高的準確率。這類方法在預處理時也使用較多,優點是計算效率高、複雜度低,獨立於算法,但也可能選出冗餘的特征。
覆蓋率。首先計算每個特征的覆蓋率,覆蓋率很小的特征對模型的預測效果作用不大,可以剔除。方差分析。分析特征的數據分布,比如說某個特征方差接近於 0,說明不同樣本在這個特征上基本沒有什麽差異,可以說這個特征是對於樣本區分基本沒有太大作用的無關變量。因此通常可以選擇方差大於某個閾值的特征,去掉取值變化小的特征。Pearson 相關係數。皮爾森相關係數是一種簡單的,能幫助理解特征和目標變量之間關係的方法,用於衡量變量之間的線相關,取值區間為[-1,1],-1 表示完全的負相關,+1 表示完全的正相關,0 表示沒有線相關。通過分析特征與目標之間的相關,優先選擇與目標相關高的特征。假設檢驗。假設特征變量和目標變量之間相互獨立,選擇適當檢驗方法計算統計量,然後根據統計量做出統計推斷。例如對於特征變量為類別變量而目標變量為連續數值變量的情況,可以使用方差分析,對於特征變量和目標變量都為連續數值變量的情況,可以使用皮爾森卡方檢驗。卡方統計量取值越大,特征相關越高。互信息。在概率論和信息論中,互信息用來度量兩個變量之間的相關。互信息越大則表明兩個變量相關越高,互信息為 0 時,兩個變量相互獨立。2.封裝式(Wrapping)與過濾方法不同,封裝式特征選擇直接使用機器學習算法評估特征子集的效果,直接麵向算法優化,效果好,缺點是需要對每一組特征子集訓練一個模型,計算複雜度高。常用的特征子集搜索算法有:完全搜索;基於貪心的啟發式搜索(前向/後向搜索等);隨機搜索(模擬退火、遺傳算法等)。
3.嵌入式(Embedding)過濾式方法與模型算法相互獨立,不需要交叉驗證,計算效率比較高,但是沒有考慮具體模型算法的特點。封裝式方法使用模型來評估特征子集的質量,需要多次訓練模型,計算效率很低。嵌入式方法將特征選擇本身作為組成部分嵌入到學習算法裏,速度快,效果好,不足是與算法綁定,需要知識調整結構和參數配置。
基於正則化使用帶正則懲罰項的模型,比如 L1 正則化,通過對回歸係數添加 L1 懲罰項來防止過擬合,因產生稀疏解,天然具有特征選擇的作用。基於樹模型基於決策樹的算法,如隨機森林、GBDT,xgboost,在每次選擇分類節點時,都會選擇最佳分類特征來進行切分,重要的特征更有可能出現在分裂較早的節點,作為分裂節點的次數也越多。因此,可以基於樹模型中特征出現次數等指標對特征重要進行排序。三、特征重要分析特征重要分析是用來判斷哪些變量對模型預測的影響力最大,可以幫助我們理解數據,指導模型參數的設置以及特征的選擇,使模型具有良好的可解釋。
單特征 auc。對每個單特征訓練模型,計算每個特征的 auc 或 gauc,並對其進行排名,精度越高表示該特征重要程度越高。這個方法需要訓練多個模型,效率較低。實際應用中,可以有選擇的對某些特征子集進行實驗。(1) 特征值置為 0。在預測時可以依次將某個特征取值置為 0,即不考慮該特征對模型的影響,計算模型 auc,精度降低越多,表示這個特征對於模型預測越重要;
(2)特征取隨機值。將某個特征取隨機值,可以使用均勻或者高斯分布隨機抽取值,然後計算模型的準確率。對於某個特征,如果用一個隨機值替代後表現比之前差很多,說明該特征很重要;
(3)特征值隨機打亂。隨機打亂驗證集中某一特征變量的值,使用訓好的模型進行預測,精度損失越多,說明該特征對於預測結果的影響越大,可以按照精度損失的多少對特征重要進行排序。這個方法比隨機取值更科學,保證了與原始特征分布是一致的。舉個例子說明一下,我們有一個已經訓練好的模型以及評估該模型表現的評價指標(如 RMSE)。假設這是一個短視頻播放時長的預測模型,本來在驗證集上的 RMSE 是 200,然後我們把某一個變量的值(如別)全部打亂重新做預測,比如說此時 RMSE 變成了 500,那麽別這個變量的重要就可以記為 300,即讓 loss 增加了 300。
在實際的工程應用中,具體采用什麽特征處理方式不僅依賴於業務和數據本身,還依賴於所選取的模型,因此首先要理解數據和業務邏輯以及模型的特點,才能更好地進行特征工程。通常可以考慮對樣本做歸一化、離散化、平滑處理以及特征變換與特征交叉,我們也會使用一些跨場景的特征遷移方法,複用現有知識域數據,比如手 Q 場景下的特征數據,具體方法的選擇依賴於數據、資源等實際因素,複雜的模型雖然可以減輕我們在特征工程上的工作,但這並不代表我們不需要特征工程了。我們隻是把更多的精力放在了模型難以直接從原始數據中學習到,需要借助對業務的理解與外部知識的特征構造上。
特征工程不僅與模型算法相關,與實際問題更是強相關的。針對不同場景,特征工程所用的方法可能相差較大,所以很難總結出適用於不同業務的一套比較通用的方法。盡管如此,但仍然有很多特征工程的方法和技巧在不同問題中都適用。本文把微視排序中一些特征工程的實踐經驗跟各位讀者分享,希望對大家能有所幫助。
本文到此結束,希望對大家有所幫助呢。