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

    《统计学习方法》 李航

  • 相关阅读:
    C#实现控制Windows系统关机、重启和注销的方法:
    Sql中将datetime转换成字符串的方法(CONVERT())
    Winform button按钮设置快捷键
    Winform API "user32.dll"中的函数
    C# 一些知识点总结(二)_路径类,编码类,文件类...
    Winform 窗体单例
    防止DataGridview闪烁
    Winform DataGridView控件添加行号
    SQL Server 数据库的维护(三)__事务(transaction)和锁
    SQL Server 常用函数介绍
  • 原文地址:https://www.cnblogs.com/JohnRain/p/9250502.html
Copyright © 2011-2022 走看看