淺談微視推薦系統中的特徵工程

騰訊技術工程發表於2019-12-11

本文作者:hannahguo,騰訊 PCG 推薦演算法工程師

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

引言

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

一、特徵提取

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

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

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

淺談微視推薦系統中的特徵工程

1.數值特徵

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

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

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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559354/viewspace-2667342/,如需轉載,請註明出處,否則將追究法律責任。

相關文章