条件随机场conditional random field
主要翻译自http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/,原作者是MIT的大神,加入了一些我自己的理解.
问题由来
给你某人一天内一系列生活照片,让你为每一张照片添加label(比如唱歌,跳舞,吃饭...),你要怎么做.
一种方式是忽略照片的顺序性,训练出一个classifier.比如你可以拿一个月的快照作为训练样本,然后训练出一个模型.这样来一个新图片,背景很暗,拍摄于早上,模型可能会将其判断为睡觉.图片里车很多,模型可能判断为驾车.
但是忽略照片的连续性,可能会丢失很多信息,比如说你看到一张图片,是嘴巴的特写,那么怎么知道这张图是在唱歌还是在吃饭?这时候我们既要参考这张图片之前的照片,如果之前的照片是在吃饭,那么当前图片很可能也是吃饭,如果前一张是在唱歌或者跳舞,那么当前图片很可能就是在唱歌.
即为了让我们的分类器更准确,我们需要考虑照片之间的关联,这就是crf大显身手的地方.下面以词性标注来说明条件随机场crf(conditional random field)
什么是词性标注?
比如“Bob drank coffee at Starbucks”,Bob是名词,drank是动词...,最终我们的目标是把每个词的词性标注出来-->“Bob (NOUN) drank (VERB) coffee (NOUN) at (PREPOSITION) Starbucks (NOUN)”
首先,我们要有一组特征函数.
Feature Functions in a CRF
In a CRF, each feature function is a function that takes in as input:
- a sentence s
- the position i of a word in the sentence
- the label li of the current word
- the label li−1 of the previous word
特征函数的输出是一个实数(实际应用中通常就是0或1)
注意:这里为了简化讨论,我们认为当前词的label只与它前面的一个词的label有关,这实际上是linear-chain CRF的一个特例.
例如,某个单词前面一个词是"very",一个可能的特征函数可以度量我们猜测当前单词应该被标记为形容词的程度。这个后面具体会举例,别心急,慢慢看.
Features to Probabilities
上面我们有一组feature function,可以得到很多数,现在我们要把这些数转换为概率.
\(score(l | s) = \sum_{j = 1}^m \sum_{i = 1}^n \lambda_j f_j(s, i, l_i, l_{i-1})\)
\(\lambda_j\)表示\(f_j\)的权重.这样对输入的一个有n个word的sentence s,我们有m个feature function,我们综合考虑这些feature function,则我们可以得到一个score。
通过指数化和正则化,我们将其转换为0-1之间的一个概率值.

是不是感觉和逻辑回归似曾相识?实际上crf可以理解为序列版本的逻辑回归.
That’s because CRFs are indeed basically the sequential version of logistic regression: whereas logistic regression is a log-linear model for classification, CRFs are a log-linear model for sequential labels.
下面看几个具体的feature function的例子:
f1(s,i,li,li−1)=1 if li= ADVERB and the ith word ends in “-ly”; 0 otherwise. ** If the weight λ1 associated with this feature is large and positive, then this feature is essentially saying that we prefer labelings where words ending in -ly get labeled as ADVERB.
f2(s,i,li,li−1)=1 if i=1, li= VERB, and the sentence ends in a question mark; 0 otherwise. ** Again, if the weight λ2 associated with this feature is large and positive, then labelings that assign VERB to the first word in a question (e.g., “Is this a sentence beginning with a verb?”) are preferred.
f3(s,i,li,li−1)=1 if li−1= ADJECTIVE and li= NOUN; 0 otherwise. ** Again, a positive weight for this feature means that adjectives tend to be followed by nouns.
f4(s,i,li,li−1)=1 if li−1= PREPOSITION and li= PREPOSITION. ** A negative weight λ4 for this function would mean that prepositions don’t tend to follow prepositions, so we should avoid labelings where this happens.
如果第i个词为副词,并且以ly结尾,则f1()=1,否则为0. 如果权重λ1很大,意味着我们倾向于认为ly结尾的词被认为是副词
f2() if i=1,li=动词,句子以问号结尾.则f2=1,否则f2=0. 如果我们给这个函数一个正数权重λ2,意味着我们倾向于将问句的第一个词认为是动词,例如“Is this a sentence beginning with a verb?"中我们倾向于认为"is"是个动词
f3() if li-1=形容词,li=名词,则f3()=1,否则f3()=0. 如果我们给这个函数一个正数权重,意味着我们倾向认为形容词后接的是名词
f4() if li-1为介词,li为介词,则f4()=1. 我们给这个函数一个负数权重,意味着我们认为介词后面还接介词 这种情况不太可能
总结一下:要构造一个crf,你需要事先定义一系列的feature function.然后赋以相应的权重,将其score相加,再转换为0-1之间的概率值.
条件随机场crf和隐含马尔科夫模型hmm之间的关系
实际上hmm是crf的一种特例. 每一个hmm都可以用某一种crf表达.
见博文隐含马尔科夫模型https://www.cnblogs.com/sdu20112013/p/10373091.html
Learning Weights
如何给我们的feature function找到合适的权重?
不出意外的,我们会想到梯度下降法.
假设我们已经有了大量的训练集(比如大量已经做了词性标注的语句)。
在刚开始的时候,我们给每一个feature function一些随机的权重.

