一句话定义:条件随机场(Conditional Random Field,CRF)是一种判别式概率模型,它不孤立地给序列中每个位置打标签,而是给整条标签序列打分——分数由两部分组成:每个位置"本身像什么标签",以及"相邻两个标签搭不搭"。
打个比方。给一句话做命名实体识别,就像给一队人发制服:从左到右逐个发,只看每个人的身材,很容易发出乱搭配——第 3 个人穿了校服上衣,第 4 个人却发了西装裤子。逐帧分类(每个词独立 softmax)就是这个毛病:它能算出"这个词像机构名的开头"概率很高,却不知道"开头"后面必须跟"中间/结尾",不能直接跳回"外部"。CRF 相当于在发衣服时还回头看一眼前一个人穿了什么,把"搭配是否顺眼"也计入总分,最后整体挑一套最协调的方案。
形式上,给定输入序列 x,标签序列 y 的得分是各位置发射分数之和,加上相邻标签的转移分数之和,再对所有可能序列做归一化变成概率。训练时最大化正确序列的概率;预测时用维特比(Viterbi)动态规划一次性求出全局最优路径,而不是每个位置各挑各的最高分。那个转移分数矩阵通常全局共享,相当于一本"标签搭配手册"。
和邻居们比一比:
| 模型 | 建模对象 | 标签依赖 | 特点 | |
|---|---|---|---|---|
| 逐帧 AI 词典:Softmax">Softmax | P(y_t \ | x) | 无 | 简单快,可能产出非法序列 |
| 隐马尔可夫模型 HMM | P(x, y) | 有 | 生成式,需假设观测独立 | |
| CRF | P(y \ | x) | 有 | 判别式,可用任意重叠特征,全局归一化 |
| 生成式大模型 | P(文本 \ | 提示) | 由语言建模隐式给出 | 灵活,但结构约束要靠提示或解码限制 |
CRF 相对 HMM 的关键优势是判别式:不为输入建模,只关心"给定 x,哪个 y 更可能",因此词形、前后缀、词典命中这类特征可以随便塞。
对从业者的意义。在 BiLSTM-CRF 流行的年代,CRF 几乎是序列标注的标配输出层,尤其在低资源、标签有硬约束(BIO 体系、分词、句法)的任务里,它保证输出合法、边界更稳。而它近年被 Transformer 系模型顶掉,原因有三:一是预训练编码器自带强上下文表示,逐 token 分类已经够准;二是一阶转移只管相邻两个标签,长距离依赖得靠注意力机制,CRF 补不上;三是维特比解码有额外开销,大模型微调时收益常常不抵成本。到了生成式范式,标注直接变成"让模型输出标签串",约束交给提示词和受控解码。
但 CRF 的思路没有消失:结构化预测、转移约束解码、后处理纠错里都还留着它的影子。理解它,本质上是理解"局部最优不等于全局最优"这件事。
具体实现与最新用法请以官方文档和论文页面为准。
