全栈网站开发,如何投放网络广告,做翻译赚钱的网站,wordpress漂浮转载自 如何轻松愉快的理解条件随机场#xff08;CRF#xff09;
如何轻松愉快的理解条件随机场#xff08;CRF#xff09;#xff1f;
理解条件随机场最好的办法就是用一个现实的例子来说明它。
但是目前中文的条件随机场文章鲜有这样干的#xff0c;可能写文章的人…转载自 如何轻松愉快的理解条件随机场CRF
如何轻松愉快的理解条件随机场CRF
理解条件随机场最好的办法就是用一个现实的例子来说明它。
但是目前中文的条件随机场文章鲜有这样干的可能写文章的人都是大牛不屑于举例子吧。
于是乎我翻译了这篇文章。希望对其他伙伴有所帮助。 原文在这里[http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/]
想直接看英文的朋友可以直接点进去了。我在翻译时并没有拘泥于原文许多地方都加入了自己的理解用学术点的话说就是意译。画外音装什么装快点开始吧。好的下面开始翻译
假设你有许多小明同学一天内不同时段的照片从小明提裤子起床到脱裤子睡觉各个时间段都有小明是照片控。
现在的任务是对这些照片进行分类。比如有的照片是吃饭那就给它打上吃饭的标签有的照片是跑步时拍的那就打上跑步的标签有的照片是开会时拍的那就打上开会的标签。问题来了你准备怎么干
一个简单直观的办法就是不管这些照片之间的时间顺序想办法训练出一个多元分类器。就是用一些打好标签的照片作为训练数据训练出一个模型直接根据照片的特征来分类。
例如如果照片是早上6:00拍的且画面是黑暗的那就给它打上睡觉的标签;如果照片上有车那就给它打上开车的标签。
这样可行吗
乍一看可以但实际上由于我们忽略了这些照片之间的时间顺序这一重要信息我们的分类器会有缺陷的。
举个例子假如有一张小明闭着嘴的照片怎么分类显然难以直接判断需要参考闭嘴之前的照片如果之前的照片显示小明在吃饭那这个闭嘴的照片很可能是小明在咀嚼食物准备下咽可以给它打上吃饭的标签如果之前的照片显示小明在唱歌那这个闭嘴的照片很可能是小明唱歌瞬间的抓拍可以给它打上唱歌的标签。
所以为了让我们的分类器能够有更好的表现在为一张照片分类时我们必须将与它相邻的照片的标签信息考虑进来。
这——就是条件随机场(CRF)大显身手的地方 1、从例子说起-词性标注问题
啥是词性标注问题
非常简单的就是给一个句子中的每个单词注明词性。
比如这句话“Bob drank coffee at Starbucks”注明每个单词的词性后是这样的“Bob (名词) drank(动词) coffee(名词) at(介词) Starbucks(名词)”。
下面就用条件随机场来解决这个问题。
以上面的话为例有5个单词我们将(名词动词名词介词名词)作为一个标注序列称为l可选的标注序列有很多种比如l还可以是这样名词动词动词介词名词我们要在这么多的可选标注序列中挑选出一个最靠谱的作为我们对这句话的标注。
怎么判断一个标注序列靠谱不靠谱呢
就我们上面展示的两个标注序列来说第二个显然不如第一个靠谱因为它把第二、第三个单词都标注成了动词动词后面接动词这在一个句子中通常是说不通的。
假如我们给每一个标注序列打分打分越高代表这个标注序列越靠谱我们至少可以说凡是标注中出现了动词后面还是动词的标注序列要给它负分
上面所说的动词后面还是动词就是一个特征函数我们可以定义一个特征函数集合用这个特征函数集合来为一个标注序列打分并据此选出最靠谱的标注序列。
也就是说每一个特征函数都可以用来为一个标注序列评分把集合中所有特征函数对同一个标注序列的评分综合起来就是这个标注序列最终的评分值。 2、定义CRF中的特征函数
现在我们正式地定义一下什么是CRF中的特征函数所谓特征函数就是这样的函数它接受四个参数 句子s就是我们要标注词性的句子 i用来表示句子s中第i个单词 l_i表示要评分的标注序列给第i个单词标注的词性 l_i-1表示要评分的标注序列给第i-1个单词标注的词性
它的输出值是0或者1,0表示要评分的标注序列不符合这个特征1表示要评分的标注序列符合这个特征。
Note:这里我们的特征函数仅仅依靠当前单词的标签和它前面的单词的标签对标注序列进行评判这样建立的CRF也叫作线性链CRF这是CRF中的一种简单情况。
为简单起见本文中我们仅考虑线性链CRF。 3、从特征函数到概率
定义好一组特征函数后我们要给每个特征函数f_j赋予一个权重λ_j。
现在只要有一个句子s有一个标注序列l我们就可以利用前面定义的特征函数集来对l评分。 上式中有两个求和外面的求和用来求每一个特征函数f_j评分值的和里面的求和用来求句子中每个位置的单词的的特征值的和。
对这个分数进行指数化和标准化我们就可以得到标注序列l的概率值p(l|s)如下所示 4、几个特征函数的例子
前面我们已经举过特征函数的例子下面我们再看几个具体的例子帮助增强大家的感性认识。 当l_i是“副词”并且第i个单词以“ly”结尾时我们就让f1 1其他情况f1为0。不难想到f1特征函数的权重λ1应当是正的。而且λ1越大表示我们越倾向于采用那些把以“ly”结尾的单词标注为“副词”的标注序列 如果i1l_i动词并且句子s是以“”结尾时f21其他情况f20。同样λ2应当是正的并且λ2越大表示我们越倾向于采用那些把问句的第一个单词标注为“动词”的标注序列。 当l_i-1是介词l_i是名词时f3 1其他情况f30。λ3也应当是正的并且λ3越大说明我们越认为介词后面应当跟一个名词。 如果l_i和l_i-1都是介词那么f4等于1其他情况f40。
这里我们应当可以想到λ4是负的并且λ4的绝对值越大表示我们越不认可介词后面还是介词的标注序列。
好了一个条件随机场就这样建立起来了让我们总结一下 为了建一个条件随机场我们首先要定义一个特征函数集每个特征函数都以整个句子s当前位置i位置i和i-1的标签为输入。
然后为每一个特征函数赋予一个权重然后针对每一个标注序列l对所有的特征函数加权求和必要的话可以把求和的值转化为一个概率值。 5、CRF与逻辑回归的比较 观察公式 是不是有点逻辑回归的味道事实上条件随机场是逻辑回归的序列化版本。
逻辑回归是用于分类的对数线性模型条件随机场是用于序列化标注的对数线性模型。 6、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_iy|l_i-1x),我们可以定义这样的一个特征函数 该特征函数仅当l_i y,l_i-1x时才等于1。这个特征函数的权重如下 同样的对于HMM中的每一个发射概率我们也都可以定义相应的特征函数并让该特征函数的权重等于HMM中的log形式的发射概率。
用这些形式的特征函数和相应的权重计算出来的p(l|s)和对数形式的HMM模型几乎是一样的
用一句话来说明HMM和CRF的关系就是这样每一个HMM模型都等价于某个CRF每一个HMM模型都等价于某个CRF每一个HMM模型都等价于某个CRF
但是CRF要比HMM更加强大原因主要有两点 CRF可以定义数量更多种类更丰富的特征函数。HMM模型具有天然具有局部性就是说在HMM模型中当前的单词只依赖于当前的标签当前的标签只依赖于前一个标签。 这样的局部性限制了HMM只能定义相应类型的特征函数我们在上面也看到了。但是CRF却可以着眼于整个句子s定义更具有全局性的特征函数如这个特征函数 如果i1l_i动词并且句子s是以“”结尾时f21其他情况f20。
CRF可以使用任意的权重 将对数HMM模型看做CRF时特征函数的权重由于是log形式的概率所以都是小于等于0的而且概率还要满足相应的限制如 但在CRF中每个特征函数的权重可以是任意值没有这些限制。