# 命名实体识别 (NER)

URL: https://caijiao.org/nlp/tasks/ner
Source: docs/nlp/tasks/ner.md
Description: 本章介绍命名实体识别（NER）的基本概念、标注方式、常用模型和应用场景。

命名实体识别（**Named Entity Recognition, NER**）是 NLP 的经典序列标注任务，目标是识别文本中具有特定意义的实体，如**人名、地名、组织机构、时间、数字等**。

示例文本：

```txt
李明在北京大学工作。
```

NER 结果：

| Token | 标签 |
|-------|------|
| 李明 | PER  |
| 北京大学 | ORG  |
| 工作 | O   |

标签说明：

- **PER**：人名（Person）  
- **ORG**：组织机构（Organization）  
- **LOC**：地名（Location）  
- **O**：非实体（Other）

## 一、标注方式

常用的标注方案：

1. **BIO（Begin, Inside, Outside）**
   - B-PER：实体开头  
   - I-PER：实体内部  
   - O：非实体  
2. **BIOES（Begin, Inside, Outside, End, Single）**
   - B：实体开头  
   - I：实体内部  
   - E：实体结尾  
   - S：单字实体  
   - O：非实体

示例：

```txt
李/B-PER 明/I-PER 在/O 北/B-LOC 京/I-LOC 大/B-ORG 学/I-ORG 工作/O
````

## 二、模型方法

### 1. 传统方法

- **条件随机场（CRF）**：基于特征的序列标注模型  
- **隐马尔可夫模型（HMM）**：统计序列建模  

### 2. 深度学习方法

- **BiLSTM + CRF**：结合上下文建模与标注约束  
- **Transformer 系列（如 BERT）**：上下文动态表示 + 分类头

## 三、Hugging Face 示例

```python
from transformers import pipeline

ner_pipeline = pipeline("ner", model="dslim/bert-base-NER", grouped_entities=True)
text = "马云在杭州创立了阿里巴巴。"
result = ner_pipeline(text)
print(result)
````

输出示例：

```txt
[{'entity_group': 'PER', 'word': '马云'},
 {'entity_group': 'LOC', 'word': '杭州'},
 {'entity_group': 'ORG', 'word': '阿里巴巴'}]
```

## 四、应用场景

- **信息抽取**：从新闻、法律文档、医疗记录中提取关键信息
- **问答系统**：识别问题中的实体，提高检索准确率
- **知识图谱构建**：识别实体并建立关系
- **金融风控**：识别交易、机构、人物相关实体

## 五、小结

- NER 是 NLP 序列标注任务的重要代表；
- 标签体系（BIO/BIOES）需统一，便于训练；
- 现代预训练语言模型（BERT、RoBERTa）在 NER 任务中表现优异。
