基于图的推理 (RoG)
"基于图的推理:可信且可解读的大型语言模型推理" 的官方实现。
基于图的推理(RoG)将LLM与KG巧妙结合,以实现可信且可解读的推理。我们提出了一个规划-检索-推理框架,其中RoG首先生成由KG支持的关系路径作为可信的计划。然后使用这些计划从KG中检索有效的推理路径,供LLM进行可信的推理并生成可解读的结果。
要求
pip install -r requirements.txt
预训练权重
我们的代码会自动从huggingface下载模型权重。
你可以在这里找到预训练权重。
数据集
我们的代码会自动从huggingface下载数据。
子图提取
我们根据之前的研究从Freebase中提取子图。可以在这里找到代码。
推理
要求:任意具有至少12GB内存的GPU。
步骤1:规划 (生成关系路径)
运行:./scripts/planning.sh
python src/qa_prediction/gen_rule_path.py \
--model_name RoG \
--model_path rmanluo/RoG \
-d {RoG-webqsp,RoG-cwq} \
--split test \
--n_beam 3
生成的规则将保存在:results/gen_rule_path/{dataset}/{model_name}/{split}
步骤2:推理 (用RoG生成答案)
运行:./scripts/rog-reasoning.sh
python src/qa_prediction/predict_answer.py \
--model_name RoG \
--model_path rmanluo/RoG \
-d {RoG-webqsp,RoG-cwq} \
--prompt_path prompts/llama2_predict.txt \
--add_rul \
--rule_path {rule_path} \
答案将保存在:results/KGQA/{dataset}/{model_name}/{split}
即插即用推理 (用不同的LLM生成答案)
注意:你需要在
.env
中设置你的openai密钥以使用ChatGPT。
运行:./scripts/plug-and-play.sh
python src/qa_prediction/predict_answer.py \
--model_name {gpt-3.5-turbo,alpaca,llama2-chat-hf,flan-t5} \
-d {RoG-webqsp,RoG-cwq} \
--prompt_path {prompt_path} \
--add_rule \
--rule_path {rule_path}
可解读推理
运行:python scripts/interpretable_example.py
from transformers import pipeline, AutoTokenizer
import torch
MODEL_PATH_OR_NAME="rmanluo/RoG"
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH_OR_NAME, use_fast=False)
model = pipeline("text-generation", model=MODEL_PATH_OR_NAME, tokenizer=tokenizer, device_map="auto", torch_dtype=torch.float16)
print("====示例1: ====")
INPUT_TEXT_1 = """根据推理路径,请回答给定问题并解释原因
推理路径:
Northern District -> location.administrative_division.first_level_division_of -> Israel -> government.form_of_government.countries -> Parliamentary system
问题:
位于Northern District的国家使用什么类型的政府?"""
outputs = model(INPUT_TEXT_1, return_full_text=False)
print(outputs[0]['generated_text'])
训练
训练数据集
你可以从RoG_train_data.tar.tz下载已处理的数据集。解压文件并将其放在datasets/
文件夹下。
处理数据集
- 构建从问题到关系路径的对。
python src/align_kg/build_align_qa_dataset.py -d {RoG-webqsp,RoG-cwq} --split {train,validation,test}
- 构建联合训练数据集。
python src/joint_training/preprocess_align.py
python src/joint_training/preprocess_qa.py
- 构建可解释样例。
python src/joint_training/generate_explanation_results.py
训练RoG
训练RoG需要2个A100-80GB GPU。
运行:./scripts/train.sh
结果
参考信息
如果你发现这个仓库对你有帮助,请通过以下方式引用这篇论文:
@inproceedings{luo2024rog,
title={Reasoning on Graphs: Faithful and Interpretable Large Language Model Reasoning},
author={Luo, Linhao and Li, Yuan-Fang and Haffari, Gholamreza and Pan, Shirui},
booktitle={International Conference on Learning Representations},
year={2024}
}