GraphRAG與知識圖譜

一、GraphRAG介紹

1.1 什么是 Graph RAG?

?Graph RAG(Retrieval-Augmented Generation),是一種基于知識圖譜的檢索增強技術, 通過構建圖模型的知識表達,將實體和關系之間的聯系用圖的形式進行展示,然后利用大語言模型 LLM進行檢索增強。
?GraphRAG是微軟研究院開發的一種創新型檢索增強生成(RAG)方法,基于MIT開源協議,旨在提高大語言模型LLM在處理復雜信息和私有數據集時的推理能力

1.2 GraphRAG誕生背景

?傳統RAG是將一篇文章打碎拆分為幾個小的章節(chunks),然后embedding后存入向量庫,在查詢階段,RAG將用戶指令挨個在向量庫與這些chunks的embedding向量進行相似度匹配,然后輸出最匹配的k個作為prompt的上下文(context),無論是在文檔預處理進向量庫階段,還是用戶查詢階段,都沒加考慮各個chunk之間的關聯,這就形成了普通RAG技術的先天設計缺陷。

傳統rag:
解決外部知識的詳情介紹,某些細節的檢索。
比如: 比如孔乙己是哪里人?
graphRAG:
跨多個段落,甚至多個文章。
文章中的主要主題是什么?

?GraphRAG提出了一種回答總結類問題的算法思路,下面展示了GraphRAG算法的工作流程,包括索引建立階段(index time)和查詢階段(query time)。

1.3 graphrag的基本概念

  • Document(文檔)- 系統中的輸入文檔。這些文檔要么代表CSV 中的單獨行,要么代表單獨的 .txt文件。
  • TextUnit(文本塊)- 要分析的文本塊。這些塊的大小、重疊以及它們是否遵守任何數據邊界可以在下面配置。一個常見的用例是設置CHUNK_BY_COLUMNS為id,以便文檔和 TextUnits 之間存在一對多關系,而不是多對多關系。
  • Entity(實體)- 從 TextUnit 中提取的實體。這些實體代表人物、地點、事件或您提供的其他實體模型。
  • Relationship(關系)- 兩個實體之間的關系。這些關系由協變量生成。
  • Covariate(協變量)- 提取的聲明信息,其中包含可能受時間限制的實體的陳述.
  • Claim(聲明)- 代表具有評估狀態和時間限制的積極事實陳述,以協變量(Covariates)的稱呼在各處使用。
  • Community Report(社區報告)- 一旦生成實體,我們就對它們執行分層社區檢測,并為該層次結構中的每個社區生成報告。
  • Node(節點)- 包含已嵌入和聚集的實體和文檔的呈現圖形視圖的布局信息。

1.3.1 索引建立(index time)

?索引建立階段,屬于數據預處理階段,主要目的是從提供的文檔集合中,提取出知識圖譜(Knowledge Graph),然后以聚類算法(Leiden),將知識圖譜分為數個社區(community),并總結每個社區(community)所表達的含義(community summary)。

graphRAG索引階段流程圖:
在這里插入圖片描述

1.3.2 Querying過程

?從上面的介紹,我們了解到在構建索引的過程中,GraphRAG會生成實體關系圖、社區層級結構,以及它們的sumamry、source chunk等各種維度的信息,以向量和結構化的方式進行存儲。下面我們介紹在檢索時如何使用這些信息來做信息增強。Query分兩種類型,分別為Local Search和Global Search。

1.3.2.1 Local Search

?local Search是一種基于Entity的回答模式。它結合知識圖譜中的結構化數據和輸入文檔中的非結構化數據,在查詢時通過相關實體信息擴展 LLM 上下文。該方法非常適合回答需要理解輸入文檔中提到的具體實體的問題(例如,“孔乙己和掌柜的之間的關系?”)。
其流程圖如下所示:
在這里插入圖片描述

?給定用戶查詢(或加上對話歷史記錄),Local Search會從知識圖譜中識別出一組與用戶輸入在語義上相關的實體。這些實體作為進入知識圖譜的入口點,能夠提取進一步相關的細節,如相連實體、關系、實體協變量(與實體相關的變量)和社區報告。此外,它還從原始輸入文檔中提取與已識別實體相關的相關文本chunk。然后對這些候選數據源進行優先級排序和過濾,以適應預定義大小的單個上下文窗口,該窗口用于生成對用戶查詢的響應。

