关系抽取与知识图谱


文档摘要

关系抽取与知识图谱 本节摘要:NER 找到了实体,实体链接把它们锚定,关系抽取找出它们之间的边——一个知识图谱就是节点、边及其出处的总和。分析师读「蒂姆·库克 2011 年成为苹果 CEO」,这里有四条事实。关系抽取把自由文本变成结构化三元组 ,跨语料聚合就成了知识图谱,再加上查询就成了 RAG、分析、合规审计的推理基底。2026 的问题是:LLM 抽关系抽得太起劲,会幻觉出源文本不支撑的三元组,没有出处就分不清真假,答案是 AEVS 式的「锚定-抽取-验证-补全」流水线。

关系抽取与知识图谱

本节摘要:NER 找到了实体,实体链接把它们锚定,关系抽取找出它们之间的边——一个知识图谱就是节点、边及其出处的总和。分析师读「蒂姆·库克 2011 年成为苹果 CEO」,这里有四条事实。关系抽取把自由文本变成结构化三元组 (主语, 关系, 宾语),跨语料聚合就成了知识图谱,再加上查询就成了 RAG、分析、合规审计的推理基底。2026 的问题是:LLM 抽关系抽得太起劲,会幻觉出源文本不支撑的三元组,没有出处就分不清真假,答案是 AEVS 式的「锚定-抽取-验证-补全」流水线。本节讲透三种抽取法(规则/Hearst 模式、监督分类器、生成式 LLM)、闭环本体的取舍,以及 REBEL 这类 seq2seq 抽取器如何文本进、三元组出;然后用 AEVS 把每条三元组按字符 span 锚回原文、拒掉一切无支撑的,再做规范化和时间限定,最终搭出可查询的小图,并指出共指前置、实体规范化、时间错误等生产陷阱。

对应原课程:Phase 5 · Lesson 26 · relation-extraction-kg(原英文 phases/05-nlp-foundations-to-advanced/26-relation-extraction-kg/docs/en.md)。前置依赖:第 06 节(NER)、第 25 节(实体链接)。

学习目标

阅读完本节,你应当能够:

  1. 把自由文本抽成三元组 (主语, 关系, 宾语),并区分闭环本体与开放 IE。
  2. 讲清三种抽取法:规则/Hearst 模式、监督分类器(REBEL)、生成式 LLM
  3. 解释 AEVS(锚定-抽取-验证-补全)如何用 span 出处压低 LLM 幻觉。
  4. 实体规范化、关系规范化、时间限定,并识别共指前置、KB 陈旧等陷阱。

一、问题与直觉

分析师读:「Tim Cook became CEO of Apple in 2011.」四条事实:

  • (Tim Cook, role, CEO)
  • (Tim Cook, employer, Apple)
  • (Tim Cook, start_date, 2011)
  • (Apple, type, Organization)

关系抽取(RE) 把自由文本变成结构化三元组 (主语, 关系, 宾语)。跨语料聚合,你就有一个知识图谱;聚合加查询,你就有 RAG、分析、合规审计的推理基底。

2026 的问题:LLM 抽关系抽得太起劲,会幻觉出源文本不支撑的三元组。没有出处,你分不清真实三元组与貌似合理的虚构。2026 的答案是 AEVS 式「锚定-验证」流水线。

三元组形式:(主语实体, 关系类型, 宾语实体)。关系来自闭环本体(Wikidata 属性、FIBO、UMLS)或开放集合(OpenIE 式,什么都可以)。

三种抽取法:

  1. 规则 / 模式式:Hearst 模式:「X such as Y」→ (Y, isA, X)。加手写正则。脆、精确、可解释。
  2. 监督分类器:给定句中两个实体提及,从固定集预测关系。在 TACRED、ACE、KBP 上训。2015~2022 的标准。
  3. 生成式 LLM:提示模型吐三元组。开箱即用。需要出处,否则幻觉出貌似合理的垃圾。

