馬慶祥
(重慶工商職業學院 重慶 401520)
推薦系統整體上都有一個類似的結構,如圖1所示。首先需要采集用戶的行為數據和物品的數據,然后將用戶行為數據經過算法建模,形成興趣模型。然后通過模型預測用戶對新的物品是否感興趣,是就推薦給用戶。用戶接收到新的推薦后,可以對推薦結果標記感興趣還是不感興趣。這樣的行為又會被系統記錄,并以此重新運算,得到新的模型,然后又用新的模型繼續給用戶推薦。基于針對不同推薦內容的場景,本文以推薦系統為基礎,著重研究各種常用推薦算法的原理及核心結構。

圖1 推薦系統結構圖
數據采集有隱式獲取和顯式獲取等多種方式。顯式獲取是指用戶在應用中注冊、完善個人信息、問卷調查,或者線下詢問、訪談、調查、跟蹤等方式取得的數據。這一類方式操作簡便、直接,但用戶基于隱私或者嫌麻煩等各種原因,往往不愿意提供數據。盡管顯式獲取的數據精準度高,但實時效果并不好。隱式獲取是業界普遍采用的方式,通過用戶在應用上的使用行為來推測出用戶的偏好。隱式獲取需要注意的就是要隨時關注用戶的行為變化。
在用戶方面,關于用戶個人信息的主要有性別、年齡、地址、聯系方式等。關于行為方面有頁面瀏覽記錄、頁面停留時間、該頁面的主要內容、頁面上的點喜歡操作、點厭惡操作、點贈花操作、分享、收藏等。
在物品方面,不同的業務場景,物品的描述也不一樣。比如生鮮APP,配送的就是水果、蔬菜、肉食。這類物品的屬性主要就是品牌名稱、類型名稱、產地、單價、生產日期、保質期等。從物品的適用客戶群體分,還有老人、小孩、女性、男性。從適用年齡分,還有嬰幼兒、兒童、青年、成年、老年等。
基于內容的推薦,具體原理如下。
假設已經收集到用戶和物品的數據,去分析用戶喜好的物品,然后尋找與這些物品相似的其他物品來進行推薦。如何判斷物品是否相似,就需要提取用戶偏好的物品的特征。比如,用戶喜歡吃草莓,就可以根據該草莓的產地、口感、顏色、大小、品種、價格等。找到特征后就需要將特征提取出來,由于針對這一類屬性的描述大部分情況是文本,非結構化數據,因此需要從文本中將特征提取出,然后轉換為向量。計算物品的相似度其實就是在計算特征向量的相似度。最終在用戶的推薦列表中,越相似的物品就排名越靠前[1]。
知識推薦系統實際上是一種專家問答系統。基于用戶現階段的知識,和綜合所有物品的特征信息,來尋找合適的推薦。什么情況下需要基于知識的推薦呢?
比如,一個一年級的學生,把一年級的課程學習完畢后需要開始二年級的學習,若是基于內容的推薦,那么就會發現給該生推薦的內容一直是一年級的。另外對于用戶來說購買頻次比較低的物品,比如購買新相機、購買了新的房子、購買了一個婚紗照套餐等,這類用戶行為間隔周期長的情況,系統是很難建立起用戶行為數據,因此會導致推薦的效果較差,這時就需要基于知識的推薦。
基于知識的推薦又分為兩種方式,基于約束的推薦和基于實例的推薦。
基于約束的推薦是指:實現給物品分好類,這個分類也稱約束,然后給每類物品定義一個過濾條件。此時用戶給出需求,推薦系統就尋找滿足需求的分類。若是用戶對物品有更深入的了解,則提出更多的需求,然后系統會在這個分類下繼續尋找過濾條件滿足該需求的數據。比如,用戶希望買一套房子,首先需要確定分類:是別墅、洋房還是普通高層住宅。用戶選擇了洋房后,再次提出要求,需要單價大于5000且小于10000的房子,此時系統根據條件進行過濾。用戶不斷給出條件,系統不斷過濾滿足條件的數據,直到用戶完成數據檢索。
基于實例的推薦需要用戶對物品特征了解非常多,當篩選出數據后,用戶基于自身的知識可以采納推薦或者放棄本次推薦,系統根據用戶的選擇來判斷下一次應該推薦什么給用戶。比如同樣是買房子,系統提前建立好每套房子的知識庫,用戶根據自己了解的信息直接定位到該房子即可。
標簽是用來描述物品的關鍵詞或者是用戶對該目標群體的喜好等,如圖2所示,是某公開課網站的會員常用的標簽。

