【RAG KG】GraphRAG開源:查詢聚焦摘要的圖RAG方法

前言

傳統的 RAG 方法在處理針對整個文本語料庫的全局性問題時存在不足,例如查詢:“數據中的前 5 個主題是什么?”

對于此類問題,是因為這類問題本質上是查詢聚焦的摘要(Query-Focused Summarization, QFS)任務,而不是傳統的顯式檢索任務。

Graph RAG 通過使用 LLM 構建基于圖的文本索引,從源文檔構建知識圖譜。通過構建知識圖譜,能夠將復雜的、大規模文本數據集轉化為易于理解和操作的知識結構,以便更好地理解實體(如人物、地點、機構等)之間的相互關系。

一、方法

1.1 源文檔分塊

該步驟是 Graph RAG 流程的基礎,它決定了后續構建知識圖譜和生成摘要的質量。主要需要考慮的就是源文檔的分割粒度(《【RAG】Dense X Retrivel:合適的檢索粒度對RAG的重要性(淺看命題粒度的定義及分解方法)》),需要決定輸入文本從源文檔中提取出來后,應該以何種粒度分割成文本塊以供處理。這個決策會影響到后續步驟中 LLM 提取圖索引元素的效率和效果。塊大小的主要影響如下:

  • LLM 上下文窗口:文本塊的長度會影響 LLM 調用的次數以及上下文窗口的召回率(recall)。較長的文本塊可以減少對 LLM 的調用次數,但可能會因為更長的上下文而導致信息提取的召回率下降。

  • 召回率與精度的平衡:在提取過程中,需要平衡召回率和精度。較長的文本塊可能提高召回率,但可能會犧牲精度。

    塊大小的影響

上圖展示了在 HotPotQA 數據集上,使用不同大小的文本塊(600、1200、2400 tokens)和 通用實體提取提示(entity extraction prompt)與 gpt-4-turbo 進行單次提取時,檢測到的實體引用數量的變化。結果表明,使用較小的文本塊(600 tokens)能夠提取出幾乎是使用較大文本塊(2400 tokens)兩倍的實體引用。

1.2 信息抽取(實例提取)

該步驟是構建圖索引的關鍵環節,它確保了從文本數據中提取出有用的結構化信息(KG)(識別并提取源文本中每個文本塊的圖節點和邊的實例),為后續的社區檢測和摘要生成打下了基礎。

方法:

  • KG構建:使用 LLM + prompt 來識別上一步得到的文本塊中的所有實體,包括它們的名稱、類型和描述。然后,識別實體之間的關系,包括源實體、目標實體以及關系的描述。

  • 附加協變量提取:除了實體和關系之外,還可以使用次級提取提示來提取與提取的節點實例相關的附加協變量(covariates)。默認的協變量提示旨在提取與檢測到的實體相關的聲明,包括主題、對象、類型、描述、源文本跨度以及開始和結束日期。

  • 漏提取兜底:為了平衡效率和質量的需要,使用多輪“gleanings”來鼓勵 LLM 檢測在先前提取輪次中可能遺漏的任何實體。這是一個多階段過程,首先要求 LLM 評估是否所有實體都已被提取,如果 LLM 響應有遺漏,則使用一個提示來鼓勵 LLM 提取這些遺漏的實體。

使用 GPT-4 Turbo 從私有數據集構建的 LLM 生成的知識圖譜。

上圖中每個圓圈代表一個實體(例如,一個人、一個地點或一個組織),實體大小表示該實體具有的關系數量,顏色表示相似實體的分組。顏色分區是一種建立在圖形結構之上的自下而上的聚類方法,它使我們能夠回答不同抽象層次的問題。

1.3 實例提取->實例摘要

使用 LLM 提取實體、關系和聲明的描述,這本身就是一種抽象摘要的形式。LLM 需要能夠創建獨立有意義的摘要,這些摘要可能暗示了文本中未明確陳述的概念(例如,隱含的關系)。通過摘要化過程,能夠將大量文本信息濃縮成更加簡潔、易于處理的格式,這有助于提高后續處理步驟的效率。并且,在處理長文本時,實例摘要有助于避免信息在大型語言模型的長上下文中被忽略或丟失的問題。

1.4 實例摘要->圖社區

圖模型構建-同質無向加權圖:將實例摘要階段得到的信息構建成一個同質無向加權圖。在這個圖中,實體作為節點,它們之間的關系作為邊。邊的權重可以表示為檢測到的關系實例的歸一化計數,這有助于反映關系的強度或頻率。

社區檢測算法

  • 社區劃分:使用社區檢測算法將圖劃分為多個社區(communities)。這些社區由彼此之間聯系更緊密的節點組成,相對于圖中的其他節點,社區內部的節點之間的連接更為頻繁。
  • Leiden算法:文章中特別提到了使用 Leiden 算法進行社區檢測,因為該算法能夠有效地恢復大規模圖的層次社區結構。Leiden 算法考慮了社區的模塊化,能夠提供不同層次的社區劃分。

