概率有向图又称为贝叶斯网络,概率无向图又称为马尔科夫网络。具体地,他们的核心差异表现在如何求  ,即怎么表示  这个的联合概率。

概率图模型的优点:

  • 提供了一个简单的方式将概率模型的结构可视化。
  • 通过观察图形,可以更深刻的认识模型的性质,包括条件独立性。
  • 高级模型的推断和学习过程中的复杂计算可以利用图计算来表达,图隐式的承载了背后的数学表达式。

一、概率有向图

对于有向图模型,这么求联合概率:

例如下图的联合概率表示如下:

二、概率无向图

首先我们有无向图G=(V,E),V是节点,E是边, 图G中每个节点v上都有一个随机变量y,这样所有的节点上的随机变量就构成一组随机变量Y,图G上有联合概率分布P(Y)。边e表示相邻节点的变量存在一定依赖关系。图G上的随机变量Y满足马尔科夫性,即两个不相邻的节点上的随机变量yi,yj条件独立,就称此联合概率分布为概率无向图模型,又叫马尔科夫随机场(MRF),马尔科夫随机场的成对、局部、全局马尔可夫性是等价的,都是表达一个意思,即边不连接的节点之间相互独立。

如何求解其联合概率分布呢?

  将概率无向图模型的联合概率分布表示为其最大团上的随机变量的函数的乘积形式的操作,称为概率无向图模型的因子分解(factorization)。

团:无向图中任何两个节点均有边连接的节点子集。

最大团:若C为无向图G中的一个团,并且不能再加进任何一个G的节点时其成为一个更大的团,则称此团为最大团。上图中{Y2,Y3,Y4}和{Y1,Y3,Y4}都是最大团。

概率无向图模型的联合概率分布P(Y)可以表示为如下形式:

其中C是无向图最大团,Yc是C的节点对应的随机变量,是一个严格正势函数,乘积(因式分解)是在无向图所有最大团上进行的,Z是归一化因子,保证P(Y)最后构成一个概率分布。

三、条件随机场(conditional random field)

设X与Y是随机变量,P(Y|X)是给定X的条件下Y的条件概率分布,若随机变量Y构成一个由无向图G=(V,E)表示的马尔科夫随机场。则称条件概率分布P(Y|X)为条件随机场。因为是在X条件下的马尔科夫随机场,所有叫条件随机场。
虽然定义里面没有要求,我们还是默认X和Y结构一致,这是general CRF。然后看看linear chain CRF,线性链就是X和Y都是一串序列。
重点:在线性链里面,最大团就是相邻的两项,y_i和y_(i+1),X只是一个前提条件,不参与最大团的判定。通俗来理解,就是在X条件下,求解由Y随机变量构成的概率无向图的联合概率分布。X为观测的随机变量,例如分词中的具体汉字,Y为待预测的隐含变量,对应分词中的B,M,E,S等。

linear chain CRF的公式如下

再详细一些如下

t和s都是特征函数,一个是转移特征,一个状态特征,x=(x1,x2,...,xn)为观察变量,y=(y1,y2,...,yn)为隐含变量。所以,CRF也就是直接预测p(y|x),属于判别式模型。注意一个细节,特征函数里面的观测变量为x,而不是xi,这也就是说你可以前后随意看观测变量,所以特征模板里面可以随意定义前后要看几个观测值。

亦或表示如下

O为观察序列,I为预测的隐变量序列。

四、模型训练与运行

1)训练

CRF模型的训练主要训练特征函数的权重参数λ,一般情况下不把两种特征区别的那么开,合在一起如下:

每个token会对应多个特征函数,特征函数f取值为0或者1,在训练的时候主要训练权重λ,权重为0则没贡献,甚至你还可以让他打负分,充分惩罚。利用极大似然估计寻找最优参数解。

2)工作流程

模型的工作流程:

  • step1. 先预定义特征函数  ,
  • step2. 在给定的数据上,训练模型,确定参数 
  • step3. 用确定的模型做序列标注问题或者序列求概率问题

3)序列标注

还是跟HMM一样的,用学习好的CRF模型,在新的sample(观测序列  )上找出一条概率最大最可能的隐状态序列  。

只是现在的图中的每个隐状态节点的概率求法有一些差异而已,正确将每个节点的概率表示清楚,路径求解过程还是一样,采用viterbi算法

其它参考链接:https://www.zhihu.com/question/35866596