圖2 公開課常用標簽
標簽的來源有兩種方式,一是用戶體驗了該物品后,由用戶給物品打的標簽,比如課程“網絡爬蟲”,用戶給出的標簽就是“大數據”“爬蟲”“程序”“腳本”等。對于課程“python”,用戶給出的標簽可能就是“編程語言”“數據結構”“解釋型”“面向對象”等。用戶打的標簽,幾乎都是對課程的客觀描述。另一種方式,就是作者給出的,可能既包含對物品的喜好,也包含物品的描述[2]。
當系統采集到大量標簽后,需要進行以下工作:
1.分析該用戶經常使用的標簽。
2.分析擁有這個標簽的所有物品。
3.將物品中沒有被該用戶打過標簽的推薦給該用戶。
通過圖模型來表達用戶行為,也能實現推薦。比如,用戶的購買商品記錄,是表結構的組織形式,如表1所示。

表1 用戶購買物品記錄表
其中“?”表示用戶購買過該物品。采集到這些數據后再轉換為圖的表達形式,如圖3所示。其中連線,表示用戶購買過物品,用戶和物品表示頂點。轉換成圖形后就計算每個用戶頂點到物品頂點之間的路徑條數,比如用戶A到物品1的路徑為:用戶A—物品1;用戶A—物品3—用戶B—物品1;用戶A—物品3—用戶D—物品1,總共3條路徑,其中路徑長度分別是:1,3,3,經過的頂點數量分別是0,2,2。基于這樣的算法,可以推算出用戶A到物品4的最短路徑是:用戶A—物品2—用戶C—物品4,經過2個頂點;用戶A到物品5的最短路徑是:用戶A—物品2—用戶C—物品4—用戶E—物品5,經過4個頂點。如果各頂點的相關性比較高,路徑就會比較短,經過的頂點也比較少,因此可以給用戶A推薦物品4。

圖3 用戶采集模型
關聯規則的原理是基于物品之間的關聯性進行推薦,是通過對用戶的購物記錄進行建模,以發現不同用戶的購物習慣。注意,關聯規則是指物品的關聯關系,而不是因果關系。關聯規則中有3個核心概念:支持度、置信度和提升度。如表2所示用戶的購買記錄。

