個性化推薦系統設計(2.2)——Few-shot Learning用於冷啓動的探索

在推薦領域,我們常常會遇到冷啓動的問題,這可能在所有的推薦項目中或多或少都會涉及。對於該問題,通常的解決方法如下:

  • ①(提供非個性化的推薦)比如先推薦熱門排行榜,收集一定用戶數據後,再進行個性化推薦;

  • ②(用戶冷啓動)利用註冊時的用戶信息粗粒地個性化推薦;

  • ③(用戶冷啓動)使用用戶註冊登錄後對某些物品進行反饋的興趣信息進行個性化推薦。;

  • ④(物品冷啓動)對於新加入的物品,可以利用內容信息,將它們推薦給喜歡過和它們相似的物品的用戶;

  • ⑤(系統冷啓動)引入專家的知識,迅速建立起物品的相關度表。

第1、2條非推薦冷啓動,只是一種通常做法;第3條需要用戶自己填寫關鍵信息,體驗比較差,而且大部分數據缺失(用戶不願意填寫);第5條不予考慮,專家知識一是很難獲取,二是個性化不夠。

第4條則有點像我們今天要解決的問題,只不過傳統的方法需要大量喜歡過相似物品的用戶。而我們所設定的環境是在只有很少數據的情況下做啓動數據集,這種少量數據學習能力來自於人類。

人類非常善於抽象的學習,比如我們看了一隻鴨和一隻鵝,被告知這是鳥類。再看到一隻山雞(第一次看),就大致的猜到同樣屬於鳥類。人類先對於鴨子這種具體動物進行學習,並進行高維抽象,抽象出來的特徵可能是滿足長脖子小腦袋,細腿的就可以歸爲鳥類了。人類對於動物的這種學習能力的整個過程可以歸納成神經網絡訓練模式:

訓練階段,在訓練集中隨機抽取 C 個類別,每個類別 K 個樣本(總共 CK 個數據),構建一個meta-task,作爲模型的支撐集(support set)輸入;再從這 C 個類中剩餘的數據中抽取一批(batch)樣本作爲模型的預測對象(batch set)。即要求模型從 CK 個數據中學會如何區分這 C 個類別,這樣的任務被稱爲 C-way K-shot 問題。

訓練過程中,每次訓練(episode)都會採樣得到不同 meta-task,所以總體來看,訓練包含了不同的類別組合,這種機制使得模型學會不同 meta-task 中的共性部分,像如何提取重要特徵及比較樣本相似等。通過這種學習機制學到的模型,在面對新的未見過的任務時,也能較好地進行分類。

在這裏插入圖片描述

我們將嘗試用什麼方法進行訓練或者學到特徵呢?最近幾年的小樣本學習(Few shot Learning)研究主要分爲三個類別:

  • Model Based:模型結構上想辦法,最早利用記憶單元(RNN),後來發展到記憶網絡,專門用一種結構來存儲“確定”的特徵。

在這裏插入圖片描述

  • Metric Based:可以用不太精確的話總結——找相似點、找差異化。爲了度量動物或物體的相似和差異,所以纔有了metric說法。

在這裏插入圖片描述

在這裏插入圖片描述

  • Optimization Based:學習的是一個模型參數是如何更新的。

在這裏插入圖片描述

根據我們任務的特點決定先使用metric based方法進行嘗試。

在內容個性化推薦這個案例上做一些步驟分解和實驗。

① 對於如何獲取,初始的少量樣本集我們請九名其他項目組的同事幫忙標註,簡單來說,就是讓他們在觀看了感興趣文章之後進行了點擊的動作,並記錄了點擊動作。

② 將用戶和搜索字段進行交叉組合,這裏爲簡化整個模型表示,將搜索字段和內容的標籤進行組合。這樣總共得到四十九類,我們從中挑出來十九類作爲測試集,在剩下的三十類中訓練模型。

③ 模型結構:使用方案爲三層模型,用該模型做一般方法的模型測試,將結果和我們的少樣本學習模型進行對比。

1. 數據

在這裏插入圖片描述

1.1 樣本標註

用戶在聚合搜索demo上不同query下的瀏覽點擊行爲;

在每個query返回的新聞中,被點擊的新聞標記爲1;

未點擊且新聞的位置位於任意一條被點擊的新聞的上方,則標記爲0。

1.2 字段說明

在這裏插入圖片描述

1.3 樣本量

9名同事幫忙進行了標註

總樣本量:756

在這裏插入圖片描述

1.4 樣本劃分

array([‘2_健康養生’, ‘2_娛樂’, ‘2_遊戲’, ‘2_財經’, ‘2_教育’, ‘2_文化’, ‘2_科技’, ‘2_社會’, ‘2_母嬰育兒’, ‘3_娛樂’, ‘3_時事’, ‘3_遊戲’, ‘3_財經’, ‘3_科技’, ‘3_社會’, ‘4_健康養生’, ‘4_娛樂’, ‘4_時事’, ‘4_遊戲’, ‘4_財經’, ‘4_教育’, ‘4_文化’, ‘4_科技’, ‘4_社會’, ‘4_母嬰育兒’, ‘5_健康養生’, ‘5_娛樂’, ‘5_時事’, ‘5_遊戲’, ‘5_財經’, ‘5_教育’, ‘5_文化’, ‘5_科技’, ‘5_母嬰育兒’, ‘5_社會’, ‘8_娛樂’, ‘8_財經’, ‘8_科技’, ‘8_母嬰育兒’, ‘9_遊戲’, ‘9_社會’, ‘10_健康養生’, ‘10_財經’, ‘10_文化’, ‘10_科技’, ‘10_社會’, ‘13_遊戲’, ‘13_財經’, ‘7_科技’], dtype=object)

