推薦系統概述——《推薦系統:原理與實踐》讀書筆記

從假設題庫的發展過程開始,瞭解推薦系統常見模型、基本方法和常見問題。

全文結構

  1. 前言
    1. 學習問題
  2. 正文
    1. 一個系統的發展過程
    2. 推薦模型概覽
    3. 常見問題
  3. 參考

前言

綜合以往幾個版本的經驗;題庫刷題小程序(需求完成,掛起)以及『微軟萬科實踐營』的培訓經歷,想到未來公司業務一定會用到推薦系統,尤其是『題庫』方面。因此,選擇這本書學習相關知識。而經過一段時間的學習,迫不及待地於此分享,希望不僅能爲大家在推薦系統學習方面提供參考,也能爲大家在研發過程中如何通過數學提升版本質量和開發效率提供思路。

這本書讀了一部分(概述;近鄰協同過濾;零散閱讀瀏覽後續章節)。個人感受是,對於數學不好的同學,可以挑着看,瞭解推薦算法分類、使用和優化方法、可達成的效果等相關概念。對於大學有一定數學底子的同學,可以先看着,裏面沒有代碼,只有文字描述和少量的數學公式推導,只要大學有一定數學底子,跟着書中的思路走,由簡到繁的推導相關公式,就能理解。但依然不可避免的會出現一些本科階段沒學好或沒接觸過的數學知識,我在與我的大學老師交流後,建議有興趣的同學輔以另外幾本書一同閱讀——高等數學、概率論、線性代數、矩陣分析、概率分析。

這本書完全沒有代碼相關的東西,因此,有一定數學基礎的非研發同學也能閱讀。且個人感覺裏面介紹各種推薦算法(推薦模型)的思路與我大學時玩數學建模的過程高度相似,如下圖。簡化並抽象問題——根據實際需要,抽象對象特徵的數學表達;模型建立——從核心問題開始構建最基礎的模型;迭代模型——不斷提出新問題(假設),並逐個解決(調整模型)、檢驗;得到最終模型,並應用於實踐。

學習問題

正式分享之前,先提出幾個我在學習過程中遇到並解決的幾個問題。

這本書太複雜,我覺得我作爲一個數學能力並不算突出的本科生,會看不懂。

看書前,我確實懷有這個疑慮。看到第三章,並大致瀏覽了後續章節後,我瞭解到,這個疑慮是多餘的。這本書非常好的一點是——它雖然深入而詳細地講解了推薦系統的相關知識,但它是循序漸進的。哪怕是一個大學數學不及格的人,我相信他至少能看懂第一章和後續每個章節的前幾個小節。而數學越好的人,看着會越感親切,因爲它不會上來就講一大堆很複雜的公式,幾乎都是從最簡單的數學模型開始,逐步提出新的問題,並給出更進一步的模型,逐步迭代完善——這個過程與數學建模十分相似。

裏面有一個數學原理、名詞看不懂,怎麼辦?

我在學習過程中,也有遇到很多問題。所幸有一名大學老師,至今依然保有聯繫。他原本便是通信出身的,對數學瞭解頗深。他給的建議是,一定要去學習 概率論矩陣分析 ,這本書遇到的很多問題實際上都是這兩門課程的內容。因爲事有輕重緩急,這兩門課程的學習我個人暫未安排上,這裏暫且提出,便於爲有興趣深入學習的同學提供參考。

正文

一個系統的發展過程

以下過程皆爲假設,暫未實行,目的僅在於幫助大家瞭解推薦系統的幾種基本模型。

我們有一個題庫,裏面有海量題目。現在我們希望做一個刷題產品,學生可以在上面刷題。這時候遇到了第一個問題。

基於知識的推薦模型

因爲各種歷史原因,導致當前系統歷史數據不足,但又希望能夠啓用推薦系統,爲學生作出有效推薦。這類問題稱爲 冷啓動 問題。此時,可以由學生通過某種交互方式,向系統明確描述他希望獲取的題目(題型、學科、試題來源、關鍵字標籤等),而後由系統基於所需的規則和相似度函數(知識庫),檢索學生需要的題目,向該學生推薦。

此時,這個系統稱爲基於知識的推薦系統。基於知識的推薦系統的一大特點是:依據用戶給出的明確需求做出推薦,即:推薦結果 = 學生要求 + 題目特徵 + 知識庫(預先定義的規則;相似度函數)。

進一步抽象,即:推薦結果 = 用戶要求 + 物品屬性 + 領域知識

基於物品的近鄰協同過濾模型

