萬字長文淺談微視推薦系統中的特徵工程

導語 |在推薦系統中,特徵工程扮演着重要的角色。俗話說數據和特徵決定了機器學習算法的上限,而模型、算法的選擇和優化只是在不斷逼近這個上限。特徵工程的前提是收集足夠多的數據,使用數據學習知識,從大量的原始數據中提取關鍵信息並表示爲模型所需要的形式。本文主要說明微視,這種富媒體形態的短視頻平臺,是如何通過視頻內容特徵以及用戶屬性和行爲數據,來精準預測用戶對短視頻的喜好的。

引言

本文主要是跟各位讀者分享特徵工程領域的一些通用方法和技巧,以及微視在特徵工程上的相關實踐經驗。微視作爲一個短視頻平臺,存在其獨有的業務特點,這也給特徵構造帶來了一定的難度。比如熱目類目在播放時長、互動率等指標上表現出天然的優勢,長視頻相比於時長較短的視頻在播放完成度、完播率等指標上存在明顯的劣勢,如何消除這些bias的影響都是特徵構造時需要特別注意的地方,而對於我們線上的多目標排序模型來說,不同單目標對應的最優特徵組合也不盡相同,這些不僅需要較強的專業領域知識,更重要的是對自身業務場景的深刻認知以及大量線上實驗的探索嘗試與驗證。

一、特徵提取

微視作爲一個短視頻平臺,存在其獨有的業務特點,這也給特徵構造帶來了一定的難度。比如熱目類目在播放時長、互動率等指標上表現出天然的優勢,長視頻相比於時長較短的視頻在播放完成度、完播率等指標上存在明顯的劣勢,如何消除這些bias的影響都是特徵構造時需要特別注意的地方,而對於我們線上的多目標排序模型來說,不同單目標對應的最優特徵組合也不盡相同,這些不僅需要較強的專業領域知識,更重要的是對自身業務場景的深刻認知以及大量線上實驗的探索嘗試與驗證。

特徵工程就是將原始數據空間映射到新的特徵向量空間,使得在新的特徵空間中,模型能夠更好地學習數據中的規律。因此,特徵提取就是對原始數據進行處理與變換的過程。常見的原始數據類型有數值型、離散型,還有文本、圖像、視頻等。如果將這些數據作爲一個整體來看待的話,把用戶、視頻、作者看作節點,用戶與視頻、作者的交互看作邊構建出的複雜網絡也是我們的原始數據。

事實上,如果特徵工程做的足夠好,即使是簡單的模型,也能表現出非常好的效果。而複雜的模型可以在一定程度上減少特徵工程的工作量。例如,對於線性模型,我們需要將類別變量進行獨熱編碼等處理,但對於複雜一些的模型如樹模型,則可以直接處理類別變量。像推薦系統中常用的LR模型,需要手工構造組合特徵,而FM模型可以解決特徵組合的問題,直接輸入原始特徵。而更復雜的DNN模型,可以自動學習特徵的表示。

在微視場景下,視頻的播放時長、播放完整度、點贊、轉發、分享、評論等多種互動行爲都是推薦模型的訓練目標,根據模型所要學習的目標和業務邏輯,我們需要考慮數據中有哪些可能相關的信息,從現有數據中挖掘出對模型預測有用的特徵。比如在微視排序中,用戶的興趣,在App上的播放、互動等行爲以及視頻的類別、標籤、熱度等都是強相關的因素。在確定了哪些因素可能與預測目標相關後,我們需要將此信息抽取成特徵,下面會對不同特徵的處理方式做具體介紹。

1.數值特徵

數值類型的數據具有實際統計意義,例如用戶對不同類目下視頻的興趣分,或者是計數,例如一個視頻被播放了多少次、被點贊、轉發以及評論了多少次等。雖然一些機器學習模型可以直接輸入數值類型的數據,但是通常情況下,對數值型數據進行適當的變換和處理能帶來更優的效果。對於數值特徵,我們主要考慮的因素是它的大小和分佈。下面介紹幾種我們用到的數值特徵的處理方法。

1)分桶。比如視頻一週內被播放次數應該是一個有用的特徵,因爲播放次數跟視頻的熱度有很強的相關性,但是如果不同視頻的播放次數跨越不同的數量級,則很難發揮想要的作用。例如LR模型,模型往往只對比較大的特徵值敏感。對於這種情況,通常的解決方法是進行分桶。分桶操作可以看作是對數值變量的離散化,之後通過二值化進行 one-hot 編碼。

分桶的數量和寬度可以根據業務領域的經驗來指定,也有一些常規做法。(1)等距分桶,每個桶的值域是固定的,這種方式適用於樣本分佈較爲均勻的情況;(2)等頻分桶,即使得每個桶裏數據一樣多,這種方式可以保證每個桶有相同的樣本數,但也會出現特徵值差異非常大的樣本被放在一個桶中的情況;(3)模型分桶,使用模型找到最佳分桶,例如利用聚類的方式將特徵分成多個類別,或者樹模型,這種非線性模型天生具有對連續型特徵切分的能力,利用特徵分割點進行離散化。

