当前位置: 首页 > news >正文

SymAgent(神经符号自学习Agent)

来自:SymAgent: A Neural-Symbolic Self-Learning Agent Framework for Complex Reasoning over Knowledge Graphs

目录

  • 相关工作
  • 引理
    • 符号规则
    • 任务描述
  • 方法
    • Agent-Planner
    • Agent-Executor
      • Action空间
      • 交互过程
    • 自学习
      • 在线探索
      • 离线迭代策略更新

相关工作

相关工作-语义解析法
语义解析方法会将问题解析为可执行的形式化语言(如SPARQL),并在知识图谱上执行精确查询以获取答案。早期研究则利用序列到序列(Seq2Seq)模型(如T5)直接生成SARSQL表达式,借助预训练语言模型的能力来增强语义解析过程。最近,ChatKBQA通过对大型语言模型(如LLaMA)进行进一步微调,提高了形式化语言生成的准确性。尽管取得了这些进展,但语义解析方法严重依赖生成查询序列的质量,若查询无法执行,则无法得到答案

相关工作-检索增强法
检索增强方法从知识图谱中检索相关的事实三元组,然后将其输入大型语言模型,以辅助生成最终答案。一些方法则通过评估问题与相关事实之间的语义相似度来检索事实。同时,某些方法利用LLM对问题进行分解,然后检索相应的三元组用于生成,以此提高检索过程的精度。值得注意的是,ToG采用了一种探索与利用策略,允许大型语言模型遍历知识图谱来收集信息,从而取得了最先进的性能。GoG进一步提出了“思考-搜索-生成”范式,以解决知识图谱的不完备性问题。然而,这些方法大多依赖于功能强大的闭源大型语言模型接口(例如GPT-4),当使用较弱的大型语言模型作为基础时,性能会显著下降

基于LLM的Agent
鉴于大型语言模型(LLMs)展现出令人惊叹的长程规划与推理能力,研究人员已开始探索构建基于大型语言模型的智能体系统,以开启通用人工智能的大门。最具代表性的大型语言模型智能体ReAct提出了一种提示方法,使大型语言模型能够与外部环境交互并接收反馈。后续研究进一步聚焦于智能体规划、函数调用和代码生成,提升了大型语言模型在各类复杂任务中的能力。近来,越来越多的研究关注通过在从教师模型中提炼的专家数据上进行微调,赋予开源大型语言模型以智能体能力。然而,AutoAct和AgentGym等方法提出了自交互轨迹合成技术,其性能优于蒸馏方法,并展现出巨大潜力。此外,近期研究强调了将强化学习技术与大型语言模型相结合的重要性,以增强其在动态场景中的决策能力

引理

符号规则

