跳至主要内容

I'm Marcus 的閱讀軌跡(推薦系統)

· 閱讀時間約 2 分鐘

今天看到 I'm Marcus 的文章:「来玩玩新开发的小游戏吧」。

Marcus 在自己的部落格實作了一套基於「閱讀軌跡」的文章推薦系統,這個設計還滿有意思的。

我觀察到的一些東西:

  1. 文章向量壓縮到 64 維,整份資料不到 200KB,載入和計算速度都很快。
  2. 使用者記錄存在瀏覽器的 Local Storage,完全不需要後端,隱私性高又即時。
  3. 文章不僅能標記「喜歡」,還能標記「不喜歡」,系統會同時考慮兩種訊號。
  4. 根據「已反饋文章」計算出使用者向量,並對「未反饋文章」計算相似度,決定推薦哪篇文章,也不會重複推薦。
  5. 每次根據當下的狀態計算推薦,並且記錄下來,形成一條固定的閱讀軌跡。

我推測他的運作原理大概是:

  1. 使用者向量 = AVG(喜歡文章向量) - AVG(不喜歡文章向量)
  2. 計算所有的 Cosine Similarity(使用者向量, 未反饋文章)
  3. 取 Top 1 作為推薦

幾個吹毛求疵的小缺點:

  • 只有推薦一篇文章的話,我自己會覺得有點「被牽著走」的感覺,選擇有點太少了。(不過這樣才是「軌跡」,所以也不是缺點,只是一種取捨)
  • 按「換點口味」會被視為負反饋,但這不一定代表我對該主題不感興趣,可能只是對該文章不感興趣而已。
  • 要讓使用者評分實在是有點難度,但這確實是比較尊重使用者的做法。(通常會用隱性一點的特徵)