分桶是離散化的常用方法,將連續特徵離散化爲一系列 0/1 的離散特徵,離散化之後得到的稀疏向量,內積乘法運算速度更快,計算結果方便存儲。離散化之後的特徵對於異常數據也具有很強的魯棒性。需要注意的是:

  • 要使得桶內的屬性取值變化對樣本標籤的影響基本在一個不大的範圍,即不能出現單個分桶的內部,樣本標籤輸出變化很大的情況;
  • 使每個桶內都有足夠的樣本,如果桶內樣本太少,則隨機性太大,不具有統計意義上的說服力;
  • 每個桶內的樣本儘量分佈均勻。

2)截斷。對於連續型數值特徵,有時精度太高可能只是噪聲,並不具備太多的信息,也使得特徵維度急劇上升。因此可以保留一定的精度,之後當作類別特徵進行處理。對於長尾的數據,可以先進行對數縮放,再進行精度截斷,之後可以當做類別變量做二值化處理,這也是我們實際應用中的做法。

3)缺失值處理。實際問題中經常會遇到特徵缺失的情形,對於特徵缺失,可以選擇補一個值,例如使用均值,中位數,衆數等進行替代,需要視具體情況進行選擇;也可直接忽略,即將缺失作爲一種信息進行編碼輸入模型讓其進行學習,比如用戶性別缺失,可以直接將未知作爲一種類別進行處理;還可以使用模型預測缺失值,當然也有一些模型可以直接處理缺失值特徵,比如XGBoost。

4)特徵交叉。特徵交叉可以表示特徵之間的相互作用,有助於表示非線性關係,增強對問題的刻畫,缺點是維度快速增長,需要更多的訓練樣本。提升模型表達能力常見的關聯方式有內積、笛卡爾積、哈達瑪積等。內積是將兩個或多個特徵相乘,若向量a=(a1,b1),向量b=(a2,b2),則向量a·向量b=a1a2+b1b2;笛卡積是將所有元素兩兩相乘,例如,A={a,b},B={0,1,2},則 A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)} ;Hadamard積是將對應位置的元素相乘,例如,A={a,b},B={0,1},則 A×B={(a, 0) (b, 1) } 。下圖旨在說明笛卡爾積與Hadamard積在具體特徵構造上的差異。

特徵交叉可以通過一些特徵選擇方法來選擇有效的組合特徵,比如卡方檢驗、特徵相關性分析等;也可以根據經驗進行組合, 有些cross特徵,雖然可能沒有直觀的解釋,但也常常會給模型帶來很大的效果提升。除了手工構造交叉特徵外,有些模型可以自動進行特徵的交叉組合,比如常用的FM和FFM模型等。

5)標準化與縮放。數據的標準化或者歸一化是將數據按比例縮放,將其轉化爲無量綱的純數值,使得不同單位或量級的特徵之間具有可比性,對於利用梯度下降來訓練模型參數的算法,有助於提升模型的收斂速度。需要強調的是,不同業務的數據,其數據分佈是不同的,縮放的方法一定要符合其特定的數據分佈。一般會根據實際數據的情況,對常規做法或者公式進行調整,但大體思路上還是一致的,下面介紹3類相對通用的做法。

  • 0-1標準化,是對原始數據的線性變換,使結果落到[0,1]區間,其中max爲樣本數據的最大值,min爲樣本數據的最小值。

    這種方法有一個缺陷就是當有新數據加入時,可能會導致max值和min值的變化,需要重新定義。

    如果max值和min值波動較大,容易使得標準化結果不穩定,因此在實際使用中常用經驗常量值來替代最大最小值。

  • z-score 標準化,經過處理的數據符合標準正態分佈,即均值爲0,標準差爲1,其中μ爲所有樣本數據的均值,σ爲所有樣本數據的標準差。

    這種標準化方式要求原始數據的分佈可以近似爲高斯分佈,否則效果會變得很糟糕。

  • 非線性標準化,這種方法一般使用在數值差異較大的場景,通過一些數學函數,比如對數、指數、正切等,將原始值做映射變換。

    實際使用中,需要根據不同業務的數據分佈來選擇,比如對數縮放,對數縮放對於處理長尾分佈且取值爲正數的數值變量非常有效,可以壓縮數據範圍,將長尾變爲短尾,像log2和log10轉換在微視中也都有使用,是一種方差穩定的變換。

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場景下的特徵數據,具體方法的選擇依賴於數據、資源等實際因素,複雜的模型雖然可以減輕我們在特徵工程上的工作,但這並不代表我們不需要特徵工程了。我們只是把更多的精力放在了模型難以直接從原始數據中學習到,需要藉助對業務的理解與外部知識的特徵構造上。

特徵工程不僅與模型算法相關,與實際問題更是強相關的。針對不同場景,特徵工程所用的方法可能相差較大,所以很難總結出適用於不同業務的一套比較通用的方法。儘管如此,但仍然有很多特徵工程的方法和技巧在不同問題中都適用。本文把微視排序中一些特徵工程的實踐經驗跟各位讀者分享,希望對大家能有所幫助。

本文轉載自公衆號雲加社區(ID:QcloudCommunity)。

原文鏈接

https://mp.weixin.qq.com/s/NqVP0ksfLiRLSGkuWxiz5A

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章