💡一句話定義
為什麼需要它?因為東西太多、注意力太少。Netflix 有上萬部片、蝦皮有上億件商品,沒有人逛得完;推薦系統把「找東西」的成本從使用者身上搬到系統身上,這就是電商、影音、社群平台的核心引擎。
🎮互動:迷你推薦引擎
下面是 6 位使用者 × 8 部電影的評分矩陣(1–5 分,虛線格=還沒看過)。點一位使用者的名字,系統會用餘弦相似度(Cosine Similarity)找出跟他最像的人(或最像的電影),預測空格的分數,並列出推薦清單。切換「使用者式/物品式」看看答案會不會一樣。
相似度排行
📣 推薦清單(預測分數高→低)
🧭三大路線:內容式、協同過濾、混合式
推薦的核心問題只有一個:「憑什麼說你會喜歡這個?」依據不同,就分成三條路線。
看物品本身的特徵:你愛看科幻片 → 推其他科幻片。只需要「你」的紀錄+物品的標籤/描述,不需要別人。
看群眾的行為:「跟你品味很像的人也愛這部」。完全不看物品內容,只靠評分/點擊矩陣。
兩者合體:新品沒人評過用內容式頂著、資料夠了交給協同過濾,再加人氣、時間等特徵。實務上幾乎都是混合式。
| 面向 | 內容式 | 協同過濾 | 混合式 |
|---|---|---|---|
| 推薦依據 | 物品特徵相似(類型、導演、關鍵字、embedding) | 使用者 × 物品互動矩陣 | 兩者+額外特徵 |
| 需要的資料 | 物品描述 + 該使用者歷史 | 大量使用者的行為 | 都要 |
| 新物品(沒人評過) | ✅ 有描述就能推 | ❌ 冷啟動 | ✅ 用內容式補 |
| 新使用者(沒歷史) | ❌ 不知道你愛什麼 | ❌ 冷啟動 | 用問卷/人氣榜補 |
| 驚喜度(Serendipity) | 低:越推越像,容易「一直推科幻片」 | 高:能推你沒想過但同好愛的東西 | 可調 |
| 可解釋性 | 高:「因為你看過 X」 | 中:「喜歡 X 的人也喜歡 Y」 | 視設計 |
| 代表例子 | 新聞/文章推薦、Pandora 音樂基因 | Amazon「買了這個的人也買」、Netflix Prize | YouTube、Netflix、蝦皮首頁 |
🔢協同過濾怎麼算:鄰居法與矩陣分解
① 鄰居法(Memory-based):使用者式 vs 物品式
上面的互動就是鄰居法。使用者式(User-based)先找「跟你最像的 k 個人」,看他們怎麼評你沒看過的片;物品式(Item-based)先算「片與片之間的相似度」(看同一群人是否給相近評價),再用你看過的片去推相似的片。
| 面向 | 使用者式 User-based | 物品式 Item-based |
|---|---|---|
| 相似度算誰 | 人跟人(比較兩列) | 物品跟物品(比較兩欄) |
| 直覺解釋 | 「品味像你的人也喜歡」 | 「看過這部的人也看了那部」 |
| 穩定性 | 人的口味常變、新使用者多,相似度要常重算 | 物品關係相對穩定,可離線先算好 |
| 適合 | 使用者少、物品多 | 使用者多、物品少(Amazon 2003 年論文的選擇) |
② 矩陣分解(Matrix Factorization, MF)
鄰居法有個痛點:矩陣太稀疏(Netflix 使用者平均只評過不到 1% 的片),很多人之間根本找不到共同評過的片。矩陣分解的想法是:把巨大的評分矩陣 $R$($m$ 個使用者 × $n$ 部片)拆成兩個瘦長的矩陣相乘——每位使用者一條 $k$ 維向量、每部片一條 $k$ 維向量,兩者內積就是預測評分。
🥶冷啟動,以及你以為沒給分其實一直在給分
冷啟動問題(Cold Start)
協同過濾全靠「別人怎麼評」,所以新使用者(沒有歷史)跟新物品(沒人評過)在矩陣裡是整條空白——鄰居找不到、向量學不出來,這叫冷啟動。常見解法:
- 新使用者:註冊時問幾題「挑三部你喜歡的片」、先推熱門榜、用人口統計或裝置資訊猜一個起點。
- 新物品:靠內容式(有標籤/描述/圖文 embedding 就能算相似)、先曝光給一小群人蒐集回饋(探索 exploration)。
- 這也是「混合式幾乎是標準答案」的主因。
顯性回饋 vs 隱性回饋
| 面向 | 顯性回饋 Explicit | 隱性回饋 Implicit |
|---|---|---|
| 例子 | 打星星、按讚/倒讚、寫評論 | 點擊、觀看時長、加購物車、購買、跳過、搜尋 |
| 數量 | 很少(多數人懶得評) | 海量,每個動作都是訊號 |
| 意義清楚嗎 | 清楚:5 星就是喜歡 | 模糊:點了不一定喜歡;沒點不代表不喜歡,可能只是沒看到 |
| 負樣本 | 有(1 星) | 幾乎沒有「明確不喜歡」,要靠抽樣假設 |
| 實務主流 | 早期(Netflix Prize 時代) | 現在的主流(YouTube、TikTok 看完成率、重播、停留) |
📏推薦好不好,怎麼量?
推薦系統輸出的是「排好順序的前 K 名」,所以指標都在問:前 K 名裡命中幾個?命中的有沒有排前面?而不是整體分類的 Accuracy。點下面清單中的項目,把它標成「使用者真的喜歡」,看指標怎麼變。
推的 5 部裡有幾成命中
他喜歡的全部,被我推到幾成
命中且排越前面分越高
DCG ÷ 理想排序的 DCG
Precision@K、Recall@K、NDCG、MAP、Hit Rate。離線用歷史資料算,線上用 CTR、轉換率、停留時間。
整個片庫裡有多少比例的物品「曾被推薦出去」。只推熱門片的系統覆蓋率很低,長尾商品永遠出不了頭。
同一份推薦清單裡物品彼此有多不像。全推漫威片 Precision 可能很高,但使用者會膩。
Novelty:推的是不是使用者沒看過的;Serendipity:意料之外但喜歡。這兩個才是留住人的關鍵。
⚠️同溫層、公平性與其他風險
- 人氣偏差(Popularity Bias):協同過濾天生偏愛熱門物品(資料多、相似度好算),長尾創作者被埋沒;覆蓋率指標就是在抓這個。
- 公平性(Fairness):對使用者端——少數族群的資料少、推得差;對物品/供給端——新賣家、小眾創作者曝光不公平。履歷推薦、貸款推薦若學到性別或種族相關的歷史偏差,會把歧視自動化。延伸閱讀:公平性與去偏見。
- 隱私:推薦越準=蒐集越多行為資料;差分隱私、聯邦學習是對策方向。
- 操弄:刷評、假帳號(shilling attack)可以把某物品「推」進所有人的清單。
- 目標錯置:只優化點擊率會推聳動內容;平台常改成優化「有意義的停留」或長期留存。
🤖LLM 時代的推薦:一切都是 embedding 檢索
現代推薦系統的主流架構是兩階段:
- 召回(Retrieval):把使用者和物品都編成向量(embedding),用餘弦相似度/內積在向量資料庫裡做近似最近鄰搜尋,從上億物品中撈出幾百個候選。矩陣分解學出的 P、Q 就是最早的 embedding;現在改用雙塔神經網路(Two-tower)或直接拿 LLM 的文字/圖片 embedding。
- 排序(Ranking):對這幾百個候選用更重的模型(加入情境、時間、裝置等特徵)精排,再套多樣性規則輸出前 K 名。
✅自我檢測
🎯重點整理
- 本質:推薦=在「使用者 × 物品」矩陣上填空,再把預測最高的前 K 名排給你。
- 三路線:內容式看物品特徵、協同過濾看群眾行為、混合式兩者合體(實務標準)。
- 協同過濾兩種算法:鄰居法(使用者式/物品式,靠相似度)與矩陣分解(R ≈ P·Qᵀ,學出隱因子向量)。
- 冷啟動:新使用者/新物品沒有互動資料,協同過濾失效,要靠內容式、熱門榜、問卷補。
- 回饋:顯性(評分)少而清楚,隱性(點擊、購買)多而模糊;「沒互動 ≠ 不喜歡」。
- 指標:Precision@K、Recall@K 看命中;NDCG 多考慮排序;覆蓋率、多樣性、新穎性看生態健康。不能只看 Accuracy。
- 風險:同溫層回饋迴圈、人氣偏差、公平性、隱私、刷評操弄;用探索、多樣性、解釋與稽核對治。
- 現代架構:embedding 召回 + 精排;LLM 讓內容式與對話式推薦大幅升級。