1. 知识图谱在RAG中的困境与突破
去年我在构建一个企业知识库问答系统时,选择了知识图谱作为RAG(检索增强生成)的底层架构。当时被知识图谱的结构化特性所吸引,认为它能完美解决传统全文检索的语义模糊问题。然而实际落地后才发现,这个选择带来了诸多意想不到的挑战。
1.1 三元组索引的语义丢失问题
知识图谱的核心是三元组(头实体-关系-尾实体)表示法。当我们将一段文本"苹果公司由史蒂夫·乔布斯于1976年4月1日创立"转化为三元组时,会得到类似(苹果公司,创始人,史蒂夫·乔布斯)和(苹果公司,成立时间,1976年4月1日)这样的结构化数据。
问题在于,这种转换过程中丢失了大量关键信息:
- 上下文语境:"苹果"在不同语境下可能指水果或公司
- 隐含语义:创始人身份背后的故事、公司创立时的历史背景
- 复杂关系:多个实体间的间接关联
实际案例:当用户询问"乔布斯创立苹果时多大年龄"时,传统知识图谱无法回答,因为"乔布斯的出生日期"这个关键信息在三元组转换时被丢弃了。
1.2 多跳推理的性能瓶颈
多跳问答(Multi-hop QA)要求系统能够串联多个事实进行推理。例如回答"苹果公司创始人最早开发的产品是什么",需要:
- 找到苹果公司创始人
- 查询该创始人的早期产品
- 按时间排序确定最早的产品
传统知识图谱在这种场景下表现不佳,原因有三:
- 图遍历成本高:需要多次跳转查询
- 路径依赖严重:缺失任意中间节点都会导致推理失败
- 语义理解局限:无法处理"最早"这样的相对概念
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. MDER-DR框架设计解析
经过半年的试错,我们团队最终采用了MDER-DR双阶段框架。这个方案的核心思想是:在索引阶段保留足够语义,在检索阶段简化图遍历。
2.1 MDER:上下文感知的索引策略
MDER(Mapping-Disambiguation-Enrichment-Reduction)包含四个关键步骤:
2.1.1 映射与消歧
- 实体识别:使用BERT-CRF模型识别文本中的实体
- 关系抽取:采用SpanBERT获取实体间关系
- 指代消解:基于Coreference Resolution解决代词指代问题
python复制