1.3.2.2 Global Search

?Global Search是基于整個數據集的推理。常規RAG在處理需要跨數據集聚合信息后進行組合回答的場景時很難有很好的表現。例如,“本文的主題是什么?”這種問題查詢效果會很差,因為常規RAG的處理方式是:依賴于數據集中存在語意相似的文本內容的向量檢索。如果知識庫中沒有文本內容包含這個問題的答案,則無法給出高質量的回答。

?然而,使用 GraphRAG 可以回答此類問題,因為 LLM 生成的知識圖譜的結構可以告訴我們整個數據集的結構(以及主題)。這使得私有數據集能夠組織成有意義的語義clusters,并且這些clusters已被預先總結。通過使用我們的全局搜索方法,LLM 在響應用戶查詢時可以使用這些cluster來總結這些主題,并回答用戶對整個數據集的問題。

其流程圖如下所示:
在這里插入圖片描述

?給定用戶查詢(或加上對話歷史記錄),Global Search使用從圖的社區層次結構中指定級別生成的一系列 LLM 社區報告作為上下文數據,以 map-reduce 方式生成響應。在 map 步驟中,社區報告被分割成預定義大小的文本chunks。每個文本chunk然后用于生成一個中間響應,其中包含一個要點列表,每個要點都附有一個表示該要點重要性的數值評級。在 reduce 步驟中,從中間響應中篩選出最重要的要點進行匯總,并將其用作上下文生成最終響應。

?全局搜索響應的質量會受到用于社區報告來源的社區層次結構級別的顯著影響。較低的層次級別報告更為詳細,通常會產生更為全面的響應,但由于報告數量的增加,這也可能增加生成最終響應所需的時間和 LLM 資源。

1.4 Graph RAG 思想一句話總結

Graph RAG 思想: 對用戶輸入的query提取實體,然后構造子圖形成上下文,最后送入大模型完成生成

二、知識圖譜介紹

知識圖譜(Knowledge Graph)是一種以結構化形式描述現實世界實體及其關系的技術,通過將數據組織為“節點-邊-節點”的三元組(如“北京-是-中國首都”),構建出語義關聯的網絡。

核心組成??:

  • 實體(Entities)?:表示具體或抽象的事物,如“李白”“北京”。?
  • 關系(Relationships)?:連接實體的邊,定義交互方式,如“出生于”“首都”。?
  • 屬性(Attributes)?:描述實體的特征,如“李白-字太白”“北京-人口2170萬”。?
  • 本體(Ontology)?:領域內的概念體系與關系約束,如“城市-國家”間的“首都”關系。?

示例?:在醫療領域,知識圖譜可鏈接“糖尿病”“胰島素”“高血糖”等實體,通過“治療方法”“癥狀”等關系輔助診斷。

應用場景??:

  • 推薦系統?:基于用戶興趣關聯商品(如喜歡科幻電影的用戶推薦《三體》)。?
  • 智能問答?:解析復雜問題(如“哪些法國導演獲得過奧斯卡獎?”)。?
  • 金融風控?:通過企業關聯網絡識別欺詐風險。?
  • 醫療健康?:輔助診斷(如根據癥狀推薦可能的疾病及用藥)。

三、圖數據庫與neo4j

3.1 市面上圖數據庫介紹

3.1.1 排名:

https://db-engines.com/en/ranking/graph+dbms
在這里插入圖片描述

3.1.2 主流圖數據庫

在這里插入圖片描述

3.2 neo4j

neo4j學習地址:
https://www.w3cschool.cn/neo4j/neo4j_need_for_graph_databses.html

3.2.1 docker安裝neo4j社區版

docker run -d -p 7474:7474 -p 7687:7687 --name neo4j -v /home/neo4j/data:/data -v /home/neo4j/logs:/logs -v /home/neo4j/conf:/var/lib/neo4j/conf -v /home/neo4j/import:/var/lib/neo4j/import neo4j:5.5.0-community

訪問地址:http://localhost:7474/

默認賬號密碼:

neo4j || neo4j

3.2.1 cql實例

簡介:
在這里插入圖片描述

3.2.2 操作實例

增加一個節點:

 create (n:Person {name:"孔乙己",age:31})

帶有關系屬性:

 create (p:Person{name:"孔乙己",age:31})-[: 偷書 { 金額 :3000}]->(n:Person{name:"丁舉人",age:35})

