跳转至

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 和传统嵌入方法。

研究背景与动机

  1. 领域现状:食谱推荐系统需考虑个人偏好、饮食约束和健康指南。现有方法分两路:(a) 基于知识图谱的传统方法(pFoodReq 等),用嵌入相似度匹配查询和食谱;(b) LLM 用于食谱生成(FoodLMM, LLaVA-Chef),但主要关注单一功能。
  2. 现有痛点:(a) 缺乏统一系统同时完成推荐、食谱生成和营养分析;(b) LLM 存在幻觉和过时信息问题;(c) 现有食品 KG+LLM 整合不够深入,尤其在处理复杂约束查询(食材偏好 + 营养限制)时表现差。
  3. 核心矛盾:LLM 有强大的语言理解能力但缺乏结构化食品知识,KG 有丰富的食品关系但缺乏灵活的自然语言理解。
  4. 本文要解决什么? 如何将食品 KG 的结构化知识有效注入 LLM,构建一个能同时满足偏好约束的推荐+食谱+营养三合一系统?
  5. 切入角度:用 SPARQL 从 KG 检索子图作为 LLM 上下文,Multi-LoRA 为三个子任务各训练一个轻量适配器。
  6. 核心idea一句话:KG 子图检索 + Multi-LoRA 微调 Phi-3-mini = 统一的个性化食品推荐系统。

方法详解

整体框架

KERL 由三个模块组成,共享同一个 Phi-3-mini 骨干,各用一个 LoRA adapter:(1) KERL-Recom:接收用户查询(含食材偏好+营养约束),从 FoodKG 检索子图作为上下文,推荐满足约束的食谱;(2) KERL-Recipe:根据推荐的食谱名和食材生成烹饪步骤;(3) KERL-Nutri:根据食谱名、食材和烹饪步骤生成微量营养素信息(蛋白质、纤维、脂肪、胆固醇等)。

关键设计

  1. KG 子图检索与 LLM 增强推荐(KERL-Recom):
  2. 做什么:从自然语言查询中提取实体(标签如 "vegetarian"、食材如 "spinach"),构造 SPARQL 查询检索 FoodKG 子图,将子图序列化为文本作为 LLM 上下文
  3. 核心思路:训练时,从标签对应的食谱集 \(R(t_j)\) 中采样 \(K/2\) 个满足约束的正例和 \(K/2\) 个负例作为上下文;推理时,迭代遍历所有标签相关食谱(分批输入 LLM),合并多次调用结果
  4. 设计动机:直接在 LLM 上下文中提供 KG 结构化信息,让 LLM 基于真实数据做选择而非凭空生成,从根本上减少幻觉

  5. Multi-LoRA 架构:

  6. 做什么:同一个 Phi-3-mini 骨干模型,三个任务各训练一个 LoRA adapter(r=64, α=16)
  7. 核心思路:推理时激活对应任务的 adapter,基座模型共享。三个 adapter 可同时部署在单 GPU 上
  8. 设计动机:避免了训练三个独立模型的资源浪费,LoRA 使 3.8B 参数模型在 4 块 A6000 上高效训练

  9. 基准数据集构建:

  10. 做什么:基于 FoodKG 自动构建 77,900 个带复杂约束的 QA 对
  11. 核心思路:用模板问题 + 随机采样的食材偏好(喜欢/不喜欢)+ 营养约束(<, >, 范围),从 KG 中确定性地计算满足所有约束的食谱作为 ground truth
  12. 设计动机:现有数据集(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 范式有参考价值