用戶建模#
用戶建模的目標是把「使用者」轉成系統可運算的特徵與向量,作為推薦演算法的輸入。
推薦系統用的是 User Profile(基於真實資料的用戶特徵),不是產品設計用的 Persona(虛擬人物代表)。兩者不要混淆。
用戶畫像的構成#
用戶畫像 = 人口統計學特徵 + 行為特徵 + 興趣標籤| 類別 | 範例 | 取得方式 |
|---|---|---|
| 人口統計學 | 年齡、性別、地域、職業 | 用戶註冊、第三方資料 |
| 行為特徵 | 瀏覽、點擊、購買、收藏 | 埋點日誌 |
| 興趣標籤 | 喜歡科技、愛看電影 | 從文本/行為挖掘 |
隱式 vs 顯式回饋#
行為資料分兩種,後續章節(協同過濾、矩陣分解)的選型都圍繞這個分類:
| 類型 | 範例 | 特性 |
|---|---|---|
| 顯式回饋 | 評分、按讚、收藏 | 量少、精準、有偏(活躍用戶才會評) |
| 隱式回饋 | 點擊、停留時間、播放完成率 | 量大、雜訊多、無「不喜歡」訊號 |
工業界以隱式回饋為主,原因是顯式回饋資料太稀疏,且「用戶說喜歡什麼」往往與「用戶實際做什麼」不一致。
標籤體系設計#
| 特點 | 說明 |
|---|---|
| 層次結構 | 從粗到細,如:數位 ➡️ 手機 ➡️ iPhone |
| 互斥與非互斥 | 性別標籤互斥,興趣標籤不互斥 |
| 權重 | 標籤強度,反映興趣程度 |
| 時效性 | 興趣會隨時間衰減 |
從標籤到 Embedding#
傳統用戶畫像用「標籤」表示用戶;現代推薦系統幾乎都改用「向量」(Embedding)。
| 表示法 | 形式 | 優缺點 |
|---|---|---|
| 標籤 | {科技: 0.8, 電影: 0.5} | 可解釋、易維護;無法表達細緻關係 |
| Embedding | 一條 64~256 維的稠密向量 | 表達力強、可端到端學習;不可解釋 |
Embedding 是後續所有章節的共通語言:矩陣分解產出 user embedding(第 4 章)、雙塔模型用 user tower 產 embedding(第 7 章)。
短期興趣 vs 長期興趣#
實務上會把用戶建模拆成兩層:
| 層次 | 來源 | 更新頻率 |
|---|---|---|
| 長期興趣 | 累積行為、人口統計學 | 天/週級 |
| 短期興趣 | 最近 N 次瀏覽、Session 行為 | 即時 |
兩者通常會分別建 embedding,再在排序層融合。
特徵工程基礎#
從「原始資料」到「模型可吃的特徵」之間,有一道必經的加工。推薦系統的特徵又多又雜(ID、數值、類別、文本),處理方式直接決定模型能不能學得動。
類別特徵的編碼#
用戶 ID、標籤 ID、品牌等都是高基數類別特徵(unique 值可能上百萬),不能直接丟進模型:
| 編碼方式 | 適用 | 直覺 |
|---|---|---|
| One-hot | 低基數(性別、年齡段) | 每個值一個維度,簡單但維度爆炸 |
| Embedding 層 | 高基數(用戶/物品/標籤 ID) | 把稀疏 ID 壓成稠密低維向量,可學習 |
| 特徵雜湊 | 會持續長出新值(新標籤) | 用 hash 把任意值映到固定桶,省記憶體 |
| 分桶(Bucket) | 連續值想當類別用 | 把年齡切成段、把長尾值併入「其他」 |
數值特徵的正規化#
用戶特徵的尺度差很大:年齡 0100、CTR 01、點擊數可達百萬。尺度不一致會拖慢甚至卡死訓練:
- Min-max / Z-score:把不同特徵拉到相近範圍。
- Log 縮放:點擊數、停留時間常呈長尾(冪律分佈),取 log 後分佈更平滑。
稀疏與特徵交叉#
- 稀疏性:用戶 - 物品矩陣常 99% 以上是空的,多數類別特徵也極稀疏。Embedding 層正是把「百萬維 one-hot」換成「幾十維稠密向量」的關鍵手段,既省記憶體又能對沒見過的值泛化。
- 特徵交叉:線性模型假設特徵彼此獨立,但「年齡 25 × 科技興趣」和「年齡 50 × 科技興趣」其實意義不同。手動交叉(age_bucket × interest)可解釋但成本高;深度模型則能自動學到隱式交叉(見 第 6 章)。
用資訊量挑特徵#
面對上百個候選特徵,可用資訊論判斷哪些值得做:
- 互資訊
I(X;Y)衡量「知道特徵 X 後,對目標 Y 的不確定性減少多少」,越大越該保留。 - 熵
H(X)衡量特徵本身的多樣性,太單一(幾乎都同一值)的特徵貢獻有限。
把工程力氣花在高互資訊的特徵上,而不是盲目把所有特徵都做出來。
從文本挖掘用戶興趣#
當行為資料不足時,可以從用戶寫的、看的、按讚的文本中挖標籤。
TF-IDF#
TF-IDF(t,d) = TF(t,d) × IDF(t)核心:一個詞在某篇文件中出現多、但在整體語料庫中出現少,就是這篇的關鍵詞。
TextRank#
把詞語建成共現圖,套用 PageRank 算每個詞的重要度,取 Top K 為關鍵詞。
命名實體識別(NER)#
從文本中抽出人名、地名、品牌、產品等專有名詞,作為高品質的興趣標籤來源(例如「Apple」「iPhone 15」直接對應到品牌與產品)。
LDA(主題模型)#
假設每篇文件是多個主題的混合,每個主題是多個詞的分佈。輸出:
文件 → 主題分佈 → 詞分佈實務用途:把「文章」歸到「科技 / 體育 / 政治」這類粗粒度主題,作為使用者興趣的補強訊號。
Word2Vec#
把詞映射到稠密向量,相近語意的詞在向量空間中相近。
| 模型 | 輸入 | 輸出 |
|---|---|---|
| CBOW | 上下文詞 | 中心詞 |
| Skip-gram | 中心詞 | 上下文詞 |
from gensim.models import Word2Vec
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1)
vector = model.wv['手機']
similar = model.wv.most_similar('手機')Word2Vec 的詞向量具加法性質:
vector('國王') - vector('男人') + vector('女人') ≈ vector('女王')這是 Embedding 在文字領域最早被廣泛驗證的重要性質,也啟發了後續 Item2Vec、User2Vec 的做法。
基於內容的推薦#
「基於內容的推薦」嚴格來說是與協同過濾(第 3 章)並列的方法,但因為它只用用戶畫像與物品畫像就能跑,沒有用到「群體智慧」,所以放在這章一起學。
流程#
1. 物品內容分析 → 物品向量
2. 用戶行為彙整 → 用戶向量
3. 計算用戶向量與物品向量的相似度
4. 按相似度排序,回傳 TopK相似度計算#
| 方法 | 公式 | 適用場景 |
|---|---|---|
| 餘弦相似度 | cos(θ) = A·B / (|A||B|) | 文本、稀疏向量 |
| 歐氏距離 | √(Σ(a_i - b_i)²) | 稠密向量 |
| Jaccard 相似度 | |A∩B| / |A∪B| | 集合比較 |
優缺點#
| 優點 | 缺點 |
|---|---|
| 不需要其他用戶資料 | 需要物品內容分析 |
| 可以推薦新物品(無物品冷啟動) | 難以發現新興趣(容易過度專業化) |
| 推薦結果可解釋 | 依賴特徵工程品質 |
用戶興趣衰減#
用戶興趣會隨時間衰減,常用指數衰減:
weight(t) = weight_0 × e^(-λt)工程上常用「滑動窗口(最近 N 天 / 最近 K 次行為)」作為近似,避免每次都算指數。
時間與上下文特徵#
衰減只處理了「興趣會變舊」,但用戶偏好還有週期性與情境性,單靠衰減抓不到:
| 維度 | 範例 | 特徵做法 |
|---|---|---|
| 一天內時段 | 早上看新聞、晚上看娛樂 | hour-of-day embedding |
| 一週內節奏 | 工作日看工作、週末看休閒 | day-of-week one-hot |
| 裝置情境 | 手機看短影音、桌機看長文 | device × 內容類型 交叉特徵 |
這些把「同一個用戶在不同情境下是不同的人」這件事顯式建進模型。
冷啟動特徵設計#
新用戶沒有歷史行為,從互動學來的 embedding 直接缺席。冷啟動特徵的設計原則是用「不依賴歷史」的訊號優雅降級:
| 訊號來源 | 範例 | 直覺 |
|---|---|---|
| 人口統計 | 年齡、地域、語言 | 「某地域用戶偏好某類目」的群體先驗 |
| 註冊情境 | 裝置、註冊時間、來源渠道 | 從哪來、什麼時候來,本身就帶偏好訊號 |
| 首次行為 | 第一次點擊的類目、引導頁選擇 | 首擊類目常與長期興趣高度相關 |
目標是漸進式:歷史完整時用強個人化特徵,歷史為零時退回人口統計與群體先驗,中間平滑過渡。這也呼應 第 5 章 用探索策略主動為新用戶試探興趣。
實踐建議#
- 標籤粒度:太粗沒區分度,太細覆蓋不足。
- 多維度組合:人口統計學、行為、文本各有偏差,要混合使用。
- 長短期分離:長期興趣穩定,短期興趣即時,分開建模再在排序層融合。
- A/B 測試:建模假設一定要靠線上實驗驗證,別憑直覺。
總結#
| 要點 | 說明 |
|---|---|
| 用戶畫像 | 真實用戶資料的結構化表示 |
| 資料來源 | 人口統計學 + 行為(隱式為主) + 興趣標籤 |
| 表示法 | 從標籤逐步轉向 Embedding |
| 特徵工程 | 類別編碼、正規化、特徵交叉、資訊量選特徵 |
| 文本挖掘 | TF-IDF、TextRank、NER、LDA、Word2Vec |
| 冷啟動 | 用人口統計、註冊情境、首次行為優雅降級 |
| 基於內容推薦 | 用戶向量與物品向量的相似度匹配 |
| 興趣衰減 | 指數衰減 / 滑動窗口 |
下一章:協同過濾