日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

推荐系统:数据与特征工程

發布時間:2023/12/20 windows 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 推荐系统:数据与特征工程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

推薦系統是機器學習的一個子領域,并且是一個偏工程化、在工業界有極大商業價值的子方向。

目前絕大多數提供 toC 類產品或者服務的互聯網企業,會通過推薦系統為用戶提供精準的個性化服務。

推薦系統通過推薦算法來為用戶生成個性化推薦結果,而推薦算法依賴數據輸入來構建算法模型。

本章我們來講解推薦系統所依賴的數據,怎么處理這些數據,讓數據轉換成推薦算法可以直接使用的形式

處理好了數據,最終我們就可以構建高效、精準的推薦模型了。

  • 這些處理好的適合機器學習算法使用的數據即是特征
  • 從原始數據獲得特征的過程就是特征工程

具體來說,我們會從:

  • 推薦算法建模的一般流程、
  • 推薦系統依賴的數據源介紹、
  • 數據處理與特征工程簡介、
  • 常用推薦算法之數據與特征工程、
  • 推薦系統數據與特征工程未來趨勢

等 5 個部分來介紹相關知識點,期望本章的講解能夠讓讀者更加深入地理解推薦系統依賴的數據源的特點、數據預處理方法以及基于這些數據之上的特征工程方法與技巧。

一、推薦算法建模的一般流程

在介紹推薦系統數據源與特征工程之前,我們先介紹一下推薦算法建模的一般流程,這樣我們就可以更好地理解數據與特征工程在整個推薦系統業務流程中的地位和作用了。

推薦系統是機器學習的一個子領域,因此推薦系統處理問題的方式遵循機器學習的一般思路。我們可以將機器學習過程看成一個打造“生產某種產品”的機器的過程,我們根據過往的生產經驗來制造一款生產該產品的機器,過往的生產經驗就是我們的訓練集,構建好的機器就是我們的機器學習模型。

我們將原材料加工好,按照某種方式“灌入”這個機器,這個機器的最終輸出就是我們需要的預測結果,構建的機器是否完善、能否生產出誤差在可接受范圍內的商品,代表了我們模型的精準度。

根據上面的簡單類比,推薦算法為用戶生成個性化推薦的一般流程如下面圖 1。

圖 1:推薦算法建模的一般流程

我們通過收集不同來源的數據匯聚成推薦算法需要的原始數據,通過特征工程對原始數據處理生成最終特征,再通過選擇合適的推薦算法對特征進行訓練獲得最終的推薦模型,在預測/推斷階段,我們根據某個用戶的特征,將特征灌入模型獲得該用戶的推薦結果。

從上圖可以看出,數據和特征工程處在整個推薦系統業務流的起點,因此是非常重要的。

數據是原材料,原材料(推薦數據源)是否齊備、質量是否優良直接決定是否可以生產出好的產品,而對原材料的處理加工(特征工程)決定了我們是否可以高效、快速、高質量地生產出好的產品。

下面我們會對推薦系統的數據及特征工程這兩個部分詳細講解,模型構建及預測不在我們本章的討論范圍。

二、推薦系統依賴的數據源介紹

推薦系統根據用戶在產品(APP、網站等)上的操作行為,預測用戶的興趣偏好,最終給用戶做個性化推薦。

在整個推薦過程中,涉及到可能產生數據的地方有?4 個部分:

  • 用戶自身、
  • 標的物、
  • 用戶的操作行為、
  • 用戶所在的場景(上下文)

因此推薦算法根據這 4 個觸點,可以依賴和利用 4 類數據。

根據承載數據的載體,數據可以分為?4 類:

  • 數值類數據、
  • 文本類數據、
  • 圖片類數據、
  • 音視頻數據。

根據推薦系統依賴的數據的組織形式(數據格式),又可以分為3 大類:

  • 結構化數據、
  • 半結構化數據、
  • 非結構化數據。

下面我們分別按照這 3 種分類方式來詳細描述推薦系統所依賴的數據及這些數據的特點。

1、根據數據來源來劃分

根據數據來源的觸點來分,推薦系統依賴的數據分為用戶行為數據、用戶屬性數據、標的物(物品)屬性數據、上下文數據 4 大類,見下面圖 2,下面我們分別介紹各類數據及其特點。

圖 2:推薦系統依賴的 4 類數據源

1.1 (用戶)行為數據

就是用戶在產品上的各種操作,比如瀏覽、點擊、播放、購買、搜索、收藏、點贊、轉發、加購物車、甚至滑動、暫定、在某個位置的停留時長、快進等等一切操作行為。

用戶在產品上的操作行為為我們了解用戶提供了“蛛絲馬跡”,用戶的操作行為也是用戶最真實意圖的反饋,這些行為反應了用戶的興趣狀態,通過分析用戶行為,我們可以獲得對用戶興趣偏好的深刻洞察。

根據用戶的行為是否直接表明用戶對標的物的興趣偏好,用戶行為一般分為顯式行為和隱式行為。

  • 顯式行為是直接表明用戶興趣的行為,比如點贊、評分等。
  • 隱式行為雖不是直接表示用戶的興趣,但是該行為可以間接反饋用戶的興趣變化,只要不是用戶直接評分、點贊的操作行為都算隱式反饋,包括瀏覽、點擊、播放、收藏、評論、轉發等等。

用戶行為數據是最重要、最容易收集、數據量最多的一類數據,在構建推薦系統算法中起著舉足輕重的作用。這類數據往往種類繁多,需要我們進行收集、預處理才能最終被推薦算法使用。

1.2 用戶屬性數據

用戶屬性數據也叫做用戶人口統計學數據,就是用戶自身所帶的屬性,比如年齡、性別、地域、學歷、家庭組成、職業等等。這些數據一般是穩定不變(如性別)或者緩慢變化(如年齡)的。

人類是一個社會化物種,用戶的不同屬性決定了用戶處在不同的階層或者生活圈層。不同的階層或生活圈又有不同的行為特征、生活方式、偏好特點,在同一圈層具備一定的相似性,這種相似性為我們做個性化推薦提供了特有的方法和思路。

1.3 標的物屬性數據

推薦系統中最重要的一個“參與方”是待推薦的標的物(物品),標的物自身是包含很多特征和屬性的。

  • 對于視頻來說,出品方、導演、演職員、主演、國別、年代、語言、是否獲獎、劇情、海報圖等等都是視頻的元數據。
  • 對于電商商品來說,品類、用途、價格、產地、品牌等等也是非常重要的屬性。

通過用戶對標的物的操作行為,我們可以將標的物所具備的特征按照某種權重賦予用戶,這些特征就構建了用戶的興趣偏好,相當于給用戶打上了相關的標簽(比如喜歡看“恐怖片”的人)。

從這些興趣偏好出發,我們又可以給用戶進行個性化推薦。

1.4 上下文數據

上下文數據是用戶在對標的物進行操作時所處的環境特征及狀態的總稱,比如用戶所在地理位置、當時的時間、當時的天氣、用戶當時的心情、用戶所在產品的路徑等等。

這些上下文數據對用戶的決策是非常重要的、甚至是起決定作用的。

比如,美團餓了么這類基于地理位置服務的產品,給用戶推薦餐廳是一定要是在用戶所在位置或者用戶指定位置附近的。

恰當地使用上下文數據,將該類數據整合到推薦算法中,可以更加精準、場景化地為用戶進行個性化推薦。

2、根據數據載體來劃分

隨著互聯網的發展,網絡上傳輸、交換、展示的數據種類越來越多樣化,從最初的數字、文本到圖片再到現在主流的音視頻,基于這些數據載體的不同,推薦系統建模依賴的數據也可以分為 4 類,見下面圖 3。

圖 3:推薦系統依賴的 4 種數據載體

2.1 數值類數據

所有推薦系統用到的、可以用數值來表示的數據都屬于這一類,比如用戶年齡、用戶評分、物品價格、播放次數等等。

數值數據也是計算機最容易處理的一類數據,其他類型的數據要想很好地被計算機處理,一般也會利用各種方法轉化為數值數據。

2.2 文本數據

文本數據是互聯網中數量最多的、最普遍的一類數據,標的物的類別、標的物的描述信息、甚至整個標的物可能都是文本(如新聞等)、用戶地域、用戶性別等等都是用文本來描述的。

如果某個特征可以取的所有值是有限的(比如性別只有男女兩種),也可以非常容易地轉化為數值類數據。

