KERL: Knowledge-Enhanced Personalized Recipe Recommendation using Large Language Models¶
会议: ACL 2025
arXiv: 2505.14629
代码: https://github.com/mohbattharani/KERL (有)
领域: 推荐系统 / 知识图谱
关键词: 食谱推荐, 知识图谱, LLM微调, Multi-LoRA, 营养生成
一句话总结¶
提出 KERL 统一食品推荐系统,结合 FoodKG 知识图谱和 Phi-3-mini 多 LoRA 微调,实现个性化食谱推荐(F1=0.973)、食谱生成和微量营养素估算三个功能,大幅超越基线 LLM 和传统嵌入方法。
研究背景与动机¶
- 领域现状:食谱推荐系统需考虑个人偏好、饮食约束和健康指南。现有方法分两路:(a) 基于知识图谱的传统方法(pFoodReq 等),用嵌入相似度匹配查询和食谱;(b) LLM 用于食谱生成(FoodLMM, LLaVA-Chef),但主要关注单一功能。
- 现有痛点:(a) 缺乏统一系统同时完成推荐、食谱生成和营养分析;(b) LLM 存在幻觉和过时信息问题;(c) 现有食品 KG+LLM 整合不够深入,尤其在处理复杂约束查询(食材偏好 + 营养限制)时表现差。
- 核心矛盾:LLM 有强大的语言理解能力但缺乏结构化食品知识,KG 有丰富的食品关系但缺乏灵活的自然语言理解。
- 本文要解决什么? 如何将食品 KG 的结构化知识有效注入 LLM,构建一个能同时满足偏好约束的推荐+食谱+营养三合一系统?
- 切入角度:用 SPARQL 从 KG 检索子图作为 LLM 上下文,Multi-LoRA 为三个子任务各训练一个轻量适配器。
- 核心idea一句话:KG 子图检索 + Multi-LoRA 微调 Phi-3-mini = 统一的个性化食品推荐系统。
方法详解¶
整体框架¶
KERL 由三个模块组成,共享同一个 Phi-3-mini 骨干,各用一个 LoRA adapter:(1) KERL-Recom:接收用户查询(含食材偏好+营养约束),从 FoodKG 检索子图作为上下文,推荐满足约束的食谱;(2) KERL-Recipe:根据推荐的食谱名和食材生成烹饪步骤;(3) KERL-Nutri:根据食谱名、食材和烹饪步骤生成微量营养素信息(蛋白质、纤维、脂肪、胆固醇等)。
关键设计¶
- KG 子图检索与 LLM 增强推荐(KERL-Recom):
- 做什么:从自然语言查询中提取实体(标签如 "vegetarian"、食材如 "spinach"),构造 SPARQL 查询检索 FoodKG 子图,将子图序列化为文本作为 LLM 上下文
- 核心思路:训练时,从标签对应的食谱集 \(R(t_j)\) 中采样 \(K/2\) 个满足约束的正例和 \(K/2\) 个负例作为上下文;推理时,迭代遍历所有标签相关食谱(分批输入 LLM),合并多次调用结果
-
设计动机:直接在 LLM 上下文中提供 KG 结构化信息,让 LLM 基于真实数据做选择而非凭空生成,从根本上减少幻觉
-
Multi-LoRA 架构:
- 做什么:同一个 Phi-3-mini 骨干模型,三个任务各训练一个 LoRA adapter(r=64, α=16)
- 核心思路:推理时激活对应任务的 adapter,基座模型共享。三个 adapter 可同时部署在单 GPU 上
-
设计动机:避免了训练三个独立模型的资源浪费,LoRA 使 3.8B 参数模型在 4 块 A6000 上高效训练
-
基准数据集构建:
- 做什么:基于 FoodKG 自动构建 77,900 个带复杂约束的 QA 对
- 核心思路:用模板问题 + 随机采样的食材偏好(喜欢/不喜欢)+ 营养约束(<, >, 范围),从 KG 中确定性地计算满足所有约束的食谱作为 ground truth
- 设计动机:现有数据集(pFoodReq 仅 6918 条)规模太小且约束类型单一
损失函数 / 训练策略¶
标准交叉熵 loss + LoRA (r=64, α=16, dropout=0.5)。学习率 \(2 \times 10^{-5}\),cosine scheduler,每个 adapter 训练 2 epochs。
实验关键数据¶
主实验¶
| 模型 | 参数量 | Precision | Recall | F1 |
|---|---|---|---|---|
| KERL-Recom | 3.8B+LoRA | 0.978 | 0.969 | 0.973 |
| Llama-2 | 7B (zero-shot) | 0.825 | 0.627 | 0.713 |
| Phi-3-mini-128K | 3.8B (zero-shot) | 0.778 | 0.278 | 0.410 |
| Mistral | 7B (zero-shot) | 0.536 | 0.558 | 0.547 |
| pFoodReq (嵌入) | - | - | 0.618 | 0.637 |
KERL-Recom 在 KGQA 基准上 F1=0.973,比 zero-shot Llama-2 高 26 点,比传统嵌入方法 pFoodReq 高 21.7 点。
消融实验¶
| 模块/配置 | 指标 | 说明 |
|---|---|---|
| KERL-Recom (完整) | F1=0.973 | KG 子图 + LoRA 微调 |
| Phi-3-mini-128K (zero-shot) | F1=0.410 | 无微调,仅利用长上下文 |
| Phi-3-mini-4K (zero-shot) | F1=0.071 | 上下文窗口不足 |
| KERL-Recipe (title+ing) | BLEU-4=0.079 | 从标题+食材生成食谱步骤 |
| LLaVA-Chef (title+ing) | BLEU-4=0.065 | 对比基线 |
| KERL-Nutri (title+ing+instr) | MAE=9.38 | 最完整输入的营养估算 |
关键发现¶
- KG 注入是关键:zero-shot Phi-3-mini F1 仅 0.071-0.410,微调后达 0.973,说明 LLM 靠自身知识无法处理复杂食品约束
- 跨食谱类型泛化好:除 dairy-free(训练样本少)和 gluten-free 外,所有标签 F1 > 0.93
- 营养估算中输入越完整越好:title+ingredients+instructions 的 MAE (9.38) 优于仅 title (13.13)
- 小模型足够:Phi-3-mini (3.8B) + LoRA 显著超越 7B 模型的 zero-shot 表现
亮点与洞察¶
- KG 子图作为 LLM 上下文的 RAG 范式:不同于向量检索 RAG,本文直接用 SPARQL 精确检索 KG 子图。在需要精确约束满足的场景,结构化检索远优于模糊向量检索。
- Multi-LoRA 的实用性:三个任务共享一个 3.8B 模型 + 三个小 adapter,部署成本极低。这是 multi-task LLM 部署的优秀范例。
- 自动化基准构建:从 KG 中程序化生成带约束的 QA 对,确保 ground truth 准确性。这种 "从知识库自动生成训练数据" 的思路可广泛应用。
局限性 / 可改进方向¶
- 基准数据集是模板生成的,缺乏真实用户查询的自然语言多样性
- 仅使用 FoodKG,未验证对其他食品知识库的迁移能力
- 营养估算的 MAE 偏高(9.38g),对精确营养计算场景不够准确
- 推理时需迭代遍历大量食谱子图,对大规模食谱库效率可能成问题
- 未考虑多模态(食物图片)输入
相关工作与启发¶
- vs pFoodReq:嵌入匹配方法 F1=0.637,KERL=0.854(在其数据集上),生成式方法在约束推理上优势明显
- vs LLaVA-Chef:专注食谱生成的多模态模型,KERL 在纯文本食谱生成上也有优势(BLEU-4: 0.079 vs 0.065),且覆盖推荐+营养
- vs FoodGPT:FoodGPT 专注食谱生成,KERL 是更完整的推荐+生成+营养一体化系统
评分¶
- 新颖性: ⭐⭐⭐⭐ KG+LLM Multi-LoRA 统一食品推荐系统,思路完整
- 实验充分度: ⭐⭐⭐⭐ 自建基准 + 多基线对比 + 跨标签分析 + pFoodReq 对比
- 写作质量: ⭐⭐⭐⭐ 系统描述清晰,但数学符号偏多影响可读性
- 价值: ⭐⭐⭐⭐ 食品推荐领域的完整方案,Multi-LoRA 范式有参考价值