背景

CRF和HMM是有相似性的,最后都是使用Verterbi算法来进行最优状态转移序列的确定。CRF主要用于序列标注问题。 本质:通过1D卷机学习近邻信息,然后输入到CRF定义好的计算方式中。 一些实现的库,并不能主观反应出CRF的计算方式,因此可以通过具体原理实现细节仔细观察。

随机场有多种,一些已有的随机场如:马尔可夫随机场(MRF), 吉布斯随机场 (GRF), 条件随机场 (CRF), 和高斯随机场。

随机场

定义一:简单来说,随机场可以看作是一组对应于同一样本空间的随机变量的集合。一般来说,这些随机变量之间存在依赖关系,也只有当它们之间存在依赖关系的时候,我们才会将其单独拿出来看成一个随机场才有实际意义。

定义二:随机场是由若干个位置组成的整体,当给每一个位置中按照某种分布随机赋予一个值之后,其全体就叫做随机场。

CRF原理理解

下图表示我们的序列连接与预测。

CRF是进行了假设,一共两个假设,如下:
x\bf{x}x

P(y1,⋯,yn∣x)P(y_1, \cdots,y_n|x)P(y1​,⋯,yn​∣x)

在上述表示中h(y1;x)h(y_1;\bm{x})h(y1​;x)的相邻位置为g(y1,y2;x)g(y_1,y_2;\bm{x})g(y1​,y2​;x)。
尽管已经做了大量简化,但一般来说,(3) 式所表示的概率模型还是过于复杂,难以求解。于是考虑到当前深度学习模型中,RNN 或者层叠 CNN 等模型已经能够比较充分捕捉各个 y 与输出 x 的联系(主要是学习序列信息),因此,我们不妨考虑函数 g 跟 x 无关,那么:

引入时间序列模型(RNN做卷积),x\bm{x}x与yyy之间的关系直接用yyy与yyy去考虑。 这时候 ggg 实际上就是一个有限的、待训练的参数矩阵而已,而单标签的打分函数 h(yi;x)。h(y_i;\bm{x})。h(yi​;x)。 我们可以通过 RNN 或者 CNN 来建模。因此,该模型是可以建立的,其中概率分布变为:

算法步骤

重点:相比于HMM,要进行模型训练。HMM直接打标签了,这里对每个句子中的词通过0,1,2,3,4打了标签。

具体步骤

卷积层:通过一维卷积得到邻域信息。
CRF层:训练概率转移矩阵4×44\times44×4(B,M,E,S), 概率矩阵被初始化得到。之后通过与ground true的lable相乘计算得到。
预测层:计算概率转移矩阵4×44\times44×4(B,M,E,S),总共16个值,这一步在代码分析中,是通过网路计算出来的, 在CRF自定义的网络层。
结果层:模型训练完成之后再通过verterbi算法找最优解。

代码理解

分子的计算
    def path_score(self, inputs, labels):"""计算目标路径的相对概率(还没有归一化)要点:逐标签得分,加上转移概率得分。技巧:用“预测”点乘“目标”的方法抽取出目标路径的得分。"""#下面这一步计算的可能是h(y_1, x)等point_score = K.sum(K.sum(inputs * labels, 2), 1, keepdims=True)  # 逐标签得分labels1 = K.expand_dims(labels[:, :-1], 3)labels2 = K.expand_dims(labels[:, 1:], 2)labels = labels1 * labels2  # 两个错位labels,负责从转移矩阵中抽取目标转移得分trans = K.expand_dims(K.expand_dims(self.trans, 0), 0)trans_score = K.sum(K.sum(trans * labels, [2, 3]), 1, keepdims=True)return point_score + trans_score  # 两部分得分之和

这里计算的主要是公式一下部分,
后边部分的k是包含在求和符号里面的,上半部分为下半部分中的大括号里里面的。h(⋅)h(\cdot)h(⋅)表示是前面的网络层。

分母的计算

类似于RNN, LSTM, GRU,需要通过前一个节点推下一个节点,因此产生了时间序列

outputs = K.logsumexp(states + trans, 1)

这个包含了,公式的右半部分的两个元素的对应乘积。

这里注意一下,这两个指数的相乘在代码中, ZZZ利用rnn的递归特性进行求解。
batch_size为128, crf的inputs输入是一个样本个数,乘以状态个数的矩阵。

    def log_norm_step(self, inputs, states):"""递归计算归一化因子要点:1、递归计算;2、用logsumexp避免溢出。技巧:通过expand_dims来对齐张量。inputs is predictive label, input is hinit_states (128, 4)"""#states[0] is (128,4)inputs, mask = inputs[:, :-1], inputs[:, -1:]#上边语句执行后 inputs shape is [128,4], mask shape is [128,1] 相当于每一个每一个句子中的第一个词states = K.expand_dims(states[0], 2)  # (batch_size, output_dim, 1) (128, 4, 1)#print("states shape:", states.shape)trans = K.expand_dims(self.trans, 0)  # (1, output_dim, output_dim) (1, 4, 4)# states+trans shape is (128,4,4), first exp, then sum, last to get log, 下面这一步表示了图转移outputs = K.logsumexp(states + trans, 1)  # (batch_size, output_dim)#outputs is [128,4]outputs = outputs + inputs#outputs is [128,4], states[:,:,0] is [128,4]outputs = mask * outputs + (1 - mask) * states[:, :, 0]print("states[:,:,0].shape",states[:,:,0].shape)return outputs, [outputs]

