為什麼 GraphRAG 需要「實體」?文章片段 (Chunks) vs 專業名詞 (Entities) 的底層邏輯
為什麼 GraphRAG 需要「實體」?文章片段 (Chunks) vs 專業名詞 (Entities) 的底層邏輯
在建立自己的知識庫(如 Skill Graph)或打造進階的 RAG(檢索增強生成)系統時,我們經常會混淆兩個概念:「文章片段(Chunks)」與「專業名詞(Entities)」。
這是一個非常關鍵的區分!簡單來說,「文章片段 (Chunks)」是內容的載體,而「專業名詞 (Entities)」則是內容的靈魂(核心意義)。
這篇文章將帶你從三個維度徹底看懂它們的不同,並介紹如何透過「三明治結構」建立出不受雜訊干擾的 Skill Entity Graph。如果你正在用 GraphRAG 升級你的知識庫,這會是你最需要建立的核心觀念。
一、三維度看懂 Chunk 與 Entity 的本質差異
1. 定義上的差異
- 文章片段 (Chunks):
這是物理上的切割。當你有一篇 5000 字的職涯文章,為了讓 AI 讀得進去(符合 Token 限制),你會把它切成每段 500 字的小塊。這些小塊包含各種贅字、連接詞(如「因為」、「所以」、「總結來說」)。 - 專業名詞 (Entities):
這是語意上的提煉。它是從文章中萃取出的「關鍵概念」,比如:React、CI/CD、分散式架構。它是不受文章段落限制的獨立單位。
2. 關係建立邏輯(決戰點)
這是傳統 RAG 與 Entity Graph RAG 的分水嶺:
方式 A:基於「長相」的鄰居(Chunk kNN)
這是在比較兩段話的「語感」或「氛圍」。
- 風險: 如果 Chunk 1 在說「如何維護電腦硬體(例如更換風扇)」,Chunk 2 在說「電腦軟體市場分析」,因為它們都頻繁出現「電腦」,AI 可能會把它們連在一起。但如果你今天想找的是「後端軟體開發」,系統卻會因為這種關聯帶你去看「硬體清潔」,這就是無意義的雜訊。
方式 B:基於「血緣」的親戚(Entity Embedding Graph)
這是在比較兩個名詞在「知識領域」裡的真實關係。
- 優勢: 當我們連線
Kubernetes和Docker時,這不是因為它們長得像,而是因為在數百萬份技術文件中,這兩個詞總是同時出現、互相支撐。這種連線是結構化的,非常有邏輯。
3. 實戰對比表
| 特性 | 方式 A:文章片段 (Chunks) | 方式 B:專業名詞 (Entities) |
|---|---|---|
| 顆粒度 | 粗(一大段話) | 細(一個詞或短語) |
| 主要功能 | 提供「詳細描述」與「上下文」 | 提供「導航」與「邏輯結構」 |
| 檢索效果 | 容易找到「類似的文章」 | 容易找到「相關的知識領域」 |
| 可解釋性 | 低(AI 說它們像,但說不清為什麼) | 高(因為 Docker 是 K8s 的容器運行時) |
| 假設你有 200 個 Nodes | 會變成 200 個內容碎片(雜亂) | 會長成 200 個技能點(整齊的技能樹) |
二、為什麼這對你的「知識圖譜」很重要?
想像你在整理你的職涯知識庫或個人筆記:
- 如果用方式 A (Chunks):你問「後端開發」,系統可能會給你一堆「提到後端」的日記、筆記或草稿,裡面甚至夾雜著「今天後端主機壞了」這種閒聊的無關內容。
- 如果用方式 B (Entities):系統會先看到「後端開發」連接著 API Design、Database、Node.js。接著,它會去這些精準的技能節點下,幫你把相關的教材片段(Chunks)抓出來。
結論:方式 B 會先建立「地圖(Entities)」,再根據地圖去找「景點(Chunks)」。這比在荒郊野外亂撞(方式 A)要精準得多。
三、顛覆傳統 RAG 的「三明治結構」
傳統的 RAG(方式 A)只有兩層:問題 ↔ 文章片段。
而方式 B 的核心是在中間加了一層「專業名詞(Entity)層」,這層就像是圖書館裡的「分類索引卡」。
這就是 Entity Embedding Graph 的核心運作方式——我們稱之為「三明治結構」:
第一步:提煉出「索引卡」(Entity Layer)
這不是切割文章,而是從文章中「點名」。把 10 萬字的廢話,提煉成 200 個核心硬實力點位。
- 作法: 給 LLM 一段文章,並下達指令:「請列出這段文字中提到的所有『硬技能(Hard Skills)』、『工具(Tools)』或『架構(Architectures)』。」
- 或者使用混合式過濾(Hybrid Filtering):準備一份你認可的技能清單(Skill Dictionary),用 Regex 在文章中掃描。極度穩定,不會出現莫名其妙的幻覺實體。
- 結果: 你會得到一張純粹的名單,例如:
["React", "Next.js", "Tailwind", "Vercel"]。
第二步:讓索引卡「自動連線」(Embedding Graph Layer)
這是方式 B 最神奇的地方。這 200 個詞,我們不需要手動一條一條畫線,而是全部交給 Embedding 模型處理。
- 原理: 為什麼 Docker 座標會靠近 Kubernetes?因為 Embedding 模型在訓練時讀過全網路的資料(比如數兆個網頁),它早已內化「Docker is used in Kubernetes environments」的知識。
- 效果: 當你把
Next.js和Vercel轉換成向量(數字座標)後,你會發現它們的座標靠得非常近;而React的座標也在附近。 - 只要座標距離夠近(超過 Similarity Threshold),程式就能自動在它們之間畫一條線。這就是**「知識的骨架」自動形成**的過程。
第三步:查詢時的「導航」邏輯(Chunk Layer)
當你問系統問題時,它不再直接去翻書(全庫檢索對比),而是先看索引圖:
- 鎖定起點: 你問「前端部署」,系統先在索引卡中找到
Vercel。 - 擴展搜索(Graph Traversal): 系統看圖譜發現
Vercel原來連接著Next.js和Cloudflare。 - 精準撈取: 系統同時去底層的內容層(Chunk Layer),把掛載在這三個關鍵字下的所有筆記片段一口氣撈出來。
生活化比喻:
- 方式 A (Chunk kNN):像在一個沒有目錄的超大圖書館問「我要找關於煮咖啡的」,結果撈出了一堆「咖啡店網美裝潢筆記」,因為裡面都有「咖啡」兩個字。
- 方式 B (Entity Graph):系統先提煉出索引卡(咖啡豆、磨豆機、萃取壓力)。當你問「煮咖啡」,系統自動知道「磨豆機」與「咖啡豆」高度相關,直接帶你到這幾個專屬的櫃子拿資料。
四、實作 Entity Embedding Graph 的優質資源整理
目前講述「純粹」Entity Graph RAG 的中文資源較少,但 2025 年開始相關的方法已經在國外越來越普及。如果你想親手實作「提煉 Entity → Embedding 自動連線 → Graph Traversal」的完整流程,強烈推薦以下資源:
🎬 推薦影片(實作導向)
- GraphRAG Pipeline Tutorial (2025, 20 分):展示從文本抽取實體(extract entity)到建立詞彙圖譜(lexical graph),並透過 NetworkX 搭配向量相似度連接邊,非常貼合上述的「三明治結構」。
- Neo4j Live: Entity Architecture for RAG (2025, 48 分):介紹三層架構(chunks → entity layer → output),並使用 Cypher similarity threshold 連接實體。展示「固定 entity 勝於動態 LLM extract」的最佳實踐。(直接是本文核心概念的翻版)
- Hybrid Multi-Vector KG RAG (2025, 長教程):Entity/關係多向量編碼(embed)並存入 Neo4j,示範相似度計算與 11 種 traversal 演算法,GitHub 附有完整範例代碼。
- Graph-Embedding Empowered Entity Retrieval (ECIR 2020):Entity → embedding → similarity re-rank + graph traversal。論文程式碼有附帶 NetworkX 的實作。
📚 教學文章與完整代碼
- Memgraph: Unstructured Text to Entity Graphs:示範透過 LLM 提取實體,存入 Memgraph,並透過 Embedding 相似度進行查詢,5 分鐘內即可跑完的完整 demo。
- Vector Similarity in Graph DBs (Medium):結合 NetworkX + OpenAI Embedding,利用餘弦相似度(Cosine Similarity)自動建立邊(edges),附有實戰代碼片段。
- HogoNext: Build KG with Embeddings:LLM 提取實體 → Fuzzy Match 與 Embedding 相似度 → 生成 NetworkX 圖結構,也是教科書級的「三明治」實作步驟。
- GraphRAG: Graph-Enhanced Vector Search:將實體描述轉為向量,進行向量搜尋與擴展的官方參考資料。
- entity2vec (GitHub):利用 node2vec 針對 knowledge graph 實體做屬性編碼的 Python 函式庫,非常適合跑小型圖譜。
🌏 中文及理論資源
- 圖嵌入(Graph Embedding)入門詳解 (CSDN):帶你理解 DeepWalk 與 Skip-Gram 如何讓 Embedding 擁有自動連線的能力。
- 中文圈尋找這類資料時,可多留心 GraphRAG 中文教學裡提到的「LLM 實體萃取」及「Vector Embeddings 混合查詢」相關段落。
如果你的節點也是具有固定定義的專業知識(如前面提到的 Skill Graph 200 個核心技能),採用 方式 B (Entity Graph) 絕對是目前防堵 AI 產生幻覺雜訊、並建立自動邏輯聯想(Graph Traversal)的最強武器!