标题: Text-like Encoding of Collaborative Information in Large Language Models for Recommendation 地址:https://arxiv.org/pdf/2406.03210 学校:中科大 代码:https://github.com/zyang1580/BinLLM 会议:ACL 2024
LLMRec如何集成用户-item的交互信息?常见的方式是从头训练LLM或者从其他模型来映射协作信息。但这些方法无法以类似文本的格式表示信息,这可能无法与LLM最佳对齐。本文提出BinLLM,通过类似文本的编码无缝集成协作信息。BinLLM将来自外部模型的协作emb转换为二进制序列——一种LLM可以直接理解和操作的特定文本格式,有助于LLM直接使用类似文本格式的协作信息。同时,BinLLM可以使用点小数表示法压缩二进制序列,以避免过长的长度。
BinLLM包括两个部分:提示生成和LLM预测。与以前的方法类似,将推荐数据转换为自然语言的提示词,然后将其直接输入到LLM中进行预测。但BinLLM通过将协作emb转换为二进制序列,以类似文本的格式表示协作信息。
如图所示为提示词模板,基于用户的信息在对应位置填上数据得到当前用户的提示词。
为了更好地与LLM集成,以类似文本的格式对协作信息进行编码。本文将协作信息转换为二进制序列,使LLM能够执行逐位运算进行推理。编码模型包括两个部分:协同模型以及二进制化和压缩模块
常规的基于用户交互信息构建协同模型从而获得协同emb。给定用户u和商品i,协作模型生成相应的emb,表示为下式,
二进制化。为了将协作emb二进制化,首先使用全连接层将协作emb转换到合适的空间中,然后应用符号函数来获得二进制结果。表达如下,其中表示tanh激活函数,然后针对emb中的每个位置判断是否大于0
这些二进制序列可以直接输入到LLM中,并用于计算逻辑“与”等操作,从而有助于用户偏好推理。
压缩。二进制序列的问题是它们的长度相对较长,而LLM对于太长的序列不擅长推理,并且长序列会限制LLMRec的推理效率。因此,需要压缩二进制序列,同时保持它们可被LLM利用。作者这里采用dot-decimal notations(笔者不知道翻译成什么比较合适,就直接用英文吧,这个压缩形式就是类似ip地址的方式),文中将每八位二进制数字转换为十进制数字,范围从0到255,并使用点作为分隔字符。类似xxx.xxx.xxx吧,作者考虑这样编码的原因是IPv4最初是由二进制序列编码的,并且Web包含了关于IPv4的足够知识,在Web数据上训练的LLM可以潜在地理解IPv4使用的小数点表示法。(不知道这里采用LSH这类方法会不会有效),例子:
由于LLM中缺乏特定的推荐预训练,引入一个额外的LoRA模块用于推荐预测。对于生成的提示p,表示为下式,
其中,表示预训练的LLM的参数,表示LoRA模型参数,根据任务的不同,预测结果可以是预测的下一个item或喜欢候选item的预测概率。
对类文本编码模块的训练侧重于学习为协作信息生成二进制序列,而与LLM无关。LoRA的训练指导LLM通过利用协作信息进行推荐。
为了训练类文本编码模块,令D表示训练数据,表示用户u和label为t的商品i之间的交互。通过最小化以下优化问题来训练,其中h是二进制化后得到的表征,是常用的推荐损失,如交叉熵损失。简单来说就是用构建常规的协同模型且二进制化后,通过二进制化的表征来构建损失函数。
需要注意的是,符号函数缺乏平滑性,其梯度被定义为零,因此采用STE使得模型可以端到端的训练,对于STE可以参考https://blog.csdn.net/m0_37400316/article/details/105996240
要训练LoRA模块,考虑两种方法:Intuitive tuning和Two-step tuning。
Intuitive tuning:此方法通过包含协作信息的提示词直接从头开始训练LoRA模块。
Two-step tuning:第一种方式在rating预测任务中存在一定问题,因为模型只需参考二进制表示的学习过程,对给定用户和候选项的协同表示执行逐位“与”运算,就可以获得不错的结果。从头开始训练可能会导致模型过度依赖这些特征,从而可能忽略类似于学习其他属性。因此,本文采用两阶段训练,首先使用排除协作信息的提示来训练模型。然后使用包含协作信息的完整提示对模型进行微调,从而进一步完善模型。