马尔可夫网络

我们根据图的边是否有向将概率图模型大致分为两类,有向的称为贝叶斯网络,无向的称为马尔可夫网络。马尔可夫网络是关于一组有马尔可夫性质随机变量X的全联合概率分布模型。马尔可夫网络与贝叶斯网络类似,可用于表示依赖关系。但也有不同之处,一方面它可以表示贝叶斯网络无法表示的一些依赖。如循环依赖;另一方面,它不能表示贝叶斯网络能够表示的某些关系,如推导关系。
这里重点介绍一种常见的模型,即马尔可夫随机场(MRF)。

马尔可夫随机场

在概率图模型中,一个很重要的任务就是分解概率联合函数,而函数分解通常利用随机变量的独立性或条件独立性。当然利用概率图,还可以把这种独立性可视化。
在马尔可夫随机场中我们借助“分离”的概念,如果从节点X中的节点到Y点中的节点都必须经过节点集Z中的节点,则称节点集X和Y节点被节点集Z分离,其中Z又称为分离集。

1.全局马尔可夫独立性

给定两个变量子集的分离集,则这两个变量子集条件独立。在上图中,集合X=(X1, X2, X3)和集合Y=(Y1,Y2,Y3)被集合Z=(Z1,Z2)所分离,则X和Y在给定Z的条件下独立,记为X⊥Y∣ZX\perp{}Y|ZX⊥Y∣Z,用概率表示为:
P(X,Y∣Z)=P(X∣Z)P(Y∣Z)P(X,Y\rvert{}Z) = P(X|Z)P(Y|Z)P(X,Y∣Z)=P(X∣Z)P(Y∣Z)
由全局马尔可夫独立性,可以推广到两个全局的独立性质。

2.局部马尔可夫独立性

如下图所示,X1是无向图中的一个节点,W={X2, X3}是与X1相连的所有节点,O是X1、W外的所有节点,O={X4, X5}。则有:

P(X1,O∣W)=P(X1∣W)P(O∣W)P(X_1,O|W)=P(X_1|W)P(O|W)P(X1​,O∣W)=P(X1​∣W)P(O∣W)

3.成对马尔可夫独立性

如下图,X4X_4X4​、X5X_5X5​是无向图中任意两个不相邻的节点,其他所有节点是O={X1, X2, X3},则有:
P(X4,X5∣O)=P(X4∣O)P(X5∣O)P(X_4,X_5|O)=P(X_4|O)P(X_5|O)P(X4​,X5​∣O)=P(X4​∣O)P(X5​∣O)

实际上,成对马尔可夫性、局部马尔可夫性、全局马尔可夫性是等价的。

条件随机场

条件随机场(Conditional Random Field, CRF)是条件概率分布模型P(Y|X),表示的是在给定一组输入随机变量X的条件下另一组输出随机变量Y的马尔可夫随机场,也就是说CRF的特点是假设输出随机变量构成马尔可夫随机场。这时,在条件概率模型P(Y|X)中,Y是输出变量,表示标记序列;X是输入变量,表示需要标注的观测序列。也可以把标记序列称为状态序列。学习时,利用训练数据集通过极大似然估计或正则化的极大似然估计得到条件概率模型
p^(Y∣X)\hat{p}(Y|X)p^​(Y∣X);预测时,对于给定的输入序列X求出条件概率p^(Y∣X)\hat{p}(Y|X)p^​(Y∣X)最大的输出序列Y。

1.条件随机场的定义