處理文本類數據需要借助自然語言處理相關技術。

2.3 圖片數據

隨著智能手機攝像頭技術的成熟、媒體及投資人的推波助瀾,圖像類相關應用爆發增長(如各種美顏 APP)。圖片數據是互聯網上的主流數據類型,商品的海報圖、電影的縮略圖等等都以圖片的形式存在。

對于圖片類數據的處理,目前的深度學習技術相對成熟,包括圖片的分類、圖片的特征提取等等,精度已經到達了產品可用的成熟度,在某些方面(如圖片分類)甚至超越了人類專家的水平。

2.4 音視頻數據

在互聯網視頻出現以來就有了音視頻數據,直到現在音視頻數據才應用到更多的領域和產品中,音視頻數據火爆背景跟圖片類似,目前的抖音、快手等短視頻應用非常受歡迎,游戲直播、電商導購直播等應用也是視頻類數據的產出方。

音樂的數字化,各類音頻學習軟件(如樊登讀書、蜻蜓 FM 等)也促進了音頻數據的增長。

音視頻數據的價值密度小,占用空間多,處理相對復雜,在深度學習時代,這些復雜數據的處理也變得可行了。音頻數據可以通過語音識別轉換為文字,最終歸結為文本數據的處理,視頻數據可以通過抽幀轉換為圖片數據來處理。

圖片、音視頻數據屬于富媒體數據,隨著傳感器種類的豐富、精度的增強(比如拍照能力越來越強)、相關網絡應用的繁榮(如抖音、快手等都是基于富媒體數據的應用),網絡上出現了越來越多的富媒體數據,并且占據了互聯網數據整體的絕大多數,因此是非常重要的一類數據。

3、根據數據組織形式來劃分

按照數據組織形式不同,不同類型的數據處理起來難易程度是不一樣的。

人類是比較善于理解和處理二維表格類數據(結構化數據)的,這就是為什么關系型數據庫(主要是處理表格類數據)在計算機發展史上具有舉足輕重地位的原因。

隨著互聯網的發展,數據形式越發豐富,不是所有數據都是結構化的,有些數據是半結構化甚至是無結構化的(具體見下面圖 4),下面分別對這 3 類數據加以說明。

圖 4:推薦系統依賴的三種數據組織形式

3.1 結構化數據

所謂結構化數據就是可以用關系型數據庫中的一張表來存儲的數據,每一列代表一個屬性/特征,每一行就是一個數據樣本。

一般用戶屬性數據和物品屬性數據都可以用一張表來存儲,用戶和物品的每一個屬性都是表的一個字段,因此是結構化數據。下表就是視頻的結構化表示。

表 1:視頻屬性數據的結構化表示

結構化數據是一類具備 Schema 的數據,也就是每一列數據的類型、值的長度或者范圍是確定的,一般可以用關系型數據,如 MySQL、ProgreSQL 等來存儲,這類數據可以用非常成熟的 SQL 語言來進行查詢處理。

3.2 半結構數據

半結構化數據雖不符合關系型數據庫這么嚴格的結構,但數據組織是有一定規律或者規范的,利用特殊的標記或者規則來分隔語義元素以及對記錄和字段進行分層。因此,也被稱為自描述的數據結構。常見的 XML 或者 Json 類數據就屬于這一類。

對于用戶在產品上的操作行為,我們一般按照一定的規則來對相關字段進行記錄(比如可以用 Json 格式來記錄日志,或者按照規定的分割字符來分割不同字段,再拼接起來記錄日志),這類數據也屬于半結構化數據,一些半結構化數據是可以通過一定的預處理轉化為結構化數據的

3.3 非結構化數據

非結構化數據,是數據結構不規則或不完整,沒有預定義的數據模型,不方便用數據庫二維邏輯表來表示的數據,也沒有半結構化數據這種有一定的規律或者規范。包括文本、圖片、HTML、各類數據報表、圖像和音視頻信息等等。非結構化數據由于沒有固定的數據范式,也是最難處理的一類數據。

文本類標的物(如新聞資訊)、短視頻、音頻、商品等都包含大量的非結構化數據。

即使是具備非結構化數據的標的物,我們可以從幾個已知的屬性來構建對標的物的描述,從而形成對標的物結構化的描述,如上面表 1 中就是針對視頻從多個維度來構建結構化數據。

隨著移動互聯網、物聯網的發展,各類傳感器日益豐富,功能多樣,人際交往也更加密切,人們更愿意表達自我,人類的社交和生產活動產生了非常多的非結構化數據,非結構化數據量成幾何級數增長。怎么很好地處理非結構化數據,將非結構化數據中包含的豐富信息挖掘出來,并應于算法模型中,是可以大大提升推薦算法的精準度、轉化率等用戶體驗、商業化指標的。隨著 NLP、圖像處理、深度學習等 AI 技術的發展與成熟,我們現在有更多的工具和方法來處理非結構化數據了。推薦系統也享受到了這一波技術紅利,在這些新技術的加持下,推薦效果越來越好。

上面從 3 個不同的分類角度來介紹了推薦系統的數據源,那么我們怎么利用這些數據源,將這些數據處理為推薦算法可以使用的原材料呢?

這就需要數據處理特征工程相關知識,我們在下一節進行詳細介紹。

三、數據處理與特征工程簡介

在本節我們來詳細介紹推薦系統依賴的數據是怎么產生的、我們怎么轉運、怎么存儲這些數據,最終通過 ETL 和特征工程將數據加工成推薦算法可以直接使用的原材料。

我們分數據生成、數據預處理、特征工程 3 個部分來介紹。

1、數據生成

下面我們根據行為數據、用戶屬性數據、標的物屬性數據、上下文數據 4 類數據來分別說明數據生成過程。

1.1 行為數據生成

對于用戶行為數據,一般稱為用戶行為日志,我們事先定義收集的日志格式,當用戶在產品上進行各種操作時,客戶端(APP 或者網頁)按照日志規范記錄用戶行為(俗稱日志埋點),并將用戶行為上報到云端數據中心,這即獲得了用戶行為數據。

用戶在什么時間點、進行什么操作需要進行日志埋點取決于具體的業務場景、交互形式以及具體的數據分析需求。

一般來說,用戶觸點多的路徑、對用戶體驗有比較大影響的功能點、涉及到商業價值的功能點是需要進行日志埋點的,因為這些數據對產品的迭代與發展非常關鍵,是非常有價值的數據。

上傳更多的數據需要定義更多的日志規范并進行埋點,還需要進行收集、處理、存儲,因此會占用更多的人力、算力、存儲資源,但是可以讓我們從更多的維度進行分析,所以是有一定價值的,《大數據時代》的作者維克托?邁爾-舍恩伯格博士認為數據收集越多越好,我們在實際工作中也是按照這個思路進行收集的,盡量收集用戶的所有行為,但是發現很多日志事后是沒有時間、精力去分析的,甚至沒有業務方有這方面的分析需求,因此,個人建議盡量收集前面提到的核心數據,其他數據在真的確定需要的時候再去埋點分析

行為數據的上傳、收集需要考慮很多現實中的特殊問題,需要保證數據上傳的有效性、正確性、不重復性,對于在網絡不穩定或者出現軟件故障時,需要進行數據重試與補傳。

同時數據上傳需要有很多策略,比如按照固定條數上傳、固定一段時間上傳、每產生一條數據就立即上傳等,也需要對數據進行加密,避免網絡惡意攻擊或者臟數據的引入。

1.2 用戶屬性數據生成

一般用戶地域是可以借助用戶的 IP 地址輕易獲取得到的,而其他用戶屬性是很難收集到的,特別是現在數據安全性越來越受到法律的保護,個人風險意識也逐漸增強,收集用戶信息是更加困難的事情。安全有效地收集用戶屬性數據一般可以有如下方法:

  • 產品在用戶剛注冊時,提供用戶輸入相關信息的界面,讓用戶主動輸入相關信息,但是一般用戶是比較懶的,所以輸入的信息一定是比例非常少的,過多增加這種讓用戶操作的步驟,在增加用戶使用成本的同時,也增加了用戶放棄你的產品的概率;
  • 通過各種運營活動,讓用戶填寫相關信息參與活動,從而獲得相關信息;
  • 通過用戶在產品上的行為或者聊天記錄,根據機器學習算法來推斷用戶的屬性,比如根據用戶購買行為推斷用戶的性別、年齡等;
  • 有些具備金融牌照、游戲牌照的產品,可以要求用戶填寫身份證等敏感信息,從而獲得用戶更多的信息;
  • 某些公司有多個產品(比如阿里的支付寶、淘寶、餓了么等),可以通過產品之間的打通,獲得用戶更多的屬性信息;
  • 通過合規的第三方數據交易程序來獲得自己產品缺失而第三方具備的屬性信息;