AEVS(锚定-抽取-验证-补全, 2026) 当前的幻觉缓解框架:

  • 锚定(Anchor):用精确位置标出每个实体 span 与关系短语 span。
  • 抽取(Extract):生成与锚定 span 相连的三元组。
  • 验证(Verify):把每条三元组的元素回配到源文本,拒掉一切无支撑的。
  • 补全(Supplement):一遍覆盖扫描,确保没有锚定 span 被漏掉。

幻觉骤降。算力更高,但可审计。

💡 开 vs 闭的取舍:闭环本体(如 Wikidata 的一万一+属性)可预测、可查询、难造;Open IE 任何动词短语都能当关系,召回高、精度低、查询乱。生产 KG 常两者混用:开放 IE 做发现,再规范化到闭环本体后并入主图。

二、从零实现

第 1 步:基于模式的抽取

PATTERNS = [ (r"(?P<s>[A-Z]\w+) (?:is|was) (?:a|an|the) (?P<o>[A-Z]?\w+)", "isA"), (r"(?P<s>[A-Z]\w+) (?:is|was) born in (?P<o>\w+)", "bornIn"), (r"(?P<s>[A-Z]\w+) works? (?:at|for) (?P<o>[A-Z]\w+)", "worksAt"), (r"(?P<s>[A-Z]\w+) founded (?P<o>[A-Z]\w+)", "founded"), ]

code/main.py 的完整玩具抽取器。Hearst 模式至今在领域专用流水线里发布,因为它可调试。

第 2 步:监督关系分类

from transformers import AutoTokenizer, AutoModelForSequenceClassification tok = AutoTokenizer.from_pretrained("Babelscape/rebel-large") model = AutoModelForSequenceClassification.from_pretrained("Babelscape/rebel-large") text = "Tim Cook was born in Alabama. He later became CEO of Apple." encoded = tok(text, return_tensors="pt", truncation=True) output = model.generate(**encoded, max_length=200) triples = tok.batch_decode(output, skip_special_tokens=False)

REBEL 是 seq2seq 关系抽取器:文本进、三元组出,已是 Wikidata 属性 id。在远程监督数据上微调。标准开源权重基线。

第 3 步:带锚定的 LLM 提示式抽取

prompt = f"""Extract (subject, relation, object) triples from the text. For each triple, include the exact character span in the source text. Text: {text} Output JSON: [{{"subject": {{"text": "...", "span": [start, end]}}, "relation": "...", "object": {{"text": "...", "span": [start, end]}}}}, ...] Only include triples fully supported by the text. No inference beyond what is stated. """

把每个返回 span 对回源文本验证。text[start:end] != triple_entity 就拒。这是 AEVS「验证」步的最简形式。

第 4 步:规范化到闭环本体

