changed 4 years ago
Linked with GitHub

基於社群網路分析的交友軟體推薦系統

tags: MLG

簡報網址:hackmd.io/@kuouu/MLG_final
提案簡報:hackmd.io/@kuouu/MLG_final_proposal


Introduction


AInimal 人工智慧社群養成

網頁版 👉 ainimal.io


目前配對機制

  1. 符合篩選條件
  2. 當天有上線
  3. 隨機

改良基於個人特質的聊天活絡程度預測

Google Colab


正確率

train accuracy: 0.78
test accuracy: 0.62

可能原因:

  • 模型太過簡單
  • 人格特質不適合作為聊天活絡程度的評斷標準
  • ???

人格特質或許跟交友有關,但沒有辦法確定是“很像的人”還是“不像的人”容易成為朋友,甚至是情侶(大多數人用交友軟體的目的)


比起個性或興趣,我認為成為朋友的契機更注重於一些當下的因素,心情、場域、機緣等,因此決定使用社群網路來做推薦系統,並進行分析


配對成功?


會回訊息


聊得很熱絡


真命天子/女、一生的好朋友


軟體宗旨是找到真命天子/女,但得知後續發展可能要做調查,在訓練上會難以做標記,所以退一步到找到很會聊的人


Relative Work



Algorithm

程式碼 👉 github.com/erickuo5124/MLG_final


rule base


rule base

依據當下的平均聊天量由高至低做推薦

\[ 平均聊天量 = \frac{\sum_{聊天室}聊天字數}{聊天室數量} \]


期望結果

  • 會聊天的人優先,會“被”配對到很多人
  • 不會聊天的人比較不會被主動配對到
  • 在時間內配對到一定程度會讓聊天量下降,後面順位的人往上排名

解決的問題

  • 配對到的人最近一定有在玩,而且很活躍
  • 雙方至少有一人有一定的社交程度,造成尷尬開場的機率較低(難聊的人不會互相遇到)
  • 聊天室數量增加會降低平均聊天量,因此過度配對會降低排名,不會有某個人一直配對到超多人的情況
  • 與比較會聊的人配對,增加社交能力較低的人的自信

pseudo code

  1. get G
  2. get user_list
  3. remove random edge, get G’
  4. get rec_list by G’
  5. validation

GNN


GNN

用 GCN 得到 node embedding ,並使用 similarity 做 user user 的 Collaborative Filtering


  1. GCN 學習 node embedding
  2. 做 user user 的 CF

Experiment


Evaluation: recall

\[ Recall(pred, label) = \frac{pred 出現在 label\_list 出現次數}{label\_list 的長度} \]


Data set

資料名稱 數量
user 5043
chat 290559
friend 22683

  • gid
  • gender
  • animal
  • heart
  • type
  • personality
  • bgm
  • active_time

分別為 2020, 2019 年 11/01~11/15 的資料

  • rule base: < 0.1

其實很多點“沒有往外的邊”,也就是很多使用者沒有在使用,可能只是下載來看一看就再也沒有登入了,因此在加入 user feature 之後,我將不活躍的使用者移除,並按照性別改變顏色,圖形變成如下

  • 在移除不活躍的使用者之後,rule base 的 Recall 提升至約 0.1 ~ 0.2

  • rule base 的 Recall 提升至約 0.1 ~ 0.5
  • GNN 約為 0.4 ~ 0.5(較穩定

問題點

  • 需要每個時間點資料庫的 snapshot,ex: 更新時間、今日登入、交友狀況
  • 移除不活躍的使用者之後資料不足(需要一段時間內的資料
  • 沒有標記的資料

Conclusion


  • 利用圖形來視覺化呈現資料並分析使用者習性
    • 聊天狀況
    • 配對偏好
    • 平均聊天量
  • 使用時間區段內的使用者資料來做配對

future work

  • 利用網路圖來呈現目前使用者的狀況
  • 定期備份資料庫狀態以拿來做訓練
  • 改善軟體配對機制,取得標記資料

END

Select a repo