1.5 圖社區到社區摘要

為每個社區創建報告式的摘要,這些摘要獨立于其他社區,但共同構成了對整個數據集全局結構和語義的理解。社區摘要本身對于理解數據集的全局結構和語義非常有用,可以作為在沒有具體問題時對整個語料庫進行探索和理解的工具。

1.6 社區摘要到社區答案再到全局答案

  • 準備社區摘要
    隨機分配:社區摘要被隨機打亂并分成預定大小的塊。這樣做是為了保證相關信息分散在不同的上下文窗口中,而不是集中在一個窗口中,從而避免了信息的潛在丟失。
  • 生成中間答案(Map社區答案)
    • 并行生成:對于每個社區摘要塊,LLM 被用來并行生成中間答案。同時,LLM 還被要求為生成的答案生成一個0到100之間的有用性得分,以指示生成的答案對目標問題的有用程度。
    • 過濾:得分為0的答案將被過濾掉,因為它們對回答問題沒有幫助。
  • 匯總成全局答案(Reduce到全局答案)
    • 排序和匯總:根據有用性得分,將中間社區答案按降序排序,并將它們逐步添加到一個新的上下文窗口中,直到達到令牌限制。
    • 生成最終答案:當所有相關的部分答案都被考慮后,最終的上下文窗口被用來生成返回給用戶的全局答案。

二、實驗

原文使用了兩個大規模數據集來驗證Graph RAG方法的有效性:一個包含1669個文本塊的播客轉錄數據集(約100萬個token)和一個包含3197個文本塊的新聞文章數據集(約170萬個token)。相當于10本小說。

通過與naive RAG和全局文本摘要方法的比較,GraphRAG在全面性和多樣性上優勢明顯,尤其是在使用8k tokens上下文窗口時,測試的最小上下文窗口大小(8k)在所有比較中普遍表現更好,尤其是在全面性上(平均勝率為58.1%),同時在多樣性(平均勝率=52.4%)和授權性(平均勝率=51.3%)上與更大的上下文尺寸表現相當。

還有一個私有數據集上的實驗,鏈接如下
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/

參考文獻

  • 私有數據集實驗:https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/

  • paper:From Local to Global: A Graph RAG Approach to Query-Focused Summarization,https://arxiv.org/pdf/2404.16130

  • 代碼已開源:https://github.com/microsoft/graphrag

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42626.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42626.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42626.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

嵌入式單片機,兩者有什么關聯又有什么區別?

在開始前剛好我有一些資料,是我根據網友給的問題精心整理了一份「嵌入式的資料從專業入門到高級教程」, 點個關注在評論區回復“666”之后私信回復“666”,全部無償共享給大家!!!使用單片機是嵌入式系統的…

iOS 國際化語言第一語言不支持時候默認語言強轉英文

對bundle擴展 直接貼代碼 .h文件 // // NSBundleKdLocalBundle.h // QooCam // // Created by bob bob on 2023/9/8.//#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGINinterface NSBundle (KdLocalBundle)end interface KdLocalBundle:NSBundleend interf…

CurrentHashMap巧妙利用位運算獲取數組指定下標元素

先來了解一下數組對象在堆中的存儲形式【數組長度&#xff0c;數組元素類型信息等】 【存放元素對象的空間】 Ma 基礎信息實例數據內存填充Mark Word,ClassPointer,數組長度第一個元素第二個元素固定的填充內容 所以我們想要獲取某個下標的元素首先要獲取這個元素的起始位置…

軟件工程常見知識點

下午收到字節日常實習的面試邀請&#xff0c;希望這次能有一個好的表現。言歸正傳&#xff0c;郵件中提到這些問題&#xff0c;我這邊借了書并查了網上的資料&#xff0c;做一個提前準備。 軟件工程核心概念&#xff1a; 如何從一個需求落實到一個系統設計&#xff1f; 經過我…

c++ primer plus 第15章友,異常和其他:異常,15.3.7 其他異常特性

c primer plus 第15章友&#xff0c;異常和其他&#xff1a;異常,15.3.7 其他異常特性 c primer plus 第15章友&#xff0c;異常和其他&#xff1a;異常,15.3.7 其他異常特性 文章目錄 c primer plus 第15章友&#xff0c;異常和其他&#xff1a;異常,15.3.7 其他異常特性 15.…

Sorted Set 類型命令(命令語法、操作演示、命令返回值、時間復雜度、注意事項)

Sorted Set 類型 文章目錄 Sorted Set 類型zadd 命令zrange 命令zcard 命令zcount 命令zrevrange 命令zrangebyscore 命令zpopmax 命令bzpopmax 命令zpopmin 命令bzpopmin 命令zrank 命令zscore 命令zrem 命令zremrangebyrank 命令zremrangebyscore 命令zincrby 命令zinterstor…

線程池案例

秒殺 需求 10個禮物20個客戶搶隨機10個客戶獲取禮物&#xff0c;另外10無法獲取禮物 任務類 記得給共享資源加鎖 public class MyTask implements Runnable{// 禮物列表private ArrayList<String> gifts ;// 用戶名private String username;public MyTask( String user…