内容链接

https://www.cnblogs.com/gczr/p/10021249.html
https://www.jiqizhixin.com/articles/2018-05-23-3 (CRF实现附带链接)
https://blog.csdn.net/dianwei0041/article/details/101882673?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control(为什么要用CRF)
https://zhuanlan.zhihu.com/p/29989121
https://tech.meituan.com/2020/07/23/ner-in-meituan-nlp.html(美团NER探索实践)
https://wenku.baidu.com/view/d7cb1e7952d380eb63946d09.html(说明了条件随机场)

条件随机场 (CRF)相关推荐

  1. 条件随机场(CRF) - 1 - 简介

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了 ...

  2. 条件随机场(CRF) - 2 - 定义和形式

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xueyingxue001/article/details/51498968 声明: 1,本篇为个人对 ...

  3. 条件随机场 (CRF) 分词序列谈之一(转)

    http://langiner.blog.51cto.com/1989264/379166 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.ht ...

  4. 条件随机场(CRF)相对于HMM,MEMM的优势

    条件随机场(CRF)相对于HMM,MEMM的优势 首先,CRF,HMM(隐马模型),MEMM(最大熵隐马模型)都常用来做序列标注的建模,像词性标注,True casing.但隐马模型一个最大的缺点就是 ...

  5. 【机器学习基础】一文读懂用于序列标注的条件随机场(CRF)模型

    模型前的铺垫 我们先引入一个假设,假设一个句子的产生只需要两步: 第一步:基于语法产生一个合乎文法的词性序列 第二步:对第一步产生的序列中的每个词性找到符合这个词性的一个词汇,从而产生一个词汇序列,便 ...

  6. 简明条件随机场CRF介绍 | 附带纯Keras实现

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 笔者去年曾写过文章<果壳中的条件随机场(CRF In A Nutshell)>[1], ...

  7. 条件随机场(CRF)相关理论知识

    文章目录 无向概率图模型 条件随机场 CRF 实例 线性链条件随机场的简化形式 线性链条件随机场的矩阵形式 linear-CRF的三个基本问题 1,概率计算问题 前向后向概率概述 前向后向概率计算 l ...

  8. 长文详解基于并行计算的条件随机场CRF

    六月 北京 | 高性能计算之GPU CUDA培训 6月22-24日三天密集式学习  快速带你入门阅读全文> 正文共3974个字,29张图,预计阅读时间18分钟. 之前写过CRF的详解,只是为了让 ...

  9. python期望输出隐藏_【归纳综述】马尔可夫、隐马尔可夫 HMM 、条件随机场 CRF 全解析及其python实现...

    PR Structured Ⅲ:马尔可夫.隐马尔可夫 HMM .条件随机场 CRF 全解析及其python实现 Content 归纳性长文,不断更新中...欢迎关注收藏 本章承接概率图知识 马尔可夫不 ...

  10. 条件随机场CRF的理解

    1.个人理解和总结 对比HMM的状态转移概率矩阵和发射概率矩阵CRF有自己的定义在边上的特征函数(相当于转移概率)和定义在节点上的特征函数(相当月发射概率) 序列标注HMM可以根据转移概率矩阵和发射概 ...

最新文章

  1. P4588 [TJOI2018]数学计算(线段树维护区间乘和单点修改)
  2. Android 抓取app进程 hprof 文件
  3. Nginx服务系列——代理
  4. matlab产生一组均为一的矩阵,在matlab中如何从一组数中得到随机数组成一个n*n的矩阵...
  5. Java描述设计模式(05):原型模式
  6. 《RabbitMQ 实战指南》第一章 RabbitMQ 简介
  7. 【Qt教程】3.2 - Qt5 event事件、定时器timerEvent
  8. Setting下的自定义控件LinearColorBar
  9. 利用微软输入法 入侵2003服务器,打开Word或Excel也可被攻击 金山卫士推送微软补丁...
  10. 投屏后能在电脑操作手机吗 手机投屏电脑操作手机软件
  11. book mac pro怎么重装系统_Macbook Pro 2011完全重装系统
  12. iPhonexs文件连接服务器,iPhonexs黑屏了教你如何快速解决!
  13. 2020最新苹果CMSV10 JAVA原生APP影视源码 有安装教程
  14. 刚换了Mac本这些快捷键你知道吗?
  15. Type-C快充诱电方案
  16. 使用php的GD库拼接图片
  17. Cypher制作数据-武汉地铁二号线
  18. 国外电子工程师们国内电子工程师火拼(转)
  19. 如何在Ubuntu 20.04 / 18.04服务器中进入救援模式或紧急模式?
  20. 没有为此解决方案配置选中要生成的项目

热门文章

  1. 张宇:高等数学知识结构图
  2. swlzkyQQ问题大家谈
  3. 计算机网络课后题——第一章 计算机网络概述
  4. AVplayer的使用教程
  5. pygame教程实例(五)物理引擎pymunk
  6. 手札 OllyDbg调热血江湖写屏
  7. 今日5点起床时,悟到一条街道,恍然觉悟。随机分享给大家,相信大家看了都有用。不急,不求,功到自然成。图片1、定得住心,自然不气。苏东坡和好友佛印之间的故事,很多人应该听过。
  8. npm 和 cnpm 的区别,你真的搞懂了嘛
  9. CompositeDisposable
  10. ANSYS中BEAM188单元的使用