命名实体识别
问题
什么是命名实体识别(NER)?有哪些实现方法?
答案
一、NER 概述
NER 从文本中识别并分类命名实体(人名、地名、组织名、时间等):
输入: "2024年苹果公司在加州发布了iPhone 16"
输出: [2024年/TIME] [苹果公司/ORG] [加州/LOC] [iPhone 16/PRODUCT]
二、标注体系
BIO 标注:
| 标签 | 含义 | 示例 |
|---|---|---|
| B-PER | 人名开始 | "张" |
| I-PER | 人名内部 | "三" |
| B-ORG | 组织开始 | "苹" |
| I-ORG | 组织内部 | "果公司" |
| O | 非实体 | "在" |
三、方法对比
| 方法 | 原理 | 特点 |
|---|---|---|
| 规则/词典 | 正则匹配 + 实体词典 | 简单,特定领域准确 |
| CRF | 条件随机场序列标注 | 考虑标签依赖 |
| BiLSTM-CRF | 双向 LSTM + CRF | 经典深度学习方案 |
| BERT-NER | BERT + 序列标注头 | 当前最佳效果 |
| LLM Prompt | 零样本抽取 | 灵活但速度慢 |
四、常见实体类型
| 类型 | 缩写 | 示例 |
|---|---|---|
| 人名 | PER | 张三、Elon Musk |
| 地名 | LOC | 北京、加利福尼亚 |
| 组织 | ORG | 腾讯、OpenAI |
| 时间 | TIME | 2024年1月、昨天 |
| 金额 | MONEY | 100美元、5万元 |
| 产品 | PRODUCT | iPhone 16、GPT-4 |
五、LLM 做 NER
System: 从文本中抽取命名实体,返回 JSON 格式。
实体类型: PER(人名), ORG(组织), LOC(地名), TIME(时间)
User: 2024年苹果公司在加州发布了iPhone 16
Assistant: [
{"text": "2024年", "type": "TIME"},
{"text": "苹果公司", "type": "ORG"},
{"text": "加州", "type": "LOC"}
]
常见面试问题
Q1: BiLSTM-CRF 中 CRF 层的作用?
答案:
- BiLSTM 输出每个 token 属于各标签的概率
- CRF 层在此基础上建模标签之间的转移概率
- 例如:B-PER 后面不可能出现 I-ORG(CRF 会学到这种约束)
- 没有 CRF:每个 token 独立预测,可能出现非法标签序列
Q2: NER 在 AI 应用中有什么实际用途?
答案:
- PII 检测:识别用户输入中的个人信息(姓名、手机号等)进行脱敏
- 知识图谱构建:从文本中抽取实体和关系
- 搜索增强:识别查询中的实体,提升搜索精度
- RAG 文档处理:对文档进行实体标注,增强检索