大多數人把資料庫想成一張張表格,於是用 JOIN 拼湊出「關係」。 知識圖譜的答案是:關係本身就是一等公民,直接存進邊(edge)裡。 大多數人以為知識圖譜只是「漂亮的關係圖」。 正確答案是:它是一套能被機器推理(inference)的語意知識庫。
這個系列會帶你走到哪裡
這是「Knowledge Graph 知識圖譜」五篇系列的第一篇。整個系列的目標是:讓你不只「聽過」知識圖譜,而是能親手建一個、查詢它、並把它接到 LLM 上做問答。
- Part 1(本篇):核心概念 — 實體、關係、三元組、本體、RDF/OWL/SPARQL
- Part 2:從零建構知識圖譜 — NER、關係抽取、用 Neo4j 與 Cypher 落地
- Part 3:與相似技術比較 — 關聯式資料庫 / 向量資料庫 / 文件資料庫
- Part 4:知識圖譜 + LLM — GraphRAG、多跳推理、降低幻覺
- Part 5:實戰專案 — 用 LLM 自動把文件抽成知識圖譜並做問答
一、核心問題:為什麼需要知識圖譜?
先看一個具體問題。假設你在做一個電影問答系統,使用者問:
「諾蘭導演的電影裡,有哪些演員也演過漫威電影?」
用傳統關聯式資料庫,你得寫一串多重 JOIN:先找出諾蘭的電影、再找這些電影的演員、再去比對哪些演員出現在漫威電影的演員表裡。當問題變成「三跳」「四跳」關係時,SQL 會越寫越痛苦,效能也急遽下降。
知識圖譜的世界觀不同:它把「諾蘭 — 執導 → 全面啟動」「李奧納多 — 演出 → 全面啟動」這種事實直接存成節點與邊。要回答上面的問題,只是在圖上「走路」(graph traversal)—— 從諾蘭出發,沿著邊一步步走到答案。
┌──────────┐ 執導 ┌────────────┐ 演出 ┌──────────────┐
│ 諾蘭 │ ────────▶ │ 全面啟動 │ ◀──────── │ 李奧納多 │
└──────────┘ └────────────┘ └──────┬───────┘
│ 演出
▼
┌──────────────┐
│ 神鬼獵人 │
└──────────────┘
一句話定義:知識圖譜(Knowledge Graph)是一種用「圖結構」來表示與操作知識的知識庫 —— 用**節點(node)表示實體(entity),用邊(edge)表示實體之間的關係(relationship),並透過本體(ontology)**賦予這些關係可被機器推理的語意。
二、最小單位:三元組(Triple)
知識圖譜的原子單位是三元組,格式是「主語 — 謂語 — 賓語」(Subject — Predicate — Object):
( 主語 Subject )──[ 謂語 Predicate ]──▶( 賓語 Object )
範例:
( 諾蘭 ) ──[ 執導 ]──▶ ( 全面啟動 )
( 全面啟動 ) ──[ 上映於 ]──▶ ( 2010 )
( 李奧納多 ) ──[ 出生於 ]──▶ ( 洛杉磯 )
每一個三元組就是一個「事實」。把成千上萬個三元組疊在一起,重疊的節點自然連成一張網 —— 這張網就是知識圖譜。
這個設計有三個關鍵特性,正是它和傳統資料庫最大的差異:
| 特性 | 說明 |
|---|---|
| 彈性 Schema | 想新增一種關係(例如「配樂由」)不需要改表結構、不需要 migration,直接加三元組即可 |
| 雙向推理 | 邊本身帶方向與語意,可正向(諾蘭執導什麼)也可反向(全面啟動由誰執導)查詢 |
| 語意保留 | 關係不是匿名的 foreign key,而是有明確意義的「執導」「演出」,機器能理解 |
三、兩大流派:RDF 三元組 vs 屬性圖(Property Graph)
知識圖譜在工程上有兩種主流的資料模型,初學者最容易混淆,這裡一次講清楚。
3.1 RDF(Resource Description Framework)
RDF 來自 W3C 的語意網路(Semantic Web)標準。每個東西都用 URI 唯一標識,知識就是一堆三元組的集合。它強調「全球唯一識別」與「跨資料源互通」。
語意網路標準家族
┌───────────────────────────────────────────────────────┐
│ RDF 用三元組描述資料的基本模型 │
│ RDFS 定義 class 階層與 property 框架 │
│ OWL 定義更豐富的本體:等價、傳遞、互逆等邏輯規則 │
│ SPARQL 查詢 RDF 資料的標準語言(類似 SQL 之於關聯式) │
└───────────────────────────────────────────────────────┘
RDF 三元組長這樣(Turtle 語法):
1@prefix ex: <http://example.org/> .
2
3ex:Nolan ex:directed ex:Inception .
4ex:Inception ex:releasedIn "2010"^^xsd:gdYear .
5ex:DiCaprio ex:actedIn ex:Inception .
6ex:DiCaprio ex:bornIn ex:LosAngeles .
3.2 屬性圖(Property Graph)
屬性圖是 Neo4j 等圖資料庫採用的模型。節點和邊都可以掛屬性(key-value),更貼近程式設計師的直覺,也更適合 OLTP 即時查詢。
┌─────────────────────┐ directed ┌──────────────────────┐
│ (:Person) │ ───────[since: 2008]─────▶ │ (:Movie) │
│ name: "Nolan" │ │ title: "Inception" │
│ born: 1970 │ │ year: 2010 │
└─────────────────────┘ └──────────────────────┘
注意差異:在屬性圖裡,year: 2010 是節點的屬性;在 RDF 裡,它會是另一個三元組。
3.3 該選哪一個?
| 面向 | RDF / SPARQL | 屬性圖 / Cypher |
|---|---|---|
| 標準化 | W3C 標準,跨組織資料交換強 | 各家方言(Cypher、Gremlin) |
| 推理能力 | OWL 內建強大邏輯推理 | 需自行實作或外掛 |
| 開發體驗 | 學習曲線陡、較學術 | 直覺、貼近程式設計 |
| 典型場景 | 開放資料、政府、生醫本體 | 推薦、風控、社群、即時查詢 |
| 代表工具 | Stardog、Apache Jena、GraphDB | Neo4j、Amazon Neptune、TigerGraph |
選擇心法:如果你的核心需求是「跨機構共享、嚴謹推理、符合語意網路標準」→ RDF;如果是「快速開發、即時查詢、應用導向」→ 屬性圖。本系列的實作部分(Part 2、Part 5)會以 Neo4j 屬性圖為主,因為它對工程師最友善。
四、本體(Ontology):讓圖能「推理」的關鍵
很多人以為知識圖譜 = 一堆節點和邊。其實真正讓它區別於「畫個關係圖」的,是本體——也就是 schema 層,它定義了:
- 類別(Class):有哪些類型的實體?(Person、Movie、Company)
- 屬性與關係(Property):實體之間能有哪些關係?關係的定義域與值域是什麼?
- 規則(Axiom):例如「執導」的主語一定是 Person、「子公司」關係具有傳遞性
有了本體,機器就能做推理(inference),推導出沒有被明確寫下來的事實:
已知事實:
( A 公司 )──[ 子公司 ]──▶( B 公司 )──[ 子公司 ]──▶( C 公司 )
本體規則:
「子公司」具有傳遞性(transitive)
推理出的隱含事實(沒人寫過,但機器自動得出):
( A 公司 )──[ 子公司 ]──▶( C 公司 )
這就是知識圖譜「比資料庫聰明」的地方:它不只儲存你寫進去的,還能推導出邏輯上必然成立的新知識。OWL 提供了一整套這類規則:owl:TransitiveProperty(傳遞)、owl:inverseOf(互逆,如「執導」與「被執導」)、owl:sameAs(等價,用於實體對齊)等。
五、用 SPARQL 查詢:回到開頭的問題
回到一開始那個問題:「諾蘭的電影裡,有哪些演員也演過漫威電影?」用 SPARQL 表達,幾乎就是把問題逐字翻譯:
1PREFIX ex: <http://example.org/>
2
3SELECT DISTINCT ?actor WHERE {
4 ex:Nolan ex:directed ?nolanMovie . # 諾蘭執導的電影
5 ?actor ex:actedIn ?nolanMovie . # 在這些電影演出的演員
6 ?actor ex:actedIn ?marvelMovie . # 這些演員也演出的電影
7 ?marvelMovie ex:partOf ex:MarvelUniverse . # 而那是漫威電影
8}
對比一下 SQL 的版本,你會立刻感受到差異:
1SELECT DISTINCT a.name
2FROM directors d
3JOIN movies m1 ON m1.director_id = d.id
4JOIN cast c1 ON c1.movie_id = m1.id
5JOIN actors a ON a.id = c1.actor_id
6JOIN cast c2 ON c2.actor_id = a.id
7JOIN movies m2 ON m2.id = c2.movie_id
8JOIN franchises f ON f.id = m2.franchise_id
9WHERE d.name = 'Nolan' AND f.name = 'Marvel';
SQL 需要七次 JOIN 來「重建」關係;SPARQL(與後面會看到的 Cypher)則是直接描述圖上的「路徑模式」。當關係跳數越多,這個差距越明顯——這正是知識圖譜的核心價值。
六、發展簡史與真實世界的知識圖譜
| 年代 | 里程碑 |
|---|---|
| 1985 | WordNet 開始記錄詞彙之間的語意關係 |
| 2000s | W3C 制定 RDF / OWL,語意網路(Semantic Web)時代 |
| 2007 | DBpedia、Freebase 出現,成為通用開放知識庫 |
| 2012 | 大型搜尋引擎推出 Knowledge Graph,讓這個詞紅遍業界 |
| 2014 | Wikidata 成為社群維護的開放知識中樞 |
| 2020s | KG + LLM 融合、GraphRAG、Graph Neural Network 興起 |
幾個你可能天天接觸卻沒意識到的知識圖譜:
- 搜尋引擎知識面板:你搜尋一位名人,右側跳出生日、作品、關係人物的卡片,背後就是 5 億以上實體的知識圖譜。
- Wikidata / DBpedia:社群維護的開放知識庫,本系列後面會直接拿來查詢練習。
- 電商商品圖譜:把商品、屬性、分類、評論連成網,用來做「買了這個的人也買了」。
- 金融知識圖譜:把公司、股東、交易、新聞連起來,做 KYC 合規與洗錢偵測(AML)。
- 資安 MITRE ATT&CK:把攻擊者的戰術、技術、流程系統化成圖。
七、知識圖譜的典型應用領域
┌────────────────────────────────────────────────────────────────┐
│ 知識圖譜應用全景 │
├──────────────┬───────────────────────────────────────────────────┤
│ 搜尋與問答 │ 知識面板、語意搜尋、智慧助理(Siri/Alexa) │
│ 推薦系統 │ 商品/內容圖譜、跨品類推薦、冷啟動緩解 │
│ 金融風控 │ KYC、AML、關聯交易偵測、企業關係穿透 │
│ 生醫醫療 │ 疾病-症狀-藥物關係、輔助診斷、藥物交互作用 │
│ 供應鏈 │ 溯源、斷鏈風險分析、零件依賴追蹤 │
│ 資安 │ 攻擊鏈建模、威脅情報關聯(MITRE ATT&CK) │
│ 企業知識管理 │ 打通各部門資料孤島、員工-專案-技能圖譜 │
│ LLM 增強 │ GraphRAG、多跳推理、降低幻覺(Part 4 詳述) │
└──────────────┴───────────────────────────────────────────────────┘
八、面試/實務常被問到的觀念釐清
Q:知識圖譜和圖資料庫(Graph Database)是同一回事嗎?
不是。圖資料庫是儲存技術(Neo4j、Neptune);知識圖譜是知識的組織方式,強調語意與本體。你可以用圖資料庫實作知識圖譜,但也可以用 RDF triplestore,甚至在關聯式資料庫上做「虛擬知識圖譜」。圖資料庫是手段,知識圖譜是目的。
Q:知識圖譜和向量資料庫(Vector DB)誰會取代誰?
兩者互補,不是取代關係。向量資料庫擅長「語意相似」的模糊檢索(找出意思相近的段落);知識圖譜擅長「精確關係」的結構化推理(A 跟 B 是什麼關係)。Part 3 會深入比較,Part 4 會展示兩者如何在 LLM 系統中協作。
Q:本體(Ontology)和 Schema 有什麼不同?
關聯式 schema 主要約束「資料的格式」(欄位型別、外鍵);本體不只約束格式,還編碼「邏輯規則」(傳遞性、互逆、等價),讓系統能推理出新事實。本體 ⊃ schema。
九、本篇小結與下一步
這篇我們建立了知識圖譜的核心心智模型:
- 三元組(主-謂-賓)是原子單位,疊起來就成了知識網。
- 兩大流派:RDF(語意網路標準、強推理)與屬性圖(工程友善、即時查詢)。
- 本體是讓圖能「推理」的 schema 層,這是它區別於普通關係圖的關鍵。
- SPARQL / Cypher 讓多跳關係查詢變得直觀,這是相對 SQL 多重 JOIN 的核心優勢。
下一篇(Part 2),我們會捲起袖子,從一段純文字開始,經過 NER(命名實體辨識)→ 關係抽取 → 寫入 Neo4j,親手建出第一個可查詢的知識圖譜,並用 Cypher 把本篇開頭的電影問題跑起來。
系列導航
→ Part 2:從零建構知識圖譜(NER、關係抽取、Neo4j)
本文為「Knowledge Graph 知識圖譜」系列第 1 篇,共 5 篇。系列從核心概念出發,一路帶到用 LLM 自動建構知識圖譜並做問答的完整實作。