表2 用戶購買商品記錄表
消費記錄中,所有商品組成的集合稱為總項集,A={鹵肉、鳳爪、紅酒、白菜、蘋果、草魚、花生、啤酒、荔枝、豬肉、萵筍、香蕉、榴蓮、雞腿、牛肉、鯽魚}。項集是指總項集的一部分,可以是一到多個物品的組合,比如{鹵肉}、{鹵肉、鳳爪}、{鹵肉、鳳爪、紅酒}等,稱為k-項集。規則就是至少兩個項組成的k-項集,比如{鹵肉}—{鳳爪}是一條規則,{鹵肉}—{鹵肉、鳳爪、紅酒}也是一條規則。這種規則中,項之間的關聯強度,用支持度和置信度來衡量。
支持度是指:兩件商品A,B在消費記錄中同時出現的概率,就是買了A也會買B的概率。如上圖的購買記錄,有5個訂單,其中買了鹵肉的有4條,買了鳳爪的3條,同時股買鹵肉、鳳爪的是3條。那么{鹵肉}項的支持度是4/5=0.8,{鳳爪}項的支持度為3/5=0.6,{鹵肉、鳳爪}項的支持度也為3/5=0.6。
置信度是指:用戶購買了A還會買B的概率。同樣依據上面的消費記錄,用戶在購買鹵肉又購買了鳳爪的記錄有3條,則推斷用戶在購買鹵肉的前提下會同時購買鳳爪的置信度是3/5=0.6。購買了鹵肉,又購買了啤酒的記錄有1條,因此置信度為1/5=0.2。基于這樣的原理,可以將鹵肉與鳳爪搭配銷售。
提升度是用于衡量關聯規則是否有效的一個度量。意思就是:用戶買了A同時買了B的次數,高于單獨購買B的次數,說明商品A對商品B具有提升作用。依據用戶的消費記錄,{鹵肉、鳳爪}同時出現的有3次,{鹵肉}單獨出現只有1次,說明鳳爪對于鹵肉的銷售具有提升作用。提升度的計算就是:{鹵肉}的支持度:C1=4/5=0.8,{鳳爪}的支持度:C2=3/5=0.6,{鹵肉、鳳爪}的支持度:C3=3/5=0.6。置信度={鹵肉、鳳爪}的支持度/鹵肉}的支持度*{鳳爪}的支持度=0.6/0.8*0.6=1.25。當置信度大于1則說明規則有效,小于1則無效。關聯規則的推薦過程就是尋找所有項組合置信度比較高的規則,然后根據規則進行推薦。
實際上,若是簡單地基于上述規則計算,效率會非常低。因此,實際應用中一般選擇求頻繁項集的置信度,尋找的是強關聯規則。然而尋找頻繁項集也是個計算量巨大的過程,因此業內提出Apriori算法來尋找頻繁項集。該算法有兩個固定性質:
?頻繁項集的子集也是頻繁的
?非頻繁項集的超集是非頻繁的
Apriori的計算過程就是:統計每一個商品項的支持度,將支持度過于低的商品移除,同時也將該商品的超集也移除,這個移除稱為減枝。將剩余的單項商品兩兩組合,再次計算對應的支持度,將組合情況下支持度低的移除,同時將對應的超集移除。基于此規則不斷迭代,直到無法再次進行組合,此時會得到一個頻繁項集。最后,將該頻繁項集進行拆分,取出其中一個商品,比如k1,則剩下k-1個商品。此時,計算{k1}集與{k2,k3,kN-1}集之間的置信度。根據此原理,然后計算{k2,k3}與{k1}之間的置信度。一直迭代,直到計算出所有規則下的置信度。最后根據業務規則,取出置信度大于1的規則來為用戶進行推薦。
實際上,只要是基于用戶人口屬性和行為的推薦都稱為協同過濾。包括圖、關聯規則、知識都是協同過濾推薦的一種。純粹依靠人口行為數據來進行推薦的典型代表是:基于用戶的推薦、基于物品的推薦。基于用戶的推薦步驟是:首先需要找到興趣相似的用戶,然后找到其他用戶喜歡,但是被推薦用戶又沒接觸過的物品,如表3所示,可以看到用戶A與用戶B有兩個相似的物品,則認為A與B用戶興趣相似,然后就可以將物品2推薦給用戶B[3]。

表3 用戶與物品的關聯分析表
基于物品的推薦則是用戶喜歡一個物品,然后尋找與該物品相似的物品來進行推薦,如上圖所示,用戶C喜歡物品1和物品2,此時計算出物品4與物品1和物品2相似,則給用戶C推薦物品4。
“個性化推薦系統”這一概念首次提出,是由于電子商務的興起而逐漸發展成熟,慢慢變成了一個單獨的概念。如今,個性化推薦系統更是得到了更為廣闊的發展,在很多領域都有應用,如教育、影視、音樂、社交,甚至閱讀學習,都有個性化推薦系統的應用。個性化推薦技術的核心主要在于兩個方面,即推薦算法和推薦應用。應用原理就是根據不同推薦應用的需求和限制條件,選擇不同的推薦算法。隨著對推薦算法研究的不斷深入,各種配套科技也在不斷發展,智能化成為大勢所趨,而個性化推薦作為智能化發展過程中重要的部分,也將越來越受到重視。