你有没有遇到过这种情况:
问一个专业问题,比如“亚当·斯密在《国富论》中是怎么定义分工的?”,普通的RAG系统却给你检索出一堆提到“Smith”的无关内容——可能是经济学家,也可能是完全同名的其他人,甚至是某个公司的名字。
这不是模型不聪明,而是它只懂“文字长得像”,不懂“这个词到底指谁”。
这就是为什么在大学课程、医学教材、法律条文这些专业场景里,单纯靠语义相似度(semantic similarity)做检索经常翻车。
我们最近发表的一篇论文(arXiv 2512.05967)专门解决这个问题:给RAG系统加一个“实体链接”大脑,让它先搞清楚“你说的到底是哪个Smith”,再去检索。这样一来,答案的准确率和可信度直接起飞。
下面我用最通俗的方式,把整篇论文的精华讲透,顺便告诉你这个方法为什么在教育场景里特别好用。
什么是ELERAG?一句话版本
ELERAG = 传统RAG + Wikidata实体链接 + 聪明地融合两种信号
我们把它叫做Entity Linking Enhanced RAG(实体链接增强的检索生成系统),专门为意大利语大学课程设计,但思路完全可以复制到任何语言、任何专业领域。
核心思想就一句话:
别只比文字相似度,先把人名、概念、专有名词全部对齐到知识图谱的唯一ID,再比。
为什么普通RAG在专业场景会“翻车”?
先来看一个真实例子(来自我们自己的课程数据):
学生问:“斯密是怎么论述分工的?”
普通RAG会把查询编码成向量,去找最相似的文本块。结果呢?
它可能找到:
- 🍄
亚当·斯密《国富论》里的原文(正确) - 🍄
某个现代经济学家姓Smith的论文(错) - 🍄
一个叫Smith的公司案例(更错)
因为“Smith”这个词在嵌入空间里长得太像了,模型分不清。
我们统计了一下,在大学课程材料里,这种同名、同义、跨章节指代不清的情况比比皆是。光靠语义相似度,顶不住。
ELERAG是怎么解决的?整个流程图解
graph TD
A[用户提问] --> B(同时走两条路)
B --> C[语义检索路:multilingual-e5-large → FAISS 取Top-30]
B --> D[实体链接路:用spaCy抽出实体 → Wikidata查ID → 计算实体重合度]
C --> E[两条排名各自打分]
D --> E
E --> F[用RRF(互助倒排融合)把两条排名合并]
F --> G[把Top-3~5个最靠谱的段落塞给GPT-4o]
G --> H[生成带引用来源的最终答案]
最关键的不是加了实体链接,而是怎么把实体信号和语义信号聪明地融合起来。
我们一共试了三种融合方式,最后发现最牛的那种竟然也是最简单的——RRF(Reciprocal Rank Fusion,互助倒排融合)。
三种融合方式横评(真实数据)
| 方法 | 思路 | 在大学课程数据表现 | 计算成本 |
|---|---|---|---|
| Weighted-Score(加权求和) | 语义分 + β×实体分(β=0.5) | 还可以,但容易调参翻车 | 低 |
| RRF(我们最终用的) | 不调权重,直接把两个排名互助倒排融合 | 最准!EM提升8%+ | 极低 |
| RRF + Cross-Encoder(SOTA) | 先RRF,再让交叉编码器重新打分 | 居然不如RRF! | 高 5-10倍 |
最意外的是:在我们自己的大学课程数据上,RRF居然把最贵的Cross-Encoder干翻了。
真实数据对比:大学课程 vs 通用维基(SQuAD-it)
| 数据集 | 最佳方案 | Exact Match(把正文排到第一位) | MRR | 谁赢了? |
|---|---|---|---|---|
| 意大利大学课程 | ELERAG(RRF) | 56.5% | 0.779 | 我们赢了 |
| SQuAD-it(维基) | Cross-Encoder | 77.7% | 0.836 | Cross赢了 |
这说明什么?这说明没有万能的检索方法,只有最匹配的检索方法。
Cross-Encoder在维基上无敌,是因为它在海量英文网页上预训练过,天然懂维基的语言风格。
但一到大学课堂实录(口语化、长句、跨章节指代),它就抓瞎了。而我们的实体链接方法不依赖预训练数据分布,只要Wikidata里有这个实体,就稳。
这就是我们提出的“Domain Mismatch”(领域失配)现象:
再强的通用模型,遇到专业小众语料也会水土不服。
实体链接模块具体怎么实现的?(可直接抄作业)
-
识别实体
用spaCy意大利语大模型(it_core_news_lg)抽出所有命名实体。 -
查Wikidata
对每个实体,用Wikidata公开API搜索候选列表。 -
选对那个实体(消歧)
打分公式(我们自己调的):HybridScore = 0.9 × 语义相似度(e5-large算mention和label+description) + 0.1 × 流行度(1/(rank+1))选分数最高的那个Wikidata ID。
-
预处理所有文档
把课程所有文本块提前做好实体链接,存成JSON,后面实时只查查询的实体就行。
整个过程零训练,纯规则+轻量嵌入,成本极低。
实际效果有多大提升?(重点数据)
在真实大学课程69道题上:
| 指标 | 普通RAG | ELERAG(RRF) | 提升幅度 |
|---|---|---|---|
| Exact Match(金段落排第一) | 52.2% | 56.5% | +8.2% |
| Precision@1 | 65.2% | 69.6% | +6.8% |
| MRR(金段落平均排名倒数) | 0.652 | 0.779 | +19.5% |
| GPT-4o打分(10分制)完整性 | 5.99 | 6.10 | +1.8% |
| GPT-4o打分(10分制)相关性 | 5.45 | 5.57 | +2.2% |
别小看这几个点,在教育场景里,能把最正确的原文排到第一位,学生体验是质的飞跃。
FAQ:最常被问到的问题
Q1:这个方法只能用意大利语吗?
完全不是。我们用的是Wikidata(全球最大的多语言知识图谱),中文、英文、日文全都有实体ID。只要换对应的NER模型(比如中文用bert-base-chinese + 中文知识库),思路100%可迁移。
Q2:实体链接会不会很慢?
我们实测:在2核CPU小服务器上,整个查询到出答案全流程平均1.8秒,比普通RAG只多了0.4秒左右。因为实体链接只在查询端实时做一次,文档端是提前预处理的。
Q3:如果Wikidata里没有这个实体怎么办?
那就退化成普通RAG。实际上大学课程90%以上的专有名词(人名、书名、概念名)Wikidata全有,缺失的往往是老师自己发明的缩写词,这种反而不需要消歧。
Q4:能不能把Cross-Encoder也加上去?
可以,但收益很低。我们试过先RRF再Cross-Encoder,反而把准确率拉下去了。因为Cross-Encoder太“自信”,会把一些实体正确的但文字风格稍远的段落给干掉。
Q5:代码开源了吗?
开源了!GitHub地址:https://github.com/Granataaa/educational-rag-el
可以直接跑我们提供的demo,换自己的课程数据就行。
总结:什么时候应该上实体链接?
如果你正在做以下任何一种系统,强烈建议加上实体链接:
- 🍄
企业内部知识库问答(人名、产品名、项目名极易重名) - 🍄
在线教育平台(课件、教材、老师讲义) - 🍄
法律、医学、金融等高精度领域 - 🍄
多语言、非英语为主的项目
一句话结论:
在通用场景,Cross-Encoder是王者;在专业小众场景,实体链接+RRF才是真正的降维打击。
我们用真实大学课程证明了这一点,也把完整代码和思路都开源了。
如果你也在被RAG的“选择困难症”折磨,欢迎试试ELERAG——它可能就是你家知识库的“实体大脑”。
喜欢这篇文章的话,欢迎分享给你做教育AI、企培系统、知识管理系统的朋友。
我们下一篇文章会讲:如何在中文大学课程上复现这个系统(已经跑通了,效果更夸张,敬请期待)。
(全文完)
参考论文:https://arxiv.org/abs/2512.05967
代码仓库:https://github.com/Granataaa/educational-rag-el