知识图谱是事实三元组的集合,表示为G={(e,r,e′)∣e,e′∈E,r∈R}G = \{(e, r, e') | e, e' \in E, r \in R\}G={(e,r,e)e,eE,rR},其中EEERRR分别代表实体集和关系集。知识图谱中的符号规则通常表示为一阶逻辑公式:
rh(x,y)←r1(x,z1)∧r2(z1,z2)∧...∧rn(zn−1,y),(1)r_{h}(x, y) \leftarrow r_{1}\left(x, z_{1}\right) \land r_{2}\left(z_{1}, z_{2}\right) \land ... \land r_{n}\left(z_{n-1}, y\right), (1)rh(x,y)r1(x,z1)r2(z1,z2)...rn(zn1,y),(1)

其中,左侧表示规则头,包含关系rhr_{h}rh,该关系可由右侧的规则体推导得出(←);规则体形成一个闭合链,后续关系共享中间变量(如ziz_izi),通过合取(∧)来表示。通过将所有变量xxxyyyzzz替换为特定实体,知识图谱可被视为符号规则的实例化。例如,给定三元组(Sam,workFor,OpenAI)、(OpenAI,locatedIn,SF)和(Sam,liveIn,SF),一个长度为2的符号规则的实例化为liveIn(Sam, SF) ← workFor(Sam, OpenAI) ∧ locatedIn(OpenAI, SF)。

任务描述

在本文中,将知识图谱(KG)上的推理任务转化为一项基于大语言模型(LLM)的智能体任务。在此任务中,知识图谱充当提供执行反馈的环境,而非仅仅作为知识库。因此,推理过程可被视为与来自知识图谱的部分观测结果进行的多步骤交互。

这一交互过程可形式化为部分可观测马尔可夫决策过程(POMDP,Partially Observable Markov Decision Process):(Q, S, A, O, T),其中Q为问题空间,S为状态空间,A为行动空间,O为观测空间,T:S×A→ST: S ×A \to ST:S×AS为状态转移函数。需要注意的是,在语言智能体场景中,Q,A,O均为自然语言空间的子空间,且转移函数T由环境决定。

给定一个问题q∈Qq \in QqQ和知识图谱GGG,LLM智能体会基于其策略πθ\pi_{\theta}πθ生成行动a0∼πθ(⋅∣q,G)∈Aa_{0} \sim \pi_{\theta}(\cdot | q, G) \in Aa0πθ(q,G)A。该行动会引发状态转移,智能体收到执行反馈作为观测o0∈Oo_{0} \in Oo0O。随后,智能体会继续探索环境,直到找到合适的答案或满足其他停止条件。第nnn步的历史轨迹Hn\mathcal{H}_{n}Hn由一系列行动和观测组成,可表示为:
Hn=(q,G,a0,o0,...,an−1,on−1)∼πθ(Hn∣q,G)πθ(Hn∣q,G)=∏j=1nπθ(aj∣q,G,a0,o0,...,oj−1),(2)\mathcal{H}_{n}=\left(q, \mathcal{G}, a_{0}, o_{0}, ..., a_{n-1}, o_{n-1}\right) \sim \pi_{\theta}\left(\mathcal{H}_{n} | q, \mathcal{G}\right)\\ \pi_{\theta}\left(\mathcal{H}_{n} | q, \mathcal{G}\right)=\prod_{j=1}^{n} \pi_{\theta}\left(a_{j} | q, \mathcal{G}, a_{0}, o_{0}, ..., o_{j-1}\right), (2)Hn=(q,G,a0,o0,...,an1,on1)πθ(Hnq,G)πθ(Hnq,G)=j=1nπθ(ajq,G,a0,o0,...,oj1),(2)

其中,nnn为总交互步数。最后,计算最终奖励r(q,Hn)∈[0,1]r(q, \mathcal{H}_{n}) \in[0,1]r(q,Hn)[0,1],其中1表示答案正确。

方法

在本节中,将介绍SymAgent,这是一个结合知识图谱(KGs)与大型语言模型(LLMs)以自主解决复杂推理任务的框架。SymAgent包含一个Agent-Planner(智能体规划器)和一个Agent-Executor(智能体执行器),其中Agent-Planner从知识图谱中提取符号规则,用于分解问题和规划推理步骤,Agent-Executor则通过整合反思所得见解和环境反馈来回答问题。为解决标注推理数据缺失的问题,引入了一个自学习框架,通过自主交互实现协同改进。整体架构如图所示。

fig1

  • SymAgent框架概述。(a)SymAgent中的规划器,其从知识图谱中提取符号规则以指导推理;(b)SymAgent中的执行器,其执行自动行动调用以获取答案;(c)用于迭代增强智能体的自学习框架;(d)合成的行动调用轨迹示例。

Agent-Planner

Agent-Planner 充当高级规划器,借助大型语言模型(LLM)的推理能力将问题分解为可执行的推理链。然而,实际情况是仅通过提示大型语言模型来规划整个推理流程无法取得令人满意的性能。当前的大型语言模型难以将复杂问题与知识图谱(KG)的语义及连接模式对齐,导致生成的推理链粒度较粗,无法有效用于精确的信息检索与整合。

为解决这一局限性,SymAgent利用大型语言模型(LLM)从知识图谱(KG)中识别可能用于回答问题的潜在符号规则,而非生成详细的分步计划:

  • 一方面,已有研究表明,大型语言模型在归纳推理方面表现出色,但在演绎推理方面能力较弱。
  • 另一方面,符号规则本身反映了知识图谱的推理模式,可作为辅助分解复杂问题的隐含信息。通过这种方式,Agent-Planner在自然语言问题与知识图谱的结构信息之间搭建了一座桥梁,从而提高了推理过程的准确性和通用性。

具体而言,给定一个问题qqq,采用BM25算法从训练集中检索出一组种子问题{qseedi}i=1k\{q_{seed_{i}}\}_{i=1}^{k}{qseedi}i=1k,其中每个种子问题qseedq_{seed}qseed与问题qqq具有相似的问题结构,可能需要类似的解决策略。对于每个种子问题qseedq_{seed}qseed,采用广度优先搜索(BFS)在知识图谱GGG中从查询实体eqe_{q}eq到答案实体eae_{a}ea采样一组闭合路径Pi={pi1,pi2,...,pim}P_{i}=\{p_{i_{1}}, p_{i_{2}}, ..., p_{i_{m}}\}Pi={pi1,pi2,...,pim},其中pij=r1(eq,e1)∧r2(e1,e2)...∧rL(eL−1,ea)p_{i_{j}}=r_{1}(e_{q}, e_{1}) \land r_{2}(e_{1}, e_{2}) ... \land r_{L}(e_{L-1}, e_{a})pij=r1(eq,e1)r2(e1,e2)...rL(eL1,ea)是一个关系序列。这些闭合路径可被视为回答该问题的符号规则的实例化。随后,我们通过将特定实体替换为变量来对这些闭合路径进行泛化,将其转换为式(1)所示的规则体。


每个种子问题都有一个PPPPPP中每个元素都是一个关系序列,且每个关系序列都是eqe_qeqeae_aea,只是关系序列长度不同:

  • 体现了每个问题都有多种不同解法

这一过程构建了少样本演示集M={(qseedi,Pi)}i=1kM = \{(q_{seed_{i}}, P_{i})\}_{i=1}^{k}M={(qseedi,Pi)}i=1k,以提示SymAgent为问题qqq生成合适的规则体:
p∼πθ(⋅∣ρPlan,q,M),(3)p \sim \pi_{\theta}\left(\cdot | \rho_{Plan}, q, \mathcal{M}\right), (3)pπθ(ρPlan,q,M),(3)
其中,ρPlan\rho_{Plan}ρPlan代表用于指导规则体生成的提示词。所生成的与知识图谱对齐的符号规则PPP用于指导SymAgent的全局规划,避免其在推理过程中陷入盲目的试错。


注意:仅靠公式3不能生成规则体,还需要自学习微调


Agent-Executor

基于从知识图谱(KG)中生成的符号规则,Agent-Executor(智能体执行器)采用“观察-思考-行动”的循环范式来推进自主推理过程。与从知识图谱中检索信息(可能引入大量无关数据)的现有方法不同,Agent-Executor借助来自知识图谱结构的专家反馈动态调整推理过程。这种方法使存储着丰富信息性和符号性事实的知识图谱能够与大型语言模型(LLMs)一同深度参与推理过程,而非仅仅被当作静态的信息存储库。

Action空间

鉴于大型语言模型(LLMs)无法直接处理知识图谱(KGs)中的结构化数据,且考虑到在推理过程中需要依赖外部非结构化文档来解决知识图谱信息不完备的问题,SymAgent将智能体的行动空间定义为一组功能工具。通过利用大型语言模型的函数调用能力,SymAgent不仅克服了LLM在处理结构化数据方面的局限性,还为整合多种信息源提供了灵活的机制,从而增强了智能体的推理能力和适应性。该行动空间包含以下功能工具:

  • 𝑔𝑒𝑡𝑅𝑒𝑎𝑠𝑜𝑛𝑖𝑛𝑔𝑃𝑎𝑡ℎ(𝑠𝑢𝑏_𝑞𝑢𝑒𝑠𝑡𝑖𝑜𝑛):接收子问题作为输入,并返回潜在的符号规则。如公式(3)所示,该行动利用大型语言模型(LLMs)的归纳推理能力,生成与知识图谱(KG)对齐的符号规则,这些规则可对sub_question(子问题)进行分解,从而有效指导推理过程。
  • 𝑤𝑖𝑘𝑖𝑆𝑒𝑎𝑟𝑐ℎ(𝑒𝑛𝑡,𝑟𝑒𝑙):当知识图谱信息不足时,从维基百科或互联网检索相关文档。
  • 𝑒𝑥𝑡𝑟𝑎𝑐𝑡𝑇𝑟𝑖𝑝𝑙𝑒𝑠(𝑒𝑛𝑡,𝑟𝑒𝑙,𝑑𝑜𝑐):从检索到的文档中提取与当前查询的实体和关系相关的三元组。值得注意的是,该行动并非由智能体显式调用,而是在调用𝑤𝑖𝑘𝑖𝑆𝑒𝑎𝑟𝑐ℎ之后自动触发。提取出的三元组与知识图谱的语义粒度相匹配,能够整合到知识图谱中,从而助力知识图谱的扩展。
  • 𝑠𝑒𝑎𝑟𝑐ℎ𝑁𝑒𝑖𝑔ℎ𝑏𝑜𝑟(𝑒𝑛𝑡,𝑟𝑒𝑙):是一个图探索函数。它返回知识图谱中特定实体在给定关系下的邻居,从而实现对相关实体的高效遍历和发现。
  • finish(e1,e2,...,en)finish(e_{1}, e_{2}, ..., e_{n})finish(e1,e2,...,en)返回一个答案实体列表,表示已获取最终答案且推理过程结束。

交互过程

将知识图谱(KG)视为环境,将行动执行的结果视为观测,整个推理过程便成为智能体行动调用与相应观测的序列。采用ReAct风格的方法,在采取行动前生成思维链理由,以此反思环境的当前状态。形式上,对式(2)进行扩展,第nnn步的交互轨迹可进一步表示为:
Hn=(q,G,p,τ0,a0,o0,...,τn−1,an−1,on−1),(4)\mathcal{H}_{n}=\left(q, \mathcal{G}, p, \tau_{0}, a_{0}, o_{0}, ..., \tau_{n-1}, a_{n-1}, o_{n-1}\right), \quad(4)Hn=(q,G,p,τ0,a0,o0,...,τn1,an1,on1),(4)
其中,τ\tauτ是智能体通过反思历史轨迹产生的内部思考,aaa是从上述定义的工具集中选择的行动,ooo是执行行动后得到的观测。基于这一历史轨迹,生成后续思考τn\tau_{n}τn和行动ana_{n}an的过程可表述为:
πθ(τn∣Hn)=∏i=1∣τn∣πθ(τni∣Hn,τn<i),πθ(an∣Hn,τn)=∏j=1∣an∣πθ(anj∣Hn,τn,an<j),\begin{aligned} \pi_{\theta}\left(\tau_{n} | \mathcal{H}_{n}\right) & =\prod_{i=1}^{\left|\tau_{n}\right|} \pi_{\theta}\left(\tau_{n}^{i} | \mathcal{H}_{n}, \tau_{n}^{<i}\right), \\ \pi_{\theta}\left(a_{n} | \mathcal{H}_{n}, \tau_{n}\right) & =\prod_{j=1}^{\left|a_{n}\right|} \pi_{\theta}\left(a_{n}^{j} | \mathcal{H}_{n}, \tau_{n}, a_{n}^{<j}\right), \end{aligned}πθ(τnHn)πθ(anHn,τn)=i=1τnπθ(τniHn,τn<i),=j=1anπθ(anjHn,τn,an<j),
其中,τni\tau_{n}^{i}τni∣τn∣|\tau_{n}|τn分别表示τn\tau_{n}τn的第iii个token和总长度,anja_{n}^{j}anj∣an∣|a_{n}|an分别表示ana_{n}an的第jjj个token和总长度。智能体循环会持续进行,直到调用finish()finish()finish()行动或达到预定义的最大迭代步数。

自学习

鉴于初始数据集仅包含问答对,而缺乏标注良好的逐步交互数据,这里提出了一种自学习框架。与从更强大的模型(如GPT-4)中提炼推理链的方法不同,自学习使弱策略大型语言模型(LLM)πθ\pi_{\theta}πθ能够与环境充分交互,从而通过自训练实现改进。该自学习过程主要包括两个阶段:在线探索和离线迭代策略更新。

在线探索

在该阶段,基础智能体πθ0\pi_{\theta_{0}}πθ0按照“思考-行动-观测”循环与环境自主交互,生成一组初始轨迹U0={μ1,μ2,...,μN}U_{0} = \{\mu_{1}, \mu_{2}, ..., \mu_{N}\}U0={μ1,μ2,...,μN}。对于每条轨迹μi\mu_{i}μi,采用基于结果的奖励机制,将奖励定义为最终答案的召回率:
r(μi)=Recall(Aμi,Agt)=∣Aμi∩Agt∣∣Agt∣,r\left(\mu_{i}\right) = \text{Recall}\left(A_{\mu_{i}}, A_{gt}\right) = \frac{\left|A_{\mu_{i}} \cap A_{gt}\right|}{\left|A_{gt}\right|},r(μi)=Recall(Aμi,Agt)=AgtAμiAgt,
其中,AμiA_{\mu_{i}}Aμi是从轨迹μi\mu_{i}μi的最终行动中提取的答案实体集,AgtA_{gt}Agt是真实答案实体集。这一过程得到一组自主探索的轨迹D0={(μi,r(μi))}i=1ND_{0} = \{(\mu_{i}, r(\mu_{i}))\}_{i=1}^{N}D0={(μi,r(μi))}i=1N

为解决智能体行动调用中可能存在的错误(例如,工具调用格式不正确)——这类错误可能会降低探索效果,利用大型语言模型(LLM)的自我反思能力来优化轨迹。以D0D_{0}D0为参考,策略大型语言模型πθ0\pi_{\theta_{0}}πθ0重新生成新的优化轨迹,表述为{μ^i}i=1N∼πθ0(⋅∣μi,r(μi))\{\hat{\mu}_{i}\}_{i=1}^{N} \sim \pi_{\theta_{0}}(\cdot | \mu_{i}, r(\mu_{i})){μ^i}i=1Nπθ0(μi,r(μi))。应用相同的奖励机制后,我们可得到一个优化后的轨迹集合D0^={(μ^i,r(μ^i))}i=1N\widehat{D_{0}} = \{(\hat{\mu}_{i}, r(\hat{\mu}_{i}))\}_{i=1}^{N}D0={(μ^i,r(μ^i))}i=1N

经过自主探索和自我反思后,我们得到了两个规模相同的轨迹集合:D0D_{0}D0D0^\widehat{D_{0}}D0。为提高候选轨迹的质量,我们采用一种启发式方法对这两个集合进行合并,从而得到一个优化后的轨迹集。依据最终答案一致性原则,我们得到合并后的轨迹集合D0∗={(μi∗,r(μi∗))}i=1ND_{0}^{*} = \{(\mu_{i}^{*}, r(\mu_{i}^{*}))\}_{i=1}^{N}D0={(μi,r(μi))}i=1N

D0∗(i)={(μi,r(μi)),若 r(μi)>r(μi^),(μ^i,r(μi^)),若 r(μi)<r(μi^),(t,r(t)),若 r(μi)=r(μi^)>0,filtered,若 r(μi)=r(μi^)=0.(7)\mathcal{D}_{0}^{*}(i)=\left\{ \begin{array}{ll} \left(\mu_{i}, r\left(\mu_{i}\right)\right), & 若\ r\left(\mu_{i}\right) > r\left(\hat{\mu_{i}}\right), \\ \left(\hat{\mu}_{i}, r\left(\hat{\mu_{i}}\right)\right), & 若\ r\left(\mu_{i}\right) < r\left(\hat{\mu_{i}}\right), \\ (t, r(t)), & 若\ r\left(\mu_{i}\right) = r\left(\hat{\mu_{i}}\right) > 0, \\ filtered, & 若\ r\left(\mu_{i}\right) = r\left(\hat{\mu_{i}}\right) = 0. \end{array} \right. (7) D0(i)=(μi,r(μi)),(μ^i,r(μi^)),(t,r(t)),filtered, r(μi)>r(μi^), r(μi)<r(μi^), r(μi)=r(μi^)>0, r(μi)=r(μi^)=0.(7)
在该方程中,t=arg⁡min⁡s∈{μi,μ^i}∣s∣t = \arg\min_{s \in \{\mu_{i}, \hat{\mu}_{i}\}} \vert s\vertt=argmins{μi,μ^i}s表示:当奖励相等且不为零时,我们选择长度更短的轨迹。

离线迭代策略更新

给定合并后的轨迹D∗D^{*}D,一种提升智能体性能的直观方法是利用这些轨迹进行微调。在自回归方式下,智能体模型的损失可表示为:
LSFT=−Eμ∼D∗[πθ(μ∣q)],πθ(μ∣q)=−∑j=1∣X∣(1(xj∈A)×log⁡πθ(xj∣q,x<j)),\mathcal{L}_{SFT} = -\mathbb{E}_{\mu \sim \mathcal{D}^{*}} \left[ \pi_{\theta}(\mu | q) \right],\\ \pi_{\theta}(\mu | q) = -\sum_{j=1}^{|X|} \left( \mathbb{1}(x_{j} \in \mathcal{A}) \times \log \pi_{\theta}(x_{j} | q, x_{<j}) \right), LSFT=EμD[πθ(μq)],πθ(μq)=j=1X(1(xjA)×logπθ(xjq,x<j)),
其中,1(xj∈A)\mathbb{1}(x_{j} \in \mathcal{A})1(xjA)是一个指示函数,用于判断xjx_{j}xj是否为智能体生成的思维或行动中的token。

更新策略模型参数后,采用迭代优化方法持续提升智能体的性能。更新后的模型在初始数据集上重复执行“自主探索-自我反思-轨迹合并”的循环,生成新的轨迹数据用于进一步微调。这一迭代过程会持续进行,直到验证集上的性能提升变得微乎其微时,便终止迭代。

http://www.dtcms.com/a/286986.html

相关文章:

  • PowerBi实现Top N和Bottom N的简单示例
  • 番茄项目1:定了一个新的目标——做一个番茄工作法的web项目!
  • 光伏财务管理:在阳光与资本的精密计算中前行
  • VSCode - VSCode 快速跳转标签页
  • Web攻防-访问控制篇水平越权垂直越权未授权访问级别架构项目插件SRC复盘
  • pytest + requests 接口自动化测试框架
  • [特殊字符] Spring Boot 常用注解全解析:20 个高频注解 + 使用场景实例
  • Anime.js 超级炫酷的网页动画库之SVG路径动画
  • 双指针(滑动窗口)相关算法题
  • RLHF(基于人类反馈的强化学习),DPO(直接偏好优化), GRPO(组相对偏好优化)技术概述
  • 鸿蒙开发--端云一体化--云对象
  • 龙虎榜——20250718
  • 【C++】红黑树,“红“与“黑”的较量
  • 【18位数据次方提高数据输出速度】2022-3-9
  • 多线程-1-基础写法
  • 顺理成章学RL-1(based Stanford CS234 Reinforcement Learning)
  • Webstorm 前端断点调试
  • pom.xml文件中的${}变量从哪里传值
  • Couchbase 可观测性最佳实践
  • ModbusRTU转profibus网关与涡街液体流量计通讯读取流量计温度
  • Android性能优化之启动优化
  • python学智能算法(二十三)|SVM-几何距离
  • Python 入门手札:从 0 到会--第九天Python的模块化编程--模块、包以及常见系统模块和第三方模块总结
  • 微店平台商品详情接口技术实现指南
  • C语言:预处理
  • 软件测试全谱系深度解析:从单元到生产的质量保障体系
  • JavaScript笔记
  • 功能安全之BIST的基本原理
  • 关于tftp怎么把res文件夹传输给开发板的操作步骤:
  • 通过代码识别大小端模式