crf的实现 keras_简明条件随机场CRF介绍 | 附带纯Keras实现

本文简明介绍了条件随机场(CRF)的基本原理,并提供了纯Keras实现的详细步骤。CRF主要用于序列标注问题,相较于逐帧softmax,它考虑了输出的上下文关联,以路径为单位计算概率。文中通过数学公式和递归计算方法解释了CRF模型,包括线性链CRF、归一化因子的计算和动态规划解法。此外,还分享了一个简洁的Keras CRF层实现代码。
摘要由CSDN通过智能技术生成

原标题:简明条件随机场CRF介绍 | 附带纯Keras实现

作者丨苏剑林

单位丨广州火焰信息科技有限公司

研究方向丨NLP,神经网络

个人主页丨kexue.fm

笔者去年曾写过文章《果壳中的条件随机场(CRF In A Nutshell)》[1],以一种比较粗糙的方式介绍了一下条件随机场(CRF)模型。然而那篇文章显然有很多不足的地方,比如介绍不够清晰,也不够完整,还没有实现,在这里我们重提这个模型,将相关内容补充完成。

本文是对 CRF 基本原理的一个简明的介绍。当然,“简明”是相对而言中,要想真的弄清楚 CRF,免不了要提及一些公式,如果只关心调用的读者,可以直接移到文末。

图示

按照之前的思路,我们依旧来对比一下普通的逐帧 softmax 和 CRF 的异同。

逐帧softmax

CRF 主要用于序列标注问题,可以简单理解为是给序列中的每一帧都进行分类,既然是分类,很自然想到将这个序列用 CNN 或者 RNN 进行编码后,接一个全连接层用 softmax 激活,如下图所示:

▲逐帧softmax并没有直接考虑输出的上下文关联

条件随机场

然而,当我们设计标签时,比如用 s、b、m、e 的 4 个标签来做字标注法的分词,目标输出序列本身会带有一些上下文关联,比如 s 后面就不能接 m 和 e,等等。逐标签 softmax 并没有考虑这种输出层面的上下文关联,所以它意味着把这些关联放到了编码层面,希望模型能自己学到这些内容,但有时候会“强模型所难”。

而 CRF 则更直接一点,它将输出层面的关联分离了出来,这使得模型在学习上更为“从容”:

▲CRF在输出端显式地考虑了上下文关联

数学

当然,如果仅仅是引入输出的关联,还不仅仅是 CRF 的全部,CRF 的真正精巧的地方,是它以路径为单位,考虑的是路径的概率。

模型概要

假如一个输入有 n 帧,每一帧的标签有 k 中可能性,那么理论上就有k^n中不同的输入。我们可以将它用如下的网络图进行简单的可视化。在下图中,每个点代表一个标签的可能性,点之间的连线表示标签之间的关联,而每一种标注结果,都对应着图上的一条完整的路径。

▲4tag分词模型中输出网络图

而在序列标注任务中,我们的正确答案是一般是唯一的。比如“今天天气不错”,如果对应的分词结果是“今天/天气/不/错”,那么目标输出序列就是 bebess,除此之外别的路径都不符合要求。

换言之,在序列标注任务中,我们的研究的基本单位应该是路径,我们要做的事情,是从 k^n 条路径选出正确的一条,那就意味着,如果将它视为一个分类问题,那么将是 k^n 类中选一类的分类问题。

这就是逐帧 softmax 和 CRF 的根本不同了:前者将序列标注看成是 n 个 k 分类问题,后者将序列标注看成是 1 个 k^n 分类问题。

具体来讲,在 CRF 的序列标注问题中,我们要计算的是条件概率:

为了得到这个概率的估计,CRF 做了两个假设:

假设一:该分布是指数族分布。

这个假

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值