RELATION_MAP = { "is the CEO of": "P169", # "chief executive officer" "was born in": "P19", # "place of birth" "founded": "P112", # "founded by"(主宾倒置) "works at": "P108", # "employer" } def canonicalize(relation): rel_low = relation.lower().strip() if rel_low in RELATION_MAP: return RELATION_MAP[rel_low] return None # 丢掉未映射的开放关系,或转人工复核

规范化常常占工程量的 60~80%。要为之留预算。

第 5 步:搭小图并查询

triples = extract(text) graph = {} for s, r, o in triples: graph.setdefault(s, []).append((r, o)) def neighbors(node, relation=None): return [(r, o) for r, o in graph.get(node, []) if relation is None or r == relation] print(neighbors("Tim Cook", relation="P108")) # -> [(P108, Apple)]

这是每个「KG 上的 RAG」系统的原子。用 RDF 三元组库(Blazegraph、Virtuoso)、属性图(Neo4j)或向量增强图库来扩展。

三、框架对比

陷阱

  • RE 前要先共指:「他创立了苹果」——RE 得知道「他」是谁。先跑共指(第 24 节)。
  • 实体规范化:「Apple Inc」与「Apple」必须解析到同一节点。先做实体链接(第 25 节)。
  • 幻觉三元组:LLM 吐文本不支撑的三元组。强制 span 验证。
  • 关系规范化漂移:开放 IE 关系不一致(「was born in」「came from」「is a native of」)。坍缩到规范 id,否则图不可查询。
  • 时间错误:「蒂姆·库克是苹果 CEO」现在真、2005 假。许多关系是有时间边界的,用限定符(Wikidata 的 P580 起始、P582 结束)。
  • 领域错配:REBEL 在维基上训。法律、医疗、科学文本常需领域微调的 RE 模型。

2026 的栈:

情形
快速生产,通用领域 REBEL 或 LlamaPred,配 Wikidata 规范化
领域专用(生医、法律) SciREX 式领域微调 + 自定义本体
LLM 提示式,需审计输出 AEVS 流水线:锚定→抽取→验证→补全
高量新闻 IE 模式 + 监督混合
从零建 KG 开放 IE + 人工规范化遍
时间 KG 带限定符抽取(起止时间、时点)

💡 集成模式:NER → 共指 → 实体链接 → 关系抽取 → 本体映射 → 图载入。每一段都是潜在质量门。

四、可复用产物

保存为 outputs/skill-re-designer.md:

--- name: re-designer description: Design a relation extraction pipeline with provenance and canonicalization. version: 1.0.0 phase: 5 lesson: 26 tags: [nlp, relation-extraction, knowledge-graph] --- Given a corpus (domain, language, volume) and downstream use (KG-RAG, analytics, compliance), output: 1. Extractor. Pattern-based / supervised / LLM / AEVS hybrid. Reason tied to precision vs recall target. 2. Ontology. Closed property list (Wikidata / domain) or open IE with canonicalization pass. 3. Provenance. Every triple carries source char-span + doc id. Non-negotiable for audit. 4. Merge strategy. Canonical entity id + relation id + temporal qualifiers; dedup policy. 5. Evaluation. Precision / recall on 200 hand-labelled triples + hallucination-rate on LLM-extracted sample. Refuse any LLM-based RE pipeline without span verification (source provenance). Refuse open-IE output flowing into a production graph without canonicalization. Flag pipelines with no temporal qualifier on time-bounded relations (employer, spouse, position).

五、练习

  1. 基础:在 5 句新闻句上跑 code/main.py 的模式抽取器,手检精确率。
  2. 进阶:在同几句上用 REBEL(或小 LLM),对比三元组。哪个抽取器精确更高?召回更高?
  3. 挑战:搭 AEVS 流水线:LLM 抽取 + span 对源验证,在 50 句维基式句上测验证步前后的幻觉率。

本节要点回顾

  1. RE 把自由文本变三元组:跨语料聚合即知识图谱,加查询即推理基底。
  2. 三元组 (s, r, o):关系来自闭环本体(Wikidata/UMLS/FIBO)或开放 IE。
  3. 三种抽取法:Hearst 模式(精确可解释)、监督分类器 REBEL(2015~22 标准)、生成式 LLM(开箱即用但易幻觉)。
  4. REBEL 是 seq2seq:文本进、三元组出,已是 Wikidata 属性 id,远程监督微调。
  5. AEVS 是 2026 幻觉缓解框架:锚定→抽取→验证→补全,span 出处让它可审计。
  6. 闭环本体可预测难造,开放 IE 召回高精度低:生产常两者混用,先开放发现再规范化并入主图。
  7. RE 前必须共指+实体链接:「他」要解析,「Apple Inc」与「Apple」要同节点。
  8. span 验证非协商:LLM 吐的 text[start:end] 必须等于三元组实体,否则拒。
  9. 规范化占 60~80% 工程量:关系名坍缩到规范 id,否则图不可查询。
  10. 时间关系带限定符:P580 起始、P582 结束,「库克是苹果 CEO」现在真 2005 假。

下一节,我们从「抽取结构」转向「评判质量」——进入「LLM 评估框架」,看 RAGAS、DeepEval、Promptfoo、LLM-as-judge 如何系统化地度量生成系统的忠实度、相关性与有用性。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U