设X与Y是随机变量,P(Y|X)是在给定X的条件下Y的条件概率分布。弱随机变量Y构成一个由无向图G=(V,E)表示的马尔可夫随机场,即:
P(Yv∣X,Yw,w̸=v)=P(Yv∣X,Yw,w∼v)P(Y_v|X,Y_w,w\not =v)=P(Y_v|X,Y_w,w\thicksim{v})P(Yv​∣X,Yw​,w̸​=v)=P(Yv​∣X,Yw​,w∼v)
对任意节点v成立,则称条件概率分布P(Y∣X)P(Y|X)P(Y∣X)为条件随机场。
式中w∼vw\thicksim{v}w∼v表示在图G=(V,E)G=(V,E)G=(V,E)中与节点v有边连接的所有节点w,w!=vw,w!=vw,w!=v表示节点v以外的所有节点,YvY_vYv​、YwY_wYw​为节点v、w对应的随机变量。
一般假设X和Y有相同的图结构。线性链条件随机场的情况为:
G=(V={1,2,​⋯ ,n},E={(i,i+1)}),i=1,2,​⋯ ,n−1G=(V=\{{1,2,\dotsi,n\}},E=\{(i,i+1)\}),i=1,2,\dotsi,n-1G=(V={1,2,⋯,n},E={(i,i+1)}),i=1,2,⋯,n−1

在此情况下,X=(X1,X2,​⋯ ,Xn),Y=(Y1,Y2,​⋯ ,Yn)X=(X_1,X_2,\dotsi,X_n), Y=(Y_1,Y_2,\dotsi,Y_n)X=(X1​,X2​,⋯,Xn​),Y=(Y1​,Y2​,⋯,Yn​),最大团是相邻两个节点的集合。如下图所示:

2.线性链条件随机场

设X=(X1,X2,​⋯ ,Xn),Y=(Y1,Y2,​⋯ ,Yn)X=(X_1,X_2,\dotsi,X_n), Y=(Y_1,Y_2,\dotsi,Y_n)X=(X1​,X2​,⋯,Xn​),Y=(Y1​,Y2​,⋯,Yn​)为线性链表示的随机变量序列,若在给定随机变量序列X的条件下,随机变量序列Y的条件概率分布P(Y∣X)P(Y|X)P(Y∣X)构成条件随机场,即满足马尔可夫性:

P(Yi∣X,Yi,​⋯ ,Yi−1,Yi+1,​⋯ ,Yn)=P(Yi∣X,Yi−1,Yi+1,i=1,2,​⋯ ,n)P(Y_i|X,Y_i,\dotsi,Y_{i-1},Y_{i+1},\dotsi,Y_n)=P(Y_i|X,Y_{i-1},Y_{i+1}, i=1,2,\dotsi,n)P(Yi​∣X,Yi​,⋯,Yi−1​,Yi+1​,⋯,Yn​)=P(Yi​∣X,Yi−1​,Yi+1​,i=1,2,⋯,n)

其中i=1或n时,只考虑单边。则称P(Y∣X)P(Y|X)P(Y∣X)为线性链条件随机场。

实例:使用条件随机场做词性标注

条件随机场在词性标注中发挥重要作用,首先我们简单介绍和为词性标注,然后通过一个实例来实现一个具体的词性标注。
为了更好的理解词性标注这个概念,我们还是通过实例来说明。词性标注就是给一个句子中的每个单词注明词性。比如这句话:“He drank coffee at Starbucks”, 注明每个单词的词性后是这样的:“He(代词)drank(动词)coffee(名词)at(介词)Starbucks(名词)”。

这句话共有5个单词,我们将:(代词,动词,名词,介词,名词)作为一个标注序列,称为Y。可选的标注序列有很多种,比如Y还可以是这样:(名词,动词,动词,介词,名词),我们要在这么多的可选标注序列中,挑选出一个最靠谱的作为我们对这句话的标注。
那么我们要处理的问题是如何量化标注靠谱不,就我们上面展示的两个标注序列来说,第二个显然不如第一个靠谱,因为它把第二、第三个单词都标注成了动词,动词后面接动词,这在一个句子中通常是说不通的。
我们可以给每一个标注序列打分,分数越高代表这个标注序列越靠谱,我们至少可以说,凡是标注中出现了动词后面还是动词的标注序列,就要给他负分。

