序列标注算法工程指南HMM、CRF、BiLSTM-CRF 与 BERT-CRF大模型时代公司接了序列标注相关的项目乘此机会简单整理下之前所学有不对之处还请指教互相学习。本系列共 5 篇本文为总览篇后续四篇分别深入每个算法的原理推导与完整可运行代码。一、什么是序列标注序列标注Sequence Labeling是 NLP 中最基础的结构预测任务给定输入序列x(x1,x2,…,xn)x (x_1, x_2, \ldots, x_n)x(x1,x2,…,xn)为每个位置预测一个标签yiy_iyi输出标签序列y(y1,y2,…,yn)y (y_1, y_2, \ldots, y_n)y(y1,y2,…,yn)。典型任务任务输入示例输出示例命名实体识别NER张三 在 北京 工作B-PER O B-LOC O词性标注POSI love NLPPRP VBP NN中文分词我爱自然语言处理B I B I I I I I语义角色标注SRL张三 打 了 李四A0 V O A1二、标注方案BIO / BIOES工程中最常用BIO和BIOES两种方案BIO 格式B-{TYPE}实体开始I-{TYPE}实体内部O非实体张 三 是 北 京 人 B-PER I-PER O B-LOC I-LOC OBIOES 格式推荐B-{TYPE}多词实体开始I-{TYPE}多词实体中间O非实体E-{TYPE}多词实体结束S-{TYPE}单词实体张 三 是 京 城 人 B-PER E-PER O S-LOC ... O工程建议BIOES 对边界区分更精细NER 任务中通常比 BIO 高 0.5~1% F1。三、四大算法一览序列标注 ├── 统计学习方法可解释 · 低资源 │ ├── HMM 隐马尔可夫模型 → 详见 01_HMM.md │ └── CRF 条件随机场 → 详见 02_CRF.md └── 深度学习方法高精度 · 端对端 ├── BiLSTM-CRF → 详见 03_BiLSTM-CRF.md └── BERT-CRF → 详见 04_BERT-CRF.md四、横向对比维度HMMCRFBiLSTM-CRFBERT-CRF建模类型生成模型判别模型判别模型判别模型特征工程无需需要人工自动学习预训练表示训练数据量极少少~中中少微调推理速度极快快中慢典型 F1NER CoNLL-03~70~85~90~93可解释性高高低极低适用场景资源极受限可解释/低资源无预训练条件主流生产方案显存占用无无低高五、技术演进路线HMM (1990s) └─► 解决了序列建模问题 └─► 缺陷生成模型特征独立性假设强 CRF (2001, Lafferty et al.) └─► 解决了判别建模任意特征无独立性假设 └─► 缺陷需要人工特征模板特征工程成本高 BiLSTM-CRF (2016, Lample et al.) └─► 解决了自动学习特征端到端训练 └─► 缺陷从零训练需要一定标注数据量 BERT-CRF (2019, Devlin et al. CRF) └─► 解决了迁移学习少量数据高精度 └─► 缺陷推理慢部署成本高六、工程化选型建议标注数据量 500 条 └─► 用 CRFsklearn-crfsuite快速验证数据可行性 有 GPU 数据量 1k~10k └─► 直接上 BERT-CRFbert-base-chinese 需要极低延迟 10ms └─► 蒸馏到 BiLSTM-CRF 或量化 BERT 需要可解释的特征权重 └─► CRF可查看每个特征的权重系数七、评估标准序列标注统一使用span-level F1而非 token-level accuracy通过seqeval库计算fromseqeval.metricsimportf1_score,classification_report y_true[[B-PER,I-PER,O,B-LOC]]y_pred[[B-PER,I-PER,O,O]]print(f1_score(y_true,y_pred))# output: 0.6667print(classification_report(y_true,y_pred))# precision / recall / f1 / support by entity typetoken-level accuracy 在 O 标签占多数时虚高必须用 span-level F1 才能真实反映实体识别质量。八、文档索引文件内容自然语言处理-序列标注算法-01本文概念、对比、选型自然语言处理-HMM深度解析-02HMM 完整推导 可运行训练代码自然语言处理-CRF深度解析-03CRF 完整推导 sklearn-crfsuite 完整代码自然语言处理-BiLSTM-CRF深度解析-04BiLSTM-CRF 完整推导 PyTorch 完整训练代码自然语言处理-BERT-CRF深度解析-05BERT-CRF 完整推导 HuggingFace 完整训练代码