AI必備知識:推薦系統
本文作者詳細介紹了AI推薦系統,并提出了自己的想法。跟著作者思路一起來了解一下吧!
一、好的推薦系統
1. 什么是好的推薦系統——用戶視角
什么是推薦系統?
當你心理產生一個需求的時候,能通過這個工具順利實現對這個需求的搜索,并獲得符合心理預期的產品列表,這個工具我們就稱之為——推薦系統。
例如在現實生活中我們經常會用淘寶、京東、百度等產品,人們通常會基于目的(例如買洗面奶、洗發水、圖書)的情況下去搜索想要的產品;或是在需求不明確的情況下,期望外部能傳達符合自身內心需求的信息。
那么,什么樣的推薦系統是好的推薦系統呢?
1.1 用戶層面:對用戶真正有價值的推薦
1.1.1 符合用戶的預期
推薦結果精準,能較大概率的覆蓋用戶的需求;用戶搜索詞與推薦物品有較高的匹配度,這里通常用召回率和準確率來衡量上述指標。
- 召回率:正例在實際總的正例中被預測正確的概率
- 準確率:正例被預測正確的概率
1.1.2 讓用戶產生驚喜
在滿足精準性的情況下,推薦系統能挖掘人性需求,幫用戶拓展眼界探索未知,產生驚喜。
其體現在推薦結果的多樣性,物品間知識關聯性等。比如用戶搜索古典音樂類書籍,可以在列表中增加與此類型音樂相配的古典舞蹈、茶藝等書籍.
另外,推薦物品不能和用戶所購買物品物理綁定。比如用戶購買紅樓夢上,系統推薦紅樓夢下,這個推薦對用戶來說并不存在真正心理需求
1.2 系統層面:技術
對用戶而言,對推薦結果的預期、反饋的時間、推薦物品更新的頻率、系統容錯機制等,都會直接影響用戶體驗。因此在系統層面,一個優秀的推薦系統需具備但不限于:
- 強大抵御并處理噪聲數據(例如刷單產生的無效數據)的能力
- 高效數據計算及傳輸能力
- 穩定的存儲機制
- 算法的精準性
1.3 不斷完善與優化
就像人一樣,只有不斷的學習,才能完善自身的知識體系以及對世界的認知,系統亦然。
好的推薦系統一定具備自我學習的能力,通過建立反饋機制和用戶進行交互,從而不斷優化對用戶群體的認知,最終能實現對用戶群體的精準聚類,為每類群體建立模型,物品精準投放。
1.4 讓用戶信服的推薦理由
好的推薦系統勢必會讓用戶產生強烈的信任與依賴感,給用戶提供物品推薦的依據——推薦理由。
推薦理由可以體現出系統是如何判斷物品進入用戶的興趣范圍的。常用的推薦理由大概分為以下四類:
- 熱門商品;推薦系統通常都會賦予部分熱門商品一定的權重,由于感興趣的人基數非常大,所以系統判斷目標用戶感興趣的概率也較大
- 目標用戶的好友同時也喜歡此類物品
- 喜歡某類物品的用戶同時也喜歡這類物品
- 與某類物品內容有極大的關聯性;這里關聯性可以逐步細化,比如基于知識體系的推薦,即不同領域的匹配,或同一領域的梯度匹配等
1.5 實現雙贏
好的推薦系統不僅能讓用戶找到目標物品,也能讓商家發現目標/潛在的用戶群體,實現共贏。
2.什么是好的推薦系統——產品視角
推薦系統都會有一個明確的目的,無論是為了突破技術壁壘還是基于商業目的,最終都會根據目標,通過特定的用戶行為數據來判斷成功與否。
比如對于電商平臺,用戶關注、點贊、收藏、加入購物車等操作,都可以在一定程度上衡量推薦結果的精準性,但并未達到此系統的最終目標——支付。
因此我們可以選與系統最終目標最匹配的用戶行為,也就是在這個過程中用戶付出代價最大的行為作為主要的判斷依據,比如購買成功,對此行為賦予相對較大的權重。
二、推薦系統架構
通過上面的介紹,大家應該對推薦系統有一個初步的認識了,那么推薦系統是由哪幾部分構成呢,在這一部分,我將逐一解答。
大部分推薦系統都是由前臺展示頁面、后臺日志系統和推薦算法系統三部分構成。
1. 前臺展示頁面
前臺展示頁面是直觀展示給用戶的界面,通過UI與用戶交互,交互產生的用戶行為數據將存儲在后臺日志系統中,開發者根據推薦算法對日志系統中的數據進行處理及分析,最終生成推薦結果。
那么,交互產生的用戶行為數據包括哪些呢?
- 用戶自身基礎屬性;即性別、年齡、學歷、職業、所在地等,通常來源于用戶注冊信息或是其他平臺數據。
- 用戶行為:瀏覽網頁、點擊、收藏、購買、點贊、關注等行為。
- 用戶行為結果:產生的話題、搜索關鍵詞及反饋(評論/打分)等。
每種類型的數據可以抽象為一種特征,獲取方式可來源于目標網站或社交網絡。
2. 后臺日志系統
日志系統主要是用來記錄系統運行的軌跡,在記錄的同時,跟蹤分析錯誤,審計系統運行的流程。
日志記錄的內容通常分為兩大類,一是面向用戶,二是面向開發者,這里我們更多關注第一類。
用戶行為都會存儲在日志數據庫中,由于用戶產生的數據量巨大且速度快,為了保證數據傳輸的穩定性,可以嵌入高吞吐量分布式消息系統——Kafka。
同時為了提高數據處理效率,通常會設定日志內容邊界對檢測出的無效數據源(例如刷單數據)先做過濾。當然經過篩選后的數據也并非規整,這就需要對數據進行一定層級的分級分類和格式規范了。
比如用戶點擊行為,會生成相應的點擊日志,用戶的每次查詢會生成一個展示日志,與此同時會有一個并行的程序將歸并點擊日志與展示日志。
3. 推薦系統算法
有了前端展示后和后端數據之后,那么如何實現他倆的交互呢,這中間需要一個連接的橋梁——推薦系統算法。
推薦系統算法可以抽象為一個規則,只有把這個規則定義好,前端才知道哪些數據該展示并如何展示,后端數據庫也知道哪些數據有價值。否則,如果將所有日志內容輸出,不僅會增大用戶信息檢索的困難,系統也就失去了自身意義。
總的來說,推薦系統的實質就是一個用戶行為特征與物品特征匹配的過程。
用戶端特征包含用戶自身、用戶行為和用戶行為結果三部分;物品特征包含標簽、內容(關鍵詞)等。
推薦結果均是基于用戶特征及物品特征原始數據,在不同維度(時間、多樣性、流行度等)上,根據用戶需求賦予權重并進行處理(篩選、排序等)后的結果。即遵循用戶—特征—物品過程。當推薦系統生成初始結果后,在通過過濾、排名算法生成最終推薦結果和推薦理由。
推薦引擎可抽象成一種特征,每種特征對應成一種推薦策略,結合不同用戶需求,調整每個具體特征上所賦予的權重,最終生成特征物品-特征映射{item:Userfeature},Userfeature為多個特征權重相加后的最終值。
三、常用推薦系統算法
1. 常用系統原理介紹
我們從推薦系統具體要解決什么問題以及如何解決問題來剖析原理。
首先,推薦系統要解決的最核心的兩個關鍵點是:如何發現用戶感興趣的物品和如何確定物品之間的關系。其次,每個問題分別如何解決呢?
1.1 如何發現用戶感興趣的物品
1.1.1 用戶主動告訴系統對哪些類型感興趣
用戶自行選定感興趣的關鍵詞標簽,系統將找到與此標簽匹配的物品。
1.1.2 通過分析用戶行為數據
利用用戶在平臺的歷史瀏覽記錄獲取能代表用戶的關鍵詞,或導入社交數據,獲取用戶好友列表,從而基于用戶好友喜愛物品生成推薦列表。
1.2 如何確定物品與物品間的關系——相似度
相似度計算原理:所有相似度的計算都是基于矩陣的運算。
1.2.1 基于內容(關鍵詞/標簽)
大部分物品都會多維度特征,通過特征從而實現與用戶的期望得以匹配,常用的是通過物品內容關鍵詞或是給物品打標簽的形式來匹配。
1.2.2 協同過濾
協同過濾也是推薦系統中常用的算法,其分為兩種,基于用戶和基于物品。
那什么是基于用戶呢?
就是找到和你相似的一個小群體,小群體里面喜歡的東西都是你喜歡的,你獲得的推薦結果就是這個小群體喜愛的物品集合。
那什么基于物品呢?
基于用戶興趣交集計算物品間的相似度,即喜歡物品i的用戶有多少也喜歡物品j,通常用來表示物品間的相似度,同時結合用戶歷史行為生成推薦列表;用戶的歷史行為對物品間的相似性也具有一定的貢獻度。
這樣看來,基于物品的推薦系統,更加個性化同時也一定程度上反映了用戶的興趣傳承。
2. 如何實現更加精準的分類
僅僅通過用戶間興趣交集生成推列表往往是不夠的,在內容、標簽的分類以及人群之間的關系上,如何進行深度挖掘?下面幾種方法提供了一些優化思路。
2.1 混合推薦
在實際的案例中,單個的推薦模型大多都無法滿足預期,所以通常從系統、算法、結果、處理流程上采用不同的混合策略。
例如基于內容增強協同過濾(The content-boosted?collaborative filtering recommender),此算法融合了協同過濾和基于內容的算法思想,和基于內容或協同過濾的單個模型相比,它預測能達到比較高的精度,同時它也能解決了數據稀疏和冷啟動問題。
2.2?隱語義模型
2.2.1 隱語義概念
類似于協同過濾中基于物品的方法;在每個具體分類中,以用戶行為(興趣)作為物品權重的分配依據。
2.2.2 與協同過濾不同之處(優化點):
- 物品可以有多個分類維度;基于用戶行為決定每個類中物品的權重(eg:如果某類用戶群體都對某一物品特別感興趣,在這類中這個物品的權重就非常大)
- 分類粒度更加細化;比如關于《深入理解OpenCV》這本書原來被劃分為【計算機】類,細化之后可以分為【圖像處理】類;
2.3?文本精準匹配
為量化文本間的關聯度,引入一個概念——TF-idf,通過比對搜索關鍵詞與物品庫單個物品的關鍵詞或標簽的相似性,從而生成推薦列表。
TF-idf值越大,說明相關性越大,反之;這里對TF-idf公式原理做簡要說明加強理解:
計算公式:TF-idf = ?f(t,d) x idf(t,D)
TF:頻率;搜索詞在特定文檔中出現的頻率:
Idf:搜索詞在其他文檔中出現的次數:
在文檔搜索中,不僅要考慮搜索關鍵詞在目標文檔出現的頻率,也要考慮關鍵詞在其他文檔出現的頻率。
如果搜索詞是大眾詞語,那么搜索的結果完全不具備參考價值,比如搜索詞為the;在idf公式中,分子為所有文檔的個數,分母為包含這個關鍵詞的文檔個數,如果是大眾詞語,則:idf=0,TF-idf=0,物品(關鍵詞)間沒有相關性。
2.4?利用社交網絡數據
社交網絡中包含大量的用戶數據,能更好的反映用戶間的關系,用戶關系通常有三種:
- 互為好友(Facebook)
- 單向關注(Twitter)
- 興趣小組模式(豆瓣小組)
利用社交網絡數據進行推薦通常都將用戶間的熟悉程度和興趣相似度作為最主要的兩個判別指標。
用戶間熟悉程度,即通過用戶共同好友數量計算;興趣相似度,即通過兩個用戶喜愛物品的重合度進行衡量。
弊端:用戶數據量巨大,數據庫讀取消耗時間太長。
優化方法:
- 減少數據量;
- 重構數據庫;
2.5?時間特征
在日常生活中,物品迭代速度非???,人們的近期行為通常比遠期行為更加符合目前自身興趣需求,因此在系統滿足精準性的情況下,需要考慮推薦系統的時效性,根據不同推薦內容賦予時間權重。
例如新聞與經典書籍,新聞更新頻繁具有較高的時效性,而經典書籍例如紅樓夢,社會對它的需求已經處于平穩,因此時效性不高。
如何將時間權重賦予物品:
- 物品的生命周期:物品生命周期的長短決定了物品的時效性。一個物品隨著流行度的增長,在線時長(一個物品在某天被用戶產生過行為)也隨之增加,斜率越大說明具有較低的時效性生命周期較長(如wikipedia),斜率越小說明具有較高的時效性生命周期較短(如nytimes)。所以物品生命周期越長,與時間相關性越低。
- 人的興趣愛好會隨著時間而改變,不同階段所感興趣的物品差異較大,時間相隔越久,用戶對物品產生的行為權重越低,近期行為賦予較高權重。
除此之外,不同物品推薦的時間點也是需要考慮因素之一,比如用戶在工作時間,盡可能推送與工作相關的資訊或資料,與工作內容不相關的信息做降權,下班時間再適當調整權重。
但是同時也要考慮不同崗位工作狀態存在不一致的情況,具體推送情況可以通過每個用戶大量的行為數據來判斷。
2.6?環境特征
環境特征通??梢耘c時間特征配合。用戶在不同的時間與地點的需求差異可能會很大甚至完全不同,或是在特定的時間與地點,對某種信息的需求會急速上升。
例如用戶在紐約旅游,關注點會大量集中在紐約的衣食住行,但如果這個時候推薦系統推薦的信息都是倫敦的,那么結果可想而知。
四、?實戰篇——如何維護用戶數據
當用戶數據量太大,例如引入社交網絡或是新聞實施推薦,此時如果每次更新都讀取一次數據庫,那么效率會大幅下降導致用戶體驗不佳。
目前常用的有兩種方案:
1. 消息隊列
為每個用戶維護一個消息隊列,里面包含用戶的基本屬性(如年齡、性別、職業等)、喜愛的物品、朋友圈等。每當這個用戶產生新的動作(搜索),系統將根據特定的規則,賦予消息隊列中每部分數據的權重。最終獲得推薦列表。
這里科普一下什么是消息隊列。顧名思義,就是把傳輸的消息放在隊列里,隊列,可以抽象為一個容器,所以消息隊列,就是一個用作保存傳輸中的消息容器。
在這個基礎上,這個容器可以跨平臺、語言提供可靠的、持久的異步通訊機制。
- 可靠是指:有且只有一次;有序。
- 異步是指:發送方和接收方可以不同時在線。
另外,通過消息隊列還能實現系統解耦,這使得各個系統間可以相對獨立運行。
2. 建立喜好詞關鍵表
在數據庫中,我們為每個用戶維護一個map,也就是建立“key-value”鍵值對,key對應用戶喜好詞,value對應喜好程度。
每個新聞會有對應的關鍵詞和Tf-idf值。當用戶瀏覽一篇新聞時,系統會將這篇新聞的關鍵詞和Tf-idf值插入到用戶喜好此列表里。如果用戶瀏覽了包含與原有相同關鍵詞的新聞,Tf-idf值會自動相加并更新原有值。同時考慮數據庫存儲問題,根據具體需求為關鍵詞量設定一個上限。
當然,除了存儲問題,這里還有一個新問題:用戶興趣是否會變化呢?
比如在某某手機的發布會前或是世界杯,用戶只在這段時間集中關注某一話題,但之后可能完全不在意了,那么在喜好詞列表里,如何體現用戶興趣遷移呢?
這里引入一個新概念——衰減機制。每一個Tf-idf值乘上一個衰減因子, 同時在喜好列表中設定一個閾值L,當Tf-idf減少到小于L的時候,關鍵詞直接刪除。
五、未來思考
一個人在群體中的重要性和影響力以及人與人之間一直是難以通過幾個參數或幾個模型就能判別的,它們均是一個不規則的非線性模型。
平臺數據對于深度挖掘人與人之間的關系來說其實是微不足道的,在現實生活中,人與人之間的關系本來就難以定論,存在著表層關系與深層關系。
表層關系具體是指社會賦予你們的關系,比如同事、上下屬、同學等,深層關系則是指你們除了是同事以外,可能私下里是有著相同的興趣愛好的朋友。
表層關系通??梢杂脭祿诰蚨x,比如兩個人的通話記錄(這里不是指通話內容,而是打電話的時間、時長等)、位置信息等,但是外部信息數據通常會根據個人習慣而產生誤差。
其實,對推薦系統的理解等價于對人性的理解;挖掘人與人的關系、人與物的關系、物與物的關系。
除了人們主動表達的需求,我認為最重要的,其實是人性的欲望。所謂道生一,一生二,三生萬物,萬物由道生出,而欲望乃道的其中一個產物。所以欲望通常不會平白無故的產生,欲望與欲望之間也不會毫無關聯,個人的成長經歷及生活環境造就了一個人的性格,讓他養成了一些習慣。
習慣通常是有形無意識表達,而欲望通常是無意識無形表達。我在想,是否把習慣與欲望結合起來,是否就是對人性的建模。大數據時代,通過大量的用戶成長數據與環境數據或許可以適當挖掘其中規則,但更加深入的,其實是要推導因果的關系。
參考文獻:
[1] 新聞推薦系統:基于內容的推薦算法——TFIDF、衰減機制
[2]《推薦系統實戰》;
[3]《日志系統設計》
[4]《消息隊列應用場景》
[5] 推薦系統的混合加權技術研究
[6] Xiaoyuan Su and Taghi M. Khoshgoftaar, “A Survey of Collaborative Filtering Techniques”,Advances in Artificial Intelligence,2009.
本文由 @ShallyFeng 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自 Unsplash ,基于 CC0 協議
算法這塊還有一個多路召回,一般單個算法模型不能滿足推薦的精準度。
贊贊
棒棒的