资讯

状态特征函数是什么?条件随机场中刻画单个位置的特征

2026-11-053 分钟阅读百科
TL;DR状态特征函数(Status/State Feature Function)是线性链条件随机场中只依赖当前位置标签与观测序列的特征函数,与刻画相邻两个标签转移关系的转移特征函数相对;每个特征函数取值多为 0 或 1,由对应权重加权求和后构成条件概率的指数项,如“当前词首字母大写且标签为人名”。

状态特征函数(State Feature Function)是条件随机场模型中的一种特征函数,它描述的是序列中某一个位置上的标签与观测之间的关系。在线性链条件随机场中,有两类特征函数:状态特征函数和转移特征函数,它们共同决定了模型对一个标签序列的打分。

从条件随机场说起

条件随机场由 John Lafferty、Andrew McCallum 和 Fernando Pereira 在 2001 年提出,是一种用于序列标注的判别式概率模型。序列标注任务需要为一个序列中的每个元素都打上一个标签,比如在命名实体识别中,为句子中的每个词标注它是人名、地名、机构名还是其他;在词性标注中,为每个词标注它的词性。线性链条件随机场直接对“给定观测序列时,标签序列的条件概率”进行建模:一个标签序列的概率,正比于所有特征函数按各自的权重加权求和之后取指数,再除以一个归一化因子,保证所有可能的标签序列的概率之和为 1。

状态特征函数

状态特征函数只涉及序列中的一个位置:它根据这个位置的标签,以及整个观测序列(通常主要是这个位置附近的观测),判断某种特征是否成立。它的取值通常是 0 或 1:特征成立时取 1,否则取 0。比如在英文的命名实体识别中,一个状态特征函数可以是:“如果当前的词首字母大写,并且当前位置的标签是人名,就取 1,否则取 0”;另一个可以是:“如果当前的词是‘先生’之前的那个词,并且当前标签是人名,就取 1”;还可以是:“如果当前的词以‘市’结尾,并且当前标签是地名,就取 1”。每个状态特征函数都有一个对应的权重,通过训练学到。如果某个特征对于判断标签很有帮助,它的权重就会是一个较大的正数,表示满足这个特征时,这个标签更有可能是正确的;如果权重是负数,则表示满足这个特征时这个标签不太可能。

转移特征函数

与状态特征函数相对的是转移特征函数,它涉及相邻两个位置的标签,描述标签之间的转移关系。比如:“如果前一个位置的标签是‘人名开头’,当前位置的标签是‘人名中间’,就取 1”,这样的转移是合理的,会得到正的权重;而“如果前一个标签是‘其他’,当前标签是‘人名中间’”这样不合理的转移,就会得到负的权重,因为一个人名不可能从中间开始。转移特征函数让模型能够考虑整个标签序列是否协调一致,而不是孤立地给每个位置打标签,这是条件随机场相比于逐个位置独立分类的优势所在。

特征函数的设计与发展

在传统的条件随机场中,特征函数需要人工设计,这是一项需要大量领域知识的工作。常用的特征包括:当前词本身、前后若干个词、词的前缀和后缀、是否大写、是否包含数字、词性等,并通过模板的方式自动地组合生成大量的特征函数,一个模型中可能有数十万甚至上百万个特征函数。条件随机场的优势在于,它可以自由地使用这些相互重叠、相互关联的特征,而不需要像隐马尔可夫模型那样假设各个观测之间相互独立。深度学习兴起之后,人们常常用双向长短期记忆网络或预训练语言模型来自动地提取每个位置的特征,代替人工设计的状态特征,同时在上面保留一个条件随机场层来建模标签之间的转移,比如经典的“BiLSTM-CRF”模型,就是用神经网络的输出充当状态特征的打分,用转移矩阵充当转移特征的权重。