zoukankan      html  css  js  c++  java
  • 条件随机场CRF

    HMM只是针对有向图来的,而CRF针对无向图,可以参考一下:Classical Probabilistic Models and Conditional Random Fields

    先加一个例子,在一个持续时间段的图片中,里面如果有一张闭着的嘴部图片,那你应该怎么标注它?它是在吃饭,还是唱歌?必须将与它相邻的照片的标签信息考虑进来。

    这就是条件随机场(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中的一种简单情况。

     
    定义好一组特征函数后,我们要给每个特征函数f_j赋予一个权重λ_j。

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

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

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


     
    每一个HMM模型都等价于某个CRF
    每一个HMM模型都等价于某个CRF
    每一个HMM模型都等价于某个CRF
     
    但是: 
    CRF可以定义数量更多,种类更丰富的特征函数。HMM模型具有天然具有局部性,就是说,在HMM模型中,当前的单词只依赖于当前的标签,当前的标签只依赖于前一个标签。这样的局部性限制了HMM只能定义相应类型的特征函数,我们在上面也看到了。但是CRF却可以着眼于整个句子s定义更具有全局性的特征函数
    CRF可以使用任意的权重 将对数HMM模型看做CRF时,特征函数的权重由于是log形式的概率,所以都是小于等于0的,而且概率还要满足相应的限制
    但在CRF中,每个特征函数的权重可以是任意值,没有这些限制。

    原文在这里[http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/]
    参考链接:https://www.jianshu.com/p/55755fc649b1

    更多的实战练习:
  • 相关阅读:
    深入探索迭代器(续)
    深入探索迭代器
    C++ 容器的综合应用的一个简单实例——文本查询程序
    multimap 和 multiset 类型
    set 类型
    map 类型
    关联容器
    Ajax请求成功, 但进不去success方法
    springboot指定配置文件启动项目
    新测可用IntelliJ IDEA 2020.1 for mac
  • 原文地址:https://www.cnblogs.com/xingnie/p/12360714.html
Copyright © 2011-2022 走看看