android Dialog全屏沉浸式狀態欄實現

在Android中&#xff0c;創建沉浸式狀態欄通常意味著讓狀態欄背景與應用的主題顏色一致&#xff0c;并且讓對話框在狀態欄下面顯示&#xff0c;而不是浮動。為了實現這一點&#xff0c;你可以使用以下代碼片段&#xff1a; 1、實際效果圖&#xff1a; 2、代碼實現&#xff1a;…

揭秘GPT-4o:未來智能的曙光

引言 近年來&#xff0c;人工智能&#xff08;AI&#xff09;的發展突飛猛進&#xff0c;尤其是自然語言處理&#xff08;NLP&#xff09;領域的進步&#xff0c;更是引人注目。在這一背景下&#xff0c;OpenAI發布的GPT系列模型成為了焦點。本文將詳細探討最新的模型GPT-4o&a…

Unity海面效果——6、反射和高光

Unity引擎制作海面效果 大家好&#xff0c;我是阿趙。 上一篇的結束時&#xff0c;海面效果已經做成這樣了&#xff1a; 這個Shader的復雜程度已經比較高了&#xff1a; 不過還有一些美中不足的地方。 1、 海平面沒有反射到天空球 2、 在近岸邊看得到水底的部分&#xff0c;水…

JVM調優:深入理解與實戰指南

引言 Java虛擬機&#xff08;JVM&#xff09;作為Java應用程序的運行環境&#xff0c;其性能直接影響到應用程序的響應速度、吞吐量和穩定性。JVM調優是Java開發者必須掌握的一項關鍵技能&#xff0c;它能夠幫助我們更好地利用系統資源&#xff0c;提升應用程序的性能。本文將…

一些關于C++的基礎知識

引言&#xff1a;C兼容C的大部分內容&#xff0c;但其中仍有許多小細節的東西需要大家注意 一.C的第一個程序 #include <iostream> using namespace std;int main() {cout << "hello world!" << endl;return 0; } 第一次看這個是否感覺一頭霧水…

數據挖掘——matplotlib

matplotlib概述 Mat指的是Matlab&#xff0c;plot指的是畫圖&#xff0c;lib即library&#xff0c;顧名思義&#xff0c;matplotlib是python專門用于開發2D圖表的第三方庫&#xff0c;使用之前需要下載該庫&#xff0c;使用pip命令即可下載。 pip install matplotlib1、matpl…

elasticsearch SQL:在Elasticsearch中啟用和使用SQL功能

?博主首頁 &#xff1a; 「碼到三十五」 &#xff0c;同名公眾號 :「碼到三十五」&#xff0c;wx號 : 「liwu0213」 ?博主專欄 &#xff1a; <mysql高手> <elasticsearch高手> <源碼解讀> <java核心> <面試攻關> ?博主的話 &#xff1a…

服務注冊Eureka

目錄 一、背景 1、概念 2、CAP 理論 3、常見的注冊中心 二、Eureka 三、搭建 Eureka Server 1、搭建注冊中心 四、服務注冊 五、服務發現 六、Eureka 和 Zooper 的區別 一、背景 1、概念 遠程調用就類似于一種通信 例如&#xff1a;當游客與景區之間進行通信&…

代碼隨想錄算法訓練營第六十三天 | prim算法、kruskal算法、復習

53. 尋寶 — prim算法 題目鏈接&#xff1a;https://kamacoder.com/problempage.php?pid1053 文檔講解&#xff1a;https://programmercarl.com/kamacoder/0053.%E5%AF%BB%E5%AE%9D-prim.html 思路 本題是最小生成樹的模板題&#xff0c;最小生成樹可以使用 prim算法&#xf…

bash shell 重定向輸入和輸出

shell 提供的重定向操作符 操作符作用>將命令的輸出發到一個文件中如果文件存在&#xff0c;則新的文件數據會覆蓋已經存在的文件>>將命令的輸出追加到一有文件如果文件不存在&#xff0c;則創建新的文件<將文件內容重定向到命令<<內聯輸入重定向(inline in…

Xubuntu24.04之設置高性能模式兩種方式(二百六十一)

簡介: CSDN博客專家,專注Android/Linux系統,分享多mic語音方案、音視頻、編解碼等技術,與大家一起成長! 優質專欄:Audio工程師進階系列【原創干貨持續更新中……】?? 優質專欄:多媒體系統工程師系列【原創干貨持續更新中……】?? 優質視頻課程:AAOS車載系統+AOSP…

蒼穹外賣--新增員工

代碼開發 package com.sky.controller.admin;import com.sky.constant.JwtClaimsConstant; import com.sky.dto.EmployeeDTO; import com.sky.dto.EmployeeLoginDTO; import com.sky.entity.Employee; import com.sky.properties.JwtProperties; import com.sky.result.Result…

Springboot各個版本維護時間

Springboot各個版本維護時間