专栏名称: GitHubStore
分享有意思的开源项目
目录
相关文章推荐
上下五千年故事  ·  “十人九湿”,万病皆始于湿,试试这个小方子 ·  4 天前  
夏天的陈小舒  ·  这套书必入!用穿越故事带孩子亲历7朝! ·  3 天前  
夏天的陈小舒  ·  这套书必入!用穿越故事带孩子亲历7朝! ·  3 天前  
51好读  ›  专栏  ›  GitHubStore

KAG:基于 OpenSPG 引擎的知识增强生成框架

GitHubStore  · 公众号  ·  · 2024-10-31 15:04

正文

项目简介

检索增强生成(RAG)技术推动了领域应用与大模型结合。然而,RAG 存在着向量相似度与知识推理相关性差距大、对知识逻辑(如数值、时间关系、专家规则等)不敏感等问题,这些都阻碍了专业知识服务的落地。

2024 年 10 月 24 日,OpenSPG 发布 v0.5 版本,正式发布了知识增强生成(KAG)的专业领域知识服务框架。KAG 旨在充分利用知识图谱和向量检索的优势,并通过四个方面双向增强大型语言模型和知识图谱,以解决 RAG 挑战:(1) 对 LLM 友好的知识表示,(2) 知识图谱与原文片段之间的互索引,(3) 逻辑形式引导的混合推理引擎,(4) 与语义推理的知识对齐。

KAG 在多跳问答任务中显著优于 NaiveRAG、HippoRAG 等方法,在 hotpotQA 上的 F1 分数相对提高了 19.6%,在 2wiki 上的 F1 分数相对提高了 33.5%。我们已成功将 KAG 应用于蚂蚁集团的两个专业知识问答任务,包括电子政务问答和电子健康问答,与 RAG 方法相比,专业性有了显著提高。


1.1 技术架构

图1 KAG 技术架构

KAG 框架包括 kg-builder、kg-solver、kag-model 三部分。本次发布只涉及前两部分,kag-model 将在后续逐步开源发布。

kg-builder 实现了一种对大型语言模型(LLM)友好的知识表示,在 DIKW(数据、信息、知识和智慧)的层次结构基础上,升级 SPG 知识表示能力,在同一知识类型(如实体类型、事件类型)上兼容无 schema 约束的信息提取和有 schema 约束的专业知识构建,并支持图结构与原始文本块之间的互索引表示,为推理问答阶段的高效检索提供支持。

kg-solver 采用逻辑形式引导的混合求解和推理引擎,该引擎包括三种类型的运算符:规划、推理和检索,将自然语言问题转化为结合语言和符号的问题求解过程。在这个过程中,每一步都可以利用不同的运算符,如精确匹配检索、文本检索、数值计算或语义推理,从而实现四种不同问题求解过程的集成:检索、知识图谱推理、语言推理和数值计算。


1.2 知识表示

私域知识库场景,非结构化数据、结构化信息、业务专家经验 往往三者共存,KAG 参考了 DIKW 层次结构,将 SPG 升级为对 LLM 友好的版本。针对新闻、事件、日志、书籍等非结构化数据,交易、统计、审批等结构化数据,业务经验、领域知识等规则,KAG 采用版面分析、知识抽取、属性标化、语义对齐等技术,将原始的业务数据&专家规则融合到统一的业务知识图谱中。

这使得它能够在同一知识类型(如实体类型、事件类型)上兼容无 schema 约束的信息提取和有 schema 约束的专业知识构建,并支持图结构与原始文本块之间的互索引表示。这种互索引表示有助于基于图结构的倒排索引的构建,并促进了逻辑形式的统一表示、推理。


1.3 逻辑形式引导的混合推理

KAG 提出了一种逻辑形式引导的混合求解和推理引擎。该引擎包括三种类型的运算符:规划、推理和检索,将自然语言问题转化为结合语言和符号的问题求解过程。在这个过程中,每一步都可以利用不同的运算符,如精确匹配检索、文本检索、数值计算或语义推理,从而实现四种不同问题求解过程的集成:检索、知识图谱推理、语言推理和数值计算。


2. 效果如何

2.1 公开数据集的效果(多跳推理)

经过优化,我们不仅验证了 KAG 在垂直领域的适应性,我们还在通用数据集多跳问答中与现有 RAG 方法进行了比较,发现它明显优于 SOTA 方法,在 2wiki 上 F1 相对提升 33.5%,在 hotpotQA 上相对提高 19.6% 。我们正在继续优化这一框架,并通过端到端实验和消融实验指标证明了其有效性。通过逻辑符号驱动的推理和概念对齐的方式,我们证实了这一框架的有效性。


2.2 领域知识场景的效果(风险挖掘)

2.2.1 专家规则定义

  • 定义“赌博APP”认定规则

    define riskAppTaxo rule

Define (s:App)-[p:belongTo]->(o:`TaxOfRiskApp`/`GamblingApp`) {    Structure {        (s)    }    Constraint {        R1("risk label marked as gambling") s.riskMark like "%Gambling%"  }}
  • 定义 “App开发者”认定规则

define app developper rule

Define (s:Person)-[p:developed]->(o:App) {    Structure {        (s)-[:hasDevice]->(d:Device)-[:install]->(o)    }    Constraint {        deviceNum = group(s,o).count(d)        R1("device installed same app"): deviceNum > 5    }}

  • 定义 “赌博App 开发者”认定规则

define a RiskUser of gambling app rule

Define (s:Person)-[p:belongTo]->(o:`TaxOfRiskUser`/`DeveloperOfGamblingApp`) {    Structure {        (s)-[:developed]->(app:`TaxOfRiskApp`/`GamblingApp`)    }    Constraint {    }}

2.2.2 业务数据

2.2.3 推理过程







请到「今天看啥」查看全文