RAG(三)GraphRAG進(jìn)階:GraphReader-- 基于圖的Agent,讓大模型“讀懂”長文本
上一篇論文介紹了GraphRAG,今天來看一篇算是其進(jìn)階版的方法--GraphReader。
對于其研究動機(jī),簡單來說,LLMs具有強(qiáng)大的規(guī)劃和反思能力,但在解決復(fù)雜任務(wù)時,如函數(shù)調(diào)用或知識圖譜問答(KGQA),以及面對需要多次推理步驟的問題時,仍然面臨困難。特別是當(dāng)涉及到長文本或多文檔的處理時,現(xiàn)有的方法往往難以充分利用這些模型的能力來捕捉全局信息,并有效地進(jìn)行決策。此外,當(dāng)前的方法在處理多跳問題時也存在局限性,無法充分展現(xiàn)LLM的規(guī)劃和反思能力。
因此本文提出GraphReaderr,通過構(gòu)建基于圖的智能體系統(tǒng)(Graph-based Agent System),以圖結(jié)構(gòu)的方式組織長文本,并利用智能體自主探索該圖。主圖結(jié)果如下:
1、方法介紹
GraphReader方法主要包括兩部分,下面來詳細(xì)看下:
圖構(gòu)建(Graph Construction)
首先是圖構(gòu)建,其目的是將長文本轉(zhuǎn)化為圖結(jié)構(gòu)。
從源文檔中構(gòu)建實體知識圖譜作為第一步,每個節(jié)點
包含一個關(guān)鍵元素
和一系列總結(jié)的內(nèi)容
。即,每個節(jié)點
代表了文本中的一個關(guān)鍵元素及其相關(guān)聯(lián)的事實。每條邊
表示節(jié)點
和
之間的關(guān)系。
具體來說,首先將文檔D 分割成最大長度為 L 的塊,同時保留段落結(jié)構(gòu)。對于每個塊,使用LLM將其總結(jié)為原子事實,并使用LLM從每個原子事實中提取關(guān)鍵元素,如必要的名詞、動詞和形容詞。處理完所有塊后,對關(guān)鍵元素進(jìn)行歸一化,以處理詞匯噪聲和粒度問題,創(chuàng)建最終的關(guān)鍵元素集。這種方法將原始文本分割成更小、更易于管理的部分,使得模型能夠在較小的上下文窗口內(nèi)有效工作。
圖探索(Graph Exploration)
給定圖G和問題Q,目標(biāo)是設(shè)計一個可以使用預(yù)定義的函數(shù)自主探索圖的智能體。智能體首先維護(hù)一個Notebook記錄支持事實,這些事實最終用于推導(dǎo)最終答案。然后執(zhí)行兩個關(guān)鍵初始化:定義合理計劃和選擇初始節(jié)點。
- Rational Plan(合理計劃):為了解決復(fù)雜的現(xiàn)實世界多跳問題,預(yù)先規(guī)劃解決方案至關(guān)重要。智能體將原始問題逐步分解,識別所需的關(guān)鍵信息,并形成一個合理計劃。
- Initial Node(初始節(jié)點):選擇戰(zhàn)略性起點對于提高搜索效率至關(guān)重要。智能體評估所有節(jié)點V的關(guān)鍵元素,并根據(jù)問題和合理計劃選擇N 個初始節(jié)點。
在選擇了N 個初始節(jié)點作為起點后,智能體首先探索原子事實,然后探索節(jié)點的塊。接下來,根據(jù)問題和合理計劃探索相鄰節(jié)點。智能體在探索過程中不斷更新Notebook。
- Exploring Atomic Facts(探索原子事實):由于上下文窗口的限制,不可能將所有原始文本塊都包含在上下文窗口內(nèi),而所有原子事實都可以適應(yīng)上下文窗口。因此智能體采用了一種從粗到細(xì)的策略。首先,讀取與當(dāng)前節(jié)點相關(guān)的所有原子事實,按照它們所屬的文本塊進(jìn)行分組,并標(biāo)記相應(yīng)的塊ID。這樣智能體可以通過閱讀這些分組后的原子事實來快速了解每個文本塊的大致內(nèi)容,同時利用問題、計劃以及Notebook中的記錄來反思所需的線索,并確定哪些文本塊可能包含有用信息。然后,如果某個文本塊被認(rèn)為有價值,智能體會調(diào)用
read_chunk(List[ID])
函數(shù),完成參數(shù)填充并將這些ID添加到塊隊列中,以便進(jìn)一步閱讀。當(dāng)智能體認(rèn)為當(dāng)前節(jié)點的信息已經(jīng)足夠或需要更多相關(guān)數(shù)據(jù)時,它可以調(diào)用stop_and_read_neighbor()
函數(shù),暫停對當(dāng)前節(jié)點的探索,轉(zhuǎn)而開始探索鄰居節(jié)點。 - Exploring Chunks(探索塊):當(dāng)塊隊列不為空時,表示智能體已經(jīng)識別出多個感興趣的文本塊。然后遍歷隊列,閱讀每個塊。這一步至關(guān)重要,因為原子事實僅總結(jié)關(guān)鍵信息并提供簡要線索,而特定細(xì)節(jié)最好直接從原始文本塊中獲得。在閱讀塊時,智能體將再次考慮問題和計劃,思考可以添加到當(dāng)前Notebook中的信息。在Notebook更新后,智能體將選擇執(zhí)行下面的操作之一:1)
search_more
如果支持事實不足,將繼續(xù)探索隊列中的塊;2)read_previous_chunk
和read_subsequent_chunk
由于截斷問題,相鄰塊可能包含相關(guān)和有用的信息,智能體可能會將這些 ID 插入隊列;3)termination
如果已收集到足夠信息以回答問題,將完成探索。 - Exploring Neighbors(探索相鄰節(jié)點):一旦當(dāng)前節(jié)點的原子事實和塊隊列已全部處理完畢,表示該節(jié)點已徹底探索,智能體需要訪問下一個節(jié)點??紤]到問題、計劃和Notebook的內(nèi)容,智能體檢查所有相鄰節(jié)點,并執(zhí)行以下操作之一:1)
read_neighbor_node
選擇可能有助于回答問題的相鄰節(jié)點并重新進(jìn)入探索原子事實和塊的過程;2)termination
如果確定所有相鄰節(jié)點都不包含有用信息,將完成探索。
答案推理(Answer Reasoning)
在 N 個智能體獨立收集信息并停止探索后,編譯每個智能體的Notebook,進(jìn)行推理和生成最終答案。使用CoT,LLM 首先分析每個筆記,考慮其他記憶中的補(bǔ)充信息,并使用多數(shù)投票策略解決任何不一致性。最終,LLM 將考慮所有可用信息以生成最終答案。
2、實驗
評估基準(zhǔn)
多跳長文本問答:HotpotQA、2WikiMultihopQA、MuSiQue、HotpotWikiQA-mixup(包括五個文本長度級別:16k、32k、64k、128k和256k)
單跳長文本問答:NarrativeQA
評估指標(biāo)
F1 分?jǐn)?shù)、精確匹配(Exact Match, EM)分?jǐn)?shù)和優(yōu)化后的 F1* 分?jǐn)?shù)。F1* 首先計算黃金答案關(guān)鍵詞的召回率,僅當(dāng)其超過一定閾值時才計算 F1 分?jǐn)?shù),否則得分默認(rèn)為零。
主要結(jié)果
- RAG 方法的結(jié)果:基于 BM25 和 Ada002 的 RAG 方法表現(xiàn)最差,可能是因為文本檢索難以召回包含回答問題所需支持事實的所有塊。盡管增加召回的塊數(shù)量可以提高文本檢索的性能,但上下文窗口將限制這些RAG方法的有效性。
- 長文本 LLM 的結(jié)果:直接使用 GPT-4-128k 處理長文本的直接回答性能顯著優(yōu)于 RAG 方法,甚至在三個長文本基準(zhǔn)測試中優(yōu)于 ReadAgent。這是因為 GPT-4-128k 在處理長文本和執(zhí)行多跳推理任務(wù)方面的優(yōu)越性能。
- GraphReader 結(jié)果:GraphReader 在四個長文本基準(zhǔn)測試中的表現(xiàn)始終優(yōu)于基線方法,并在多跳長文本任務(wù)中展現(xiàn)出卓越的性能。GraphReader 的方法能夠高效識別關(guān)鍵信息,并搜索輸入問題的支持事實。
極長上下文任務(wù)的結(jié)果:
消融實驗
- The Effect of Rational Plan(合理計劃的效果):合理計劃在指導(dǎo)代理選擇和探索圖上的節(jié)點是有效的。去除理性計劃后,性能有所下降,這證明了理性計劃在指導(dǎo)探索中的重要性。
- The Effect of Node Selection(節(jié)點選擇的效果):隨機(jī)選擇導(dǎo)致性能顯著下降,平均下降了18%。表明GraphReader在選擇節(jié)點時非常謹(jǐn)慎,從而實現(xiàn)了更合理和有效的探索。
- Impact of the Number of Initial Nodes(初始節(jié)點數(shù)量的影響):增加節(jié)點數(shù)量可以提高性能,直到達(dá)到某個點,最佳性能為5個初始節(jié)點,研究者將其設(shè)置為默認(rèn)值。然而,超過這個閾值,性能會下降,特別是在單跳場景中,這可能是由于太多初始節(jié)點增加噪聲。
- Impact of the Chunk Size(塊大小的影響):塊大小的最佳性能為2k。當(dāng)塊大小超過一定閾值時,性能會下降,因為較大的塊可能導(dǎo)致模型忽略關(guān)鍵細(xì)節(jié)。相反,較小的塊可能導(dǎo)致更多的語義截斷,阻礙理解和準(zhǔn)確提取原子事實。
- 成本分析(Cost Analysis):通過比較 ReadAgent 和 GraphReader 在處理單個問題時的平均令牌消耗,結(jié)果表明,GraphReader 使用的令牌數(shù)量僅比 ReadAgent 多 1.08 倍(52.8k / 48.7k),但性能提升卻超過了雙倍,從而展示了 GraphReader 的優(yōu)越性。更重要的是,在單文檔多查詢場景中,GraphReader 具有顯著優(yōu)勢,因為這些場景中只需要構(gòu)建一個圖,后續(xù)的問答可以在這個圖上進(jìn)行,減少了整體的令牌消耗。
- 支持事實的回憶率分析(Recall Rate Analysis):評估不同方法在 HotpotWikiQA-mixup 數(shù)據(jù)集上支持事實的回憶率。結(jié)果表明,GraphReader 在所有方法中保持了較高的回憶率,即使在 256k 上下文長度下,回憶率也保持在 60% 左右,這證明了 GraphReader 在處理長文本和復(fù)雜問題時的性能優(yōu)于現(xiàn)有的方法,并且能夠高效地利用有限的上下文窗口來處理長距離依賴和多跳關(guān)系。
3、總結(jié)
以智能體的方式構(gòu)建了一個基于圖結(jié)構(gòu)方式的LLM處理長文本的方案。但是在圖探索模塊上,每一個環(huán)節(jié)都需要LLM參與,會導(dǎo)致大量Token消耗,并且圖構(gòu)建過程可能極其耗時,方法還有很大優(yōu)化空間。不過,確實為多跳推理、圖結(jié)構(gòu)化表示、圖與LLM結(jié)合的研究提供了新的思路和方法。