CRF原理解读的更多相关文章

  1. NRF24L01——工作原理解读

    源: NRF24L01——工作原理解读

  2. Java并发之AQS原理解读(三)

    上一篇:Java并发之AQS原理解读(二) 前言 本文从源码角度分析AQS共享锁工作原理,并介绍下使用共享锁的子类如何工作的. 共享锁工作原理 共享锁与独占锁的不同之处在于,获取锁和释放锁成功后,都会 ...

  3. Java并发之AQS原理解读(二)

    上一篇: Java并发之AQS原理解读(一) 前言 本文从源码角度分析AQS独占锁工作原理,并介绍ReentranLock如何应用. 独占锁工作原理 独占锁即每次只有一个线程可以获得同一个锁资源. 获 ...

  4. Java并发之AQS原理解读(一)

    前言 本文简要介绍AQS以及其中两个重要概念:state和Node. AQS 抽象队列同步器AQS是java.util.concurrent.locks包下比较核心的类之一,包括AbstractQue ...

  5. Java线程池原理解读

    引言 引用自<阿里巴巴JAVA开发手册> [强制]线程资源必须通过线程池提供,不允许在应用中自行显式创建线程. 说明:使用线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源的开销 ...

  6. https原理解读

    参考:架构师必读!以图文的方式解锁 HTTPS原理,10分钟还原HTTPS真像! 对于消息安全的定义是:即使消息被中间人拦截到,中间人也没办法解读出其中的消息. 对称加密 要实现消息安全,首先想到的是 ...

  7. PolarDB PostgreSQL 架构原理解读

    背景 PolarDB PostgreSQL(以下简称PolarDB)是一款阿里云自主研发的企业级数据库产品,采用计算存储分离架构,兼容PostgreSQL与Oracle.PolarDB 的存储与计算能 ...

  8. XtraBackup原理解读

    XtraBackup是现今为止唯一一款为InnoDB 和XtraDB提供热备的开源工具,这个工具有以下的有点: (1)备份快速高效而且可靠 (2)备份过程可以做到事物处理不间断 (3)节省磁盘空间和网 ...

  9. Spring IOC原理解读 面试必读

    Spring源码解析:Bean实例的创建与初始化 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器 ...

随机推荐

  1. matlab 图像Mat类型矩阵中的值(uint8)类型转换,防止溢出

    a=[50,60,70; 80,90,50; 100,55,40] 假设a是一个灰度图的mat形式(当然实际的size肯定比这大,我只是举例子),如果需要对这个矩阵的像素进行加减处理,很可能会产生溢出 ...

  2. 【vim】vim常用命令

    移动: h 或 向左箭头键(←)  #光标向左移劢一个字符 j 或 下箭头键(↓)    #光标向下移劢一个字符 k 或 向上箭头键(↑)    #光标向上移劢一个字符 l 或 向右箭头键(→)    ...

  3. 第96天:CSS3 背景详解

    一.背景大小 background: url("images/bg.jpg") no-repeat;控制背景的大小1.具体数值background-size: 500px 500p ...

  4. get 与 next()

  5. [二十]SpringBoot 之 (多)文件上传

    (1)新建maven Java project 新建一个名称为spring-boot-fileuploadmaven java项目 (2)在pom.xml加入相应依赖: <project xml ...

  6. BZOJ3620 似乎在梦中见过的样子(kmp)

    不是很懂为什么数据范围要开的这么诡异,想到正解都不敢写.用类似NOI2014动物园的方法,对每个后缀求出类似next的数组即可. #include<iostream> #include&l ...

  7. C++解析-外传篇(1):异常处理深度解析

    0.目录 1.异常的最终处理 2.结束函数terminate() 3.小结 1.异常的最终处理 问题: 如果在main函数中抛出异常会发生什么? 如果异常不处理,最后会传到哪里? 下面的代码的输出什么 ...

  8. 【NOIP考试范围】

    ※号为可能考察的算法[历年有出现过,但概率小,但最好掌握] [本图片仅作参考] 梦想总是要有的,万一实现了呢?

  9. js new date()说明

    javaScript UTC() 方法: UTC() 方法可根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数. 要创建一个一个日期对象,可以使用以下的方式: var now=new D ...

  10. HikariPool-1 - Connection is not available, request timed out after XXXXms.

    hikaripool-0-连接不可用,请求在30000ms之后超时.意思是池等待30000ms的免费连接,但是您的应用程序没有返回任何连接. 原因一:连接泄漏(在从池中借用之后连接没有关闭).解决方法 ...