上面所说的动词后面还是动词就是一个特征函数,我们可以定义一个特征函数集合,这个特征函数集合来为一个标注序列打分,并据此选出最靠谱的标注序列。也就是说,每一个特征函数都可以用来为一个标注序列评分,把集合中所有同特证函数对同一个标注序列的评分综合起来,就是这个标注序列最终的评分值。
我们需要定义一下CRF中的特征函数。所谓特征函数,就是这样的函数,它接收四个参数:

  • 句子X:就是我们要标注词性的句子。
  • i:用来表示句子X中第i个单词
  • yiy_iyi​:表示要评分的标注序列给第i个单词标注的词性。
  • yi−1y_{i-1}yi−1​:表示要评分的标注序列给第i-1个单词标注的词性

它的输出值是0或是1,0表示要评分的标注序列不符合这个特征,1表示要评分的标注序列符合这个特征,1表示要评分的标注序列符合这个特征。这里,我们的特征函数仅仅依靠当前单词的标签和它前面的单词的标签对标注序列进行评判,这样建立的CRF也叫做线性连CRF,这是CRF中的一种简单情况。
定义好一组特征函数后,我们要给每个特征函数fjf_jfj​赋予一个权重λj\lambda_jλj​。现在,只要有一个句子X,有一个标注序列Y,我们就可以利用前面定义的特征函数集来对1评分。
score(Y∣X)=∑j=1m∑j=1nλjfj(X,i,yj,yj−1)score(Y|X)=\textstyle\sum_{j=1}^m\textstyle\sum_{j=1}^n\lambda_jf_j(X,i,y_j,y_{j-1})score(Y∣X)=∑j=1m​∑j=1n​λj​fj​(X,i,yj​,yj−1​)
上式中有两个求和,外面的求和用来求每一个特征函数fjf_jfj​评分值的和,里面的求和用来求句子中每个位置的单词的特征值的和。
对这个分数进行指数化和标准化,我们就可以得到标注序列l的概率值P(Y∣X)P(Y|X)P(Y∣X),如下所示:
P(Y∣X)=exp[score(Y∣X)]∑Y′exp[score(Y′∣X)]P(Y|X)=\frac{exp[score(Y|X)]}{\sum_{Y^{\prime}}exp[score(Y^{\prime}|X)]}P(Y∣X)=∑Y′​exp[score(Y′∣X)]exp[score(Y∣X)]​

CRF与LSM等模型不同,能够考虑长远的上下文信息,它更多考虑的是整个句子局部特征的线性加权组合(通过特征模板去扫描整个句子)。关键的一点是,CRF的模型为P(Y|X),注意这里Y和X都是序列,优化的是一个序列Y=(Y1,Y2,​⋯ ,Yn)Y=(Y_1,Y_2,\dotsi,Y_n)Y=(Y1​,Y2​,⋯,Yn​),而不是某个时刻的yty_tyt​,即找到一个概率最高的序列Y=(Y1,Y2,​⋯ ,Yn)Y=(Y_1,Y_2,\dotsi,Y_n)Y=(Y1​,Y2​,⋯,Yn​)使得P(Y∣X)P(Y|X)P(Y∣X)最高,它计算的是一种联合概率,优化的是整个序列(最终目标),而不是将每个时刻的最优拼接起来,这一点上CRF优于LSTM。

使用Tensorflow实现CRF

  • tf.contrib.crf.crf_log_likelihood 在一个条件随机场里面计算标签序列的log-likelihood。
  • tf.contrib.crf.viterbi_decode 其作用就是返回最好的标签序列。这个函数只能够在测试时使用,在Tensorflow外部解码。
  • tf.contrib.crf.crf_decode 在tensorflow内解码。

用TensorFlow实现CRF的主要步骤包括参数设置、构建随机特征、随机场tag、训练及评估模型,以下为详细代码。

1.导入库

import numpy as np
import tensorflow as tf

2.构建数据

# 参数设置
num_examples = 10
num_words = 20
num_features = 100
num_tags = 5# 随机构建数据,10个句子,每个句子20个词,每个词的有100个特征值(为了便于训练设置100个特征)
x = np.random.rand(num_examples, num_words, num_features).astype(np.float32)
# 构建随机5个tag
y = np.random.randint(num_tags, size=[num_examples, num_words]).astype(np.int32)
# 获取样本句长向量(因为每一个样本可能包含不一样多的词),在这里统一设为 num_words - 1,真实情况下根据需要设置
sequence_lengths = np.full(num_examples, num_words - 1, dtype=np.int32)