uid+query組合總共49類,從中隨機挑選19類作爲測試集,在剩下的30類中訓練模型。

2. 常規機器學習方案

2.1 模型

在這裏插入圖片描述

將title通過gru編碼成50維的向量(採用word2vec預訓練的中文embeding);

將1.2節文章與用戶相關的特徵與title句向量合併起來作爲輸入;

輸出二分類預測。

2.2 訓練過程

從訓練集中隨機抽取5類作爲驗證集,以驗證集roc auc作爲指標,通過earlystopping獲取最優的epoch數;

在全量的訓練集上訓練模型,迭代上一輪獲取的最優epoch數。

2.3 模型效果

測試集樣本比例: 10.08%

roc-auc: 0.7212

預測爲正樣本的概率分佈

0.0 0.007172
0.1 0.009078
0.2 0.010963
0.3 0.012515
0.4 0.015086
0.5 0.018062
0.6 0.023171
0.7 0.055075
0.8 0.148563
0.9 0.462343

希望正樣本的召回率儘可能高,但是整體準確率不低於70%,設置閾值爲0.17。

在這裏插入圖片描述

正樣本召回率58%,正樣本準確率19%。

3. Few-shot learning

3.1 模型

在這裏插入圖片描述

左右對稱的孿生網絡,共享embedding層與gru層;

每一半的結構與2.1中的結構一致,分別處理support set與query set的數據;

最後將support set與query set的向量相減後連接全連接層輸出,support set與query set對應的樣本是否爲同一類。

3.2 模型訓練

在訓練集中,每次隨機抽取10類,並在這10類中隨機抽取10個樣本作爲support set,並將這10類中的剩餘樣本作爲query set;

在抽取出的每一類中排列組合support set與query set中的樣本構成樣本對,對應的y爲兩個樣本是否爲同類;

經過預訓練,確認迭代次數(episode)爲58次效果最好。

模型改進

在經典的孿生網絡中,從support set中找出與query樣本最接近的support樣本,並以它的標籤作爲結果輸出,這將導致模型無法輸出連續的概率值,受限較多。

因爲在冷啓動時正樣本(點擊新聞)的比例較低,而我們更加關注的也是正樣本,因此在support set與query set配對時,只考慮正樣本support set與query樣本的配對,並將正樣本中匹配度最高的概率值作爲預測正樣本的概率輸出,這樣就可以計算roc-auc,並且調整閾值獲取不同要求的分類器。

3.3 模型效果

測試集樣本比例: 10.08%

roc-auc: 0.7932

預測爲正樣本的概率分佈

0.0 0.148644
0.1 0.518002
0.2 0.593140
0.3 0.622962
0.4 0.639287
0.5 0.652968
0.6 0.666845
0.7 0.680736
0.8 0.707907
0.9 0.784186

希望正樣本的召回率儘可能高,但是整體準確率不低於70%,設置閾值爲0.65。

在這裏插入圖片描述

正樣本召回率75%,正樣本準確率23%。

4. 模型對比

在這裏插入圖片描述

Few-shot learning優於常規方法;

對於常規方法如果不使用online learning,產生新的用戶行爲時只能重新訓練模型;而Few-shot learning在預測時,可以將最新的用戶行爲作爲support set,實時利用上新的數據,提升冷啓動時的模型效果。

可以看出,小樣本學習的模型結果比正常模型的結果的幾個指標都要好。當然因爲現在的測試用樣本量較少,無法準確地描述出差距。但多次實驗結果表明:總體來說,小樣本學習模型,在樣本量比較匱乏的情況下,是優於一般模型的。

5. 改進方向

  • encode文章title時使用預訓練的bert

  • 挖掘更多用戶行爲與文章相關的特徵

  • 優化Few-shot learning中的交叉驗證方案

6 參考文獻

[1] Oriol Vinyals’ talk on “Model vs Optimization Meta Learning”
[2] Gregory Koch, Richard Zemel, and Ruslan Salakhutdinov. “Siamese neural networks for one-shot image recognition.” ICML Deep Learning Workshop. 2015.
[3] Oriol Vinyals, et al. “Matching networks for one shot learning.” NIPS. 2016.
[4] Flood Sung, et al. “Learning to compare: Relation network for few-shot learning.” CVPR. 2018.
[5] Jake Snell, Kevin Swersky, and Richard Zemel. “Prototypical Networks for Few-shot Learning.”CVPR. 2018.
[6] Adam Santoro, et al. “Meta-learning with memory-augmented neural networks.” ICML. 2016.
[7] Alex Graves, Greg Wayne, and Ivo Danihelka. “Neural turing machines.” arXiv preprint arXiv:1410.5401 (2014).
[8] Tsendsuren Munkhdalai and Hong Yu. “Meta Networks.” ICML. 2017.
[9] Sachin Ravi and Hugo Larochelle. “Optimization as a Model for Few-Shot Learning.” ICLR. 2017.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章