论文速读|NoteLLM: A Retrievable Large Language Model for Note Recommendation.WWW24
论文地址:https://arxiv.org/abs/2403.01744
bib引用:
@misc{zhang2024notellmretrievablelargelanguage,title={NoteLLM: A Retrievable Large Language Model for Note Recommendation}, author={Chao Zhang and Shiwei Wu and Haoxin Zhang and Tong Xu and Yan Gao and Yao Hu and Di Wu and Enhong Chen},year={2024},eprint={2403.01744},archivePrefix={arXiv},primaryClass={cs.IR},url={https://arxiv.org/abs/2403.01744},
}
Keywords:Large Language Model; Recommendation; Hashtag Generation
一些结论:
- I2I推荐要么预先构造I2I索引,要么使用K近邻方法在线检索相关item。
传统的I2I推荐通常完全依赖于来自用户行为的协作信号。【但是会存在冷启动issue(缺少用户-item交互)】因此针对上述问题,很多工作从基于内容的推荐进行优化,本文从基于文本的角度进一步考虑。(问题定义:根据item的文本内容来衡量item之间的相似性) - 基于文本的I2I推荐的研究现状:依赖于基于术语的稀疏矢量匹配机制[35,37]→基于NN将文本转换为相同潜在空间中的嵌入,以通过嵌入相似性来衡量它们的关系。→简单应用LLM(仅视为生成嵌入的编码器[10,26,28])
- 将LLM与推荐相结合的主要方法有三种[18,50]。
- 第一种方法是利用LLM来增强数据[21,29,51]。由于LLM包含的丰富的世界知识,增强的数据比原始数据[23,46,51]更加突出和多样化。然而,这些方法需要对测试数据进行持续的预处理,以与增强的训练数据保持一致,并且高度依赖于LLM生成的质量。
- 第二种方法是利用LLM直接推荐。这些方法设计特殊提示[9,20,43]或使用监督微调[1,2,59]来诱导LLM回答给定的问题。尽管如此,由于上下文长度有限,这些方法只关注重排序阶段[7,59],该阶段仅包含数十个候选项。
- 最后一种方法是采用LLM作为编码器来生成表示特定项目的嵌入[15,49]。虽然这些方法对提取信息很有效,但它们都丢弃了生成LLM 的功能。
- 基于文本生成辅助决策的方法【从文本中生成这些有助于为未标记的注释创建标识符或根据用户的首选项向用户推荐选项】:有三种主要方法:提取、分类和生成方法。
- 提取:将文本中的关键短语识别为主题标签或类别 [61, 63],但无法获得原始文本中不存在的短语。
- 分类:将此任务视为文本分类问题 [14, 58, 60]。但是,由于人工生成的主题标签的多样性、自由形式性质,这些可能会产生次优结果。
- 生成:直接根据输入文本生成主题标签/类别 [4, 44, 45]。然而,这些方法仅限于解决主题标签/类别生成任务。
- NoteLLM :LLM 执行多任务学习,同时执行 I2I 推荐和主题标签/类别生成。由于这两个任务的相似性,学习生成主题标签/类别也可以增强 I2I 推荐。
摘要
People enjoy sharing “notes” including their experiences within online communities. Therefore, recommending notes aligned with user interests has become a crucial task. Existing online methods only input notes into BERT-based models to generate note embeddings for assessing similarity. However, they may underutilize some important cues, e.g., hashtags or categories, which represent the key concepts of notes. Indeed, learning to generate hashtags/categories can potentially enhance note embeddings, both of which compress key note information into limited content. Besides, Large Language Models (LLMs) have significantly outperformed BERT in understanding natural languages. It is promising to introduce LLMs into note recommendation. In this paper, we propose a novel unified framework called NoteLLM, which leverages LLMs to address the item-to-item (I2I) note recommendation. Specifically, we utilize Note Compression Prompt to compress a note into a single special token, and further learn the potentially related notes’ embeddings via a contrastive learning approach. Moreover, we use NoteLLM to summarize the note and generate the hashtag/category automatically through instruction tuning. Extensive validations on real scenarios demonstrate the effectiveness of our proposed method compared with the online baseline and show major improvements in the recommendation system of Xiaohongshu.
人们喜欢在在线社区中分享“笔记”,包括他们的经验。因此,推荐符合用户兴趣的笔记已成为一项至关重要的任务。现有的在线方法仅将笔记输入到基于BERT的模型中,以生成用于评估相似性的笔记嵌入。然而,它们可能没有充分利用一些重要的线索,例如主题标签或类别,它们代表了笔记的关键概念。事实上,学习生成主题标签/类别可以潜在地增强笔记嵌入,这两种方法都将关键笔记信息压缩到有限的内容中。此外,大型语言模型(LLM)在理解自然语言方面明显优于BERT。将LLM引入笔记推荐很有希望。在本文中,我们提出了一个名为NoteLLM的新颖统一框架,它利用LLM来解决项目到项目(I2I)的笔记推荐。具体来说,我们利用笔记压缩提示将笔记压缩成一个特殊的标记,并通过对比学习方法进一步学习潜在相关笔记的嵌入。此外,我们使用NoteLLM对笔记进行总结,并通过指令调整自动生成主题标签/类别。在真实场景上的广泛验证证明了我们提出的方法与在线基线相比的有效性,并显示了小红书推荐系统的重大改进。
Introduction
Focused on user-generated content (UGC) and providing a more authentic and personalized user experience, social media like Xiaohongshu and Lemon8 have gained significant popularity among users. These platforms encourage users to share their product reviews, travel blogs, and life experiences, among other content, also referred to as “notes”. By providing more personalized notes based on user preferences, note recommendation plays a crucial part in enhancing user engagement [16, 34, 48, 64]. Item-to-item (I2I) note recommendation is a classic way to retrieve notes of potential interest to the user from the millions-level notes pool [19, 65]. Given a target note, I2I methods select the relevant notes according to content [65] or collaborative signals [19].
专注于用户生产内容(UGC)和提供更真实和个性化的用户体验,像小红书和Lemon8这样的社交媒体在用户中获得了显著的欢迎。这些平台鼓励用户分享他们的产品评论、旅行博客和生活经历等内容,也称为“笔记”。通过根据用户偏好提供更个性化的笔记,笔记推荐在增强用户参与方面发挥着至关重要的作用[16,34,48,64]。项目对项目(I2I)笔记推荐是从百万级笔记池中检索用户潜在感兴趣的笔记的经典方式[19,65]。给定一个目标笔记,I2I方法根据内容[65]或协作信号[19]选择相关笔记。
Existing online methods of I2I note recommendation usually input whole note content into BERT-based models [3] to generate embeddings of notes, and recommend relevant notes based on embedding similarity [11, 36]. However, these methods merely treat hashtags/categories as a component of note content, underutilizing their potential. As shown in Figure 1, hashtags/categories (e.g., # Singapore) represent the central ideas of notes, which are crucial in determining whether two notes contain related content. In fact, we find that generating hashtags/categories is similar to producing note embeddings. Both compress the key note information into limited content. Therefore, learning to generate hashtags/categories can potentially enhance the quality of embeddings. Besides, Large Language Models (LLMs) have recently exhibited powerful abilities in natural languages [10, 24, 42, 54] and recommendations [1, 2, 34, 59]. However, there is a scarcity of research investigating the application of LLMs in I2I recommendations. Utilizing LLMs to improve I2I note recommendations holds considerable promise.
I2I笔记推荐的现有在线方法通常将整个笔记内容输入到基于BERT的模型中[3],以生成笔记的嵌入,并根据嵌入相似度推荐相关笔记[11,36]。然而,这些方法仅仅将主题标签/类别视为笔记内容的一个组成部分,没有充分利用它们的潜力。如图1所示,主题标签/类别(例如,#新加坡)代表了笔记的中心思想,这对于确定两个笔记是否包含相关内容至关重要。事实上,我们发现生成主题标签/类别类似于生成笔记嵌入。两者都将关键的笔记信息压缩成有限的内容。因此,学习生成主题标签/类别可以潜在地提高嵌入的质量。此外,大型语言模型(LLM)最近在自然语言[10,24,42,54]和推荐[1,2,34,59]中表现出强大的能力。然而,研究LLM在I2I建议中的应用的研究很少。利用LLM来改进I2I票据建议具有相当大的前景。
Inspired by the above insights, we propose a unified multi-task approach called NoteLLM in this paper. Based on LLMs, NoteLLM learns from the I2I note recommendation and hashtag/category generation tasks, aiming to enhance the I2I note recommendation ability by learning to extract condensed concepts. Specifically, we first construct a unified Note Compression Prompt for each note sample and then decode via pre-trained LLMs (e.g., LLaMA 2 [42]), which utilize a special token to compress the note content and generate hashtags/categories simultaneously. To construct the related note pairs, we count the co-occurrence scores for all note pairs from user behaviours, and form the set of co-occurrence scores for each note. We select notes with the highest co-occurrence scores in the set as the related notes for a given note. Further, to recommend the relevant notes for each sample, Generative-Contrastive Learning (GCL) utilizes the compressed tokens as the embedding of each note, and then trains the LLMs to identify the related notes from in-batch negatives. Simultaneously, we employ Collaborative Supervised Fine-tuning (CSFT) approach to train models to generate hashtags/categories for each note. Since both the compression token learned by the I2I note recommendation task and the hashtag/category generation task aim to extract the key concept of the note content, CSFT can enhance note embeddings effectively.
受上述见解的启发,我们在本文中提出了一种统一的多任务方法,称为NoteLLM。基于LLM,NoteLLM从I2I笔记推荐和主题标签/类别生成任务中学习,旨在通过学习提取浓缩概念来增强I2I笔记推荐能力。具体来说,我们首先为每个笔记样本构建一个统一的笔记压缩提示,然后通过预训练的LLM(例如,LLaMA 2[42])进行解码,它利用一个特殊的令牌来压缩笔记内容并同时生成主题标签/类别。为了构建相关的笔记对,我们从用户行为中计算所有笔记对的共现分数,并为每个笔记形成共现分数集。我们选择集合中共现分数最高的笔记作为给定笔记的相关笔记。此外,为了推荐每个样本的相关笔记,Generative-Contrastive学习(GCL)利用压缩标记作为每个笔记的嵌入,然后训练LLM从批内底片中识别相关笔记。同时,我们采用协作监督微调(CSFT)方法训练模型为每个笔记生成主题标签/类别。由于I2I笔记推荐任务学习的压缩标记和主题标签/类别生成任务都旨在提取笔记内容的关键概念,CSFT可以有效地增强笔记嵌入。
2. 相关工作
2.1 I2I Recommendation
I2I recommendation is a crucial technique that can recommend a ranked list of items from a large-scale item pool based on a target item. I2I recommendation either pre-constructs the I2I index [55] or retrieves relevant items online using the approximate k-nearest neighbor method [12]. Traditional I2I recommendations typically rely solely on collaborative signals from user behaviors [55, 67]. However, these methods cannot manage cold-start items due to lack of user-item interaction [65]. To address this issue, numerous studies have investigated content-based I2I recommendations [8, 65]. We focus on the text-based I2I recommendation system, which measures the similarity of items based on their textual content. Initially, representation of text-based I2I recommendation relied on a termbased sparse vector matching mechanism [35, 37]. With the advent of deep learning, neural networks have proven more adept at representing text information [3, 27]. Previous works [13, 25, 52, 53] transform texts into embeddings in the same latent space to measure their relationship through embedding similarity. LLMs have recently gained great attention for their impressive abilities [33, 54, 56]. However, the application of LLMs in I2I recommendation remains unexplored. Besides, some studies treat LLMs solely as encoders for generating embeddings [10, 26, 28], failing to leverage their full potential for generation. In NoteLLM, we utilize LLMs to generate hashtags/categories, which can enhance note embeddings.
I2I推荐是一种至关重要的技术,可以基于目标项目从大规模项目池中推荐项目的排序列表。I2I推荐要么预先构造I2I索引[55],要么使用近似k-最近邻方法在线检索相关项目[12]。传统的I2I推荐通常完全依赖于来自用户行为的协作信号[55,67]。然而,由于缺乏用户-项目交互,这些方法无法管理冷启动项目[65]。为了解决这个问题,许多研究调查了基于内容的I2I推荐[8,65]。我们关注基于文本的I2I推荐系统,它根据项目的文本内容来衡量项目的相似性。最初,基于文本的I2I推荐的表示依赖于基于术语的稀疏矢量匹配机制[35,37]。随着深度学习的出现,神经网络已被证明更擅长表示文本信息[3,27]。以前的作品[13,25,52,53]将文本转换为相同潜在空间中的嵌入,以通过嵌入相似性来衡量它们的关系。LLM最近因其令人印象深刻的能力而获得极大的关注[33,54,56]。然而,LLM在I2I推荐中的应用仍未得到探索。此外,一些研究将LLM仅视为生成嵌入的编码器[10,26,28],未能充分利用它们的生成潜力。在NoteLLM中,我们利用LLM生成主题标签/类别,这可以增强笔记嵌入。
2.2 LLMs for Recommendation
LLMs have recently made significant advancements [31, 41, 42]. Consequently, numerous studies incorporate LLMs into recommendation tasks [5, 18, 50]. There are three main methods of integrating LLMs with recommendations [18, 50]. The first method is utilizing LLMs to augment data [21, 29, 51]. Due to the abundant world knowledge contained by LLMs, the augmented data are more prominent and diverse than the raw data [23, 46, 51]. However, these methods require continuous preprocessing of the testing data to align with the augmented training data and are highly dependent on the quality of LLMs’ generation. The second method is leveraging LLMs to recommend directly. These methods design special prompts [9, 20, 43] or use supervised finetuning [1, 2, 59] to induce LLMs to answer the given questions. Nevertheless, because of the limited context length, these methods only focus on the reranking stage [7, 59], which only contains dozens of candidate items. The last method is adopting LLMs as the encoders to generate embeddings representing specific items [15, 49]. Although these methods are effective to extract information, they all discard the generative capabilities of LLMs. In contrast to above methods, NoteLLM employs LLMs during the recall phase and learns hashtag generation to improve LLMs’ ability to produce embeddings.
LLM最近取得了重大进展[31,41,42]。因此,许多研究将LLM纳入推荐任务[5,18,50]。将LLM与推荐相结合的主要方法有三种[18,50]。第一种方法是利用LLM来增强数据[21,29,51]。由于LLM包含的丰富的世界知识,增强的数据比原始数据[23,46,51]更加突出和多样化。然而,这些方法需要对测试数据进行持续的预处理,以与增强的训练数据保持一致,并且高度依赖于LLM生成的质量。第二种方法是利用LLM直接推荐。这些方法设计特殊提示[9,20,43]或使用监督微调[1,2,59]来诱导LLM回答给定的问题。尽管如此,由于上下文长度有限,这些方法只关注重排序阶段[7,59],该阶段仅包含数十个候选项。最后一种方法是采用LLM作为编码器来生成表示特定项目的嵌入[15,49]。虽然这些方法对提取信息很有效,但它们都丢弃了生成LLM 的功能。与上述方法相比,NoteLLM 在召回阶段使用 LLM 并学习标签生成以提高 LLM 生成嵌入的能力。
2.3 Hashtag/Category Generation from Text
Hashtags and categories, as tagging mechanisms on social media, streamline the identification of topic-specific messages and aid users in finding themed content. Generating these from text can assist in creating identifiers for untagged notes or suggesting options to users based on their preferences. In this domain, there are three main methods: extractive, classification, and generative methods. Extractive methods identify key phrases in texts as hashtags or categories [61, 63], but cannot obtain those not present in the original text. Classification methods view this task as a text classification problem [14, 58, 60]. However, these may yield sub-optimal results due to the diverse, free-form nature of human-generated hashtags. Generative methods generate the hashtags/categories directly according to input texts [4, 44, 45]. Whereas, these methods are limited to solving the hashtag/category generation task. In NoteLLM, LLMs perform multi-task learning, simultaneously executing I2I recommendation and hashtag/category generation. Due to the similarity of these two tasks, learning to generate the hashtag/category can also enhance the I2I recommendation.
主题标签和类别作为社交媒体上的标记机制,简化了特定主题消息的识别并帮助用户查找主题内容。从文本中生成这些有助于为未标记的注释创建标识符或根据用户的首选项向用户推荐选项。在这个领域,有三种主要方法:提取、分类和生成方法。①提取方法将文本中的关键短语识别为主题标签或类别 [61, 63],但无法获得原始文本中不存在的短语。②分类方法将此任务视为文本分类问题 [14, 58, 60]。但是,由于人工生成的主题标签的多样性、自由形式性质,这些可能会产生次优结果。③生成方法直接根据输入文本生成主题标签/类别 [4, 44, 45]。然而,这些方法仅限于解决主题标签/类别生成任务。在 NoteLLM 中,LLM 执行多任务学习,同时执行 I2I 推荐和主题标签/类别生成。由于这两个任务的相似性,学习生成主题标签/类别也可以增强 I2I 推荐。
图 2:NoteLLM 框架使用统一的提示用于 I2I 笔记推荐以及标签/类别生成。笔记通过笔记压缩提示进行压缩,并由预训练的语言模型进行处理。利用共现机制构建相关笔记对,并使用生成对比学习来训练 I2I 推荐任务。NoteLLM 还提取笔记的关键概念用于标签/类别生成,从而增强 I2I 推荐任务。
问题定义
In this section, we introduce the problem definition. We assume N = { n 1 , n 2 , . . . , n m } N=\{n_{1}, n_{2}, ..., n_{m}\} N={n1,n2,...,nm} as note pool,where m is the number of notes. Each note contains a title, hashtag, category, and content. We denote the i -th note as n i = ( t i , t p i , c i , c t i ) n_{i}=(t_{i}, t p_{i}, c_{i}, c t_{i}) ni=(ti,tpi,ci,cti) , where 𝑡𝑖, t p i t p_{i} tpi , c i c_{i} ci , c t i c t_{i} cti mean the title, the hashtag, the category and the content respectively. In the I2I note recommendation task, given a target note n i n_{i} ni , the LLMbased retriever aims to rank the top- k notes, which are similar to the given note, from the note pool N N N\ { n i } \{n_{i}\} {ni} .In the hashtag/category generation task, the ILM is utilized to generate the hashtag t p i t p_{i} tpi according to t i t_{i} ti and c t i c t_{i} cti .Besides, in the category generation task, the LLM is to generate the category c i c_{i} ci according to t i ˉ t_{\bar{i}} tiˉ , t p i t p_{i} tpi and c t i c t_{i} cti
在本节中,我们介绍问题的定义。我们假设 N = { n 1 , n 2 , . . . , n m } N = \{n_{1}, n_{2},..., n_{m}\} N={n1,n2,...,nm}为笔记池,其中(m)是笔记的数量。每篇笔记包含一个标题、一个话题标签、一个类别和内容。我们将第(i)篇笔记表示为 n i = ( t i , t p i , c i , c t i ) n_{i}=(t_{i}, tp_{i}, c_{i}, ct_{i}) ni=(ti,tpi,ci,cti),其中 t i t_{i} ti、 t p i tp_{i} tpi、 c i c_{i} ci、 c t i ct_{i} cti分别表示标题、话题标签、类别和内容。在笔记到笔记(I2I)的笔记推荐任务中,给定一个目标笔记(n_{i}),基于语言大模型(LLM)的检索器旨在从笔记池 N N N\ { n i } \{n_{i}\} {ni}中对与给定笔记相似的前(k)篇笔记进行排序。在话题标签/类别生成任务中,语言大模型(ILM)被用来根据 t i t_{i} ti和 c t i ct_{i} cti生成话题标签 t p i tp_{i} tpi。此外,在类别生成任务中,语言大模型(LLM)将根据 t i ˉ t_{\bar{i}} tiˉ、 t p i tp_{i} tpi和 c t i ct_{i} cti生成类别 c i c_{i} ci。
方法
NoteLLM 框架:Note Compression Prompt Construction、GCL 和 CSFT【图 2 】
- Note Compression Prompt 来管理 I2I 推荐和主题标签/类别生成任务。然后,这些提示被标记化并馈送到 LLM 中。NoteLLM 将协作信号和语义信息集成到隐藏状态中。
- GCL 利用生成的压缩词的隐藏状态进行对比学习,从而获取协作信号。
- CSFT 利用注释的语义和协作信息来生成主题标签和类别。
4.2. Note Compression Prompt
aim: condense the note content into a single special token. This condensed special token is then used to acquire collaborative knowledge through GCL. → generate hashtags/categories using this knowledge via CSFT.
Specifically, following prompt template for general note compression and hashtags/categories generation:
Prompt: [BOS]<Instruction> <Input Note>
The compression word is:"[EMB]". <Output Guidance> <Output>[EOS]
在此模板中,[BOS]、[EMB] 和 [EOS] 是特殊标记,而 <Instruction><Input Note> 和 <Output Guidance> 是替换为特定内容的占位符。类别生成的具体内容定义如下:
The template for hashtag generation is presented below:
鉴于用户生成的主题标签数量的不可预测性,随机选择原始主题标签的子集作为主题标签生成的输出目标,以最大限度地减少对 LLM 的潜在误导。随机选择的主题标签的数量(表示为 <j>)已合并到 和 <Output Guidance>.中。
提示完成后,它们将被标记化并馈送到 LLM 中。然后,LLM 将协作信号和关键语义信息提炼成压缩的单词,并根据笔记的中心思想生成主题标签/类别。
4.3. Generative-Contrastive Learning
预先训练的 LLM 通常通过指令调整 [47, 62] 或来自人类反馈的强化学习 (RLHF) [32, 38] 来学习新知识。这些方法主要侧重于利用语义信息来提高 LLM 的有效性和安全性。然而,仅仅依赖 LLM 中的语义信息对于推荐任务来说是不够的 [6, 20]。LLM 中不存在的协作信号在识别用户特别感兴趣的笔记方面起着至关重要的作用 [6, 20]。因此,我们建议 GCL 使 LLM 能够捕获更强的协作信号。与从特定答案或奖励模型中学习相反,GCL 采用对比学习,从整体角度学习笔记之间的关系接近性。
为了将协作信号集成到 LLM 中,我们采用共现机制,根据用户行为构建相关的笔记对。这种机制基于这样一个假设,即经常一起阅读的注释可能是相关的。因此,我们会在一周内收集用户行为数据以进行共存计数。我们统计了用户查看笔记 n A n_{A} nA 并随后点击笔记 n B n_{B} nB 的次数。同时,为了区分不同用户的共现贡献,我们为不同的点击分配了不同的权重。具体来说,我们按以下方式计算共现分数:
s n A → n B = ∑ i = 1 U 1 N i , s_{n_{A} \to n_{B}}=\sum_{i=1}^{U} \frac{1}{N_{i}}, snA→nB=∑i=1UNi1, 其中 s n A → n B s_{n_{A} \to n_{B}} snA→nB 表示从注释 n A n_{A} nA 到注释 n B n_{B} nB 的共现分数,U 是该用户行为数据中的用户数, N i N_{i} Ni 表示用户行为数据中第 i 个用户点击的笔记集数量。此操作旨在防止活跃用户的误导,他们可能会不分青红皂白地点击推荐给他们的每个笔记。在计算了所有笔记对的共现分数后,我们构建了从笔记 n i n_{i} ni 到所有其他笔记的共现分数集 S n i S_{n_{i}} Sni。具体来说, S n 1 S_{n_{1}} Sn1 定义为抖 s n i → n j ∣ 1 ≤ j ≤ m , i ≠ j {s_{n_{i} \to n_{j}} | 1 ≤j ≤m, i ≠j} sni→nj∣1≤j≤m,i=j 。接下来,我们从 S n i S_{n_{i}} Sni 中过滤共现分数高于 u 或低于阈值 1 的异常值注释。最后,我们从 fltered 集合中选择共现分数最高的 t 笔记作为笔记 n i n_{i} ni 的相关笔记。
在构建了相关的笔记对之后,训练 NoteLLM 根据文本语义和协作信号来确定笔记的相关性。与简单地进行特殊池化不同word 来表示笔记 [26],利用 prompt 来压缩笔记信息,生成一个虚词。压缩后的虚字的最后隐藏状态包含了给定笔记的语义信息和协同信号,可以代表笔记。具体来说,由于 LLM 的自回归性质,我们取 [EMB] 前一个标记的最后一个隐藏状态,并使用线性层将其转换为注释嵌入空间,其维度为 d 我们将第 i 个笔记 n i n_{i} ni 的嵌入表示为 n i n_{i} ni 。我们假设每个小批量包含 B 个相关的 note 对,因此每个小批量总共有 2Bnote。我们将注释 n 1 n_{1} n1 的相关注释表示为 n i + n_{i}^{+} ni+ ,其嵌入表示为 n i + n_{i}^{+} ni+。根据 [30],GCL 的损失计算如下:
L c l = − 1 2 B ∑ i = 1 2 B l o g e s i m ( n i , n i + ) ⋅ e τ ∑ j ∈ [ 2 B ] \ { i } e s i m ( n i , n j ) ⋅ e τ , L_{c l}=-\frac{1}{2 B} \sum_{i=1}^{2 B} log \frac{e^{sim\left(n_{i}, n_{i}^{+}\right) \cdot e^{\tau}}}{\sum_{j \in[2 B] \backslash\{i\}} e^{sim\left(n_{i}, n_{j}\right) \cdot e^{\tau}}}, Lcl=−2B1∑i=12Blog∑j∈[2B]\{i}esim(ni,nj)⋅eτesim(ni,ni+)⋅eτ,,其中 L c l L_{c l} Lcl 表示 GCL 的丢失,τ 表示可学习温度, s i m ( a , b ) = a ⊤ b / ( ∥ a ∥ ∥ b ∥ ) sim(a, b)=a^{\top} b /(\|a\|\|b\|) sim(a,b)=a⊤b/(∥a∥∥b∥)
⭐4.4 Collaborative Supervised Fine-Tuning
具体来说,我们采用 CSFT,它利用笔记的语义内容和压缩令牌中的协作信号来生成主题标签/类别。为了提高训练效率并防止遗忘问题 [40],我们从每个批次中选择 rnotes 用于标签生成任务,而剩余的 notes 则分配给类别生成任务。具体来说,按如下方式计算 CSFT 损失:
L g e n = − 1 T ∑ i = 1 T l o g ( p ( o i ∣ o < i , i ) ) , L_{g e n}=-\frac{1}{T} \sum_{i=1}^{T} log \left(p\left(o_{i} | o_{<i}, i\right)\right), Lgen=−T1∑i=1Tlog(p(oi∣o<i,i)),
其中 L g e n L_{gen } Lgen 是 CSFT 损失,T 是输出的长度,oi表示输出序列 o 中的第 i 个标记,i 是输入序列。
最后,我们定义 NoteLLM 的损失函数以合并 GCL 和 CSFT:
L = L c l + α L g e n 1 + α , L=\frac{L_{c l}+\alpha L_{g e n}}{1+\alpha}, L=1+αLcl+αLgen,,其中 L 是 NoteLLM 的总损耗, c c c c cc 是超参数。通过模型更新,NoteLLM 能够同时执行笔记推荐场景的 I2I 推荐任务和井号标签/类别生成任务。
补充1:归一化损失拓展
这篇论文中提出的损失函数组合方式对我的领域来说挺新颖的,核心创新点在于通过引入加权系数 α 和归一化因子 (1 + α),对两种损失函数 L c l L_{cl} Lcl 和 L g e n L_{gen} Lgen 进行平衡,并且以非对称的方式动态调节它们的重要性。这种设计突破了传统的直接加权方法(如使用两个超参数或 ( α \alpha α) 和 (1- α \alpha α) 的形式),优点:
1. 动态平衡不同目标的优化:
传统的直接加权方法(如用两个超参数或 ( α \alpha α) 和 (1- α \alpha α) 通常会要求手动调参,找到适合的权重组合。但这种新颖的组合方式通过引入归一化因子 (1 + α \alpha α),使得损失项的相对权重更加平滑,减少了调参的复杂度。
- α 的作用:它明确控制了两种损失的权重比例,同时通过 ( 1 + α ) (1 + \alpha) (1+α) 的归一化避免了权重的绝对值失控。
- α 较小 时, α 1 + α \frac{\alpha}{1+\alpha} 1+αα 的值接近 0,强调对比学习损失 L c l L_{cl} Lcl 的优化;
- α 较大 时, α 1 + α \frac{\alpha}{1+\alpha} 1+αα 的值趋近于 1,更多优化协同监督微调损失 L g e n L_{gen} Lgen。
这种设计使得损失项的贡献可以随着任务需求动态调整,而不会因为不合理的权重导致训练失衡。
2. 统一了优化目标,减少冲突:
对比学习损失 (L_{cl}) 和 协同监督损失 (L_{gen}) 本质上优化的目标可能有所冲突:
- L c l L_{cl} Lcl 注重样本之间的语义相关性,强化模型对笔记间细粒度关系的建模。
- L g e n L_{gen} Lgen 则关注序列生成的质量,强调标签预测的准确性,例如标签分类任务中的语义一致性。
- 如果直接线性相加,两个损失项的梯度可能会相互干扰,导致优化过程不稳定。而引入归一化因子 ( 1 + α ) (1 + \alpha) (1+α)后,两种损失的贡献被统一到一个平衡的范围内,减轻了这种冲突。
最后,类似的加权与归一化方法可以扩展到 3 个或更多损失的组合:
扩展到多个损失的加权公式
对于 ( n ) 个损失(如 ( L 1 , L 2 , … , L n L_1, L_2, \dots, L_n L1,L2,…,Ln )),可以对它们进行加权和归一化,类似于两损失的形式。一个通用的公式是:
L = ∑ i = 1 n α i L i ∑ i = 1 n α i L = \frac{\sum_{i=1}^{n} \alpha_i L_i}{\sum_{i=1}^{n} \alpha_i} L=∑i=1nαi∑i=1nαiLi
- 权重参数 ( α i \alpha_i αi):控制每个损失 ( L i L_i Li) 的重要性。类似于两损失的情况,( α i \alpha_i αi) 是可以调节的超参数,用于动态调整不同损失的贡献。
- 归一化项 ( ∑ i = 1 n α i \sum_{i=1}^{n} \alpha_i ∑i=1nαi):确保总损失的范围是平衡的,不因为某个权重的异常放大或缩小而影响训练稳定性。
特点:
- 动态平衡:通过归一化,保证每个损失都有贡献,而不会因为某个 ( α i \alpha_i αi) 的极端值导致某些损失被忽略。
- 灵活性:可以通过调节 ( α i \alpha_i αi) 的值来控制每个损失的相对重要性。例如,如果想让第一个损失 ( L 1 L_1 L1) 更重要,可以设置 ( α 1 > α 2 , α 3 , … \alpha_1 > \alpha_2, \alpha_3, \dots α1>α2,α3,…)。
实际应用的话:
补充1.1.每个损失有不同的优先级
例如,对于 ( L 1 L_1 L1), ( L 2 L_2 L2), ( L 3 L_3 L3):
- ( L 1 L_1 L1):主任务损失,例如分类任务的交叉熵损失。
- ( L 2 L_2 L2):辅助任务损失,例如对比学习损失,用于提升表示质量。
- ( L 3 L_3 L3):正则化损失,例如 L2 正则化,用于约束模型复杂度。
在这种情况下,可以设置优先级,比如:
- 主任务损失的 ( α 1 \alpha_1 α1) 值较大(如 1.0)。辅助任务的 ( α 2 \alpha_2 α2) 值适中(如 0.5)。正则化的 ( α 3 \alpha_3 α3) 值较小(如 0.1)。
补充1.2.任务需求动态变化
在某些多任务学习中,不同阶段可能需要不同的损失权重。例如:
- 早期阶段:更强调对比学习损失 ( L 2 L_2 L2),以学习更好的表示。
- 后期阶段:更注重主任务损失 ( L 1 L_1 L1),以提升主任务性能。
可以动态调整 ( α i \alpha_i αi) 的值,或者设计一个自动调节机制(例如通过训练过程中的某些指标动态调整权重)。
补充1.3.进一步优化:自动权重学习
手动调节 ( α i \alpha_i αi) 并不总是高效的,尤其是当损失数量较多时。为此,可以引入自动学习权重的机制,比如:
方法 1:基于梯度大小的权重调整
通过观察每个损失的梯度大小,动态调整权重。例如:
α i = 1 ∥ ∇ L i ∥ \alpha_i = \frac{1}{\|\nabla L_i\|} αi=∥∇Li∥1
- 梯度较大的损失(优化难度较高)会被赋予较小的权重,避免对训练过程造成过大影响。
- 梯度较小的损失会被赋予较大的权重,确保它对训练有足够的贡献。
方法 2:基于不确定性的动态权重
可以使用类似于多任务学习中的不确定性加权方法(Uncertainty Weighting),通过引入可学习参数 ( σ i \sigma_i σi):
L = ∑ i = 1 n 1 2 σ i 2 L i + log ( σ i ) L = \sum_{i=1}^{n} \frac{1}{2\sigma_i^2} L_i + \log(\sigma_i) L=i=1∑n2σi21Li+log(σi)
- ( σ i \sigma_i σi) 是可学习的参数,训练过程中模型会自动调整每个损失的权重。
- 这种方法可以避免手动调参,且随着训练逐步收敛。
补充1.4.潜在问题与解决方案
问题 1:损失尺度不一致
多个损失的量级可能不同(例如,分类损失的值通常较小,而对比学习损失可能较大)。这种情况下,直接加权会导致某些损失主导优化过程。
- 解决方法:对各损失进行归一化处理,确保它们的量级相近。e.g.,可以用每个损失的初始值或均值进行归一化: L i ′ = L i mean ( L i ) L_i' = \frac{L_i}{\text{mean}(L_i)} Li′=mean(Li)Li
问题 2:权重调节过于频繁
如果损失权重在训练过程中变化过快,可能导致训练不稳定:引入平滑机制,例如对权重的更新加入动量项,避免剧烈波动。
补充2:关于共现分数、共现分数集、协作监督微调CSFT
- 共现分数和共现分数集
- 共现分数:基于用户行为数据计算,假设笔记频繁一起被阅读则可能相关。通过统计用户在一周内先查看笔记(n_{A})后点击笔记(n_{B})的次数来计算共现分数( s n A → n B = ∑ i = 1 U 1 N i s_{n_{A} \to n_{B}}=\sum_{i = 1}^{U}\frac{1}{N_{i}} snA→nB=∑i=1UNi1),其中(U)是用户数量,( N i N_{i} Ni)是第(i)个用户点击的笔记集数量。这样做是为了考虑不同用户的点击行为差异,防止活跃用户的无差别点击对共现分数产生误导。
- 共现分数集:对于每个笔记( n i n_{i} ni),计算它到所有其他笔记的共现分数,形成共现分数集( S n i = { s n i → n j ∣ 1 ≤ j ≤ m , i ≠ j } S_{n_{i}}=\{s_{n_{i} \to n_{j}}|1\leq j\leq m, i\neq j\} Sni={sni→nj∣1≤j≤m,i=j})。然后筛选出共现分数高于上限(u)或低于下限(l)的异常值笔记,从筛选后的集合中选择(t)个共现分数最高的笔记作为( n i n_{i} ni)的相关笔记。这有助于构建高质量的相关笔记对,为后续模型训练提供准确的数据基础。
- 从批内负样本中识别相关笔记
- 在生成对比学习(GCL)中,每个小批次包含(B)个相关笔记对,共(2B)个笔记。将笔记通过Note Compression Prompt压缩后输入预训练的LLMs,利用其隐藏状态进行对比学习。对于每个笔记( n i n_{i} ni),其相关笔记为( n i + n_{i}^{+} ni+),模型会计算( n i n_{i} ni)与( n i + n_{i}^{+} ni+)以及其他笔记(即批内负样本)的相似度。通过最小化( L c l = − 1 2 B ∑ i = 1 2 B log e s i m ( n i , n i + ) ⋅ e τ ∑ j ∈ [ 2 B ] \ { i } e s i m ( n i , n j ) ⋅ e τ L_{cl}=-\frac{1}{2B}\sum_{i = 1}^{2B}\log\frac{e^{sim(n_{i},n_{i}^{+})\cdot e^{\tau}}}{\sum_{j\in[2B]\backslash\{i\}}e^{sim(n_{i},n_{j})\cdot e^{\tau}}} Lcl=−2B1∑i=12Blog∑j∈[2B]\{i}esim(ni,nj)⋅eτesim(ni,ni+)⋅eτ)损失函数,训练LLMs从批内负样本中区分出相关笔记,使正样本对的相似度得分高于负样本对,从而让模型学习到笔记之间的关系亲近性,获取协同信号。
- 协作监督微调(CSFT)
- 利用笔记的语义内容和压缩令牌中的协同信号生成标签和类别。在训练时,从每个批次中选择(r)个笔记用于标签生成任务,其余笔记用于类别生成任务。通过计算( L g e n = − 1 T ∑ i = 1 T log ( p ( o i ∣ o < i , i ) ) L_{gen}=-\frac{1}{T}\sum_{i = 1}^{T}\log(p(o_{i}|o_{<i},i)) Lgen=−T1∑i=1Tlog(p(oi∣o<i,i)))损失函数进行训练,其中(T)是输出长度,( o i o_{i} oi)是输出序列中的第(i)个标记,(i)是输入序列。这使得模型能够从文本内容中提取关键信息,并以标签和类别的形式进行总结,进一步丰富了模型对笔记语义的理解,同时将两个任务集成在一个提示中,提高了训练效率并防止遗忘问题。最后,通过总损失函数( L = L c l + α L g e n 1 + α L=\frac{L_{cl}+\alpha L_{gen}}{1+\alpha} L=1+αLcl+αLgen)将GCL和CSFT结合,实现模型在推荐任务和生成任务上的性能优化。
6. 结论
In this work, we propose retrievable LLMs, called NoteLLM, for note recommendation with three key components: Note Compression Prompt, GCL, and CSFT. To manage both I2I recommendation and hashtag/category generation tasks, we utilize Note Compression Prompt to form the compressed word embeddings and generate the hashtag/category simultaneously. Then, we use GCL to conduct contrastive learning based on the hidden states of the compressed word, which acquires collaborative signals. Additionally, we employ CSFT to preserve the generation capability of NoteLLM while leveraging the semantic and collaborative information of the note to generate hashtags and categories, which can enhance the embeddings for recommendation. Comprehensive experiments are conducted, which validate the effectiveness of NoteLLM.
在这项工作中,我们提出了可检索的大语言模型,称为 NoteLLM,用于笔记推荐,它有三个关键组成部分:笔记压缩提示(Note Compression Prompt)、GCL 和 CSFT。为了处理物品到物品的推荐以及标签/类别生成任务,我们利用笔记压缩提示来形成压缩的词嵌入,并同时生成标签/类别。然后,我们使用 GCL 基于压缩词的隐藏状态进行对比学习,从而获得协同信号。此外,我们采用 CSFT 在保留 NoteLLM 的生成能力的同时,利用笔记的语义和协同信息生成标签和类别,这可以增强用于推荐的嵌入。进行了全面的实验,验证了 NoteLLM 的有效性。
相关文章:

论文速读|NoteLLM: A Retrievable Large Language Model for Note Recommendation.WWW24
论文地址:https://arxiv.org/abs/2403.01744 bib引用: misc{zhang2024notellmretrievablelargelanguage,title{NoteLLM: A Retrievable Large Language Model for Note Recommendation}, author{Chao Zhang and Shiwei Wu and Haoxin Zhang and Tong Xu…...

在线图片转为excel工具
在线图片转为excel工具,无需登录,无需成本,用完就走。 包括中文和英文版本。 官网地址: https://img2excel.openai2025.com 效果:...
深度学习篇---数据集分类
文章目录 前言第一部分:VOC数据集标签、COCO数据集格式1.VOC数据集标签的特点及优缺点特点优点缺点 2.COCO数据集标签的特点及优缺点特点优点缺点 3.YOLO数据集标签的特点及优缺点特点优点缺点 第二部分:VOC格式和YOLO格式1.VOC格式3.YOLO格式3.区别(1)文…...

Unity3D仿星露谷物语开发23之拿起道具的动画
1、目标 当点击库存栏上可以carry的道具时,首先arms替换为carry状态,同时手上拿着被点击的道具。当再次点击同一个道具时,ams替换为idle状态,手上放下之前的道具。 这个最主要的是要学会使用AnimatorOverrideController类。 2、…...

素描风格渲染
素描风格渲染(Hatching Style Rendering),是一种非真实感渲染(NPR),主要目的是使3D模型看起来像 手绘素描的视觉效果。这种风格的渲染常用于游戏、动画和电影中,用来创造一种独特的艺术风格 1、…...

STM32使用DSP库 Keil方式添加
文章目录 前言一、添加DSP库二、使能FPU及配置1. 使能FPU2. 增加编译的宏3.增加头文件的检索路径三. 验证1. 源码中添加2.代码测试前言 添加DSP有两种方案,本文采用的是是Keil 中添加。 一、添加DSP库 在创建好的工程中添加DSP库:步骤如下: 步骤1:选择运行环境管理; 步…...

【机器学习实战入门项目】MNIST数字分类机器学习项目
Python 深度学习项目:手写数字识别 为了使机器更加智能,开发者们正在深入研究机器学习和深度学习技术。人类通过不断练习和重复来学习执行某项任务,从而记住如何完成这些任务。然后,大脑中的神经元会自动触发,他们能够…...

利用 LNMP 实现 WordPress 站点搭建
部署MySQL数据库 在主机192.168.138.139主机部署数据库服务 包安装数据库 apt-get install mysql-server 创建wordpress数据库和用户并授权 mysql> create database wordpress;#MySQL8.0要求指定插件 mysql> create user wordpress192.168.138.% identified with mys…...

模块化架构与微服务架构,哪种更适合桌面软件开发?
前言 在现代软件开发中,架构设计扮演着至关重要的角色。两种常见的架构设计方法是模块化架构与微服务架构。它们各自有独特的优势和适用场景,尤其在C#桌面软件开发领域,模块化架构往往更加具有实践性。本文将对这两种架构进行对比࿰…...
2025.1.17——1200
2025.1.17——1200 Q1. 1200 Jellyfish has n n n green apples with values a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,…,an and Gellyfish has m m m green apples with values b 1 , b 2 , … , b m b_1,b_2,\ldots,b_m b1,b2,…,bm. They will …...
vite工程化
Vite 通过直接利用浏览器的模块加载能力、将 CommonJS 模块转换为 ES 模块并缓存结果、基于原生 ES 模块的 HMR 以及对 TypeScript 的直接支持,提供了更快的开发体验和更高的开发效率。 1.直接利用浏览器模块加载功能 更快加载速度:不需要打包…...

Mysql常见问题处理集锦
Mysql常见问题处理集锦 root用户密码忘记,重置的操作(windows上的操作)MySQL报错:ERROR 1118 (42000): Row size too large. 或者 Row size too large (> 8126).场景:报错原因解决办法 详解行大小限制示例:内容来源于网…...
Android SystemUI——CarSystemBar添加到窗口(十)
上一篇文章我们看到了车载状态栏 CarSystemBar 视图的创建流程,这里我们继续分析将车载状态栏添加到 Windows 窗口中。 一、添加状态栏到窗口 前面我们已经分析了构建视图对象容器和构建视图对象内容,接下来我们继续分析 attachNavBarWindows() 方法将视…...
《重生到现代之从零开始的C++生活》—— 类和对象1
类 我嘞个豆,类可是太重要了,简直是重中之重 class为定义类的关键字,stack为类的名字,{}为类的主题 class stack {void add (int a,int b){return ab;}//类的方法,成员函数int _c;int _d;//类的属性,成…...

《FMambaIR:一种基于混合状态空间模型和频域的方法用于图像恢复》学习笔记
paper:(PDF) FMambaIR: A Hybrid State Space Model and Frequency Domain for Image Restoration 目录 摘要 一、引言 二、相关工作 1、图像恢复 2、频率学习 3、状态空间模型(SSM) 三、框架 1、基本知识 2、整体框架 3、F-Mamba…...

每日十题八股-2025年1月18日
1.服务器处理并发请求有哪几种方式? 2.讲一下io多路复用 3.select、poll、epoll 的区别是什么? 4.epoll 的 边缘触发和水平触发有什么区别? 5.redis,nginx,netty 是依赖什么做的这么高性能? 6.零拷贝是什么…...

海康威视摄像头RTSP使用nginx推流到服务器直播教程
思路: 之前2020年在本科的时候,由于项目的需求需要将海康威视的摄像头使用推流服务器到网页进行直播。这里将自己半个月琢磨出来的步骤给大家发一些。切勿转载!!!! 使用网络摄像头中的rtsp协议---------通…...

搭建一个基于Spring Boot的书籍学习平台
搭建一个基于Spring Boot的书籍学习平台可以涵盖多个功能模块,例如用户管理、书籍管理、学习进度跟踪、笔记管理、评论和评分等。以下是一个简化的步骤指南,帮助你快速搭建一个基础的书籍学习平台。 — 1. 项目初始化 使用 Spring Initializr 生成一个…...
Go 语言的slice是如何扩容的?
Go 语言中的 slice 是一种灵活、动态的视图,是对底层数组的抽象。当对 slice 进行追加元素等操作导致其长度超过容量时,就会发生扩容。 一、扩容的基本原理 当 slice 需要扩容时,Go 语言会根据当前的容量来确定新的容量。一般来说ÿ…...
Apache Hive--排序函数解析
在大数据处理与分析中,Apache Hive是一个至关重要的数据仓库工具。其丰富的函数库为数据处理提供了诸多便利,排序函数便是其中一类非常实用的工具。通过排序函数,我们能够在查询结果集中为每一行数据分配一个排名值,这对于数据分析…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...