3.训练、评估模型

# 训练,评估模型
with tf.Graph().as_default():with tf.Session() as session:x_t = tf.constant(x)y_t = tf.constant(y)sequence_lengths_t = tf.constant(sequence_lengths)# 在这里设置一个无偏置的线性层weights = tf.get_variable("weights", [num_features, num_tags])matricized_x_t = tf.reshape(x_t, [-1, num_features])matricized_unary_scores = tf.matmul(matricized_x_t, weights)unary_scores = tf.reshape(matricized_unary_scores,[num_examples, num_words, num_tags])# 计算log-likelihood并获得transition_paramslog_likelihood, transition_params = tf.contrib.crf.crf_log_likelihood(unary_scores, y_t, sequence_lengths_t)# 进行解码(维特比算法),获得解码之后的序列viterbi_sequence和分数viterbi_scoreviterbi_sequence, viterbi_score = tf.contrib.crf.crf_decode(unary_scores, transition_params, sequence_lengths_t)loss = tf.reduce_mean(-log_likelihood)train_op = tf.train.GradientDescentOptimizer(0.01).minimize(loss)session.run(tf.global_variables_initializer())mask = (np.expand_dims(np.arange(num_words), axis=0) <      # np.arange()创建等差数组np.expand_dims(sequence_lengths, axis=1))            # np.expand_dims()扩张维度# 得到一个num_examples*num_words的二维数组,数据类型为布尔型,目的是对句长进行截断# 将每个样本的sequence_lengths加起来,得到标签的总数total_labels = np.sum(sequence_lengths)# 进行训练for i in range(1, 1001):tf_viterbi_sequence, _ = session.run([viterbi_sequence, train_op])if i % 100 == 0:correct_labels = np.sum((y == tf_viterbi_sequence) * mask)accuracy = 100.0 * correct_labels / float(total_labels)print("[{:4}/{}]  Accuracy: {:.2f}%".format(i, 1000, accuracy))

4.结果

[ 100/1000]  Accuracy: 61.58%
[ 200/1000]  Accuracy: 72.11%
[ 300/1000]  Accuracy: 80.00%
[ 400/1000]  Accuracy: 83.68%
[ 500/1000]  Accuracy: 85.79%
[ 600/1000]  Accuracy: 89.47%
[ 700/1000]  Accuracy: 91.58%
[ 800/1000]  Accuracy: 93.16%
[ 900/1000]  Accuracy: 94.74%
[1000/1000]  Accuracy: 94.74%

