第11章 条件随机场
习题11.1
写出图11.3中无向图描述的概率图模型的因子分解式。
解答:
解答思路:
- 给出无向图中团与最大团的定义;
- 给出概率无向图模型的因子分解的定义;
- 计算概率无向图模型的因子分解式。
解答步骤:
第1步:无向图中团与最大团的定义
根据书中第11章的定义11.2的团与最大团:
定义11.2(团与最大团) 无向图
中任意两个结点均有边连接的结点子集称为团(clique),若 是无向图 的一个团,并且不能再加进任何一个 的结点使其成为一个更大的团,则称此 为最大团(maximal clique)。
第2步:概率无向图模型的因子分解的定义
根据书中第11.1.2节的概率无向图模型的因子分解定义:
将概率无向图模型的联合概率分布表示为其最大团上的随机变量的函数的乘积形式的操作,称为概率无向图模型的因子分解(factorization)。
根据书中第11.1.2节的概率无向图模型的联合概率分布:
给定概率无向图模型,设其无向图为
, 为 上的最大团, 表示 对应的随机变量。那么概率无向图模型的联合概率分布 可写作图中所有最大团 上的函数 的乘积形式,即 其中,
是规范化因子(normaliztion factor),由式 给出。
第3步:计算概率无向图模型的因子分解式
由图11.3可知,该图是由4个结点组成的无向图,结点分别为
- 图中由2个结点组成的团有5个:
和 - 图中包括2个最大团:
和 - 由于
和 没有边连接,所以 不是一个团。
根据第2步中概率图模型的因子分解定义和联合概率分布的计算公式,可得因子分解:
习题11.2
证明
解答:
解答思路:
- 给出
的定义公式; - 根据书中第225页前向-后向算法,推导
和 ; - 证明
- 证明
解答步骤:
第1步:给出
根据书中第11.2.4节的条件随机场的矩阵形式:
假设
是由式(11.15)~式(11.16)给出的线性链条件随机场,表示对给定观测序列 ,相应的标记序列 的条件概率。对每个标记序列引进特殊的起点和终点状态标记 和 ,这时标注序列的概率 可以通过矩阵形式表示并有效计算。
对观测序列的每一个位置 ,由于 和 在 个标记中取值,可以定义一个 阶矩阵随机变量 条件概率
是 其中,
为规范化因子,是 个矩阵的乘积的(start, stop)元素,即 注意,
与 表示开始状态与终止状态,规范化因子 是以start为起点stop为终点,通过状态的所有路径 的非规范化概率 之和。
第2步:给出
根据书中11.3.1节的前向-后向算法:
对每个指标
,定义前向向量 : 递推公式为:
又可表示为
表示在位置 的标记是 ,并且从1到 的前部分标记序列的非规范化概率, 可取的值有 个,所以 是 维列向量。 同样,对每个指标
,定义后向向量 : 又可表示为
表示在位置 的标记为 ,并且从 到 的后部分标记序列的非规范化概率。
根据参考文献 Shallow Parsing with Conditional Random Fields 中的第2章Conditional Random Fields:
由上述可得:
- 当观测序列
有n个结点时,有
其中
- 当观测序列
有n-1个结点时,有
其中
第3步:证明
第4步:证明
综上所述:
习题11.3
写出条件随机场模型学习的梯度下降法。
解答:
解答思路:
- 给出条件随机场模型的对数似然函数;
- 写出条件随机场模型学习的梯度下降法。
解答步骤:
第1步:条件随机场模型的对数似然函数
根据书中第11章的定理11.2的线性链条件随机场的参数化形式:
定理11.2(线性链条件随机场的参数化形式) 设
为线性链条件随机场,则在随机变量 取值为 的条件下,随机变量 取值为 的条件概率具有如下形式: 其中,
式中,
和 是特征函数, 和 是对应的权值。 是规范化因子,求和是在所有可能的输出序列上进行的。
根据书中第11.2.3节的条件随机场的简化形式:
设有
个转移特征, 个状态特征, ,记 然后,对转移特征与状态特征在各个位置
求和,记作 用
表示特征 的权值,即 于是,条件随机场可表示为
根据书中第11.4.1节的条件随机场模型的对数似然函数:
当
是一个由式(11.15)和式(11.16)给出的条件随机场模型时,对数似然函数为
将对数似然函数求偏导,可得
梯度函数为
第2步:写出条件随机场模型学习的梯度下降法
根据书中附录A 梯度下降法的算法:
算法A.1(梯度下降法)
输入:目标函数,梯度函数 ,计算精度 ;
输出:的极小值 。
(1)取初始值,置 。
(2)计算。
(3)计算梯度,当 时,停止迭代,令 ;否则,令 ,求 ,使 (4)置
,计算 。当 或 时,停止迭代,令 。
(5)否则,置,转步骤(3)。
条件随机场模型学习的梯度下降法:
输入:目标函数
输出:
(1)取初始值
(2)计算
(3)计算梯度
(4)置
(5)否则,置
习题11.4
参考图11.6的状态路径图,假设随机矩阵
求以
解答:
解答思路:
根据书中第223页条件随机场的矩阵形式,以及例题11.2,通过自编程实现计算所有路径状态序列的概率及概率最大的状态序列。
解答步骤:
import numpy as np
class CRFMatrix:
def __init__(self, M, start, stop):
# 随机矩阵
self.M = M
#
self.start = start
self.stop = stop
self.path_prob = None
def _create_path(self):
"""按照图11.6的状态路径图,生成路径"""
# 初始化start结点
path = [self.start]
for i in range(1, len(self.M)):
paths = []
for _, r in enumerate(path):
temp = np.transpose(r)
# 添加状态结点1
paths.append(np.append(temp, 1))
# 添加状态结点2
paths.append(np.append(temp, 2))
path = paths.copy()
# 添加stop结点
path = [np.append(r, self.stop) for _, r in enumerate(path)]
return path
def fit(self):
path = self._create_path()
pr = []
for _, row in enumerate(path):
p = 1
for i in range(len(row) - 1):
a = row[i]
b = row[i + 1]
# 根据公式11.24,计算条件概率
p *= M[i][a - 1][b - 1]
pr.append((row.tolist(), p))
# 按照概率从大到小排列
pr = sorted(pr, key=lambda x: x[1], reverse=True)
self.path_prob = pr
def print(self):
# 打印结果
print("以start=%s为起点stop=%s为终点的所有路径的状态序列y的概率为:" % (self.start, self.stop))
for path, p in self.path_prob:
print(" 路径为:" + "->".join([str(x) for x in path]), end=" ")
print("概率为:" + str(p))
print("概率最大[" + str(self.path_prob[0][1]) + "]的状态序列为:",
"->".join([str(x) for x in self.path_prob[0][0]]))# 创建随机矩阵
M1 = [[0, 0], [0.5, 0.5]]
M2 = [[0.3, 0.7], [0.7, 0.3]]
M3 = [[0.5, 0.5], [0.6, 0.4]]
M4 = [[0, 1], [0, 1]]
M = [M1, M2, M3, M4]
# 构建条件随机场的矩阵模型
crf = CRFMatrix(M=M, start=2, stop=2)
# 得到所有路径的状态序列的概率
crf.fit()
# 打印结果
crf.print()以start=2为起点stop=2为终点的所有路径的状态序列y的概率为:
路径为:2->1->2->1->2 概率为:0.21
路径为:2->2->1->1->2 概率为:0.175
路径为:2->2->1->2->2 概率为:0.175
路径为:2->1->2->2->2 概率为:0.13999999999999999
路径为:2->2->2->1->2 概率为:0.09
路径为:2->1->1->1->2 概率为:0.075
路径为:2->1->1->2->2 概率为:0.075
路径为:2->2->2->2->2 概率为:0.06
概率最大[0.21]的状态序列为: 2->1->2->1->2
参考文献
【1】Sha F, Pereira F. Shallow Parsing with Conditional Random Fields[C]. Proceedings of the 2003 Conference of the North American Chapter of the Association for Computational Linguistics
