attention, 2014/09
seq2seq model, 2014/09
Transformer, 2017/06
GPT-2, 2019
BERT, 2018/10
Prompt Engineering, 2018/06
Lewis, Patrick, et al. "Retrieval-augmented generation for knowledge-intensive nlp tasks." Advances in Neural Information Processing Systems 33 (2020): 9459-9474.
RAG, 2020/05
RAG for knowledge intensive tasks
1. parametric memory: a pre-trained seq2seq model
2. non-parametric memory: a dense vector index of Wikipedia
e.g. word embedding
embedding of x
向量搜尋
embedding of 文件zi
向量搜尋前n名
Lewis, Patrick, et al. "Retrieval-augmented generation for knowledge-intensive nlp tasks." Advances in Neural Information Processing Systems 33 (2020): 9459-9474.
non-parametric memory: a dense vector index of Wikipedia
內部知識
外部知識
語言模型
vector embedding
或
graph embedding
問題
解答
parametric memory: a pre-trained seq2seq model
實作方式
Multi-hop reasoning:模型能夠連結context中或跨不同來源的資訊片段,得出結論或解答。 這意味著模型能進行多個推理步驟,而非只根據單一訊息
Central to many NLP, recommendation, and search algorithms.
數值
物件、文字、圖像...
Vector Space: semantic similarity
Barančíková, P., & Bojar, O. (2019). In search for linear relations in sentence embedding spaces.
傳統的 RAG 系統無法正確回答「特定或具上下文依賴」的問題。
❌ 1. 特定問題(Specific Queries)
這類問題需要精準細節,例如:
「打敗篡位者 Allectus 的那個人的兒子叫什麼名字?」
傳統 RAG 可能找不到同一段文字同時提到「Allectus」、「打敗他的人」和「他兒子的名字」,因為它只能比對「語意相近」的段落。
❌ 2. 具上下文依賴的問題(Contextual Queries)
這類問題需要跨多段資料或多步推理才能得出答案,例如:
「誰在 VIINA (暴力事件資訊) 資料集中對抗了最多組織?」
這需要將多個段落的資訊匯整、統計,甚至推理。傳統 RAG 做不到這種跨段聚合與邏輯連結。
One of the solutions: 知識圖譜 + 向量資料庫 + LLM 管道式運作
Subject-Predicate-Object (SPO) Triples
1️⃣ 建構知識圖譜:整理事實與實體關係
透過 LLM 對文本做 Entity + Relation + Claim(Event/Fact) 抽取,構建出:
🔗 這樣的圖譜讓系統知道:
「Constantius —是父親→ Constantine」、「Constantius —擊敗了→ Allectus」
2️⃣ 問題轉換成查圖任務
使用者輸入複雜問題,GraphRAG 會:
3️⃣ 使用 Global + Local Search 提取資料
模式 用途
🌐 Global Search 查詢跨整體社群(用於摘要或概觀類問題)
🧩 Local Search 查詢特定實體及其關聯(如查某人或某機構的資料)
兩者都會根據圖譜社群結構、關聯程度等排序並構建上下文,提供給 LLM。
4️⃣ 利用 LLM 推理並生成答案
LLM 不只是原始生成,而是根據:
來做出有結構的回答,例如:
「Constantius 擊敗了 Allectus。他的兒子是 Constantine。」
📦 示意圖(可想像成)
問題 → 子問題1 → 子答案1
→ 子問題2(基於答案1) → 子答案2
→ 聚合推理 → 最終答案
🧱 1. 原始資料
例如一段文章:
「Steve Jobs 創辦了 Apple,並在矽谷科技圈具有重要影響力。」
🧠 2. 用 LLM 抽取資訊(SPO 三元組)
讓 LLM 處理這段文字,自動產生出三元組(triples):
[
{ "subject": "Steve Jobs", "predicate": "創辦了", "object": "Apple" },
{ "subject": "Steve Jobs", "predicate": "具有影響力於", "object": "矽谷科技圈" }
]
🌐 3. 組成 Knowledge Graph
把所有三元組變成節點(實體)與邊(關係):
[Steve Jobs] ——創辦了——> [Apple]
[Steve Jobs] ——影響——> [矽谷科技圈]
也就是知識圖譜的基本結構
建議方案(供參考)
擷取什麼? Ontology!
Yaojie Lu, etc, from CAS, Baidu and BAAI. Unified Structure Generation for Universal Information Extraction., ACL 2022.
🧱 3. Hierarchical Clustering(Leiden 演算法)
✅ 是什麼?
用圖論演算法把「相關的實體」分群,例如:
🔍 Leiden 是什麼?
Leiden 是一種用來找出社群(community)結構的演算法,它會依據節點間的連結密度把圖分成幾個「群組」,每個群就是一個主題社群。
🧾 4. Community Summary Generation(社群摘要生成)
✅ 是什麼?
系統會自動為每一個社群生成摘要,描述這個社群內的內容:
例如:
「這個社群包含多個與台灣半導體產業有關的實體,如台積電、聯發科,與其關聯人物張忠謀與蔡明介。」
🧠 目的?
Two types:
🔍 1️⃣ Global Search(全域搜尋)
✅ 用途:
處理整體性、總結型問題,例如:
🧠 怎麼做?
📦 適合場景:
主題分類/趨勢分析/資料集統整
🧭 2️⃣ Local Search(在地搜尋)
✅ 用途:
處理特定實體相關問題,例如:
🧠 怎麼做?
📦 適合場景:
實體查詢/關係追蹤/資料導覽式問答
功能 Global Search Local Search
問題範例 | 「前五大主題是什麼?」 | 「A 和 B 的關係是什麼?」 |
對象 | 整份資料(跨社群) | 特定人/物(局部) |
使用資料 | 社群摘要 + 子回答 + 聚合生成 | 實體相似度 + 知識圖譜鄰接節點 |
回答類型 | 總結式、彙整式 | 精準描述、深度解釋 |
用途 | 概觀、摘要、多角度分析 | 查詢某實體、追溯某事件或關聯 |
回答「整體性、多層次」的問題
1️⃣ User Query + Conversation History(使用者提問+對話歷史)
使用者輸入的問題,與之前的對話內容(如果有)會一起作為查詢依據
例如:
使用者問:「這份報告的主要主題有哪些?」
系統會連同先前的上下文來理解「這份報告」是指什麼資料集。
2️⃣ Community Report Batching(社群摘要分批)
GraphRAG 先把知識圖譜中的實體分成社群(例如:「人物群」、「事件群」、「組織群」),再為每個社群產生摘要報告(community report)。
然後這些摘要會被打亂(shuffle)並分批(batch)處理。
為什麼要分批?
3️⃣ Rated Intermediate Responses(中繼回應 + 打分)
每一批社群摘要會丟給 LLM 問一次問題,產生一份「中間答案(intermediate response)」。
每份中間答案裡會有:
4️⃣ Ranking & Filtering(排序與過濾)
系統會將所有中間回應整合,並依照「分數」來:
5️⃣ Aggregated Response → Final Answer(聚合 → 最終回覆)
將最重要的資訊聚合成新的提示(prompt context),交給 LLM 最後生成一個完整且具上下文的答案。
[使用者問題 + 歷史]
↓
[多個社群摘要分批]
↓
[每批 → 中繼回應(RIR)+ 打分]
↓
[整合所有中繼點 → 排序、過濾]
↓
[最終聚合 → 一次回答]
簡化流程圖
📌 為什麼這樣做?
複雜問題往往牽涉很多面向,Global Search 就像「組織多個專家小組報告」,再請 LLM 統整成一篇高品質的回答。
回答聚焦在特定人物、事件或概念的問題。這種搜尋更精準、針對性強,適合處理「某某是誰」、「他做過什麼」這類問題。
1️⃣ Entity Matching(實體匹配)
從使用者的問題中找出關鍵實體(人名、地名、事件名等),並去圖譜中比對相關的節點。
🧠 使用什麼?
用語意向量相似度來判斷,比如使用 Milvus 或 FAISS 等向量資料庫。
例子:
問題:「請介紹 Leonardo da Vinci 的作品」
系統會從圖譜中找出「Leonardo da Vinci」這個實體節點
2️⃣ Entity-Text Mapping(實體對應原始文字)
找到跟這個實體有關的文字來源(text units),例如:
用途?
3️⃣ Relationship + Covariate Extraction(關係與屬性萃取)
從知識圖譜中取出這個實體的:
🧠 「Covariates」這個詞在統計學中是「協變數」,在這裡可理解為「附屬資料」或「屬性資訊」。
4️⃣ Use of Community Reports + Context History(加上社群摘要與對話歷史)
除了實體本身的資訊,還會引用:
這些上下文資料提供更準確的背景給 LLM,避免答非所問。
Dataset: VIINA
GraphRAG 與傳統 RAG 在真實案例下的對比實驗
📚 比較範例(Comparison Example)
🔎 資料集:VIINA
VIINA = Violent Incident Information from News Articles
👉 它是一個包含大量暴力事件新聞報導的資料集,內容複雜、資訊片段、事件多樣,適合測試 AI 是否能處理多樣敘事與多重觀點。
❓ 問題:What are the top 5 themes?
「這份資料集的五大主題是什麼?」
這是一個高層次、需要整體理解的問題,屬於典型的 Global Search 問題。
🔁 結果比較:
🧠 為什麼 GraphRAG 表現好?
✅ 1. Better Comprehensiveness(更全面的回答)
GraphRAG 可以整合來自多個來源或角度的資訊,不會只依賴一或兩段資料
因為:
例如:
問題:「Leonardo da Vinci 的貢獻有哪些?」
🎨 2. Greater Diversity of Perspectives(更多元的觀點)
GraphRAG 能呈現資料中不同來源、立場或角度,不只是一種敘事。
因為它會根據不同社群(例如新聞來源、人物陣營)生成摘要,並用圖譜方式保留多種聲音。
舉例:
問題:「VIINA 資料集中的暴力事件怎麼發生的?」
📏 3. Improved Factual Grounding(更強的事實依據)
GraphRAG 提供的答案有更明確的資料來源、實體關係與上下文根據,比較不會產生幻覺(hallucination)。
因為
舉例:
問題:「誰創辦了 Apple?」
Vector store: Milvus