AI个人学习
和实操指南
讯飞绘镜

KBLaM:为大模型嵌入外部知识的开源增强工具

综合介绍

KBLaM 是微软开发的一个开源项目,全称是“Knowledge Base augmented Language Model”(知识库增强语言模型)。它通过将外部知识转化为向量并嵌入大模型的注意力层,让模型能直接使用这些知识回答问题或推理。相比传统的检索增强生成(RAG),它不需要额外的检索模块;相比上下文学习,它的计算成本随知识库大小线性增长,而不是平方级增长。KBLaM 在 GitHub 上开源,主要面向研究人员和开发者,适合探索如何让大模型更高效地处理外部信息。目前支持 Meta 的 Llama 系列和微软的 Phi-3 等模型。

KBLaM:为大模型嵌入外部知识的开源增强工具-1


 

功能列表

  • 将外部知识库转化为键值向量对,用于模型增强。
  • 使用矩形注意力机制将知识嵌入大模型。
  • 支持动态更新知识库,无需重新训练模型。
  • 计算成本随知识库大小线性增长,效率高。
  • 开源代码、实验脚本和数据集,方便研究和开发。
  • 支持问答、推理等任务,能基于知识库生成准确回答。
  • 不修改基础模型的文本处理能力,保持原有性能。

 

使用帮助

KBLaM 是一个研究型开源工具,通过 GitHub 提供代码和文档。以下是详细的安装和使用指南,帮助用户快速上手。

安装流程

  1. 准备环境
    需要安装 Python 3.8 或更高版本,以及 Git。建议使用 Linux 或 Windows 系统。如果处理大规模知识库,推荐配备 NVIDIA GPU(如 A100,显存 80GB 或以上)。
  2. 下载仓库
    打开终端,输入命令克隆 KBLaM 仓库:
git clone https://github.com/microsoft/KBLaM.git

进入项目目录:

cd KBLaM
  1. 安装依赖
    运行以下命令安装所需库:
pip install -e .

这会安装 PyTorch、Transformers 等依赖。如果需要使用 Llama 模型,还要安装 Hugging Face 的工具并登录:

pip install huggingface_hub
huggingface-cli login

登录时需要从 Hugging Face 生成一个 token。

  1. 验证安装
    运行测试脚本确认环境正常:
python -m kblam.test

如果没有报错,说明安装成功。

主要功能操作

1. 创建知识库

KBLaM 需要将外部知识转化为向量对。

  • 步骤
  • 准备知识库文件(如 JSON 格式),示例:
{"entity": "AI", "description": "人工智能是模拟人类智能的技术"}
  • 生成向量:
python dataset_generation/generate_kb_embeddings.py --input knowledge.json --output embeddings.npy
  • 支持的嵌入模型包括 text-embedding-ada-002 和 all-MiniLM-L6-v2。输出文件 embeddings.npy 是知识向量。

2. 嵌入知识到模型

将知识向量嵌入大模型的注意力层。

  • 步骤
  • 下载支持的模型(如 meta-llama/Meta-Llama-3-8B-Instruct)。
  • 运行嵌入脚本:
python src/kblam/integrate.py --model meta-llama/Meta-Llama-3-8B-Instruct --kb embeddings.npy --output enhanced_model
  • 输出一个增强后的模型目录 enhanced_model

3. 测试增强模型

加载增强模型并测试效果。

  • 步骤
  • 运行测试脚本:
python src/kblam/evaluate.py --model enhanced_model --question "AI是什么?"
  • 模型会返回:“AI 是模拟人类智能的技术。”

特色功能操作

动态更新知识库

KBLaM 支持随时更新知识库,不需要重新训练模型。

  • 步骤
  • 修改知识库文件,添加新条目:
{"entity": "KBLaM", "description": "微软开发的知识增强工具"}
  • 生成新向量:
python dataset_generation/generate_kb_embeddings.py --input updated_knowledge.json --output new_embeddings.npy
  • 更新模型:
python src/kblam/integrate.py --model enhanced_model --kb new_embeddings.npy --output updated_model
  • 更新后的模型立刻可以使用新知识。

训练适配器

训练适配器以优化知识嵌入效果。

  • 步骤
  • 使用合成数据集训练:
python train.py --dataset synthetic_data --N 120000 --B 20 --total_steps 601 --encoder_spec OAI --use_oai_embd --key_embd_src key --use_data_aug
  • 需要 Azure OpenAI 端点生成合成数据,具体见 dataset_generation/gen_synthetic_data.py

复现实验

仓库提供实验脚本,可复现论文结果。

  • 步骤
  • 进入实验目录:
cd experiments
  • 运行脚本:
python run_synthetic_experiments.py
  • 需要配置 Azure OpenAI 密钥,生成合成数据集。

注意事项

  • 模型支持:当前支持 Meta-Llama-3-8B-InstructLlama-3.2-1B-Instruct 和 Phi-3-mini-4k-instruct。新增模型需修改 src/kblam/models 中的适配器代码。
  • 硬件要求:处理大知识库时需要高性能 GPU,小规模实验可在 CPU 上运行。
  • 问题反馈:如遇问题,可查看 SUPPORT.md 或在 GitHub 提交 issue。

 

应用场景

  1. 科研实验
    研究人员可以用 KBLaM 测试大模型如何处理专业知识,比如嵌入化学领域的知识库,提升模型回答准确性。
  2. 企业问答
    开发者可以将公司文档转化为知识库,开发智能助手,快速回答员工或客户的问题。
  3. 教育辅助
    教师可以将课程资料嵌入 KBLaM,制作一个能解答学生疑问的工具,提升学习效率。

 

QA

  1. KBLaM 和传统微调有什么不同?
    KBLaM 不修改基础模型,只训练适配器嵌入知识。传统微调需要重新训练整个模型,成本更高。
  2. 适合生产环境吗?
    KBLaM 是研究项目。如果知识库与训练数据差异太大,回答可能不准确。官方建议仅用于研究。
  3. 如何评估 KBLaM 的性能?
    通过准确率(检索知识的正确性)、拒绝率(是否正确识别无法回答的问题)和答案的精确度和召回率来评估。
未经允许不得转载:首席AI分享圈 » KBLaM:为大模型嵌入外部知识的开源增强工具
zh_CN简体中文