论文阅读《Prompt Distillation for Efficient LLM-based Recommendation》

Prompt Distillation for Efficient LLM-based Recommendation

本文发表在CIKM’2023上,主要针对大模型应用在推荐系统时采用离散提示(discrete prompt)出现的两个问题提出解决方案并进行了实验证明。

  • 问题1:用户与物品的ID embedding 在推荐系统中用户对物品的偏好以及用户和物品的相似度,而离散提示的模板中的词嵌入通常捕捉的是词之间的上下文关系。在大模型训练时,通常需要经过大量的微调才能弥补id和模板词之间的gap。对此提出了 (Prompt Distillation)提示蒸馏的方法,将离散提示提炼为了连续向量的提示,是model-free的。
  • 问题2:训练效率问题,大模型推荐通常是经过预训练之后适应到不同的下游任务。如本论文主要针对的是TopN推荐,序列推荐和可解释性推荐三种推荐。而不同的推荐对应的输入\输出以及提示模板的长度可能不同(常用的解决方法:填充到相同长度),如果将这些任务的训练样本混合在一起直接进行训练虽然是可行的,但是效率大打折扣。为此提出了任务交替训练策略,就是按照预先设定的顺序依次重复训练三种任务。

方法论

三种典型推荐介绍

U \mathcal U U:用户集合, I \mathcal I I:物品集合, u , i u,i u,i:具体用户和物品

  1. 序列推荐: 每个用户有自己的历史交互序列,根据给定的用户和物品交互序列,预测该用户下一项的点击物品。
  2. TopN推荐:给定用户以及一个候选物品列表,向给定的用户推荐一个项目列表,该列表内包含的是候选列表中N个最有可能交互的且用户未曾交互的物品。
  3. 解释性推荐:给定一个用户-物品对(u,i),生成一个解释来证明为什么要向该用户推荐该物品(比如:价格合理)。

离散提示

在推荐系统中,用户和物品的id是用来区分它与其他个体的关键,大多数过往的工作采用与id相关的文本段(如用户或者物品标题)来作为替代,填充在预定义的模板中。举个例子: Generate an expalanation for user_1234 about item_5678。这种类型的文本输入就被作者定义为离散提示,由一系列的离散token组成。由于user_1234会被分词为user,_,12,34。作者设计了一个额外的Whole-word Embedding来连接ID的token,具体形式在蒸馏中会解释。

提示蒸馏

提示蒸馏:不牺牲大模型的性能的前提下,缩短提示长度。经过提炼的简短提示符可以是自由文本也可以是向量

作者认为离散提示可能不能够有效的指引大模型。当两个不同的任务的输入数据格式十分相似的时候,大模型可能没法区分该任务是哪个任务,例如序列推荐和TopN推荐的输入都是一个用户和一堆物品。另一个问题就是当模板较长时,可能会掩盖关键的信息,这也会花费较长的时间来进行训练和微调。为此提出了POD提示蒸馏的方法,将离散的提示模板提炼成了多个的连续向量。一个具体的提示蒸馏样例如下。
在这里插入图片描述

整体连续向量提示的提炼过程如下图所示:
在这里插入图片描述

具体的推理过程如下,省略了提示模板和单词分词。
在这里插入图片描述

大致的流程:
X = [ x 1 , . . . , x ∣ X ∣ ] X = [x_{1},...,x_{|X|}] X=[x1,...,xX]是输入序列, Y = [ y 1 , . . . , y ∣ Y ∣ ] Y = [y_{1},...,y_{|Y|}] Y=[y

### 基于提示的方法在NLP和机器学习中的应用和技术 #### 提示词在上下文学习(In Context Learning) 提示词在上下文学习是一种利用预训练模型的能力,在不改变其参数的情况下,仅通过输入特定结构化的文本序列来引导模型完成新任务的方式[^1]。这种方式依赖于精心设计的提示(prompt),这些提示通常由人类编写者创建或是通过自动化过程生成。 对于自然语言处理(NLP)领域而言,这种方法允许开发者无需大量标注数据即可让大型语言模型执行各种下游任务,如问答、分类等。由于不需要额外的数据集用于重新训练整个网络权重,因此降低了开发成本并提高了灵活性。 ```python def generate_prompt(task_description, examples=None): """ Generate a prompt string for in-context learning. :param task_description: Description of the target task. :param examples: Optional list of example inputs/outputs pairs. :return: Formatted prompt as a single string. """ base_prompt = f"In this task you will {task_description}." if examples: formatted_examples = "\n".join([f"- Input: \"{ex['input']}\" Output: \"{ex['output']}\"" for ex in examples]) return f"{base_prompt}\nHere are some examples:\n{formatted_examples}" else: return base_prompt ``` #### 模型微调(Model Fine-Tuning) 相比之下,模型微调是指针对具体应用场景调整已有的大规模预训练模型的过程。这一过程涉及使用少量针对性强的任务专用数据集对原始模型进行再训练,从而使得该模型能够更好地适应新的环境或解决更具体的挑战。相比于完全从头开始构建一个新的神经网络架构来说,这种做法不仅节省了大量的时间和资源,而且还能保持原有模型强大的泛化能力。 当涉及到多模态场景时,比如图像配文字描述这样的跨媒体任务,LAMM (Label Alignment for Multi-Modal Prompt Learning)[^3] 就是一个很好的例子。它专注于如何有效地将不同形式的信息结合起来,并通过对类别标签的学习实现更好的特征表达。特别是对于像CLIP这样的预训练视觉-语言模型,LAMM可以通过引入可学习的标记<Mi>来进一步提升其表现力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值