zoukankan      html  css  js  c++  java
  • 条件随机场(CRF)的理解

    Motivation

    学习CRF的过程中,我发现很多资料,教程上来就给一堆公式,并不知道这些公式是怎么来的。 所以我想以面向问题的形式,分享一下自己对CRF用于序列标注问题的理解

    问题定义

    给定观测序列(X=(X_1,X_2,X_3,...X_n))

    应该注意以下几点:

    • 输入(X=(X_1,X_2,X_3,...X_n))是观测序列,是先验条件
    • 输出(Y=(Y_1,Y_2,Y_3,...Y_n))是标注序列,也称为状态序列, 与观测序列具有相同的结构

    我们举个例子:

    设有一标注问题:输入观测序列为(X=(X_1,X_2,X_3,X_3)=(Dog caught the cat)),输出标记序列为(Y=(Y_1,Y_2,Y_3,Y_3))(Y_1,Y_2,Y_3,Y_3)取值于(gamma={verb, article, noun})

    我们可以得到以下模型图:

    当模型输入句子 ”Dog caught the cat“ 时,我们希望模型能够输出标注序列:“n v a n”的概率最大

    那么如何根据这个状态图计算出序列”n v a n“的出现的概率呢?

    这里就引出了概率无向图模型:(注:个人认为条件随机场模型是一个概率无向图模型,而线性链条件随机场是一个有向图模型)

    条件随机场

    这里我们对于上图中的图模型,我们定义两种特征: 状态特征和转移特征

    • 状态特征: 定义在结点上,表示这个结点是否拥有某个属性
    • 转移特征: 定义在边上,表示两个状态是否会因为某个特征而转移

    对于上面的问题中,我们可以直觉性地定义一些特征,例如:状态特征可以是({脊椎动物,哺乳动物,爬行动物,地点, 时间,动作}),转移特征可以理解有({动物后面接动词jump,人后面接动词love,名词后面接代词,动词后面接代词,形容词后面接名词}),这些就是我们对于一些直观特征,当然还有很多隐藏特征我们无法用语言来解释,也没有必要解释。

    因此我们用数学语言来表达这些特征:
    假设我们定义了(K_1) 个转移特征 $ {t_1,t_2,...,t_{K_1}} $ ,定义了(K_2)个状态特征 ({s_1,s_2,...,s_{K_2}}) ,当一个结点拥有状态特征(s_j)时,(s_j=1),否则,(s_j=0)
    例如:dog 拥有状态特征:{脊椎动物,哺乳动物}

    [s_l=s_j(y_i,x,i) in {0,1} quad l=1,2,..K_1,i=1,2,...n ]

    一个结点(y_i)的状态特征只与这个结点和观测序列有关,其他结点无关,同理,转移特征可以表示如下:

    [t_k=t_k(y_{i-1},y_i,x,i) in {0,1} quad k=1,2,..K_2,i=2,3,...n ]

    当然,这些特征所起到的重要性应该是有差异的,例如单词:train,它作为动词时有“训练,瞄准”的意思。 当我们一篇关于机器学习的论文(观测序列(x))中观测到了单词train时

    [s_1=s_1(y_i=verb,x=论文 ,i=index(train) ) ightarrow 训练 \ s_2=s_2(y_i=verb,x=论文 ,i=index(train) ) ightarrow 瞄准 ]

    在train被模型标注为verb的过程中,特征(s_1)(s_2)应该起到更高的重要性,理应拥有更大的权重,同理对于每个转移特征,利用也有对应的权重,
    这里,我们定义转移特征的权值为(lambda_k),状态特征的权值为(mu_l),则当我们得到观测序列(X=(x_1,x_2,...x_n)),状态序列为(Y=(y_1,y_2,...y_n))时的所有结点的的特征之和为

    [sum_{i,k}lambda_k t_k(y_{i-1},y_i,x,i)+ sum_{i,l} mu_l s_l(y_i,x,i) ]

    由此,我们用这个特征和来计算:

    当观测序列(X=(x_1,x_2,...x_n)),状态序列为(Y=(y_1,y_2,...y_n))的概率

    首先概率值不能是负的,所以我们将这个特征和变换为正值,还必须保证各个状态序列特征和大小关系不变,所以我们使用指数函数exp进行变换得到,再把这个结果规范化后就得到了概率函数了,也是线性链条件随机场的参数化形式定义(《统计学习方法》定理11.2)

    (P(Y|X))为线性链条件随机场, 则在随机变量 取值为x的条件下, 随机变量Y的取值为 y的条件概率具有如下形式:

    [P(Y|X)= frac{1}{Z(x)} exp(sum_{i,k}lambda_k t_k(y_{i-1},y_i,x,i)+ sum_{i,l} mu_l s_l(y_i,x,i)) ]

    其中

    [Z(x) = sum_Y exp(sum_{i,k}lambda_k t_k(y_{i-1},y_i,x,i)+ sum_{i,l} mu_l s_l(y_i,x,i)) ]

    (t_k)(s_l)是特征函数,(lambda_k)(mu_l)是对应的权值, 是规范化因子,(Z(x))求和是在所有可能的输出序列上进行的

    Reference

    《统计学习方法》 李航

  • 相关阅读:
    Kubernetes 集成研发笔记
    Rust 1.44.0 发布
    Rust 1.43.0 发布
    PAT 甲级 1108 Finding Average (20分)
    PAT 甲级 1107 Social Clusters (30分)(并查集)
    PAT 甲级 1106 Lowest Price in Supply Chain (25分) (bfs)
    PAT 甲级 1105 Spiral Matrix (25分)(螺旋矩阵,简单模拟)
    PAT 甲级 1104 Sum of Number Segments (20分)(有坑,int *int 可能会溢出)
    java 多线程 26 : 线程池
    OpenCV_Python —— (4)形态学操作
  • 原文地址:https://www.cnblogs.com/JohnRain/p/9250502.html
Copyright © 2011-2022 走看看