🤖 为什么要做「实体识别」?
实体识别(Named Entity Recognition, NER) 是自然语言处理(NLP)中的一种基础技术,它的目标是:
从文本中识别出“有意义”的实体信息,如人名、地名、组织、时间等。
🧠 举个例子你就懂了:
假设你有一个句子:
"Elon Musk announced a new Tesla factory in Shanghai on Monday."
经过实体识别,你可以提取出:
Elon Musk
→ 人名Tesla
→ 组织名Shanghai
→ 地名Monday
→ 时间
所以,最终抽取的结果是:
{"fact": "Elon Musk announced a new Tesla factory in Shanghai on Monday.","keywords": ["Elon Musk", "Tesla", "Shanghai", "Monday"]
}
💡 实体识别能帮助你做什么?
1️⃣ 构建关键词摘要、生成标签
抽取实体后,你就可以:
-
把文章“打标签”,例如:
这篇文章提到 Elon Musk、Tesla、上海 → 属于科技+商业+人物新闻。
-
便于后续做文章检索、分类、可视化。
2️⃣ 构建知识图谱(Knowledge Graph)
举个简单的图谱结构:
"Elon Musk" —(founded)—> "Tesla"
"Tesla" —(hasFactory)—> "Shanghai"
这就是从事实中提取三元组:
(Elon Musk, founded, Tesla)
(Tesla, hasFactory, Shanghai)
这类图谱可以用于:
- 构建新闻事件链
- 做自动问答系统
- 发现信息关系,比如“谁和谁有关联”
3️⃣ 为下游任务做准备
实体识别是很多 NLP 任务的第一步,比如:
- 文本摘要:先知道有哪些重点词,再生成摘要。
- 情感分析:知道“谁说了什么”再分析情绪。
- 事件抽取:识别实体后再识别动作/行为。
- 信息检索(IR):把关键词入库,方便查找新闻。
- RAG(检索增强生成)系统:实体可作为检索入口。
✅ 总结一句话:
实体识别是把“乱糟糟的句子”里提取出“谁”、“什么地方”、“什么时间”这类有意义的信息,
它是你后续做分类、搜索、图谱、摘要、推荐的基础步骤。
🎯 RAG 和实体识别怎么结合用?
先放一个结论:
实体识别是 RAG 的“前置增强模组”之一,能显著提升检索的相关性和回答的精准度。
说人话:你用实体识别提取“关键词核心”,再用它们去检索文档,再送进大模型生成答案。这叫 知识检索增强生成,你也可以理解成:
不让大模型在一堆无用信息里摸鱼,而是带着“关键词导航”去找重点。
📦 经典 RAG 流程(不带实体识别)长这样:
-
用户输入提问:
"马斯克在哪成立了第一家特斯拉超级工厂?"
-
用整个问题去做 embedding:
emb("马斯克在哪成立了第一家特斯拉超级工厂?")
-
拿这个 embedding 去向量库查相似内容 → 可能命中一些新闻段落
-
拼成上下文,交给大模型生成答案
🧨 问题:这种方式容易受到“语序、歧义、啰嗦句”的干扰。比如“马斯克在哪里开始建工厂”可能就查不到“成立超级工厂”的资料。
💡 加入实体识别后,流程升级:
📌 步骤 1:NER 实体识别 + 消歧义
从问题中抽取实体:
"马斯克"(人名)
"特斯拉"(组织)
"超级工厂"(产品/设施)
可以构造出一个更加精确的关键词组或搜索提示词:
["马斯克", "特斯拉", "超级工厂", "成立地点"]
🔍 步骤 2:实体驱动的检索(Hybrid 检索)
你可以用这些关键词进行:
- 关键词查找(传统 BM25)
- 关键词拼接成提示词增强 embedding(Query Expansion)
- 或作为过滤条件(比如 Neo4j/结构化搜索)
让检索过程更精准,比如你可以组合:
"马斯克 AND 特斯拉 AND 超级工厂"
甚至构造出结构化检索请求:
{"person": "马斯克","organization": "特斯拉","facility": "超级工厂"
}
🧠 步骤 3:把命中的文档拼起来 + 喂给大模型
这样,LLM 就不会困在语义迷宫里了,而是吃到了你特意准备的实体浓汤。
🔁 举个完整流程例子(RAG + NER)
输入问题:
2021 年特斯拉在哪个国家建立了新的超级工厂?
实体识别结果:
{"时间": "2021 年","组织": "特斯拉","设施": "超级工厂"
}
构造检索条件(Query Expansion):
特斯拉 AND 超级工厂 AND 2021
命中文档内容:
2021年,特斯拉在德国柏林郊外建立了一座新的超级工厂——Giga Berlin。
LLM 回答:
特斯拉于 2021 年在德国柏林建立了 Giga Berlin 超级工厂。
✨ 成功!不仅答对了,还提了地点名!
🧪 技术点可拓展的地方:
步骤 | 技术 |
---|---|
实体识别 | SpaCy / HanLP / Bert-NER / 自定义实体分类器 |
检索增强 | FAISS + keyword filter / hybrid search(向量 + 关键词) |
实体消歧 | 用实体链接技术做 disambiguation,比如“苹果”到底是 Apple 还是 fruit |
多轮问答 | 上一轮提到的实体可以帮助下一轮精准检索 |
✅ 总结一句话:
RAG 是问问题,实体识别是告诉它问的“关键词重点是什么”,然后用这些重点去找文档。
这就像你不是直接让图书管理员找“一个好看的小说”,而是告诉他你要找“村上春树、爱情、东京、90 年代”的小说——这效率高多了,对吧?
或者:
- 一段 NER → 自动生成检索 query
- 检索 mock 文档(用 BM25 + FAISS)
- 拼成 context 发给 GPT