現在,刷題小程序已經有人在用了,並且用了相當長一段時間。使用的學生可能不多,但每位同學黏性很大,使用頻率很高,因而產生了很多的答題記錄、搜題記錄、題目評論等行爲記錄。此時,我們意式到,學生可能在不同的時期,對題目的需求是不同的,因此這個時候,我們通過分析他們過去一段時間內的搜題歷史、答題歷史、錯題記錄等,可以得到他在最近得一段時間內,可能關注具有某些特徵得題目——關鍵字、學科、試題來源(模擬考?中考?聯考?)、題型等——這種屬於 正面評價(評分)。他或許還會產生一些 跳過題目 的操作,此時,我們可以知道他不需要具有某些特徵得題目——這種屬於 負面評價(評分)

有了用戶對某些題目得正面評價和負面評價之後,我們可以分析最近一段時間,用戶更需要具有某些特徵(屬性)的題目,然後使系統向其推送更接近其傾向的題目,幫助用戶更高效的獲取自己期望的題目。

此時,推薦結果 = 用戶評分 + 物品屬性

基於用戶的近鄰協同過濾模型

現在,刷題小程序的基礎功能趨於完善,經過一些運營活動,積累了大量用戶。此時,不但擁有很多用戶對題目的評分,且每位用戶都能在系統中找到與其相似的用戶——比如他們具有高度相似或相同的題目喜好標籤,通過聚類算法,我們將彼此高度相似的用戶聚在了一起,此時,能很容易找到與指定用戶相似的其他用戶。

假設存在學生A,做過題目t,存在另一學生B沒做過題目t。因爲學生B與學生A相似,所以我們可以認爲學生B可能也對題目t感興趣,從而向學生B推送題目t。該模型稱爲基於用戶的協同過濾推薦模型,此時,推薦結果 = 用戶評分 + 社區評分

  1. 以防萬一,這裏再次提醒一下,分類和聚類是不同的。『分類』將數據根據特定規則劃分至已知的類型中;『聚類』將數據集中,彼此相似的數據聚成簇,此時每個簇中的數據都是彼此相似的(關注相似性)。
  2. 這裏我沒有提出基於內容的推薦系統,實際上,基於物品的儘量協同過濾模型與基於內容的模型是相似的。個人理解是,前者關注不同物品屬性標籤的相似性(如題型、難度等),而後者關注不同物品在內容上的相似性(如題幹、題解)。即,後者實現的基礎是基於特徵提取和聚類算法,對相似物品進行聚類。
  3. 實際上,一個推薦系統,往往由多個模型共同組成,稱爲混合集成的推薦系統

推薦模型概覽

持續學習完善中。
圖片

常見問題

每個問題的具體解決方案都是複雜的,在書中都有專門介紹,這裏僅提出,爲大家提供參考,便於在以後的學習和實踐中儘可能留意這些問題的存在。

冷啓動

系統運行之初,可能存在數據不足的問題,因而無法給出有效的推薦結果——這稱之爲冷啓動問題。因此,系統運行之初,選擇對冷啓動問題敏感性較弱的模型更能快速提供有效推薦(如基於知識的推薦模型)。

驚喜性

如果通過某種模型和具體策略,確定學生A喜歡做力學題,而後續推薦結果全爲力學題,此時,系統具有較高的精確度(Precision),但過高的P值有時未必是好事。如果在M個結果中出現錯誤推薦,包含N道光學題,此時,用戶沒有跳過這些題目,而是繼續作答,甚至產生收藏操作(正面評價)。則認爲這個系統具有一定的驚喜性(N/M)。

抗攻擊

推薦系統可能遇到的一種攻擊行爲就是向系統中插入大量的無用評價,比如在淘寶中,一個商家向另一商家的產品注入大量負面評價,或向自己的產品注入大量正面評價。可以想象,在上述近鄰模型中,這種攻擊將直接影響到推薦結果的有效性和合法用戶的體驗質量。當然,也有專門爲抗攻擊或提高模型健壯性的策略,這些內容較爲複雜,在書中也有描述介紹。

隱私問題

切面介紹基於近鄰的協同過濾模型中,可以看到,用戶的行爲被記錄,並看做用戶對物品的正面或負面評價。實際上,不僅在近鄰的協同過濾模型,在其他模型中也有類似做法。在推薦系統中,用戶行爲必然被儘可能多的記錄,分析結果可能包括用戶的個人喜好、觀點等信息,這些信息可能是高度敏感的。

對於模型可能涉及的隱私安全問題,不僅可以從技術架構、政策法規等角度解決,也有一些專門用於保護隱私的算法。比如,數據收集時,可以通過分佈式協議擾動技術等降低數據泄露風險;數據發佈時,可以通過k匿名、冷凝、t-接近模型等方法,干擾數據記錄,使攻擊者無法將數據記錄與其他公開可用的數據相匹配。

參考

  1. Charu C.Aggarwal 著 黎羚利 等譯. 推薦系統:原理與實踐[M]. 北京:機械工業出版社,出版年份:起止頁碼.
  2. 知乎——《推薦系統從入門到接着入門》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章