刪除節點:

 create (n:Person {name:"掌柜",age:33});match (n:Person{name:"掌柜"}) delete n;-- 根據id刪除match (n:Person) where id(n)=3 delete n

刪除關系:

MATCH (p:Person {name: "孔乙己", age: 31})-[f:`偷書`]->(n:Person {name: "丁舉人", age: 35}) DELETE f

修改:
加上標簽:

 match (t:Person) where id(t)=0 set t:衣服 return t;

加上屬性:

  match (a:衣服) where id(t)=0 set a.衣服="長衫" return a

修改屬性:

match (a:衣服) where id(a)=0  set a.衣服="破爛的長衫" return a

查:

 match (p:Person) - [:偷書] -> (n:Person) return p,n

效果:
在這里插入圖片描述

3.2.3 紅樓夢示例

紅樓夢知識圖譜示例:
https://grapheco.org/

賈寶玉知識圖譜
薛蟠知識圖譜

四、GraphRAG

git地址:
https://github.com/microsoft/graphrag

前置操作:

ollama pull qwen2.5:7b
ollama pull quentinz/bge-large-zh-v1.5

4.1 安裝graphRAG

4.1.1 安裝 GraphRAG

pip install graphrag

需要 Python 3.10-3.12 環境

4.1.2 創建知識數據文件夾

安裝完整后,需要創建一個文件夾,用來存儲你的知識數據,目前 GraphRAG 只支持 txt 和 csv 格式。

mkdir -p ./ragtest/input

4.1.3 準備一份數據放在 /ragtest/input 目錄下

在這里插入圖片描述

4.1.4 初始化工作區

首先,我們需要運行以下命令來初始化:

python -m graphrag.index --init --root ./ragtest

運行完成后,在 ragtest 目錄下生成以下兩個文件:settings.yaml。ragtest 目錄下的結構如下:

在這里插入圖片描述

  • settings.yaml:GraphRAG 的核心配置文件,允許用戶自定義模型、嵌入模型、存儲設置和管道參數,通過 YAML 格式提供靈活的配置選項;

4.2 修改配置文件支持本地部署大模型

首先確保已安裝 Ollama。
安裝qwen2.5 7b和bge-large-zh-v1.5;

4.2.1 修改.setting.yaml

右邊為修改后的內容:
在這里插入圖片描述

在這里插入圖片描述

注意這里:默認的chunks.size是1200。 較大的塊會導致輸出保真度較低,參考文本意義較小;使用較大的塊可以大大縮短處理時間。

4.2.2 運行 GraphRAG 構建知識圖譜索引

python -m graphrag.index --root ./ragtest

構建知識圖譜的索引需要一定的時間,構建過程如下所示:
在這里插入圖片描述

成功:
在這里插入圖片描述

4.3 修改源碼支持本地部署大模型

接下來修改源碼,保證進行 local 和 global 查詢時給出正確的結果。

4.3.1 修改成本地的 Embedding 模型

修改源代碼的目錄和文件:

/root/miniconda3/lib/python3.10/site-packages/graphrag/llm/openai/openai_embeddings_llm.py

改動如下:
在這里插入圖片描述

4.3.2 修改 Embedding 模型

修改源代碼的目錄和文件:

/root/miniconda3/lib/python3.10/site-packages/graphrag/query/llm/oai/embedding.py

修改如下:
在這里插入圖片描述

在這里插入圖片描述

4.4 GraphRAG 效果測試

4.4.1 local 查詢

執行命令:

python -m graphrag.query --root ./ragtest --method local "孔乙己和掌柜的關系是什么?"

4.4.2 global 查詢

執行命令:

python -m graphrag.query --root ./ragtest --method global "本文主題是什么?"

4.4.3 提示微調 prompt tuning

參加【提示微調 prompt tuning.txt】

五、GraphRAG詳情

?GraphRAG 采用了知識圖譜的理念,在底層實現中同時使用了圖數據庫和向量數據庫。圖數據庫存儲有關實體和實體間關系的數據,而向量數據庫則存儲與文本單元相對應的嵌入向量空間。