用戶屬性信息對構建優秀的推薦系統是非常重要的一類信息,這類信息企業需要保管好,避免泄露出去造成重大安全和隱私事故。

1.3 標的物屬性數據生成

標的物屬性數據的獲取相比用戶屬性數據容易一些,標的物的生產方/提供方一般是具備一定的標的物屬性數據的。

  • 比如視頻在制作時包含基本屬性數據,視頻版權被視頻網站采購時,自然就附帶了這些屬性。
  • 又比如淘寶上的賣主在上架商品時也會按照淘寶制定的類目等屬性要求填充相關數據。
  • 還有一些標的物,如新聞資訊,是從第三方利用爬蟲技術爬過來的,在爬的過程中也可以將屬性數據爬過來,一并注入到自己的媒資庫中。

對于標的物數量不大、單位時間產出不多的標的物(如電影),還可以利用編輯團隊或者外包人工標注相關數據。

對于數量較大、單位時間產量多的標的物(如新聞),可以借助 NLP 等機器學習技術生成相關屬性數據。

1.4 上下文數據生成

上下文數據一般是動態變化的,是用戶在某個場景下的特定時間點、特定位置所產生的數據,所以一般是實時獲得的,也一般應用于實時推薦系統中。這類數據也一般是通過前端埋點獲得,并以消息隊列的形式給到具體的業務應用方。

上面對數據產生及收集相關的知識點做了簡單介紹,關于數據收集更深入的介紹,可以閱讀參考文獻 15《數據驅動:從方法到實踐》這本書。

2 數據預處理

數據預處理一般稱為 ETL(Extract-Transform-Load),用來描述數據從生產源到最終存儲之間的一系列處理過程,一般經過抽提、轉換、加載 3 個階段。

目的是將企業中的分散、零亂、標準不統一的數據整合到一起,將非結構化或者半結構化的數據處理為后續業務可以方便處理使用的結構化數據,為企業的數據驅動、數據決策提供數據基礎。

數據基礎設施完善的企業一般會構建層次化的數據倉庫系統,數據預處理的最終目的也是將雜亂的數據結構化、層次化、有序化,最終存入數據倉庫

對于推薦系統來說,通過 ETL 將數據處理成具備特殊結構(可能是結構化的)的數據,方便進行特征工程,最終供推薦算法學習和模型訓練之用。

下面分別對 ETL3 個階段的作用進行簡單介紹。

2.1 抽提(Extract)

這一階段的主要目的是將企業中分散的數據聚合起來,方便后續進行統一處理,對于推薦系統來說,依賴的數據源多種多樣,因此是非常有必要將所有這些算法依賴的數據聚合起來的。推薦系統的數據源比較多樣,不同的數據抽取的方式不一樣,下面分別簡單介紹。

用戶行為數據一般通過在客戶端埋點,通過 HTTP 協議上傳到日志收集 web 服務(如 Nginx 服務器),中間可能會通過域名分流或者 LB 負載均衡服務來增加日志收集的容錯性、可拓展性。

日志一般通過離線和實時兩條數據流進行處理。

  • 離線通過 ETL 進入數倉,
  • 實時流通過 ETL 經 Kafka 等消息隊列被實時處理程序(如 Spark Streaming)處理或者進入 HBase、ElasticSearch 等實時存儲供后續的業務使用。

整個用戶行為日志的收集過程見下面圖 5。

圖 5:用戶行為日志收集流程(右上角進入 DW 的屬于離線數據,右下角經過 Kafka 的屬于實時流)

對于用戶屬性數據、標的物屬性數據一般是存放在關系型數據庫中的,實時性要求不高的推薦業務可以采用數據表快照進行抽取,對實時性有要求的信息流推薦可以采用 binlog 實時同步或者消息隊列的方式抽取。

上下文相關數據一般是描述用戶當前狀態的數據,一般是通過各種傳感器或者前端埋點收集的,這類數據也生成于客戶端。

通過上面圖 5 右下角的實時日志收集系統進入消息隊列,供后端的實時統計(如時間序列數據庫、ES 進行存儲進而查詢展示)或者算法(通過 Spark Streaming 或者 Flink 等)進行處理。

2.2 轉換(Transform)

這個階段是 ETL 的核心環節,也是最復雜的一環。它的主要目標是將抽取到的各種數據,進行數據的清洗、格式的轉換、缺失值填補、剔除重復等操作,最終得到一份格式統一、高度結構化、數據質量高、兼容性好的數據,提供給推薦算法的特征工程階段進行處理。

清洗過程包括剔除掉臟數據、對數據合法性進行校驗、剔除無效字段、字段格式檢查等過程。

格式轉換是根據推薦算法對數據的定義和要求將不同來源的同一類數據轉為相同的格式,使之統一規范化的過程。

由于日志埋點存在的問題或者數據收集過程中存在的各種問題,真實業務場景中,字段值缺失是一定存在的,缺失值填補可以根據平均數或者眾數進行填補或者利用算法來學習填充(如樣條差值等)。

由于網絡原因日志一般會有重傳策略,導致重復數據,剔除重復就是將重復的數據從中過濾掉,從而提升數據質量,以免影響最終推薦算法的效果(如果一個人有更多的數據,那么在推薦算法訓練過程中,相當于他就有更多的投票權,模型學習會向他的興趣傾斜,導致泛化能力下降)。

數據轉換的過程算是廣義的特征工程中的一部分,這里介紹的處理過程可能部分會跟下面特征工程部分的介紹有一定重復,我們在特征工程章節會更加詳細介紹。

2.3 加載(Load)

這部分的主要目標是把數據加載至最終的存儲,比如數據倉庫、關系型數據庫、key-value 型 NoSQL 中等。對于離線的推薦系統,訓練數據放到數倉中,屬性數據存放到關系型數據庫中。

用戶行為數據通過數據預處理一般可以轉化為結構化數據或者半結構化數據,行為數據是最容易獲得的一類數據,也是數據量最大的一類數據,這類數據一般存放在分布式文件系統中,原始數據一般放到 HDFS 中,通過處理后的數據一般會根據業務需要構建層次化的數據模型。

所有行為數據都會統一存放到企業的數據倉庫中,最終形成統一的數據服務,供上層的業務方使用:

  • 離線數據基于 Hive 等構建數倉;
  • 實時數據基于 HBase 等構建數倉

某些數據,比如通過特征工程轉化為具體特征的數據,這類數據可能需要實時獲取、實時更新、實時服務于業務,一般可以存放在 HBase 或者 Redis 等 NoSQL 中

用戶屬性數據一般屬于關系型數據,這類數據比較適合存放在關系型數據庫(如 MySQL)中。

標的物屬性數據一般也屬于關系型數據,也存放在關系型數據庫中。

對于圖片、音視頻這類比較復雜的數據,一般適合存放在對象存儲中。

3、特征工程

特征(Feature)是建立在原始數據之上的特定表示,它是一個單獨的可度量屬性,通常用結構化數據集中的一列表示。

對于一個通用的二維數據集,每個觀測值由一行表示,每個特征由一列表示,對于每一個觀測具有一個特定的值。

下面圖 6 就是用戶基本屬性表,其中每一列就是一個特征,其中:

  • 年齡、身高、體重是數值的,是數值特征,數值特征也叫做連續特征;
  • 性別是用文本描述的,并且只有男女兩種取值,是離散特征;
圖 6:用戶屬性特征

通過上面的簡單介紹,我們知道了什么是特征,知道有連續特征和離散特征,那么特征具體怎么分類呢?

