小紅書 NoteLLM:用于筆記推薦和標簽生成的 LLM 精華
一、背景
最近 “TikTok 難民”涌入小紅書,“小紅書霸榜蘋果 App Store” 等話題受到廣泛關注,字節跳動的 Lemon8 也不相上下。當然,作為一個技術公眾號,我們這里并不是要討論這一現象,而是要介紹小紅書的 NoteLLM,其主要用于小紅書中的筆記推薦和標簽生成。
對應的論文為:[2403.01744] NoteLLM: A Retrievable Large Language Model for Note Recommendation [1]
有關 LLM 在搜廣推場景的應用落地也可以參考我們之前的文章:
二、摘要
隨著社交媒體平臺如小紅書和 Lemon8(字節) 的流行,用戶生成內容(UGC)中的 Note 分享變得越來越普遍。這些平臺鼓勵用戶分享產品評價、旅行博客和生活經歷等,Note 推薦因此成為提升用戶參與度的關鍵部分。
現有的 Online 方法僅將 Note 輸入基于 BERT 的模型以生成 Note Embedding 來評估相似性。然而,這些方法可能未能充分利用一些重要線索,例如話題標簽(Hashtag)或類別(Category)。實際上,學習生成 Hashtag/Category 有可能增強 Note Embedding,因為兩者都將關鍵 Note 信息壓縮至有限內容中。此外,LLM 在理解自然語言方面已顯著超越 BERT,將 LLM 引入 Note 推薦具有廣闊前景。
本文中,作者提出 NoteLLM,該框架利用 LLM 解決 Item-to-Item(I2I)Note 推薦問題。具體而言,作者采用 Note 壓縮提示將 Note 壓縮為單一特殊 Token,并通過對比學習方法進一步學習潛在相關 Note 的 Embedding。此外,可以通過指令微調,運用 NoteLLM 自動總結 Note 并生成 Hashtag/Category。大量真實場景實驗表明,與 Online 基線相比,提出的方法有效提升了小紅書推薦系統的性能。
PS:其實小紅書中很多 Note 包含圖片,也就需要多模態場景的推薦,本文中并未涉及圖片信息,相關工作我們后續介紹。
三、引言
3.1 問題定義
文中作者主要關注兩個任務:I2I Note 推薦任務和 Hashtag/Category 生成任務。
- 對于I2I Note 推薦任務
給定一個目標 Note,從大規模 Note Pool 中推薦一個排序的 Note 列表。本文中作者主要聚焦在基于文本的 I2I 推薦,并且將 LLM 引入進來。
Note Pool 為 N={n1, n2, …, nm},其中 m 表示 Note 數量。每條 Note 包含:標題(title)、標簽(Hashtag)、類別(Category)和內容(Content)。ni=(ti, tpi, ci, cti) 表示第 i 條 Note。該任務目標是從 N 中選出與該 Note 相似的前 k 條 Note。
- 對于Hashtag/Category 生成任務
- 作為社交媒體上的標簽機制,Hashtag 與 Category 簡化了特定主題信息的識別過程,有助于用戶發現相關內容。本任務指的是依據輸入文本生成 Hashtag 和 Category。
- 在Hashtag 生成任務中,LLM 根據 ti 和 cti 生成 Hashtag tpi。
- 在Category 生成任務中,LLM 根據 ti,tpi 和 cti 生成 Category ci。
3.2 對比學習
以經典的 SimCLR([2002.05709] A Simple Framework for Contrastive Learning of Visual Representations [2])中的對比學習為例,其核心思想是同一圖片進行不同的數據增強后應具備一定的不變性。如下圖所示,將不同的圖片(N 個)輸入 CNN 模型提取 Representation,每幅圖片都會經過兩個不同的預處理,生成兩個不同的 Representation。對比損失的目標就是:使同一幅圖生成的兩個 Representation 盡可能相似,而與其他圖生成的 Representation 應該盡可能不相似。
對于一個 Batch 的 N 個樣本,總共可以生成 2N 個 Representation。這里并沒有顯式抽取負樣本,相反地,給定一個正樣本對(i, j),將 Batch 中剩下的 2(N-1) 個 Representation 視為負樣本。對于正對 i 和 j 的對比損失函數可以表示如下,其中 sim(u, b) 表示 u 和 v 的相似性:
其中,1[k ≠ i] 是一個指示函數,若 k ≠ i 則為1,否則為 0,τ 是溫度參數。最終的損失在 Batch 的所有正樣本對(包括(i, j) 和 (j, i))上進行計算。分子可以理解為正樣本對的相似性,分母可以理解為負樣本對的相似性,通過這種方式,試圖學習如何使正樣本對的相似度更大,負樣本對的相似度更小。
四、方案
4.1 NoteLLM 框架
NoteLLM 框架由三個關鍵組件構成
- Note 壓縮提示構建(Note Compression Prompt Construction):通過構建統一的 Note 壓縮 Prompt,將 Note 內容壓縮成一個特殊 Token,同時生成 Hashtag/Category。
- 生成-對比學習(Generative-Contrastive Learning, GCL):GCL 利用用戶行為數據中的共現機制構建相關 Note 對,通過對比學習訓練 LLM 識別相關 Note,從而獲取協同信號。
- 協同監督微調(Collaborative Supervised Fine-Tuning, CSFT):CSFT 利用 Note 的語義內容和壓縮 Token 中的協同信號生成 Hashtag/Category。通過這種方式,NoteLLM 能夠在保持生成能力的同時,利用 Note 的語義和協同信息生成 Hashtag 和 Category,增強推薦 Embedding。
4.2 Note 壓縮提示構建
作者采用同樣的 Note Compression Prompt 來促進 I2I 推薦和生成任務。為了利用 LLM 的 I2I 推薦生成能力,目標是將 Note 內容壓縮為一個單一的特殊 Token,這一 Token 隨后通過 GCL 獲取協同知識。接著,利用這一知識,通過 CSFT 生成 Hashtag/Category。
具體而言,作者使用以下 Prompt 模板,用于通用 Note 壓縮及 Hashtag/Category 生成:
在此模板中,[BOS]、[EMB] 及 [EOS] 為特殊 Token 符號,而 <Instruction>,<Input Note>, <Output Guidance> 和 <Output> 都是占位符,需替換為具體內容。
Hashtag 生成的具體內容定義如下:
Category 生成的具體內容定義如下:
鑒于用戶生成 Hashtag 數量的不可預測性,作者隨機選取一部分原始 Hashtag 作為 Hashtag 生成的輸出目標,以最大限度地減少對 LLM 可能產生的誤導。隨機選擇的 Hashtag 數量,記作 <j>,被整合進 <Instruction> 和 <Output Gudance> 兩部分中。一旦 Prompt 構建完成,它們將經過 Tokenizer 并輸入至 LLM。隨后,LLM 提煉協作信號與關鍵語義信息至壓縮 Token 中,并依據 Note 的核心思想生成 Hashtag/Category。
4.3 生成式對比學習(GCL)
預訓練的 LLM 通常通過指令微調或 RlHF 來學習新知識。這些方法主要側重于利用語義信息來增加 LLM 的有效性和安全性。然而,推薦任務中僅依賴 LLM 的語義信息是不夠的。協作信號在 LLM 中是缺失的,而這些信號在識別用戶特別感興趣的 Note 方面起著至關重要的作用。因此,作者提出了 GCL 來增強 LLM 捕獲協同信號的能力。與從特定答案或獎勵模型不同,GCL 采用對比學習(Contrastive Learning),從整體視角學習 Note 之間的關系臨近性。
作者采用共現(co-occurrence)機制基于用戶行為構建相關 Note 對。該機制基于一個假設:經常一起閱讀的 Note 可能是相關的。因此,作者收集了一周內的用戶行為數據以計算共現次數。具體來說,作者統計了用戶查看 Note nA 后點擊 Note nB 的次數。同時,為了區分不同用戶共現的貢獻,為不同的點擊分配了不同的權重。具體的計算方式如下所示:
其中 SnA -> nB 表示從 Note nA 到 Note nB 的共現得分,U 是用戶數,Ni 表示第 i 個用戶點擊的 Note 集合的數量。歸一化可以防止活躍用戶可能的無差別點擊而導致的誤導。在計算完所有的 Note 對共現得分后,就可以構成共現得分集合 Sni:
隨后,從集合 Sni 中過濾掉得分超過上限 ?? 和低于下限 ?? 的異常 Note。最后,從過濾后的集合中選出共現得分最高的 t 條 Note,作為與 Note ni 的相關 Note。
構建完相關對之后,即可以用于訓練 NoteLLM。具體來說,利用上述介紹的 Prompt 來壓縮 Note 并生成一個虛擬詞([EMB]),該 [EMB] 的最后一個 Hidden State 包含給定 Note 的語義信息和協同信號,可以表示該 Note。然后使用一個線性層將其轉換到 Note Embedding 空間,維度為 d。之后就可以使用對比損失進行訓練,如下圖所示:
4.4 協同監督微調(CSFT)
作者指出,生成 Hashtag/Category 的任務與生成 Note Embedding 的任務具有相似性,兩者均旨在概括 Note 內容:
- 從文本生成的角度看,生成 Hashtag/Category 的任務旨在提取 Note 的關鍵信息。
- 從協同過濾的角度看,生成 Note Embedding 的任務則是將 Note 壓縮為虛擬詞,用于 I2I 推薦。
為此,NoteLLM 模型聯合建模 GCL 和 CSFT 任務,以提升 Embedding 質量。作者將這兩項任務整合到單一 Prompt 中,為兩者提供額外信息,并簡化訓練流程。具體而言,采用 CSFT 方法,利用 Note 的語義內容和壓縮 Token 中的協同信號來生成 Hashtag/Category。為了提高訓練效率并防止遺忘問題,作者從每 Batch 中選取 r 條 Note 執行 Hashtag 生成任務,其余 Note 則分配到 Category 生成任務。作者按照如下方式計算 CSFT 損失:
其中,T 表示輸出的長度,oi 表示輸出序列 o 中的 第 i 個 Token,? 表示輸入序列。
最后,定義 NoteLLM 的損失如下,以結合 GCL 和 CSFT,其中 α 表示超參數。
五、實驗
5.1 數據集和實驗設置
如下圖 Table 1 所示為訓練集和測試集的數據分布,其訓練集從小紅書一周的數據處理而來,隨后選擇接下來的一個月的隨機抽取 Note 作為測試集,并排除訓練集中已經存在的 Note:
實驗中,作者采用 LLaMA 2 模型。構建相關 Note 對時,共現分數的上限 ?? 定為 30,下限 ?? 定為 0.01,并將 ?? 設定為 10。Note Embedding 維度 d 為 128,Batch Size B 為 64(在 8 x 80G A100 上采用 DDP 訓練,每個 GPU 的 Batch Size 為 8),每個 Batch 包含 128 條 Note。由于 Context Length 的限制,將標題 Title 限定為不超過 20 Token,內容 Content 不超過 80 Token。溫度參數 ?? 初始化為 3,公式 4 中將 ?? 設定為 0.01。對于標簽生成任務,比例 ?? 設定為 40%。
評估中,選擇每對 Note 中第一條作為目標 Note,另一條作為 Ground Truth。
對于 I2I 推薦任務,根據目標 Note 對測試池中所有 Note(不包含目標 Note)進行排序,并使用 Recall@100、Recall@1k、Recall@10k 和 Recall@100k 來驗證 I2I Note 推薦模型的有效性。
對于封閉域 Category 生成任務,采用 Acc 和 Ill(Illusory proportion,幻覺比例)作為評估指標。
對于開放式 Hashtag 生成任務,采用 BLEU4、ROUGE1、ROUGE2 和 ROUGEL 來評估模型性能。
5.2 離線評估
這里作者展示了 NoteLLM 在 I2I Note 推薦中的有效性。作者將 NoteLLM 與以下基于文本的 I2I 推薦方法進行了比較:
- zero-shot:利用 LLM 生成 Embedding,無需任何 Prompt,然后進行 zero-shot 檢索。
- PromptEOL zero-shot([2307.16645] Scaling Sentence Embeddings with Large Language Models [3]):在 Prompt 后添加顯式的 “in one world”,以約束 LLM 在下一個 Token 中預測語義信息。類似:This sentence: “ [text] ” means in one word: “。
- SentenceBERT采用 BERT 基于對比學習來學習 Note 相似性,作為 Online 基線。
- PromptEOL + CSE([2307.16645] Scaling Sentence Embeddings with Large Language Models [3]):PromptEOL zero-shot,并利用對比學習更新 LLM。
- RepLLaMA,一種基于 LLM 的雙編碼器密集 Retriever,無需任何提示。
如下圖 Table 2 結果所示,可以得出如下結論:
- zero-shot 仍無法超越微調方法的性能。
- 基于 LLaMA 2 和 SentenceBERT 的比較揭示了LLaMA 2 的顯著優勢。
- 具有特定 Prompt 的 PromptEOL+CSE 的性能與無 Prompt 的 RepLLaMA 相當,表明Prompt 提升了 zero-shot 檢索,但在微調后其效果減弱。
- 最后,NoteLLM 優于其他基于 LLM 的方法,主要歸功于 CSFT 將摘要能力有效轉移到 Note Embedding 中,從而高效提煉關鍵點以改進 Note Embedding。
5.3 不同曝光 Note 的影響
作者還展示了 NoteLLM 在處理不同曝光度 Note 方面的效能。根據曝光度將真實 Note 劃分為兩個類別:
- 低曝光度 Note,曝光量低于 1500 的 Note。這類 Note 占所有測試 Note 的 30%,但其累計曝光量僅占總量的 0.5%。
- 高曝光度 Note,曝光量超過 75,000 的 Note。這類 Note 僅占所有測試 Note 的 10%,但其總曝光量卻高達 75%。
如下圖 Table 3 的實驗結果,可以看出,NoteLLM 大部分情況下優于其他方法,表明 CSFT 模塊的引入為所有 Note 帶來了持續的益處。值得注意的是,NoteLLM 在高曝光度 Note 的 Recall@1k 上表現不佳。性能下降的原因可歸咎于忽視了流行度偏差([2208.03298] Quantifying and Mitigating Popularity Bias in Conversational Recommender Systems [4])。這些特性增強了模型基于 Note 內容進行召回的能力,使其特別適合檢索冷啟動 Note。
5.4 消融研究
本實驗包含 NoteLLM 與以下變體:
- 無 CSFT(w/o CSFT):僅采用 GCL 模塊的方法。
- 無 GCL(?? = 40%):僅采用 CSFT 模塊指導 LLM 總結 Hashtag 和 Category。
- 無 GCL(?? = 0%):僅包含 Category 總結任務。
- 無 GCL(?? = 100%):僅指導 LLM 總結 Hashtag。
如下圖 Table 4 所示,作者還通過消融實驗來驗證本文中方案的有效性。可以看出:
- 無 CSFT 的消融版本表現不如 NoteLLM,并且完全喪失了生成 Hashtag 和 Category 的能力。
- 無 GCL 模塊的消融版本在 I2I 推薦任務中優于 PromptEOL zero-shot。這表明 Hashtag 和 Category 生成任務能夠增強 I2I 推薦任務。
- 無 GCL(?? = 40%)的消融版本在 I2I 推薦任務中表現優于無 GCL(?? = 0%)和無 GCL(?? = 100%)的版本,表明任務多樣性對 CSFT 至關重要。
- Hashtag 和 Category 生成任務之間存在明顯的蹺蹺板現象。
5.5 CSFT 模塊中數據多樣性的影響
如下圖 Table 5 展示了在不同數據類型比例下,模型針對各項任務的性能表現。
- 對于 I2I 推薦任務,隨著比例 ?? 的增加,模型性能提升。然而,當 ?? 持續增大,指令調優數據愈發偏向于 Hashtag 生成任務時,性能開始下滑。
- 對于Category 生成任務,隨著數據向 Hashtag 生成任務傾斜,其性能隨之惡化。但從 ?? 超過 20% 后,Hashtag 生成任務的性能變化不大,這可能是因為Category 生成任務屬于封閉式任務,需嚴格匹配,而Hashtag 生成任務是開放式生成任務,具有更高的靈活性。
5.6 CSFT 模塊的影響程度
作者還探討了 CSFT 模塊對任務性能的影響程度。如下圖 Table 6 所示,?? 值的輕微提升能同時增強推薦任務和生成任務的表現。然而,隨著 ?? 值的持續增加,推薦任務的性能開始下降,而生成任務的性能則持續提升。這一現象揭示了生成任務與 I2I 推薦任務之間的權衡關系,強調了采取平衡策略的必要性。
5.7 案例研究
如下圖所示,作者展示了 Note 推薦任務的具體案例:
- 在 (a) 中,Query Note 建議避免購買哪些夏季衣物,而所有基線模型均推薦夏季服裝。NoteLLM 能夠精準推薦與簡約生活相關的 Note。
- 在 (b) 中,基線模型將 Note 中的 “rabbit”誤解為活體兔子,而非 “Keep stranger away” 中的玩具兔子。?
如下圖所示,作者展示了 Note 生成類任務的具體案例,(c) 與 (d) 展示了 Hashtag 生成任務的案例,凸顯了 NoteLLM 的優勢。RedHashtag 是一種針對小紅書的 Online Hashtag 生成方法,基于固定 Hashtag 集合進行分類。
- 在 (c) 中,NoteLLM未受“factories” 這一語義信息誤導,正確識別出筆記內容主要聚焦于拍照。
- 在 (d) 中,NoteLLM 能夠生成更為具體且長尾的 Hashtag,而非通用 Hashtag。然而,NoteLLM 的方法仍存在幻覺問題。
5.8 在線實驗
作者在小紅書平臺上進行了為期一周的 Online I2I 推薦實驗。與之前采用 SentenceBERT 的 Online 方法相比,NoteLLM 將點擊率提升了 16.20%。此外,增強的召回性能使得評論數量增加 1.10%,每周平均發布者數量(WAP)提升 0.41%。
這些結果表明,將 LLM 引入 I2I Note 推薦任務中,能夠有效提升推薦性能及用戶體驗。同時,作者觀察到新 Note 在一天內的評論數量顯著增加 3.58%,這說明 LLM 的泛化能力對冷啟動 Note 尤為有利。目前,NoteLLM 已成功部署于小紅書的 I2I Note 推薦任務中。
六、參考鏈接
- ???https://arxiv.org/abs/2403.01744???
- ???https://arxiv.org/abs/2002.05709???
- ???https://arxiv.org/abs/2307.16645???
- ???https://arxiv.org/abs/2208.03298????
本文轉載自 ??AI閑談??,作者: AI閑談
