NoteLLM论文阅读笔记
NoteLLM: A Retrievable Large Language Model for Note Recommendation论文阅读笔记
Abstract
存在的问题:
现有的在线方法只是将笔记输入基于 BERT 的模型,生成用于评估相似性的笔记嵌入。然而,它们可能没有充分利用一些重要的线索,例如代表笔记关键概念的标签或类别。事实上,学习生成标签/类别有可能增强笔记嵌入,这两种方法都能将关键笔记信息压缩到有限的内容中。此外,大型语言模型(LLM)在理解自然语言方面的表现明显优于 BERT。在笔记推荐中引入 LLM 是大有可为的。
提出方法:
在本文中,我们提出了一个新颖的统一框架,称为笔记语言模型(NoteLLM),它利用 LLMs 来解决项对项(I2I)笔记推荐问题。具体来说,我们利用 “笔记压缩提示”(Note Compression Prompt)将笔记压缩成一个特殊标记,并通过对比学习法进一步学习潜在相关笔记的嵌入。此外,我们还利用 NoteLLM 对笔记进行总结,并通过指令调整自动生成标签/类别。
Introduction
项对项(I2I)笔记推荐是从数百万级笔记库中检索用户可能感兴趣的笔记的经典方法。给定目标笔记后,I2I 方法会根据内容或协作信号选择相关笔记
现有的在线 I2I 笔记推荐方法通常是将整个笔记内容输入基于 BERT 的模型以生成笔记的嵌入,并根据嵌入的相似性推荐相关笔记。然而,这些方法只是将标签/分类作为笔记内容的一个组成部分,没有充分利用其潜力。如图 1 所示,标签/类别(如 # 新加坡)代表了笔记的中心思想,是判断两篇笔记是否包含相关内容的关键。事实上,我们发现生成标签/分类与生成笔记嵌入相似。两者都是将关键笔记信息压缩到有限的内容中。因此,学习生成标签/类别有可能提高嵌入的质量。此外,大型语言模型(LLM)最近在自然语言和推荐方面展现出了强大的能力。然而,目前还很少有研究调查 LLM 在 I2I 推荐中的应用。利用 LLMs 改进 I2I 注释推荐具有相当大的前景。
受上述启发,我们在本文中提出了一种名为 NoteLLM 的统一多任务方法。基于 LLM,NoteLLM 从 I2I 笔记推荐任务和标签/分类生成任务中学习,旨在通过学习提取浓缩概念来增强 I2I 笔记推荐能力。具体来说,我们首先为每个笔记样本构建统一的笔记压缩提示,然后通过预先训练好的 LLM(如 LLaMA 2 )进行解码,LLM 利用特殊标记来压缩笔记内容,并同时生成标签/分类。为了构建相关的笔记对,我们从用户行为中统计所有笔记对的共现分数,并形成每个笔记的共现分数集。我们选择集合中共现分数最高的笔记作为给定笔记的相关笔记
此外,为了推荐每个样本的相关注释,生成对比学习(GCL)利用压缩标记作为每个注释的嵌入,然后训练 LLM 从批内负样本中识别相关注释。同时,我们采用协作监督微调(CSFT)方法来训练模型,为每个笔记生成标签/类别。由于 I2I 笔记推荐任务和标签/分类生成任务所学习的压缩标记都旨在提取笔记内容的关键概念,因此 CSFT 可以有效增强笔记嵌入。
本文的主要贡献如下:
- 据我们所知,我们的 NoteLLM 框架是第一个利用 LLM 解决 I2I 推荐任务的框架。它揭示了引入 LLMs 是增强 I2I 推荐系统的一种实用而有前途的策略。
- 我们提出了一个多任务框架,用于学习 I2I 推荐任务和标签/类别生成任务,以增强笔记嵌入。我们证明,学习生成压缩概念有利于 I2I 推荐任务。
Method
NoteLLM的框架
在本小节中,我们将介绍 NoteLLM 的框架,它由三个关键部分组成: 如图 2 所示,它由三个关键部分组成:笔记压缩提示构建、GCL 和 CSFT。我们采用笔记压缩提示来灵活管理 I2I 推荐和标签/分类生成任务。然后将这些提示标记化,并输入到 LLM 中。NoteLLM 将协作信号和语义信息整合到隐藏状态中。GCL 利用生成的压缩词的隐藏状态进行对比学习,从而获取协作信号。此外,CSFT 利用笔记的语义和协作信息生成标签和类别。
NoteLLM 框架使用统一的提示进行 I2I 笔记推荐和标签/类别生成。笔记通过 “笔记压缩提示 ”进行压缩,并由预先训练好的 LLM 进行处理。我们利用共现机制构建相关的笔记对,并使用生成对比学习(Generative-Contrasting Learning)训练 I2I 推荐任务。NoteLLM 还能提取笔记的关键概念,用于生成标签/类别,从而增强 I2I 推荐任务。
笔记压缩提示
我们采用统一的注释压缩提示来促进 I2I 推荐和生成任务。为了在 I2I 推荐任务中利用自回归 LLM 的生成能力,我们的目标是将笔记内容压缩成一个特殊标记。浓缩后的特殊标记通过 GCL 获取协作知识。随后,我们通过 CSFT 利用这些知识生成标签/类别。
具体来说,我们建议以下提示模板用于一般注释压缩和生成标签/类别:
在此模板中,[BOS]、[EMB] 和 [EOS] 是特殊标记,而
生成标签的模板如下:
鉴于用户生成的标签数量不可预测,我们随机选择原始标签的一个子集作为标签生成的输出目标,以尽量减少对 LLM 的潜在误导。随机选择的标签数量(以
提示完成后,它们将被标记化并输入 LLM。然后,LLM 将协作信号和关键语义信息提炼成压缩字,并根据笔记的中心思想生成标签/类别。
生成对比学习
预训练 LLM 通常通过指令调整或从人类反馈强化学习 (RLHF) 学习新知识。这些方法主要侧重于利用语义信息来提高 LLM 的有效性和安全性。然而,仅依靠 LLM 中的语义信息不足以完成推荐任务。LLMs 中缺少的协作信号在识别用户特别感兴趣的笔记方面发挥着至关重要的作用。因此,我们提出了 GCL,使 LLM 能够捕捉到更强的协作信号。与从特定答案或奖励模型中学习不同,GCL 采用对比学习法,从整体角度学习笔记之间的关系接近性。
为了将协作信号整合到 LLM 中,我们采用了共现机制,根据用户行为构建相关的笔记对。该机制基于这样一个假设:经常一起阅读的笔记很可能是相关的。因此,我们收集一周内的用户行为数据来进行共现计数。我们计算用户浏览笔记𝑛𝐴并随后点击笔记𝑛𝐵的次数。同时,为了区分来自不同用户的共现贡献,我们为不同的点击赋予了不同的权重。具体来说,我们按以下方式计算共同出现得分:
\(s_{n_A\to n_B}=\sum_{i=1}^U\frac1{N_i},\)
其中,𝑠𝑛𝐴→𝑛𝐵表示从笔记𝑛𝐴到笔记𝑛𝐵的共现得分,𝑈为该用户行为数据中的用户数量,𝑁𝑖表示用户行为数据中第𝑖个用户点击的笔记集数量。这一操作旨在防止活跃用户的误导,因为他们可能会不加区分地点击推荐给他们的每一个笔记。在计算了所有笔记对的共现分数后,我们构建了从笔记𝑛𝑖到所有其他笔记的共现分数集 S𝑛𝑖。\(S_{n_i}\)被定义为:\(\{s_{n_i\to n_j}|1\leq j\leq m,i\neq j\}.\)
接下来,我们从 S𝑛𝑖 中筛选出共现分数高于 𝑢 或低于阈值 𝑙的离群笔记。最后,我们从筛选出的集合中选出共现分数最高的 𝑡 笔记作为𝑛𝑖 笔记的相关笔记。
在构建相关笔记对之后,我们对 NoteLLM 进行训练,以根据文本语义和协作信号确定笔记的相关性。不同于简单地用一个特殊的集合词来代表笔记,我们利用提示来压缩笔记信息,生成一个虚拟词。压缩后的虚拟词的最后一个隐藏状态包含了给定笔记的语义信息和协作信号,可以代表该笔记。具体来说,由于 LLM 的自回归特性,我们将 [EMB] 前一个标记的最后一个隐藏状态,用线性层转换到笔记嵌入空间,其维度为 𝑑。我们将 𝑖-th note 𝑛𝑖 的嵌入表示为 𝒏𝑖 。我们假设每个迷你批包含 𝐵 个相关注释对,因此每个迷你批共有 2𝐵 个注释。我们将笔记 𝑛𝑖 的相关笔记表示为 𝑛𝑖 + ,将其嵌入表示为 𝒏𝑖 + 。GCL 的损失计算如下:
\(L_{cl}=-\frac1{2B}\sum_{i=1}^{2B}log\frac{e^{sim(n_i,n_i^+)\cdot e^\tau}}{\sum_{j\in[2B]\setminus\{i\}}e^{sim(n_i,n_j)\cdot e^\tau}},\)
协作自监督微调
LLM 因其在语义理解和生成方面的强大能力而备受瞩目。现有的一些研究试图将 LLMs 令人印象深刻的能力应用于句子嵌入。然而,这些方法忽视了 LLM 的生成能力,将其简化为单纯的嵌入生成器,未能充分挖掘其潜力。
此外,这些方法没有充分利用代表笔记关键概念的标签/类别。事实上,生成标签/分类与生成笔记嵌入相似。这两项任务的目的都是总结笔记内容。生成标签/类别的任务是从文本生成的角度提取笔记的关键信息,而生成笔记嵌入的任务则是从 I2I 推荐的协作角度将笔记压缩成一个虚拟词。为此,我们的 NoteLLM 对 GCL 和 CSFT 任务进行了联合建模,以提高嵌入的质量。我们将这两项任务整合到一个提示中,为这两项任务提供了额外信息,并简化了训练过程。
具体来说,我们采用 CSFT,利用笔记的语义内容和压缩标记中的协作信号来生成标签/类别。为了提高训练效率并防止遗忘问题,我们从每批笔记中选择𝑟笔记用于标签生成任务,而其余笔记则分配给类别生成任务。具体来说,我们计算 CSFT 损失的方法如下:
\(L_{gen}=-\frac1T\sum_{i=1}^Tlog(p(o_i|o_{<i},i)),\)
其中,𝐿𝑔𝑒𝑛 是 CSFT 损失,𝑇 是输出长度,𝑜𝑖 指输出序列中的第 𝑖 个标记,𝑖 是输入序列。
最后,我们定义了 NoteLLM 的损失函数,将 GCL 和 CSFT 都包含在内,如下所示:
\(L=\frac{L_{cl}+\alpha L_{gen}}{1+\alpha},\)
通过模型更新,NoteLLM 能够在笔记推荐场景中同时执行 I2I 推荐任务和标签/分类生成任务。
总结
最后来整理一下,首先是设计了笔记压缩的提示,来生成对应笔记的标签或者类别,然后是生成对比学习这部分,先根据共现机制来获取每两个笔记的共现分数,然后根据共现分数获取最高的作为相关笔记,之后进行对比学习。最后一部分是协作自监督微调,因为作者没有微调的条件,这里就不详细解释了