深度学习:马尔可夫随机场相关推荐

  1. 花书+吴恩达深度学习(二三)结构化概率模型(贝叶斯网络、马尔可夫随机场)

    文章目录 0. 前言 1. 有向模型 2. 无向模型 3. 因子图 4. 分离和d-分离 5. 从图模型中采样 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 花书+吴恩达深 ...

  2. 深度强化学习-马尔科夫决策过程和表格型方法

    深度强化学习-马尔科夫决策过程和表格型方法-笔记(二)_wield_jjz的博客-CSDN博客 深度强化学习2--马尔科夫决策过程(MDP)_谢宜廷的博客-CSDN博客 (零基础可以看懂)强化学习中的 ...

  3. PGM学习之七 MRF,马尔科夫随机场

    之前自己做实验也用过MRF(Markov Random Filed,马尔科夫随机场),基本原理理解,但是很多细节的地方都不求甚解.恰好趁学习PGM的时间,整理一下在机器视觉与图像分析领域的MRF的相关 ...

  4. 机器学习强基计划6-2:详细推导马尔科夫随机场(MRF)及其应用(附例题)

    目录 0 写在前面 1 无向概率图 2 马尔科夫随机场 3 马尔科夫独立性 4 例题分析 0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用."深"在详细 ...

  5. 【05】概率图表示之马尔可夫随机场

    概率图表示之马尔可夫随机场 文章目录 马尔可夫随机场 正式定义 与贝叶斯网络的比较 马尔可夫随机场中的独立性 条件随机场 示例 正式定义 示例(续) CRF特性 因子图 贝叶斯网络可以以一种紧凑的方式 ...

  6. kl散度度量分布_概率图简要模型笔记(二)马尔可夫随机场与KL散度、最大熵、指数族分布、高斯分布、极大似然分布...

    这一篇文章主要是想捋一捋KL散度.最大熵.指数族分布这些东西之间的关系,这是一些非常基本的知识点,刚入门机器学习的时候,傻傻分不清楚,现在回过头来看,其实很多东西都可以串起来,不得不感叹数学真是一个很 ...

  7. 概率图模型(PGM)/马尔可夫随机场(MRF)/条件随机场基本概念(CRF)

    概率图模型: 1:为什么引入图模型:一般的问题我们都可以用概率模型去很好的解决,那么为什么又要在概率的基础上加一个图呢?在这里我们引入图结构其实是因为图结构可以将概率模型的结构可视化,应用图这是一种直 ...

  8. MRF,马尔科夫随机场

    之前自己做实验也用过MRF(Markov Random Filed,马尔科夫随机场),基本原理理解,但是很多细节的地方都不求甚解.恰好趁学习PGM的时间,整理一下在机器视觉与图像分析领域的MRF的相关 ...

  9. 概率图模型(6)马尔科夫随机场

    文章目录 概率图模型的综合叙述: 马尔科夫随机场综述: 马尔科夫随机场定义: MRF的因式分解: 一个简单的例子: 概率图模型的综合叙述: 特征函数便是图中的conditional.对图简单的说明,综 ...

  10. 马尔科夫随机场Markov Random Field

    马尔可夫随机场,描述了具有某种特性的集合.拿种地打比方,如果任何一块地里种的庄稼的种类仅仅与它邻近的地里种的庄稼的种类有关,与其它地方的庄稼的种类无关,那么这些地里种的庄稼的集合,就是一个马尔可夫随机 ...

最新文章

  1. ceph bluestore源码分析:非对齐写逻辑
  2. JAVA语言基础-面向对象(集合框架02List、泛型)
  3. Hey, 看看小程序的page-frame.html把~
  4. Outlook邮箱重新配置
  5. Vue中怎样引入Element
  6. SAP HANA CLOUD和aws一个实际项目中的性能比较
  7. python各种库安装
  8. 微服务升级_SpringCloud Alibaba工作笔记0008---spring gateway配置路由的两种方式
  9. java8 interface_Java8新特性:函数式接口@FunctionalInterface使用说明
  10. 广义表取表头表尾_数据结构广义表的递归算法
  11. vue 项目中常见的几个问题
  12. 1387: [蓝桥杯2018决赛]阅兵方阵
  13. prometheus常用函数详解
  14. 在MVC项目中设置启动页
  15. 给Mac设置定时关机、重启、睡眠
  16. 芯片短缺:今年圣诞节PS5货量恐不足
  17. 系统清道夫 android2.1,安卓系统清道夫国际版
  18. 区块链落地应用虚实待验,以人为本挖井为先
  19. 1157 最高分和最低分
  20. Jitsi 开源视频会议远程桌面共享文档共享工具

热门文章

  1. 非线性声学回声消除技术
  2. 软考高级信息系统项目管理师/高项和PMP的区别,以及对比
  3. VMware虚拟机下载、安装与使用
  4. 处理文件的fseek函数
  5. vba set语句_零基础学VBA编程06:什么是变量?
  6. LM2596电源降压调整器(150KHZ 3A)原理图中文版
  7. 指数加权移动平均法(EWMA)
  8. 中文界面blend_使用Blend设计出符合效果的WPF界面
  9. 系统架构设计-企业信息化战略与实施 知识点
  10. javassist修炼笔记