本地搜索(Local Search):基于實體的推理
本地搜索方法將知識圖譜中的結構化數據與輸入文檔中的非結構化數據結合起來,在查詢時用相關實體信息增強 LLM 上下文這種方法非常適合回答需要了解輸入文檔中提到的特定實體的問題(例如,"洋甘菊有哪些治療功效?)

全局搜索(Global Search): 基于全數據集推理
根據LLM生成的知識圖譜結構能知道整個數據集的結構(以及主題)這樣就可以將私有數據集組織成有意義的語義集群,并預先加以總結。LLM在響應用戶查詢時會使用這些聚類來總結這些主題;

五、將graphRAG生成的文件導入到neo4j查看

具體實現【參見demo】。

查看graphrag索引后,各個實體之間的關系:
在這里插入圖片描述

六、GraphRAG的適用場景

6.1 總結對比:GraphRAG vs 傳統 RAG

?場景類型??傳統 RAG 的局限性??GraphRAG 的優勢?
?跨文檔分析?信息碎片化,難以關聯全局語義通過知識圖譜實現全局語義關聯
?實時數據處理?全量索引重建成本高支持增量更新,降低維護開銷
?多模態整合?依賴單一文本模態,異構數據處理難統一圖結構融合文本/表格/圖譜數據
?復雜推理任務?單跳檢索,難以支持多步邏輯推理基于圖的多跳推理能力

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

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

相關文章

一個開源的 VS Code 大模型聊天插件:Light-at

這篇文章是一個開發雜談。對于有經驗的開發者來說,可能這個項目并不算特別復雜或者高技術,只是對我個人來說算一個里程碑,因此寫篇雜談文章記錄一下。也許也能給起步者一些參考。 項目地址:https://github.com/HiMeditator/light-…

SQL121 創建索引

-- 普通索引 CREATE INDEX idx_duration ON examination_info(duration);-- 唯一索引 CREATE UNIQUE INDEX uniq_idx_exam_id ON examination_info(exam_id);-- 全文索引 CREATE FULLTEXT INDEX full_idx_tag ON examination_info(tag);描述 現有一張試卷信息表examination_in…

【Pandas】pandas DataFrame set_flags

Pandas2.2 DataFrame Attributes and underlying data 方法描述DataFrame.index用于獲取 DataFrame 的行索引DataFrame.columns用于獲取 DataFrame 的列標簽DataFrame.dtypes用于獲取 DataFrame 中每一列的數據類型DataFrame.info([verbose, buf, max_cols, …])用于提供 Dat…

Linux終止進程(kill process)的一些玩法

經常運行一個程序時,表面上已經終止了,實際上還在后臺運行。一來呢,它可能占據端口,導致端口復用的時候報錯。二來呢,它可能占用GPU,讓你顯存直接少一塊。 尤其是在多進程程序,假如運行“python…

《比特城傳奇:公鑰、私鑰與網絡安全的守護之戰》

點擊下面圖片帶您領略全新的嵌入式學習路線 🔥爆款熱榜 88萬閱讀 1.6萬收藏 第一章:雙鑰之謎 比特城的清晨總是籠罩著一層薄霧,仿佛這座城市本身就是由無數個0和1編織而成的幻境。在這里,信息如同空氣般無處不在,但…

BGP路由協議之屬性1

公認屬性是所有 BGP 路由器都必須能夠識別的屬性 公認必遵 (Well-known Mandatory) : 必須包括在每個 Update 消息里公認任意 (Well-known Discretionary) : 可能包括在某些 Update 消息里。 可選屬性不需要都被 BGP 路由器所識別 可選過渡(OptionalTransitive) : BGP 設備不…

Pr視頻剪輯 Premiere Pro 2024 for Mac

Pr視頻剪輯 Premiere Pro 2024 for Mac 文章目錄 Pr視頻剪輯 Premiere Pro 2024 for Mac一、介紹二、效果三、下載 一、介紹 Premiere Pro 2024 for Mac是一款專業的視頻編輯軟件,廣泛應用于電影、電視、廣告等領域。它為Mac用戶提供了強大的剪輯、調色、音頻處理等…

oracle 包的管理

在PL/SQL程序開發中,為了方便實現模塊化程序的管理,可以將PL/SQL元素(如存儲過程、函數、變量、常量、自定義數據類型、游標等)根據模塊的程序結構組織在一起,存放在一個包中,稱為一個完整的單元&#xff0…

LINUX 5 cat du head tail wc 計算機拓撲結構 計算機網絡 服務器 計算機硬件

計算機網絡 計算機拓撲結構 計算機按性能指標分:巨型機、大型機、小型機、微型機。大型機、小型機安全穩定,小型機用于郵件服務器 Unix系統。按用途分:專用機、通用機 計算機網絡:局域網‘、廣域網 通信協議’ 計算機終端、客戶端…

從零開始的圖論講解(1)——圖的概念,圖的存儲,圖的遍歷與圖的拓撲排序

目錄 前言 圖的概念 1. 頂點和邊 2. 圖的分類 3. 圖的基本性質 圖的存儲 鄰接矩陣存圖 鄰接表存圖 圖的基本遍歷 拓撲排序 拓撲排序是如何寫的呢? 1. 統計每個節點的入度 2. 構建鄰接表 3. 將所有入度為 0 的節點加入隊列 4. 不斷彈出隊頭節點,更新其…

強化學習Q-Learning:DQN

強化學習Q-Learning/DQN 本文是一篇學習筆記,主要參考李宏毅老師的強化學習課程。 目前主流的強化學習方法大致可以分為 policy-based 和 value-based 兩大類。之前我們介紹的 policy gradient 策略梯度,就是 policy-based 的方法。本文要介紹的 Q-learn…

W公司云安全解決方案

1 安全理念DevOpvSec 統一安全運營 2 安全責任分層模型 3 云安全產品線 4 云安全解決方案/部署架構 5 安全能力 6 信創云平臺適配 7 統一化安全運營 利用云安全平臺實現統一的安全運維 8 安全資源池的統一納管 9 案例分享:私有云 10 云安全解決方案的衍生特點 11 …

python中的in關鍵字查找的時間復雜度

列表(List) 對于列表來說, in 運算符的復雜度是 O(n),其中n是列表的長度。這意味著如果列表中有n個元素,那么執行 in 運算符需要遍歷整個列表來查找目標元素。 以下是一個示例,演示了在列表中使用 in 運算…

MySQL基礎 [一] - Ubuntu版本安裝

目錄 預安裝 先查看自己操作系統的版本 添加MySQL APT下載源 下載 安裝 正式安裝 查看MySQL狀態 打開MySQL 預安裝 先查看自己操作系統的版本 lsb_release -a 添加MySQL APT下載源 下載 下載發布包 下載地址 : https://dev.mysql.com/downloads/repo/apt/ 這里下…

Springboot整合Mybatis+Maven+Thymeleaf學生成績管理系統

前言 該系統為學生成績管理系統,可以當作學習參考,也可以成為Spirng Boot初學者的學習代碼! 系統描述 學生成績管理系統提供了三種角色:學生,老師,網站管理員。主要實現的功能如下: 登錄 &a…

操作系統之文件系統

🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/literature?__c1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,…

AG32:MCU和CPLD如何交互?

本文檔介紹了AG32開發中,MCU與CPLD交互的具體方式以及例子。如需了解AG32更多資料可發郵件:salesagm-micro.com 一、MCU和CPLD直接交互 cpld工程創建及編譯的操作流程,參考文檔《AG32下fpga和cpld的使用入門》 在工程中,用戶邏輯…

機器人軌跡跟蹤控制——CLF-CBF-QP

本次使用MATLAB復現CLF-CBF-QP算法,以實現機器人軌跡跟蹤同時保證安全性能 模型 使用自行車模型來進行模擬機器人的移動動態,具體的模型推導參考車輛運動學模型-自行車模型 采用偏差變量 p ~ = p ? p r e f u ~ = u ? u r e f \tilde{p} = p - p_{ref} \\ \tilde{u} = …

009_抽象類和接口

抽象類和接口 final關鍵字常量 單例模式(設計模式)枚舉類抽象類抽象類的注意事項、特點使用抽象類的好處模版方法設計模式 接口接口的好處接口的注意事項 final關鍵字 final關鍵字是最終的意思,可以修飾類、方法、變量。 修飾類:…

新潮透明液體水珠水滴失真故障扭曲折射特效海報字體標題設計ps樣機動作素材 Bubble Photoshop Templates

只需單擊幾下即可創建引人注目的視覺效果!您需要做的就是將您的文本或圖像放入智能對象中并應用作。 包中包含: 15 個靜態 Photoshop 模板(PS 2019 及更高版本) 01-05 垂直布局 (22504000)06-10 水平布局…