假设你有许多小明同窗一天内不一样时段的照片,从小明提裤子起床到脱裤子睡觉各个时间段都有(小明是照片控!)。如今的任务是对这些照片进行分类。好比有的照片是吃饭,那就给它打上吃饭的标签;有的照片是跑步时拍的,那就打上跑步的标签;有的照片是开会时拍的,那就打上开会的标签。问题来了,你准备怎么干?函数
一个简单直观的办法就是,无论这些照片之间的时间顺序,想办法训练出一个多元分类器。就是用一些打好标签的照片做为训练数据,训练出一个模型,直接根据照片的特征来分类。例如,若是照片是早上6:00拍的,且画面是黑暗的,那就给它打上睡觉的标签;若是照片上有车,那就给它打上开车的标签。3d
这样可行吗?orm
乍一看能够!但实际上,因为咱们忽略了这些照片之间的时间顺序这一重要信息,咱们的分类器会有缺陷的。举个例子,假若有一张小明闭着嘴的照片,怎么分类?显然难以直接判断,须要参考闭嘴以前的照片,若是以前的照片显示小明在吃饭,那这个闭嘴的照片极可能是小明在咀嚼食物准备下咽,能够给它打上吃饭的标签;若是以前的照片显示小明在唱歌,那这个闭嘴的照片极可能是小明唱歌瞬间的抓拍,能够给它打上唱歌的标签。it
因此,为了让咱们的分类器可以有更好的表现,在为一张照片分类时,咱们必须将与它相邻的照片的标签信息考虑进来。这——就是条件随机场(CRF)大显身手的地方!io
从例子提及——词性标注问题
啥是词性标注问题?form
很是简单的,就是给一个句子中的每一个单词注明词性。好比这句话:“Bob drank coffee at Starbucks”,注明每一个单词的词性后是这样的:“Bob (名词) drank(动词) coffee(名词) at(介词) Starbucks(名词)”。class
下面,就用条件随机场来解决这个问题。file
以上面的话为例,有5个单词,咱们将:(名词,动词,名词,介词,名词)做为一个标注序列,称为l,可选的标注序列有不少种,好比l还能够是这样:(名词,动词,动词,介词,名词),咱们要在这么多的可选标注序列中,挑选出一个最靠谱的做为咱们对这句话的标注。序列化
怎么判断一个标注序列靠谱不靠谱呢?im
就咱们上面展现的两个标注序列来讲,第二个显然不如第一个靠谱,由于它把第2、第三个单词都标注成了动词,动词后面接动词,这在一个句子中一般是说不通的。
假如咱们给每个标注序列打分,打分越高表明这个标注序列越靠谱,咱们至少能够说,凡是标注中出现了动词后面仍是动词的标注序列,要给它负分!!
上面所说的动词后面仍是动词就是一个特征函数,咱们能够定义一个特征函数集合,用这个特征函数集合来为一个标注序列打分,并据此选出最靠谱的标注序列。也就是说,每个特征函数均可以用来为一个标注序列评分,把集合中全部特征函数对同一个标注序列的评分综合起来,就是这个标注序列最终的评分值。
定义CRF中的特征函数
如今,咱们正式地定义一下什么是CRF中的特征函数,所谓特征函数,就是这样的函数,它接受四个参数:
它的输出值是0或者1,0表示要评分的标注序列不符合这个特征,1表示要评分的标注序列符合这个特征。
Note:这里,咱们的特征函数仅仅依靠当前单词的标签和它前面的单词的标签对标注序列进行评判,这样创建的CRF也叫做线性链CRF,这是CRF中的一种简单状况。为简单起见,本文中咱们仅考虑线性链CRF。
从特征函数到几率
定义好一组特征函数后,咱们要给每一个特征函数f_j赋予一个权重λ_j。如今,只要有一个句子s,有一个标注序列l,咱们就能够利用前面定义的特征函数集来对l评分。
上式中有两个求和,外面的求和用来求每个特征函数f_j评分值的和,里面的求和用来求句子中每一个位置的单词的的特征值的和。
对这个分数进行指数化和标准化,咱们就能够获得标注序列l的几率值p(l|s),以下所示:
几个特征函数的例子
前面咱们已经举过特征函数的例子,下面咱们再看几个具体的例子,帮助加强你们的感性认识。
当l_i是“副词”而且第i个单词以“ly”结尾时,咱们就让f1 = 1,其余状况f1为0。不难想到,f1特征函数的权重λ1应当是正的。并且λ1越大,表示咱们越倾向于采用那些把以“ly”结尾的单词标注为“副词”的标注序列
若是i=1,l_i=动词,而且句子s是以“?”结尾时,f2=1,其余状况f2=0。一样,λ2应当是正的,而且λ2越大,表示咱们越倾向于采用那些把问句的第一个单词标注为“动词”的标注序列。
当l_i-1是介词,l_i是名词时,f3 = 1,其余状况f3=0。λ3也应当是正的,而且λ3越大,说明咱们越认为介词后面应当跟一个名词。
若是l_i和l_i-1都是介词,那么f4等于1,其余状况f4=0。这里,咱们应当能够想到λ4是负的,而且λ4的绝对值越大,表示咱们越不承认介词后面仍是介词的标注序列。
好了,一个条件随机场就这样创建起来了,让咱们总结一下:
为了建一个条件随机场,咱们首先要定义一个特征函数集,每一个特征函数都以整个句子s,当前位置i,位置i和i-1的标签为输入。而后为每个特征函数赋予一个权重,而后针对每个标注序列l,对全部的特征函数加权求和,必要的话,能够把求和的值转化为一个几率值。
CRF与逻辑回归的比较
观察公式:
是否是有点逻辑回归的味道?
事实上,条件随机场是逻辑回归的序列化版本。逻辑回归是用于分类的对数线性模型,条件随机场是用于序列化标注的对数线性模型。
CRF与HMM的比较
对于词性标注问题,HMM模型也能够解决。HMM的思路是用生成办法,就是说,在已知要标注的句子s的状况下,去判断生成标注序列l的几率,以下所示:
这里:
p(l_i|l_i-1)是转移几率,好比,l_i-1是介词,l_i是名词,此时的p表示介词后面的词是名词的几率。
p(w_i|l_i)表示发射几率(emission probability),好比l_i是名词,w_i是单词“ball”,此时的p表示在是名词的状态下,是单词“ball”的几率。
那么,HMM和CRF怎么比较呢?
答案是:CRF比HMM要强大的多,它能够解决全部HMM可以解决的问题,而且还能够解决许多HMM解决不了的问题。事实上,咱们能够对上面的HMM模型取对数,就变成下面这样:
咱们把这个式子与CRF的式子进行比较:
不难发现,若是咱们把第一个HMM式子中的log形式的几率看作是第二个CRF式子中的特征函数的权重的话,咱们会发现,CRF和HMM具备相同的形式。
换句话说,咱们能够构造一个CRF,使它与HMM的对数形式相同。怎么构造呢?
对于HMM中的每个转移几率p(l_i=y|l_i-1=x),咱们能够定义这样的一个特征函数:
该特征函数仅当l_i = y,l_i-1=x时才等于1。这个特征函数的权重以下:
一样的,对于HMM中的每个发射几率,咱们也均可以定义相应的特征函数,并让该特征函数的权重等于HMM中的log形式的发射几率。
用这些形式的特征函数和相应的权重计算出来的p(l|s)和对数形式的HMM模型几乎是同样的!
用一句话来讲明HMM和CRF的关系就是这样:
每个HMM模型都等价于某个CRF
每个HMM模型都等价于某个CRF
每个HMM模型都等价于某个CRF
可是,CRF要比HMM更增强大,缘由主要有两点:
pic4.PNG
若是i=1,l_i=动词,而且句子s是以“?”结尾时,f2=1,其余状况f2=0。