TAGCF:基于大语言模型的图协同过滤推荐系统优化
1. 项目概述
协同过滤(Collaborative Filtering, CF)作为推荐系统的核心技术,长期以来面临两大核心挑战:数据稀疏性和冷启动问题。传统CF方法仅依赖用户-物品交互数据,当新用户或新物品缺乏足够交互记录时,推荐质量会显著下降。虽然知识图谱和内容特征等辅助信息能够部分缓解这些问题,但这些方法往往需要大量人工标注和领域知识。
大语言模型(LLMs)的兴起为解决这一困境提供了新思路。LLMs具备强大的语义理解和推理能力,能够从用户评论、物品描述等非结构化文本中提取潜在的用户偏好和物品特征。然而,如何将LLMs的语义知识与传统CF的协同信号有效结合,一直是学术界和工业界探索的难题。
TAGCF(Topology-Augmented Graph Collaborative Filtering)创新性地提出将语义知识转化为图拓扑结构的思路。不同于直接将LLMs用于生成推荐结果或提取文本嵌入,TAGCF构建了用户-属性-物品(User-Attribute-Item, U-A-I)三元图,通过引入LLM推断的中间属性节点,在保留原始交互结构的同时,增加了用户和物品之间的潜在连接路径。
2. 核心设计思路
2.1 从语义到拓扑的范式转换
传统LLM增强推荐方法主要分为两类:
- 直接预测型 :使用LLMs生成推荐结果,但受限于计算成本和上下文窗口,难以扩展到大规模物品库
- 嵌入融合型 :将LLMs生成的文本嵌入与CF嵌入结合,但存在语义空间与行为空间不对齐的问题
TAGCF提出了第三种路径 - 拓扑增强型 ,其核心创新在于:
- 将LLMs的语义推理能力转化为图结构连接
- 通过中间属性节点建立用户和物品的间接关联
- 保持原始交互数据的完整性,避免噪声注入
这种转换使得语义知识能够以图神经网络可处理的形式参与信息传播,同时避免了文本嵌入的维度不匹配问题。
2.2 U-A-I图构建流程
U-A-I图的构建包含两个关键阶段:
2.2.1 属性提取阶段
给定用户-物品对<u,i>及其相关元数据(如用户评论、物品描述),通过精心设计的prompt引导LLM推断交互背后的潜在原因。例如:
"用户是一位程序员,购买了一款机械键盘。根据用户历史行为和产品特性,推断可能的原因:1) 工作需要长时间编码;2) 对RGB灯效感兴趣;3) 追求打字手感..."
提取的属性需要满足:
- 特异性 :能明确区分不同用户偏好
- 可泛化 :可在不同用户/物品间共享
- 可解释 :人类可理解的语义概念
2.2.2 属性过滤与融合阶段
原始提取的属性通常存在噪声和冗余,需要通过以下步骤优化:
-
频率过滤 :移除出现频率过高(无区分度)或过低(难以泛化)的属性
def frequency_filter(attributes, min_freq=5, max_freq=1000): freq = Counter(attributes) return [a for a in attributes if min_freq <= freq[a] <= max_freq] -
语义融合 :使用预训练语言模型计算属性间语义相似度,合并相近属性
- 采用贪心算法,时间复杂度从O(n²)降至O(nlogn)
- 设置相似度阈值(如0.7)控制融合粒度
经过处理的属性集合既保留了语义多样性,又避免了信息冗余,为后续图学习提供了高质量的中介节点。
3. 自适应关系加权图卷积(ARGC)
3.1 异构关系建模
U-A-I图中包含三种基本关系类型:
- 用户-物品交互 (UI):观察到的显式反馈
- 用户-属性关联 (UA):LLM推断的潜在偏好
- 物品-属性关联 (IA):物品具有的特征属性
ARGC的核心思想是为每种关系类型设计独立的信息传播路径,并通过自适应权重平衡不同关系的贡献。
3.2 关系特定聚合
对于每种关系类型r∈{UI,UA,IA},计算关系特定的节点表示:
v_{r}^{(l+1)} = \sum_{j\in\mathcal{N}_r(i)} \frac{1}{\sqrt{|\mathcal{N}_r(i)|}\sqrt{|\mathcal{N}_r(j)|}} h_j^{(l)}
其中:
- $\mathcal{N}_r(i)$表示节点i在关系r下的邻居集合
- $h_j^{(l)}$是第l层节点j的表示
- 归一化项避免节点度数带来的偏差
3.3 动态权重分配
通过轻量级预测网络计算各关系的权重:
class RelationWeightPredictor(nn.Module):
def __init__(self, dim):
super().__init__()
self.fc1 = nn.Linear(2*dim, dim//2)
self.fc2 = nn.Linear(dim//2, 1)
def forward(self, x, v_r):
x = torch.cat([x, v_r], dim=-1)
x = F.leaky_relu(self.fc1(x))
return torch.sigmoid(self.fc2(x))
该网络考虑当前节点状态与关系特定更新的兼容性,实现噪声过滤和重要关系突出。
3.4 多层表示融合
最终节点表示通过各层表示的加权和得到:
h_i = \sum_{l=0}^L \alpha_l h_i^{(l)}
其中α_l是可学习的层权重,保留不同阶邻域的信息。
4. 实操实现要点
4.1 属性提取优化
在实际部署中发现以下优化策略能显著提升效果:
-
Prompt设计原则 :
- 提供领域相关的示例(3-5个)
- 明确属性提取的维度(功能、场景、风格等)
- 限制属性为短语而非完整句子
-
LLM选择建议 :
- 优先选择擅长推理任务的模型(如GPT-4、Claude等)
- 对非英语场景需特别关注多语言能力
- 考虑API调用成本与延迟的平衡
-
缓存机制 :
- 对相同<用户,物品>对缓存提取结果
- 建立属性索引库避免重复计算
4.2 图卷积实现技巧
- 稀疏矩阵优化 :
# 使用稀疏矩阵乘法加速聚合
adj = sp.coo_matrix(adjacency)
features = torch.sparse.mm(adj, features)
- 混合精度训练 :
scaler = GradScaler()
with autocast():
loss = model(features, adj)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
- 邻居采样策略 :
- 对UA和IA边采用更高的采样率(如0.5)
- 对UI边采用较低采样率(如0.2)
- 平衡计算开销与信息完整性
5. 效果验证与案例分析
5.1 基准实验对比
在Amazon-Book数据集上的关键指标对比:
| 方法 | Recall@20 | NDCG@20 | 训练时间(min) |
|---|---|---|---|
| LightGCN | 0.1482 | 0.0919 | 12 |
| +RLMRec | 0.1615 | 0.1013 | 35 |
| +TAGCF | 0.1670 | 0.1047 | 28 |
TAGCF在保持合理计算开销的同时,显著优于基线方法,特别是在稀疏场景下优势更明显。
5.2 冷启动场景分析
新物品的推荐效果对比(Recall@20):
| 冷启动比例 | LightGCN | TAGCF | 提升 |
|---|---|---|---|
| 20% | 0.0621 | 0.0783 | 26.1% |
| 50% | 0.0415 | 0.0632 | 52.3% |
TAGCF通过属性桥梁建立的间接连接,有效缓解了冷启动问题。
5.3 计算效率考量
不同组件的时间占比分析:
- 属性提取:65%(可离线进行)
- 图构建:15%
- 模型训练:20%
实际部署时可采取以下优化:
- 属性预提取与定期更新
- 分布式图存储与计算
- 模型量化与剪枝
6. 常见问题与解决方案
6.1 属性质量不稳定
现象 :LLM生成的属性存在噪声或偏差
解决方案 :
- 设计更精细的prompt模板
- 引入人工审核环节(关键属性)
- 设置置信度阈值过滤低质量输出
6.2 计算资源消耗大
现象 :大规模图训练内存不足
优化策略 :
- 采用图分区训练
- 使用邻居采样
- 优化稀疏矩阵存储格式
6.3 领域适应挑战
现象 :跨领域效果下降
迁移方案 :
- 构建领域特定的属性词典
- 调整关系权重初始值
- 增加领域适配预训练
7. 扩展应用方向
TAGCF框架可扩展至以下场景:
- 社交推荐 :将社交关系作为特殊属性边
- 序列推荐 :将时间模式转化为时序属性
- 跨域推荐 :通过共享属性桥接不同领域
实际部署中发现,在电商场景下将用户画像特征(如年龄段、消费水平)作为预定义属性节点,能进一步提升推荐相关性约8-12%。
更多推荐
所有评论(0)