一般從特征的取值類型可以分為 5 類:

  • 離散特征:離散特征一般分為類別特征和有序特征,類別之間是無序關系的,比如性別,有序特征之間是有序關系的,比如收入的低、中、高三個等級,之間是有序的。
  • 連續(數值)特征:能夠用實數或者整數等數值度量的特征就是連續特征,比如身高、通過算法獲得的嵌入特征等都屬于連續特征。
  • 時空特征:在某些模型中時間是非常重要的特征,時間一般是相對的,具有周期性。對基于地理位置的服務,位置是非常重要的特征,用戶的行為可能跟位置有關(如廣東人喜歡看粵語劇),地理位置可以用行政區劃的層級關系表示,也可以用相對距離來表示。
  • 文本特征:文本是非常重要的一類數據,我們可以從文本中抽提特征,比如利用 TF-IDF 等獲得的特征,文本特征一般可以通過轉化為向量來表示
  • 富媒體特征:包括從圖片、視頻、音頻、HTML、甚至程序語言等富媒體中抽提的特征,這些特征也一般用數值向量來表示
  • 從特征的可解釋性來分類,可以分為顯式特征和隱式特征:

  • 顯示特征:顯示特征是具有實際意義的特征,人們可以理解,可以用語言來說明和解釋。類別、數值、時空、TF-IDF、LDA 等特征都屬于這一類。
  • 隱式特征:隱式特征是不具備實際意義,難于在現實中找到對應的特征,一般通過算法生成的嵌入特征都屬于這一類,如 word2vec、矩陣分解等模型生成的嵌入特征。
  • 講完了什么是特征,特征的兩種分類方法及對應不同特征的介紹,那么大家肯定會關心特征是怎么構建的,有什么方法和技巧,這就是特征工程要解決的問題。

    特征工程(Feature Engineering)是將原始數據轉化為特征的過程,這些特征可以很好地測量或者描述輸入輸出之間的內在關系,通過這些特征來構建數學模型,從而提高模型對未知數據預測的準確性。特征工程在整個算法模型生命周期中所處的階段見下面圖 7。

    圖 7:特征工程在算法建模中所處的階段

    特征工程在整個機器學習流程中是非常重要的一環,有很多枯燥、繁雜的工作需要處理,看起來不那么高大上,并且很多特征工程的技巧是需要經驗積累的,也是領域相關的(不同領域有自己的一套做特征工程的獨特的方法和思路)。

    特征工程的質量往往直接決定了機器學習的最終效果,在機器學習圈有一句很出名的話很好地說出了特征工程的價值,這句話大致意思是“特征工程的好壞決定了機器學習能力的上限,而算法和模型只是無限逼近這個上限”。

    特征工程是一個比較花費人力的工作,雖然跟問題和領域相關,但是有一般的方法思路可供參考,下面簡單介紹一下特征工程的一般流程和步驟,以及相關的方法與技巧。

    3.1 特征預處理

    在真實業務場景中,數據一般會存在各種各樣的問題,不是直接可以用于構建特征,在構建特征之前需要對數據進行適當的處理,下面講解一些常見的數據問題及預處理方法:

    1. 缺失值處理

    實際上我們收集到的很多數據是存在缺失值的,比如某個視頻缺少總時長。對于用戶屬性數據來說,很多用戶可能也不會填寫完備的信息。一般缺失值可以用均值、中位數、眾數等填充,或者直接將缺失值當做一個特定的值來對待。還可以利用一些復雜的插值方法,如樣條插值等來填充缺失值。

    2. 歸一化

    不同特征之間由于量綱不一樣,數值可能相差很大,直接將這些差別極大的特征灌入模型,會導致數值小的特征根本不起作用,一般我們要對數值特征進行歸一化處理,常用的歸一化方法有 min-max 歸一化、分位數歸一化、正態分布歸一化、行歸一化等。下面分別簡單介紹。

    min-max 歸一化是通過求得該特征樣本的最大值和最小值,采用如下公式來進行歸一化,歸一化后所有值分布在 0-1 之間。

    分位數歸一化,是將該特征所有的值從小到大排序,假設一共有 N 個樣本,某個值 x 排在第 k 位,那么我們用下式來表示 x 的新值。

    正態分布歸一化,是通過求出該特征所有樣本值的均值

    和標準差

    ,再采用下式來進行歸一化。

    行歸一化,就是采用某種范數(比如 L2 范數),讓整行的范數為 1,假設該列特征所在的列向量為

    ,那么基于 L2 范數的行歸一化的公式如下:

    3. 異常值與數值截斷

    對于數值型特征,可能會存在異常值,包括異常大和異常小的值。

    在統計數據處理中有所謂 3σ準則,即對于服從正態分布的隨機變量,該變量的數值分布在(μ-3σ,μ+3σ)中的概率為 0.9974,這時可以將超出該范圍的值看成異常值,采用向上截斷(用μ-3σ)和向下截斷(用μ+3σ)的方法來為異常值賦予新的值。

    對于真實業務場景,可能還要根據特征變量的實際意義來進行處理,在作者團隊做視頻推薦過程中,經常會發現日志中視頻的總時長是一個非常非常大的值(可能是在日志埋點時將時間戳混雜到時長中了),我們一般會用戶 180 分鐘來截斷電影的總時長,用 45 分鐘來截斷電視劇單集的總時長。

    如果異常值所占樣本比例非常小,也可以直接將包含異常值的樣本剔除掉,但是有很多真實業務場景的算法模型利用非常多的特征,雖然每個特征異常值很少,但是如果特征總數很多的話,包含異常值的樣本(只要包含某一個異常值的都算異常樣本)總數可能是非常大的,所以直接丟棄的方法有時是不合適的。

    4. 非線性變換

    有時某個屬性不同值之間差別較大(比如年收入),有時為了讓模型具備更多的非線性能力(特別是對于線性模型),這兩種情況下都需要對特征進行非線性變換,比如值取對數(值都是正的情況下)作為最終的特征,也可以采用多項式、高斯變換、logistic 變換等轉化為非線性特征。

    上面提到的分位數歸一化、正態分布歸一化其實都是非線性變換。

    3.2 特征構建

    所謂特征構建是從原始數據中提取特征,將原始數據空間映射到新的特征向量空間,使得在新的特征空間中,模型能夠更好地學習數據中的規律

    下面我們分別對前面提到的離散(類別)特征、連續(數值)特征、時空特征、文本特征、富媒體特征等 5 類非常重要的特征來介紹怎么從原始數據構建相關的特征。

    隨著 Word2Vec 及深度學習技術在推薦系統中的大規模應用,嵌入方法越來越受到歡迎,我們也會單獨講一下嵌入特征,文本、富媒體一般可以轉化為嵌入特征。

    3.2.1 離散特征

    離散特征是非常常見的一類特征,用戶屬性數據、標的物屬性數據中就包含大量的類別特征,如性別、學歷、視頻的類型、標簽、導演、國別等等。對于離散特征,一般可以采用如下幾種方式對特征進行編碼。

  • one-hot 編碼:one-hot 編碼通常用于類別特征,如果某個類別特征有 k 類,我們將這 k 類固定一個序關系(隨便什么序關系都無所謂,只是方便確認某個類在哪個位置),我們可以將每個值映射為一個 k 維向量,其中這個值所在的分量為 1,其他分量為 0。該方法當類別的數量很多時,特征空間會變得非常大。在這種情況下,一般可以用 PCA 等方法進行降維。對于標簽這種類別特征,可能每個視頻有多個標簽,這時 one-hot 編碼可以拓展為 n-hot 編碼,就是該視頻在它包含的所有標簽對應的分量為 1,其他為 0。
  • 散列編碼:對于有些取值特別多的類別特征(比如視頻標簽,可以有幾萬個),使用 one-hot 編碼得到的特征矩陣非常稀疏,如果再進行特征交叉,會使得特征維度爆炸式增長。特征散列的目標就是是把原始的高維特征向量壓縮成較低維特征向量,且盡量不損失原始特征的表達能力,其優勢在于實現簡單,所需額外計算量小。降低特征維度,也能加速算法訓練與預測,降低內存消耗,但代價是通過哈希轉換后學習到的模型變得很難檢驗(因為一般哈希函數是不可逆的),我們很難對訓練出的模型參數做出合理解釋。特征散列的另一個問題是可能把多個原始特征哈希到相同的位置上,出現哈希沖突現象,但經驗表明這種沖突對算法的精度影響很小,通過選擇合適的 hash 函數也可以減少沖突概率。
  • 計數編碼:就是將所有樣本中該類別出現的次數或者頻次作為該值的編碼,這類方法對異常值比較敏感(拿電影的標簽來說,很多電影包含“劇情”這個標簽,計數編碼會讓劇情的編碼值非常大),也容易產生沖突(兩個不同類別的編碼一樣,特別是對于出現很稀少的標簽,編碼值一樣的概率非常大)。
  • 離散特征之間交叉:就是類別特征之間通過笛卡爾積(或者笛卡爾積的一個子集)生成新的特征,通過特征交叉有時可以捕捉細致的信息,對模型預測起到很重要的作用。這里舉個例子,比如用用戶地域與視頻語言做交叉,大家肯定知道廣東人一般更喜歡看粵語劇,那么這個交叉特征對預測粵語視頻的點擊是非常有幫助的。類別交叉一般需要對業務有較好的理解,需要足夠多的領域知識,才可以構建好的交叉特征。上面講的是 2 個類別特征的交叉,當然還可以做 3 個、4 個、甚至更多類別特征的交叉,兩個類別交叉最多可以產生這兩個類別基數的乘積這么多的新特征,所以交叉讓模型的維數爆炸性增長,增加了模型訓練的難度。同時,更多的特征需要更多的樣本來支撐,否則極容易過擬合。對于樣本量不夠多的場景,不建議采用超出 2 個類別的交叉,也不建議用 2 個基數特別大的類別進行特征交叉。
  • 離散特征與連續特征交叉:跟上面 4)中講的類似,我們也可以進行類別特征與數值特征之間的交叉,只不過這種交叉一般是統計某個類別具體值對應的數值特征的統計量(次數、和、均值、最值、方差等等)。拿電影的語言和用戶的年齡兩個特征交叉來說,我們可以分別統計看過語言是中文、英語等的電影中用戶的平均年齡。根據大家的經驗,我們知道年輕人受教育程度高,英語會更好,所以看過英語電影的人的平均年齡比看中文的平均年齡低。這類特征的交叉也需要基于具體業務場景及領域知識來做,否則獲得的交叉特征可能無效,甚至導致模型引入噪音。對于有序離散特征,我們可以用 0、1、2、... 等自然數來為他們編碼,自然數的大小關系保證了它們之間的序關系。
  • 3.2.2 連續(數值)特征

    連續型數據是機器學習算法直接可以使用的數據,對于連續型數據,我們一般可以通過如下幾種方式來構建特征:

  • 直接使用:機器學習算法是可以直接處理數值特征的,數值特征可能經過上面一節講的特征預處理中的部分步驟再灌給模型使用。
  • 離散化:有時連續特征需要進行離散化處理,比如視頻在一段時間內的播放量對于視頻點擊 CTR 預估可能是一個重要的特征,因為播放次數跟視頻的熱度有很強的相關性,但是如果不同視頻的播放次數的數量級相差巨大(實際情況確實是這樣,熱門視頻比冷門視頻播放量大若干個數量級),該特征就很難起作用(比如 LR 模型,模型往往只對比較大的特征值敏感)。對于這種情況,通常的解決方法是進行分桶。分桶操作可以看作是對數值變量的離散化,之后再進行 one-hot 編碼。分桶的數量和寬度可以根據業務知識和經驗來確定,一般有三種分桶方式:(1) 等距分桶,每個桶的長度是固定的,這種方式適用于樣本分布比較均勻的情況;(2) 等頻分桶,即每個桶里樣本量一樣多,但也會出現特征值差異非常大的樣本被放在一個桶中的情況;(3) 模型分桶,使用模型找到最佳分桶,例如利用聚類的方式將特征分成多個類別,或者利用樹模型,這種非線性模型天生具有對連續型特征切分的能力,利用特征分割點進行離散化。分桶是離散化的常用方法,連續特征離散化是有一定價值的:離散化之后得到的稀疏向量,運算速度更快,計算結果易于存儲。離散化之后的特征對于異常值也具有更強的魯棒性。需要注意的是:(1) ?每個桶內都有足夠多的樣本,否則不具有統計意義;(2) ?每個桶內的樣本盡量分布均勻。
  • 特征交叉:對于連續特征 x、y,通過非線性函數 f 的作用,我們將 z=f(x,y) 作為交叉特征,一般 f 可以是多項式函數,最常用的交叉函數是 f=xy ,即兩個特征對應的值直接相乘。通過特征交叉可以為模塊提供更多的非線性,可以更細致地擬合輸入輸出之間的復雜關系,但非線性交叉讓模型計算處理變得更加困難。
  • 3.2.3?時空特征

    時間和地理位置也是兩類非常重要的特征,下面分別來說明怎么將它們轉化為模型特征。

    對于時間來說,一般有如下幾種轉換為特征的方式:

  • 轉化為數值:比如將時間轉化為從某個基準時間開始到該時間經歷的秒數、天數、月數、年數等。用更大的單位相當于對小單位四舍五入(比如用到當前時間經歷的年數,那么不足一年的時間都忽略了)。
  • 將時間離散化:比如我們可以根據當前時間是不是節假日,將時間離散化為 0-1 二值(1 是假日,0 是工作日)。再比如如果我們構建的模型是與周期性相關的,我們可能只需要取時間中的周幾這個量,那么時間就可以離散化為 0-6 七個數字(0 代表星期天,1 代表星期一,如此類推)。
  • 對于地理位置來說,我們有行政區劃表示,還有經緯度表示,以及到某個固定點的距離等表示方式,下面分別說明。

  • 行政區劃表示:典型的是用戶所在地區,因為地區是固定的,數量也是有限的,這時地理位置就轉化為離散特征了。
  • 經緯度表示:地理位置也可以用經緯度表示,這時每個位置就轉化為一個 2 維向量了(一個分量是經度,另一個分量是緯度)。
  • 距離表示:對于像美團、滴滴這類基于 LBS 服務的產品,一般用商家或者司機到用戶的距離來表示位置,這時地理位置就轉化為一個一維的數值了。
  • 3.2.4?文本特征

    對于文本一般可以用 NLP 等相關技術進行處理轉化為數值特征。

    對于新聞資訊等文檔,可以采用 TF-IDF、LDA 等將每篇文檔轉化為一個高維的向量表示。或者基于 Word2Vec 等相關技術將整篇文檔嵌入(doc2vec)到一個低維的稠密向量空間。

    3.2.5?富媒體特征

    對于圖片、音頻、視頻等富媒體,一般也可以基于相關領域的技術獲得對應的向量表示,這種向量表示就可以作為富媒體的特征了。這里不細介紹,感興趣的讀者可以自行搜索學習。

    3.2.6?嵌入特征

    上面文本、富媒體中提到的嵌入技術是非常重要的一類提取特征的技術,所謂嵌入,就是將高維空間的向量投影到低維空間,降低數據的稀疏性,減少維數災難,同時提升數據表達的魯棒性。隨著 Word2Vec 及深度學習技術的流行,嵌入特征越來越重要。

    標的物嵌入分為基于內容的嵌入和基于行為的嵌入。前者使用標的物屬性信息(如視頻的標題、標簽、演職員、海報圖,視頻、音頻等信息),通過 NLP、CV、深度學習等技術生成嵌入向量。后者是基于用戶與標的物的交互行為數據生成嵌入,拿視頻來舉例,用戶在一段時間中前后點擊的視頻存在一定的相似性,通常會表現出對某類型視頻的興趣偏好,可能是同一個風格類別,或者是相似的話題等,因此我們將一段時間內用戶點擊的視頻 id 序列作為訓練數據(id 可以類比 word,這個序列類比為一篇文檔),使用 skip-gram 模型學習視頻的嵌入特征。由于用戶點擊行為具有相關關系,因此得到的嵌入特征有很好的聚類效果,使得在特征空間中,同類目的視頻聚集在一起,相似類目的視頻在空間中距離相近。在電視貓的相似視頻推薦中,我們就是采用這種嵌入,并且聚類,將同一類別中的其他視頻作為相關推薦,效果還是非常好的。

    對于用戶嵌入,我們也可以有很多方法,下面是兩種比較基礎的方法。

    可以將一段時間內用戶點擊過的視頻的平均嵌入特征向量作為該用戶的嵌入特征,這里的“平均”可以是簡單的算術平均,可以是 element-wise max,也可以是根據視頻的熱度和時間屬性等進行加權平均或者嘗試用 RNN 替換掉平均操作。我們可以通過選擇時間周期的長短來刻畫用戶的長期興趣嵌入和短期興趣嵌入。

    另外參考 YouTube 推薦系統(見參考文獻 6)的思路,我們可以把推薦問題等價為一個多類別分類問題,使用 softmax 損失函數學習一個 DNN 模型,最終預測在某一時刻某一上下文信息下用戶觀看的下一個視頻的類別,最后把訓練好的 DNN 模型最后一層隱含層輸出作為用戶的嵌入向量(參考第 12 章《深度學習在推薦系統中的應用》中 12.3.1 節的介紹)。

    3.3 特征選擇

    特征選擇是指從所有構建的特征中選擇出一個子集,用于模型訓練與學習的過程。特征選擇不光要評估特征本身,更需要評估特征與模型的匹配度,評估特征對最終的預測目標的精準度的貢獻。特征沒有最好的,只有跟應用場景和模型合適的,特征選擇對于構建機器學習應用是非常重要的一環。特征選擇主要有以下兩個目的:

    • 簡化模型,節省存儲和計算開銷,讓模型更易于理解和使用;
    • 減少特征數量、降維,改善通用性、降低過擬合的風險。

    知道了什么是特征選擇以及特征選擇的價值,下面我們提供進行特征選擇的具體方法,主要有基于統計量的方法和基于模型的方法。

    3.3.1 基于統計量選擇

    基于統計量選擇主要有如下幾種方式,我們分別介紹:

  • 選擇方差大的特征:方差反應了特征樣本的分布情況,我們可以分析特征的數據分布。分布均勻的特征,樣本之間差別不大,該特征不能很好區分不同樣本,而分布不均勻的特征,樣本之間有極大的區分度,因此通常可以選擇方差較大的特征,剔除掉方差變化小的特征。具體方差多大算大,可以事先計算出所有特征的方差,選擇一定比例(比如 20%)的方差大的特征,或者可以設定一個閾值,選擇方差大于閾值的特征。
  • 皮爾遜相關系數:皮爾森相關系數是一種簡單的,能幫助理解特征和目標變量之間關系的方法,用于衡量變量之間的線性相關性,取值區間為[-1,1],-1 表示完全的負相關,+1 表示完全的正相關,0 表示沒有線性關系。通過分析特征與目標之間的相關性,優先選擇與目標相關性高的特征。如果兩個特征之間線性相關度的絕對值大,說明這兩個特征是有很強的相關關系的,我們沒必要都選擇,只需要選擇其中一個即可。
  • 覆蓋率:特征的覆蓋率是指訓練樣本中有多大比例的樣本具備該特征。我們首先計算每個特征的覆蓋率,覆蓋率很小的特征對模型的預測效果作用不大,可以剔除。
  • 假設檢驗:假設特征變量和目標變量之間相互獨立,選擇適當檢驗方法計算統計量,然后根據統計量做出統計推斷。例如對于特征變量為類別變量而目標變量為連續數值變量的情況,可以使用方差分析,對于特征變量和目標變量都為連續數值變量的情況,可以使用皮爾森卡方檢驗。卡方統計量取值越大,特征相關性越高。
  • 互信息:在概率論和信息論中,互信息用來度量兩個變量之間的相關性。互信息越大則表明兩個變量相關性越高,互信息為 0 時,兩個變量相互獨立。因此可以根據特征變量和目標變量之間的互信息來選擇互信息大的特征。
  • 3.3.2 基于模型選擇

    基于模型的特征選擇,可以直接根據模型參數來選擇,也可用子集選擇的思路選出特征的最優組合。

  • 基于模型參數:對于線性模型,可以直接基于模型系數大小來決定特征的重要程度。對于樹模型,如決策樹、梯度提升樹、隨機森林等,每一顆樹的生成過程,都對應了一個特征選擇的過程,在每次選擇分類節點時,都會選擇最佳分類特征來進行切分,重要的特征更有可能出現在樹生成早期的節點,作為分裂節點的次數也越多。因此,可以基于樹模型中特征出現次數等指標對特征重要性進行排序。如果我們想要得到稀疏特征或者說是對特征進行降維,可以在模型上主動使用正則化技術。使用 L1 正則,調整正則項的權重,基本可以得到任意維度的稀疏特征。
  • 子集選擇:基于模型,我們也可以用子集選擇的思路來選取特征。常見的有前向搜索和反向搜索兩種思路。如果我們先從 N 個特征中選出一個最好的特征,然后讓其余的 N-1 個特征分別與第一次選出的特征進行組合,從 N-1 個二元特征組合中選出最優組合,然后在上次的基礎上,添加另一個新的特征,考慮 3 個特征的組合,依次類推,這種方法叫做前向搜索。反之,如果我們的目標是每次從已有特征中去掉一個特征,并從這些組合中選出最優組合,這種方法就是反向搜索。如果特征數量較多、模型復雜,那么這種選擇的過程是非常耗時間和資源的。我們在后面講到的自動特征工程中會提到通過算法自動選特征的技術方案。
  • 3.4 特征評估

    所謂特征評估是在將特征灌入模型進行訓練之前,事先評估特征的價值,提前發現可能存在的問題,及時解決,避免將有問題的特征導入模型,導致訓練過程冗長而得不到好的結果。特征評估是對選擇好的特征進行整體評價,而不是特征選擇中所謂的對單個特征重要性的評判。特征評估包括特征的覆蓋率、特征的維度、定性分析和定量分析等幾種方式。

    特征的覆蓋率是指有多少比例的樣本可以構建出相關特征,對于推薦系統來說,存在冷啟動用戶,因此對于新用戶,如果選擇的特征中包含從用戶行為中獲得的特征(新用戶沒有用戶行為,或者用戶行為很少),那么我們是無法為他構建特征的,從而無法利用模型來為他進行推薦。

    特征的維度衡量的是模型的表達能力,維度越高,模型表達能力越強,這時就需要更多的樣本量和更多的計算資源、優秀的分布式計算框架來支撐模型的訓練。為了達到較好的訓練效果,一般對于簡單模型可以用更多維度的特征,而對于復雜模型可以用更少的維度。

    定性分析是指構建的特征是否跟用戶行為是沖突的,可以拿熟悉的樣本來做驗證,比如在視頻推薦中,可以根據自己的行為來定性驗證標簽的正確性。我個人最喜歡看恐怖電影,那么基于標簽構建特征的話,那么對于我的樣本,在恐怖這個標簽上的權重應該是比其他標簽權重大的。

    定量分析,通過常用的離線評估指標,如 Precision、Recall、AUC 等等來驗證模型的效果,當然,最終需要上線做 AB 測試來看是否對核心用戶體驗、商業化指標有提升。

    關于特征工程的其他介紹讀者還可以參見參考文獻 1、2、3。參考文獻 8、9 也是兩篇比較好的關于特征工程的介紹文檔。另外,Spark 的 MLlib 中也集成了很多與特征工程相關的算子,參見參考文獻 10。scikit-learn 中也包含大量與數據處理、特征構建、特征選擇相關的算子,參見參考文獻 11。

    四、常用推薦算法之數據與特征工程

    在本節我們基于 3 類主流的推薦產品形態來介紹與之相關的數據與特征工程。

    不同產品形態可以有不同的推薦算法實現,我們會根據常用的推薦算法來說明需要什么樣的數據,以及怎么基于這些數據通過特征工程來構建特征用于推薦模型訓練。

    1、排行榜推薦

    排行榜推薦是非個性化推薦,也是最簡單的一類推薦算法,一般可以作為獨立產品或者作為其它個性化推薦算法的默認推薦。排行榜推薦一般只依賴于用戶行為數據,根據用戶在過去一段時間(比如過去一周、一月、一年等)的操作行為和標的物自身相關的屬性特征,基于某個維度統計最受歡迎的標的物列表作為推薦列表。常用的有最新榜(這個是根據標的物上線時間來統計的)、最熱榜、收藏榜、熱銷榜等等。

    這類推薦算法也不需要什么復雜特征工程,只需要對數據進行簡單的統計處理就可以了,一般用 select sum(N) as num from Table group by sid where time between T1 and T2 order by num desc limit 100 這類 SQL 就可以搞定,這里 N 是標的物的播放量、銷量等,Table 是通過數據預處理生成的結構化的表,sid 是標的物的唯一編碼 id,T1 和 T2 是時間戳)。需要注意的是,對于不同類別的標的物(如電影和電視劇),如果要混合排序的話,需要將統計量(如播放量)歸一化到同一個可比較的范圍中。

    2、標的物關聯標的物推薦

    標的物關聯標的物推薦,就是我們通常所說的關聯推薦,給每個標的物關聯一系列相關的標的物作為推薦列表。

    根據所使用算法不同,對數據源、數據處理及特征工程有不同的要求。下面分別介紹。

    2.1 基于內容的關聯推薦

    如果是新聞資訊類標的物,一般我們可以用 TF-IDF 算法來向量化每篇新聞資訊,這樣就可以根據向量相似度來計算兩篇新聞資訊的相似度了。這時我們利用的數據就是標的物本身的文本信息,該算法也沒有復雜的特征工程,只需將所有新聞資訊進行分詞,構建詞庫,剔除停用詞,得到最終所有詞的 corpora,對每篇新聞資訊利用 TF-IDF 算法獲得它們的向量表示,這個向量就可以認為是是最終的特征。

    當然也可以利用向量空間模型,將標的物的每一個屬性轉換為一個特征,進而獲得特征表示。如果標的物包含標簽信息,我們可以用每一個標簽表示一個特征,采用 one-hot 編碼的方式構建特征表示。對于標的物是圖片、視頻、音頻等數據,也可以采用嵌入技術構建特征向量。

    對于基于內容數據通過技術手段構建標的物的向量表示,大家可以參考第 5 章《基于內容的推薦算法》5.2.3 節“構建標的物特征表示”來進行深入了解。

    2.2 基于協同過濾的關聯推薦

    傳統的 item-based 協同過濾,通過獲取用戶操作行為數據,構建用戶操作行為矩陣,該矩陣的每一列就是某個 item 的特征向量表示,基于該向量就可以根據 cosine 余弦計算相似度。基于矩陣分解的協同過濾,也是通過用戶行為矩陣進行矩陣分解,獲得標的物特征矩陣,該矩陣的每一列就是標的物的特征表示。這兩類方法,只需要利用用戶行為數據,獲得的標的物向量表示就是最終的特征,所以也不存在復雜的特征工程。具體讀者可以參見第 6 章《協同過濾推薦算法》和第 8 章《矩陣分解推薦算法》中相關章節的介紹。

    還有一種基于 item2vec 的方法基于用戶行為數據來獲得標的物的嵌入表示,也不需要進行復雜的特征工程,讀者參見第 11 章《嵌入方法在推薦系統中的應用》11.4.2 節中相關內容。

    3、個性化推薦

    個性化推薦是業界最常用的一種推薦產品形態,下面對常用個性化推薦算法來說明該算法所使用的數據集和相關特征工程方面的知識點。

    3.1 基于內容的個性化推薦

    如果我們基于內容算法獲得了每個標的物最相似的標的物列表,可以基于用戶的操作歷史記錄,采用類似基于 user-based 或者 item-based 這類線性加權的方式獲得用戶的推薦,或者根據用戶的操作歷史獲得用戶的嵌入向量表示(用戶操作過的標的物的向量表示的加權平均可以作為用戶的嵌入表示),通過計算用戶向量和標的物向量內積來獲得用戶對標的物的評分,根據評分降序排序獲得最終給用戶的推薦列表。具體細節讀者可以參考第 5 章《基于內容的推薦算法》5.2.4 節中相關介紹,這類算法只需要用戶操作行為數據及標的物相關數據,只需要做簡單的數據預處理就可以,并不需要復雜的特征工程。

    3.2 基于協同過濾的個性化推薦

    常規的 user-based、item-based、矩陣分解協同過濾,只需要用戶行為數據,經過簡單的算法就可以獲得給用戶的推薦,不需要復雜的特征工程,讀者參見第 6 章《協同過濾推薦算法》和第 8 章《矩陣分解推薦算法》這兩篇文章相關介紹,這里不再贅述。

    3.3 基于多數據源構建復雜特征的召回、排序模型

    上面我們提到的算法都是基于簡單規則或者人工假設的模型(如 user-based 協同過濾就假設相似的用戶具有相同的興趣愛好),基本不涉及到復雜的特征工程,我們都是一筆帶過。下面我們提到的推薦召回、排序模型,都是需要通過構建復雜的特征來訓練的,這類算法有多種,比如經典的 logistic 回歸、FM 算法,還有最近比較火的深度學習等。這里我們重點講解視頻場景中,用經典的 logistic 回歸模型來做推薦排序中涉及到的特征工程相關的知識點,深度學習模型的特征工程我們在后面也會初略介紹。

    對于利用 logistic 模型來預測用戶對某個視頻的點擊率,樣本是用戶觀看過的視頻,每個用戶視頻對構成一個樣本。這里正樣本是用戶點擊播放過的視頻(或者是播放時長超過一定時間的視頻),而負樣本可以是曝光給用戶但是用戶沒有點擊過的視頻(或者播放時間少于某個閾值的視頻)。

    這類構建復雜特征來訓練召回模型的方法,需要盡可能多的數據,才能構建足夠多樣的特征,所以一般用戶行為數據、用戶特征數據、標的物特征數據、上下文數據等都會被使用到。下面分別對這 4 類數據構建的特征進行簡單介紹。

    行為特征:視頻的播放時長、播放完整度、點贊、轉發、分享、搜索、評論、收藏等多種互動行為都與用戶的最終點擊有關,都是可以構建成特征的。另外,用戶登陸時間分布、觀看節目分布、觀看時段等也屬于行為特征。.

    用戶屬性特征:用戶年齡、性別、學習、收入、是否是會員、地域等屬于用戶自身的特性。

    節目屬性特征:是否是會員節目,是否獲獎,豆瓣得分,年代,是否高清(isHd),地區,節目語言(language),上映時間(show_time)等。

    上下文特征(也叫做場景化特征):是否節假日、用戶所在路徑、用戶所在位置、請求時間、用戶手機品牌、手機型號、操作系統、當前網絡狀態(3g/4g/wifi)、硬件設備信息,當前版本、用戶渠道等都屬于上下文特征。

    基于上面這些信息,我們可以構建 4 大類特征(基于 17.3.3 中特征工程相關知識點),形成如下面圖 8 的模型訓練樣本集合,通過特征構建、特征選擇、訓練、離線評估等步驟我們最終可以獲得一個訓練好的 logistic 回歸模型。

    圖 8:構建 logistic 模型及相關特征

    雖然深度學習模型只需要將原始數據通過簡單的向量化灌入模型,通過模型自動學習特征,最終獲得具備良好表達能力的神經網絡,確實可以大大節省人工特征工程的投入成本,但是,并不代表深度學習模型就不需要做特征工程了。特征工程是算法工程師在對要處理的問題和業務進行深度理解和深刻洞察后,構建可以很好預測模型目標的強相關性因子(特征),從而更好地幫助模型學習數據背后的規律的一種方法,因此人工特征工程目前還是很難被算法直接取代的(雖然現在有很多自動化特征工程的技術)。通過構建好的的人工特征整合到深度學習模型中可以更好地發揮深度學習的價值。業界最出名的兩個深度學習推薦模型,YouTube 深度學習推薦系統和 Google 的 Wide & Deep 模型中就包含大量的人工特征工程的技巧,讀者可以參考第 12 章 12.3.1 和 12.3.2 這兩節的介紹。

    通過上面的介紹我們知道經典的個性化推薦算法,如 item-based、user-based、矩陣分解、KNN 等屬于基于簡單規則(假設)的模型,模型是我們人為事先設定好的,比如利用內積來表示相似度,某個樣本點最近的 K 個點的類別進行投票確定該點的類別,這類模型沒有需要學習的參數(KNN 和矩陣分解中的隱因子數量都是人為事先確定的,屬于超參數),這類算法只需要進行簡單的數據處理或者訓練就可以為用戶生成推薦,而包含大量參數的模型(如線性模型、FM、深度學習模型等)是需要進行復雜的特征工程的。

    五、推薦系統數據與特征工程未來趨勢

    伴隨科技的發展,互聯網技術滲透到了生活的方方面面,各類互聯網產品層出不窮,而產品所提供的信息和服務更是爆炸性增長,這其中非常重要的一個幫助用戶篩選、過濾信息的有效工具就是推薦系統,推薦系統一定是未來產品的標配技術,它一定會在更多的場景中得到應用。隨著深度學習、強化學習等更多更新的技術應用于推薦系統,推薦的效果越來越好。隨著各類傳感器種類的豐富、交互方式的多樣化,我們可以收集到越來越多樣的數據。用戶對反饋及時性的強烈需要,推動互聯網產品更加實時地處理用戶的請求,為用戶提供更加實時化的交互體驗。從這些大的趨勢來看,推薦系統依賴的數據和特征工程處理技術也會面臨更多的變化與挑戰,下面作者就基于自己的理解和判斷來說說在未來幾年推薦系統數據與特征工程的幾個重大變化和發展趨勢。

    1、融合更多的數據源來構建更復雜的推薦模型

    數據是一切機器學習的基礎,只有數據量夠多、質量夠好,才可以構建高質量的推薦模型。我們在本章中總結了推薦系統四種數據源:行為數據、用戶屬性數據、物品屬性數據、上下文數據。每類數據的種類趨向于多樣化,拿行為數據來說,我們可以收集用戶在手機屏上的滑動幅度、滑動快慢、按壓力度等數據,在車載系統或者智能音箱場景中可以收集用戶與機器的語音交互數據,在 VR/AR 場景中我們可以收集用戶手勢、眼動、頭部轉動等各種信息,如果智能推薦未來拓展到這些場景中,那么無疑這些數據對構建推薦系統是非常關鍵的。在社交場景中,用戶的社交關系數據對構建推薦系統也是非常重要的。如果某個公司有多個 APP,那么用戶在多個 APP 上的行為可以聯合起來進行學習,構建更好的推薦系統。

    隨著攝像頭等各種傳感器的在各類物聯網場景中的布局(當然包括在手機中),我們可以收集到更多的關于用戶和標的物相關視頻、圖像、語音相關信息,從這些信息中可以挖掘出非常多的有價值的特征(比如從人的聲紋中可以識別性別、年齡、情緒等)用于構建推薦算法模型。交互方式的多樣化也讓我們可以收集到更多的上下文數據。

    總之,未來的推薦系統會依賴更多的數據源,整合更多的信息,獲得更多維度的特征,用于構建更好的推薦算法模型。

    2、深度度學習等復雜技術減少人工特征工程的投入

    深度學習技術在很多應用場景下構建的模型效果比傳統算法好很多,深度學習另外一個被大家稱道的優點是可以減少人工特征工程的繁瑣投入,直接將較原始的數據灌入模型,讓深度模型自動學習輸入與輸出之間的復雜非線性關系。

    隨著深度學習技術在推薦系統中的應用逐步成熟,目前應用到了非常多的行業及場景中,獲得了非常好的效果。未來的趨勢是基于特定應用場景,基于多樣化數據構建場景化的特殊深度網絡結構來獲得更好的推薦效果。有了深度學習的加持,可以讓推薦算法工程師將更多的時間用于思考業務、構建更加有效的模型上,而不是將大量精力放到構建復雜的特征上,從而解放推薦算法工程師的雙手。這里是說深度學習可以減輕推薦算法工程師構建特征工程的負擔,利用深度學習不需要做復雜特征工程就可以獲得比簡單模型復雜特征工程更好的效果,但特征工程是必要的,就如前面所述,構建好的特征可以大大提升深度學習模型的效果。

    3 、實時數據處理與實時特征工程

    隨著社會的發展,人們的生活節奏加快(大城市尤其如此,中小城市也會朝這個趨勢發展),人們的時間會更加碎片化,怎樣更好地占領用戶的碎片化時間,是任何一個公司在開發產品過程中需要關注的重要問題。這種社會趨勢的出現,導致了新聞資訊、短視頻應用的流行,在這些應用中用戶消費一個標的物的時間是非常短的(一般幾秒鐘到幾分鐘),在這類產品上構建推薦服務這就要求推薦系統可以近實時響應用戶的需求,因此我們需要近實時收集處理數據、近實時構建特征工程、近實時訓練算法模型、近實時響應用戶需求變化。這一趨勢一定是未來非常重要且非常難的一個方向。

    現在實時大數據處理技術(如 Kafka、Spark Streaming、Flink 等)和一些實時算法(如 FTRL)的發展,讓實時處理用戶行為數據、實時構建特征和實時訓練模型變得可行。但是,這一領域還不夠成熟和完善,未來還有很長的路要走。

    4、自動化特征工程

    自動化機器學習(AutoML,全稱是 Automated Machine Learning,參考文獻 4 是一篇關于自動機器學習最近進展的綜述文章,參考文獻 5 是一篇關于利用深度學習技術做自動化特征的文章,參考文獻 14 是一篇關于自動化進行特征交叉的文章,讀者可以自行學習),是 2014 年以來,機器學習和深度學習領域最炙手可熱的研究方向之一。機器學習過程需要大量的人工干預,這些人工干預表現在:特征提取、模型選擇、參數調節等機器學習的各個環節。AutoML 試圖將這些與特征、模型、優化、評價有關的重要步驟自動化,使得機器學習模型無需人工干預即可自動化地學習與訓練。微軟開源的框架 optuna(見參考文獻 16)是超參調優自動化方面的一次很好的嘗試,該框架得到了業內很多工程師的關注和贊譽。

    自動化特征工程也是 AutoML 研究中非常重要的一個子方向,在 AutoML 中,自動特征工程的目的是自動地發掘并構造相關的特征,使得模型有更好的表現。除此之外,還包含一些特定的特征增強方法,例如特征選擇、特征降維、特征生成、以及特征編碼等。這些步驟的自動化目前都處于嘗試和探索階段,沒有完美的解決方案。

    雖然自動化特征工程目前是學術研究中非常火的一個方向,但目前還不夠成熟,也沒有非常有效的方法很好地應用于各類業務場景中。自動特征工程在真實業務場景中確實是一個比較強的需求,因為手動構建特征工程需要很強的領域知識,需要懂機器學習的領域專家參與,而既懂機器學習又對業務理解透徹的人畢竟是少數。對于提供機器學習服務的云計算公司或者 toB 創業公司,需要接觸到很多不同的行業,也不可能為每個領域配備一批專家,因此也希望可以通過技術手段來做自動特征工程,以減少人力和資源的投入,加快項目的推進進度,在這方面國內的明星創業公司第四范式做了很多嘗試。

    對于自動特征工程在推薦系統中的應用,讀者可以看看參考文獻 12、13,這兩篇文章中提供了很多很好的方法和思路。

    六、總結

    本文對推薦系統算法模型構建過程中依賴的數據源進行了較全面的介紹,包括數據的種類、數據生成、數據預處理、數據存儲等,這些數據是構建推薦模型的原料。

    在講解數據的基礎上,我們介紹了特征工程相關的概念和技術,通過特征工程可以將數據轉化為推薦算法可以直接使用的特征,這時推薦算法才能夠發揮用武之地。

    同時,我們講解了常用的推薦算法是怎么使用數據和基于這些數據來構建特征的,有了這些知識,我們可以更好、更全面地理解推薦業務全流程,而不僅僅只是知道算法。

    在最后,作者根據自己的經驗和理解,對推薦系統在數據與特征工程的后續發展方向和面臨的挑戰上進行了探討,希望給讀者提供一定的方向性指導。

    推薦系統的數據與特征工程這塊知識是一般書本上很少講到但是在實際業務中非常重要的,期望本章可以讓讀者較全面地學習了解這方面的知識,并能學以致用。

    參考文獻

    1.?圖書:《精通特征工程》

    2.?圖書:《特征工程入門與實踐》

    2.?[特征工程到底是什么?] https://www.zhihu.com/question/29316149

    3.?[2019] Taking the Human out of Learning Applications- A Survey on Automated Machine Learning

    4.?[2019] AutoInt: Automatic Feature Interaction Learning via Self-Attentive Neural Networks

    5.?[2016 YouTube] Deep Neural Networks for YouTube Recommendations

    6.?[2016 Google] Wide & Deep Learning for Recommender Systems

    7.?[淺談微視推薦系統中的特征工程] https://mp.weixin.qq.com/s/EgiSIJCRfiRLKwHUC1m46A

    8.?[如何解決特征工程,克服工業界應用 AI 的巨大難關] 如何解決特征工程,克服工業界應用 AI 的巨大難關_語言 & 開發_陳雨強_InfoQ精選文章

    9.?http://spark.apache.org/docs/latest/ml-features.html

    10.?https://scikit-learn.org/stable/data_transforms.html

    11.?[AutoML 在推薦系統中的應用] https://gitbook.cn/books/5bcd96da48da2b3b6ac43327/index.html

    12.?[羅遠飛:自動特征工程在推薦系統中的研究] https://zhuanlan.zhihu.com/p/98006452

    13.?[2019] AutoCross: Automatic Feature Crossing for Tabular Data in Real-World Applications

    14.?[圖書] 數據驅動:從方法到實踐

    15.?https://github.com/optuna/optuna

    推薦系統之數據與特征工程(二十三)_數據_數據與智能_InfoQ寫作社區

    總結

    以上是生活随笔為你收集整理的推荐系统:数据与特征工程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。