对每个样本,我们都重复上述过程,直到误差达到某个很小的阈值.
- 对每一个feature function,计算概率梯度
- 梯度的第一项表示的是在真实label下特征函数f的贡献,第二项表示的是当前模型下的期望贡献.
- 将λi沿着梯度方向移动,`\(\alpha\)是学习率.
- 重复上述步骤直到停止条件满足
简言之,就是每一步都考虑diff=我们希望模型学到的-模型当前真正学到的,每一次λi的调整都朝着使diff减小的方向调整.
Finding the Optimal Labeling
假设我们已经训练好了一个crf model. 拿到一个新的句子,怎么给出一个合理的label呢(比我拿到句子:我爱你 是标注成:名词/动词/名词还是名词名词名词还是...?)
最直观的思路就是对每一种label,计算p(l|s).但是考虑一个句子有m个词,每个词有k个词性,就得有\(k^m\)种可能.复杂度太高了.
实际上是用a (polynomial-time) dynamic programming algorithm算法来计算的,类似于HMM中的维特比算法.
条件随机场crf和卷积神经网络cnn的思路上有很多相似的地方,cnn中卷积层和池化层提取出不同角度的特征,crf中预先定义好很多的特征函数.都是通过梯度下降更新各个特征的权重值,以达到最优化误差的目的.
条件随机场conditional random field的更多相关文章
- 条件随机场(Conditional random field)
条件随机场真是把我给折磨坏了啊,本以为一本小小的<统计学习方法>攻坚剩下最后一章,心情还是十分愉悦的,打算一口气把它看完,结果真正啃起来真是无比的艰难啊,每一句对我都好像是天书一般,怎么这 ...
- 条件随机场Conditional Random Field-CRF入门级理解
条件随机场Conditional Random Field-CRF入门级理解 有向图与无向图模型 CRF模型是一个无向概率图模型,更宽泛地说,它是一个概率图模型.现实世界的一些问题可以用概率图模型 ...
- 条件随机场 Conditional Random Fields
简介 假设你有冠西哥一天生活中的照片(这些照片是按时间排好序的),然后你很无聊的想给每张照片打标签(Tag),比如这张是冠西哥在吃饭,那张是冠西哥在睡觉,那么你该怎么做呢? 一种方法是不管这些照片的序 ...
- 随机场(Random field)
一.随机场定义 http://zh.wikipedia.org/zh-cn/随机场 随机场(Random field)定义如下: 在概率论中, 由样本空间Ω = {0, 1, …, G − 1}n取样 ...
- NLP —— 图模型(二)条件随机场(Conditional random field,CRF)
本文简单整理了以下内容: (一)马尔可夫随机场(Markov random field,无向图模型)简单回顾 (二)条件随机场(Conditional random field,CRF) 这篇写的非常 ...
- 条件随机场(conditional random field,CRF)模型初探
0. 引言 0x1:为什么会有条件随机场?它解决了什么问题? 在开始学习CRF条件随机场之前,我们需要先了解一下这个算法的来龙去脉,它是在什么情况下被提出的,是从哪个算法演进而来的,它又解决了哪些问题 ...
- [Scikit-learn] Dynamic Bayesian Network - Conditional Random Field
李航,第十一章,条件随机场 参考:[PGM] Markov Networks 携代码:用 Python 通过马尔可夫随机场(MRF)与 Ising Model 进行二值图降噪[推荐!] CRF:htt ...
- CRF(Conditional Random Field)
条件随机场是近几年自然语言处理领域常用的算法之一,常用于句法分析.命名实体识别.词性标注等.在我看来,CRF就像一个反向的隐马尔可夫模型(HMM),两者都是用了马尔科夫链作为隐含变量的概率转移模型,只 ...
- 条件随机场理论分析CRF(Conditional Random Field)
随机推荐
- 【洛谷P3369】【模板】普通平衡树题解
[洛谷P3369][模板]普通平衡树题解 题目链接 题意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3 ...
- ELK从5.6.3升级到6.3.0总结
ELK从5.6.3升级到6.3.0总结 由于6.3.0默认有es的监控功能,并且我们现在es总是有各种问题,原有的es开源插件head和HQ的监控都不够详细,所以决定升级es集群.我们目前es有5个n ...
- idea 2017破解的三种方式
1.该方法最为简便,但是该方法只可以在联网时使用,打开idea主页,找到最后面的Help,打开,找到register-license server, 在输入http://idea.iteblog.co ...
- centos7.2安装图文详解
centos镜像下载地址 https://www.centos.org/download/ Install CentOS 7 ----直接安装Test this media & instal ...
- Rabbitmq的使用及Web监控工具使用
本文转载自:https://www.cnblogs.com/gossip/p/4475978.html windows安装手册请参考:http://www.rabbitmq.com/install-w ...
- Redhat/CentOS7-环境虚拟机简单搭建Nginx+Tomcat负载均衡集群
Tomcat服务器是一个免费的开放源代码的web应用服务器,属于轻量级应用服务器,是开发和调试JSP程序的首选.由于Tomcat处理静态HTML的能力运不及Apache或者Nginx,所以Tomcat ...
- Akka-CQRS(1)- Write-side, Persisting event sources:CQRS存写端操作方式
上篇我们提到CQRS是一种读写分离式高并发.大流量数据录入体系,其中存写部分是通过event-sourcing+akka-persistence实现的.也可以这样理解:event-sourcing(事 ...
- Android精通之AsyncTask与ListView讲解
版权声明:未经博主允许不得转载 AsyncTask 了解AsyncTask异步,需要了解一下异步任务(多线程),什么是线程,可以这么说线程好比边吃饭边看电视,AsyncTask是为了方便后台线程中操作 ...
- Kubenetes 核心概念理解
Kubernetes 是一个具有自动控制 .自动纠错功能的资源管理系统 可以把 Node , Pod , Replication Controller , Service 等都看做是一种 " ...
- php过滤 字符
今天在抓取页面中得到字符串:"卡牌 ",使用str_replace . preg_replace 和 strip_tags过滤都无解. 最后google到2种方式,如下: str_ ...