小红书 NoteLLM:用于笔记推荐和标签生成的 LLM 精华

发布于 2025-1-22 13:17
浏览
0收藏

一、背景

最近 “TikTok 难民”涌入小红书,“小红书霸榜苹果 App Store” 等话题受到广泛关注,字节跳动的 Lemon8 也不相上下。当然,作为一个技术公众号,我们这里并不是要讨论这一现象,而是要介绍小红书的 NoteLLM,其主要用于小红书中的笔记推荐和标签生成。

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

对应的论文为:[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 基线相比,提出的方法有效提升了小红书推荐系统的性能。

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

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 应该尽可能不相似。

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

对于一个 Batch 的 N 个样本,总共可以生成 2N 个 Representation。这里并没有显式抽取负样本,相反地,给定一个正样本对(i, j),将 Batch 中剩下的 2(N-1) 个 Representation 视为负样本。对于正对 i 和 j 的对比损失函数可以表示如下,其中 sim(u, b) 表示 u 和 v 的相似性:

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

其中,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。

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区


4.2 Note 压缩提示构建

作者采用同样的 Note Compression Prompt 来促进 I2I 推荐和生成任务。为了利用 LLM 的 I2I 推荐生成能力,目标是将 Note 内容压缩为一个单一的特殊 Token,这一 Token 随后通过 GCL 获取协同知识。接着,利用这一知识,通过 CSFT 生成 Hashtag/Category。

具体而言,作者使用以下 Prompt 模板,用于通用 Note 压缩及 Hashtag/Category 生成:

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

在此模板中,[BOS]、[EMB] 及 [EOS] 为特殊 Token 符号,而 <Instruction>,<Input Note>, <Output Guidance> 和 <Output> 都是占位符,需替换为具体内容。

Hashtag 生成的具体内容定义如下:

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

Category 生成的具体内容定义如下:

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

鉴于用户生成 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 的次数。同时,为了区分不同用户共现的贡献,为不同的点击分配了不同的权重。具体的计算方式如下所示:

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

其中 SnA -> nB 表示从 Note nA 到 Note nB 的共现得分,U 是用户数,Ni 表示第 i 个用户点击的 Note 集合的数量。归一化可以防止活跃用户可能的无差别点击而导致的误导。在计算完所有的 Note 对共现得分后,就可以构成共现得分集合 Sni:

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

随后,从集合 Sni 中过滤掉得分超过上限 𝑢 和低于下限 𝑙 的异常 Note。最后,从过滤后的集合中选出共现得分最高的 t 条 Note,作为与 Note ni 的相关 Note。

构建完相关对之后,即可以用于训练 NoteLLM。具体来说,利用上述介绍的 Prompt 来压缩 Note 并生成一个虚拟词([EMB]),该 [EMB] 的最后一个 Hidden State 包含给定 Note 的语义信息和协同信号,可以表示该 Note。然后使用一个线性层将其转换到 Note Embedding 空间,维度为 d。之后就可以使用对比损失进行训练,如下图所示:

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

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 损失:

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

其中,T 表示输出的长度,oi 表示输出序列 o 中的 第 i 个 Token,ί 表示输入序列。

最后,定义 NoteLLM 的损失如下,以结合 GCL 和 CSFT,其中 α 表示超参数。

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

五、实验

5.1 数据集和实验设置

如下图 Table 1 所示为训练集和测试集的数据分布,其训练集从小红书一周的数据处理而来,随后选择接下来的一个月的随机抽取 Note 作为测试集,并排除训练集中已经存在的 Note:

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

实验中,作者采用 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。

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

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。

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

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 生成任务之间存在明显的跷跷板现象

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

5.5 CSFT 模块中数据多样性的影响

如下图 Table 5 展示了在不同数据类型比例下,模型针对各项任务的性能表现。

  • 对于 I2I 推荐任务,随着比例 𝑟 的增加,模型性能提升。然而,当 𝑟 持续增大,指令调优数据愈发偏向于 Hashtag 生成任务时,性能开始下滑。
  • 对于Category 生成任务,随着数据向 Hashtag 生成任务倾斜,其性能随之恶化。但从 𝑟 超过 20% 后,Hashtag 生成任务的性能变化不大,这可能是因为Category 生成任务属于封闭式任务,需严格匹配,而Hashtag 生成任务是开放式生成任务,具有更高的灵活性。

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

5.6 CSFT 模块的影响程度

作者还探讨了 CSFT 模块对任务性能的影响程度。如下图 Table 6 所示,𝛼 值的轻微提升能同时增强推荐任务和生成任务的表现。然而,随着 𝛼 值的持续增加,推荐任务的性能开始下降,而生成任务的性能则持续提升。这一现象揭示了生成任务与 I2I 推荐任务之间的权衡关系,强调了采取平衡策略的必要性。

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区

5.7 案例研究

如下图所示,作者展示了 Note 推荐任务的具体案例:

  • 在 (a) 中,Query Note 建议避免购买哪些夏季衣物,而所有基线模型均推荐夏季服装。NoteLLM 能够精准推荐与简约生活相关的 Note。
  • 在 (b) 中,基线模型将 Note 中的 “rabbit”误解为活体兔子,而非 “Keep stranger away” 中的玩具兔子。

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区


如下图所示,作者展示了 Note 生成类任务的具体案例,(c) 与 (d) 展示了 Hashtag 生成任务的案例,凸显了 NoteLLM 的优势。RedHashtag 是一种针对小红书的 Online Hashtag 生成方法,基于固定 Hashtag 集合进行分类。

  • 在 (c) 中,NoteLLM未受“factories” 这一语义信息误导,正确识别出笔记内容主要聚焦于拍照。
  • 在 (d) 中,NoteLLM 能够生成更为具体且长尾的 Hashtag,而非通用 Hashtag。然而,NoteLLM 的方法仍存在幻觉问题

小红书 NoteLLM:用于笔记推荐和标签生成的 LLM-AI.x社区


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 推荐任务中。

六、参考链接

  1. ​https://arxiv.org/abs/2403.01744​
  2. ​https://arxiv.org/abs/2002.05709​
  3. ​https://arxiv.org/abs/2307.16645​
  4. ​https://arxiv.org/abs/2208.03298​

本文转载自 AI闲谈​,作者: AI闲谈

收藏
回复
举报
回复
相关推荐