美文网首页机器学习条件随机场prog
如何轻松愉快地理解条件随机场(CRF)?

如何轻松愉快地理解条件随机场(CRF)?

作者: 工程师milter | 来源:发表于2017-01-06 15:28 被阅读37380次

    理解条件随机场最好的办法就是用一个现实的例子来说明它。但是目前中文的条件随机场文章鲜有这样干的,可能写文章的人都是大牛,不屑于举例子吧。于是乎,我翻译了这篇文章。希望对其他伙伴有所帮助。
    原文在这里[http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/]

    想直接看英文的朋友可以直接点进去了。我在翻译时并没有拘泥于原文,许多地方都加入了自己的理解,用学术点的话说就是意译。(画外音:装什么装,快点开始吧。)好的,下面开始翻译!

    假设你有许多小明同学一天内不同时段的照片,从小明提裤子起床到脱裤子睡觉各个时间段都有(小明是照片控!)。现在的任务是对这些照片进行分类。比如有的照片是吃饭,那就给它打上吃饭的标签;有的照片是跑步时拍的,那就打上跑步的标签;有的照片是开会时拍的,那就打上开会的标签。问题来了,你准备怎么干?

    一个简单直观的办法就是,不管这些照片之间的时间顺序,想办法训练出一个多元分类器。就是用一些打好标签的照片作为训练数据,训练出一个模型,直接根据照片的特征来分类。例如,如果照片是早上6:00拍的,且画面是黑暗的,那就给它打上睡觉的标签;如果照片上有车,那就给它打上开车的标签。

    这样可行吗?

    乍一看可以!但实际上,由于我们忽略了这些照片之间的时间顺序这一重要信息,我们的分类器会有缺陷的。举个例子,假如有一张小明闭着嘴的照片,怎么分类?显然难以直接判断,需要参考闭嘴之前的照片,如果之前的照片显示小明在吃饭,那这个闭嘴的照片很可能是小明在咀嚼食物准备下咽,可以给它打上吃饭的标签;如果之前的照片显示小明在唱歌,那这个闭嘴的照片很可能是小明唱歌瞬间的抓拍,可以给它打上唱歌的标签。

    所以,为了让我们的分类器能够有更好的表现,在为一张照片分类时,我们必须将与它相邻的照片的标签信息考虑进来。这——就是条件随机场(CRF)大显身手的地方!

    从例子说起——词性标注问题

    啥是词性标注问题?

    非常简单的,就是给一个句子中的每个单词注明词性。比如这句话:“Bob drank coffee at Starbucks”,注明每个单词的词性后是这样的:“Bob (名词) drank(动词) coffee(名词) at(介词) Starbucks(名词)”。

    下面,就用条件随机场来解决这个问题。

    以上面的话为例,有5个单词,我们将:(名词,动词,名词,介词,名词)作为一个标注序列,称为l,可选的标注序列有很多种,比如l还可以是这样:(名词,动词,动词,介词,名词),我们要在这么多的可选标注序列中,挑选出一个最靠谱的作为我们对这句话的标注。

    怎么判断一个标注序列靠谱不靠谱呢?

    就我们上面展示的两个标注序列来说,第二个显然不如第一个靠谱,因为它把第二、第三个单词都标注成了动词,动词后面接动词,这在一个句子中通常是说不通的。

    假如我们给每一个标注序列打分,打分越高代表这个标注序列越靠谱,我们至少可以说,凡是标注中出现了动词后面还是动词的标注序列,要给它负分!!

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

    定义CRF中的特征函数

    现在,我们正式地定义一下什么是CRF中的特征函数,所谓特征函数,就是这样的函数,它接受四个参数:

    • 句子s(就是我们要标注词性的句子)
    • i,用来表示句子s中第i个单词
    • l_i,表示要评分的标注序列给第i个单词标注的词性
    • l_i-1,表示要评分的标注序列给第i-1个单词标注的词性

    它的输出值是0或者1,0表示要评分的标注序列不符合这个特征,1表示要评分的标注序列符合这个特征。

    Note:这里,我们的特征函数仅仅依靠当前单词的标签和它前面的单词的标签对标注序列进行评判,这样建立的CRF也叫作线性链CRF,这是CRF中的一种简单情况。为简单起见,本文中我们仅考虑线性链CRF。

    从特征函数到概率

    定义好一组特征函数后,我们要给每个特征函数f_j赋予一个权重λ_j。现在,只要有一个句子s,有一个标注序列l,我们就可以利用前面定义的特征函数集来对l评分。

    pic1.PNG

    上式中有两个求和,外面的求和用来求每一个特征函数f_j评分值的和,里面的求和用来求句子中每个位置的单词的的特征值的和。

    对这个分数进行指数化和标准化,我们就可以得到标注序列l的概率值p(l|s),如下所示:

    pic2.PNG

    几个特征函数的例子

    前面我们已经举过特征函数的例子,下面我们再看几个具体的例子,帮助增强大家的感性认识。

    pic3.PNG

    当l_i是“副词”并且第i个单词以“ly”结尾时,我们就让f1 = 1,其他情况f1为0。不难想到,f1特征函数的权重λ1应当是正的。而且λ1越大,表示我们越倾向于采用那些把以“ly”结尾的单词标注为“副词”的标注序列

    pic4.PNG

    如果i=1,l_i=动词,并且句子s是以“?”结尾时,f2=1,其他情况f2=0。同样,λ2应当是正的,并且λ2越大,表示我们越倾向于采用那些把问句的第一个单词标注为“动词”的标注序列。

    pic5.PNG

    当l_i-1是介词,l_i是名词时,f3 = 1,其他情况f3=0。λ3也应当是正的,并且λ3越大,说明我们越认为介词后面应当跟一个名词。

    pic6.PNG

    如果l_i和l_i-1都是介词,那么f4等于1,其他情况f4=0。这里,我们应当可以想到λ4是负的,并且λ4的绝对值越大,表示我们越不认可介词后面还是介词的标注序列。

    好了,一个条件随机场就这样建立起来了,让我们总结一下:
    为了建一个条件随机场,我们首先要定义一个特征函数集,每个特征函数都以整个句子s,当前位置i,位置i和i-1的标签为输入。然后为每一个特征函数赋予一个权重,然后针对每一个标注序列l,对所有的特征函数加权求和,必要的话,可以把求和的值转化为一个概率值。

    CRF与逻辑回归的比较

    观察公式:

    是不是有点逻辑回归的味道?
    事实上,条件随机场是逻辑回归的序列化版本。逻辑回归是用于分类的对数线性模型,条件随机场是用于序列化标注的对数线性模型。

    CRF与HMM的比较

    对于词性标注问题,HMM模型也可以解决。HMM的思路是用生成办法,就是说,在已知要标注的句子s的情况下,去判断生成标注序列l的概率,如下所示:

    pic7.PNG

    这里:
    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模型取对数,就变成下面这样:

    pic8.PNG

    我们把这个式子与CRF的式子进行比较:


    pic1.PNG

    不难发现,如果我们把第一个HMM式子中的log形式的概率看做是第二个CRF式子中的特征函数的权重的话,我们会发现,CRF和HMM具有相同的形式。

    换句话说,我们可以构造一个CRF,使它与HMM的对数形式相同。怎么构造呢?

    对于HMM中的每一个转移概率p(l_i=y|l_i-1=x),我们可以定义这样的一个特征函数:

    pic9.PNG

    该特征函数仅当l_i = y,l_i-1=x时才等于1。这个特征函数的权重如下:

    pic10.PNG

    同样的,对于HMM中的每一个发射概率,我们也都可以定义相应的特征函数,并让该特征函数的权重等于HMM中的log形式的发射概率。

    用这些形式的特征函数和相应的权重计算出来的p(l|s)和对数形式的HMM模型几乎是一样的!

    用一句话来说明HMM和CRF的关系就是这样:
    每一个HMM模型都等价于某个CRF
    每一个HMM模型都等价于某个CRF
    每一个HMM模型都等价于某个CRF

    但是,CRF要比HMM更加强大,原因主要有两点:

    • CRF可以定义数量更多,种类更丰富的特征函数。HMM模型具有天然具有局部性,就是说,在HMM模型中,当前的单词只依赖于当前的标签,当前的标签只依赖于前一个标签。这样的局部性限制了HMM只能定义相应类型的特征函数,我们在上面也看到了。但是CRF却可以着眼于整个句子s定义更具有全局性的特征函数,如这个特征函数:
    pic4.PNG

    如果i=1,l_i=动词,并且句子s是以“?”结尾时,f2=1,其他情况f2=0。

    • CRF可以使用任意的权重 将对数HMM模型看做CRF时,特征函数的权重由于是log形式的概率,所以都是小于等于0的,而且概率还要满足相应的限制,如
      pic11.PNG
      但在CRF中,每个特征函数的权重可以是任意值,没有这些限制。

    相关文章

      网友评论

      • 别拿青春来挥霍:作者的理解可能有点偏差,CRF跟HMM没啥关系,HMM只是针对有向图来的,而CRF针对无向图,你可以参考一下下面的文章:Classical Probabilistic Models and
        Conditional Random Fields
        豆子1980:我觉得作者理解的非常准确呀
        工程师milter:@别拿青春来挥霍 这里只是从数学的角度来分析的,二者具有相似性。
      • 36ff6b29af3d:写的很好,在知乎上也见到了博主的回答
      • 梦里寻梦8:大佬,请问一下,关于特征函数的赋予,也就是说f这个函数什么情况为1是如何实现的呢?
        fd73360d8207:@milter 请问一下,如果是用CRFsuite和CRF++,它里面的特征函数是怎么定义的呢?
        梦里寻梦8:@milter 你的文章都狠不错啊!希望以后能多向你学习学习!目前自学机器学习啥的!
        工程师milter:@梦里寻梦8 这是自己根据问题进行定义的
      • f05c3018969e:赞一个,结合对HMM的理解可以看懂90%的内容。
      • 冻梨呦:顶,很清晰!!
      • 草里有只羊:不错喔!

        不过指数化和标准化,这个有点理解不了
        指数化?? 我也没看懂,是所有得分都进行exp, 然后求占比??
        标准化: y = (x-均值)/方差
        草里有只羊:@默存_3315 谢谢,指数化,也叫 softmax 哈哈
        915ee0994393:指数化:对的,所有得分都进行exp, 然后求占比。
        标准化:也即是归一化,确保分数的概率值之和为1。
      • 付浩然_673a:请问在进行分数指数化的公式中,分母的 l‘ 是什么含义
        915ee0994393:对一个句子s可以有多种标注方法, l‘ 是所有可能标注方法的集合。
      • 某人盧披星戴月:真心不错,给楼主点个赞。受益匪浅
        工程师milter:@某人盧披星戴月 谢谢!欢迎交流!
      • 哈哈_cc6b:非常好,第一次弄明白hmm和crf的关系
      • 064458d8b690:写的很好!!!
      • Verandern:写得非常棒,看了受益匪浅,希望能再多分享一些学习心得
      • klory:翻译,写的都很好!
        工程师milter:@klory 多谢夸奖:smile:
      • 6f08c9283c8a:那么crf怎么训练呢?能讲讲吗
        79861a2bcda4:谢谢,写的好
        6f08c9283c8a:@milter 看了李航的,似乎是和LR训练一个思路,和HMM不一样
        工程师milter:@MoeWoof 有时间会写一篇
      • rayren的简书:介绍的很清晰,赞~
      • 33cd475e1d1b:讲得很好,把公式展开带入就比较好理解了
      • a90517cea876:读完有种意犹未尽的感觉,很棒,之前读李航的那本书这章节看的很吃力,对特征函数很陌生,看了作者的文章明白了点了。继续啃~
      • de209ea93820:如果能写一个词性标注的demo,那就更完美了。
      • MaxShan:不错(*๓´╰╯`๓)
      • DataMiner:翻译得不错。
        正好最近也在死磕 CRF,你说的李航的书,和那个链接,我也恰好都看过,另外还在看一个讲图模型的,太艰深了...

        其实非常想知道这些特征函数怎么来的,感觉都是些语法经验的总结,是『规则』而不是统计模型。只不过在优化权重的时候用了统计学习的思想
        工程师milter:@DataMiner 是的
        kirai:@milter 假如crf用在图像语义分割的话,就会借鉴物理中势的定义来对势函数进行建模作为特征函数,我这么理解对么?
        工程师milter:@DataMiner 我感觉这些特征函数需要用领域知识来确定。可加我微信:yizhifanshenzixing 我拉你进机器学习交流群
      • 2453cf172ab4:写的很仔细,给你十个赞
        工程师milter: @dantezhao 我知道这对大牛们来说很easy了。
      • 流川枫AI:虽然没看懂:relaxed:
        流川枫AI:@milter :octocat: 你发现了
        工程师milter:@流川枫debug 你骗我:confounded:

      本文标题:如何轻松愉快地理解条件随机场(CRF)?

      本文链接:https://www.haomeiwen.com/subject/fomtbttx.html