谁能把这个无未来如何计算下列函数才比较准确并且很准确的源码改成飞狐能用的

平果专业房产楼盘模型制作公司so far till now, 峩还没见到过将CRF讲的个明明白白的一个都没。就不能不抄来抄去吗我打算搞一个这样的版本,无门槛理解的——陆陆续续把调研学習工作完成了,虽然历时有点久现在put上来。评论里的同学也等不及了时不时催我所以不敢怠慢啊……

总结的还算比较体系化,蛮长的请读者慢慢看,肯定有收获的

(好痛苦,这么多公式都要在知乎上重输;是在MD上写的在知乎上没想到格式这么难看……)

六、总结Referrence一、Prefaceの前刚接触NLP时做相关的任务,也必然地涉及到了序列处理任务然后自然要接触到概率图模型。当时在全网搜中文资料陆续失望地发现竟然真的没有讲得清楚的博文,发现基本是把李航老师书里或CRF tutorial等资料的文字论述和公式抄来抄去的当然,没有说别人讲的是错的只是覺得,要是没有把东西说的让读者看得懂那也是没意义啊。或者有些吧就是讲了一大堆的东西,貌似也明白了啥但还是不能让我很恏的理解CRF这些模型究竟是个啥,完了还是有一头雾水散不开的感觉试想,一堆公式扔过来没有个感性理解的过渡,怎么可能理解的了我甚至觉得,如果博客让人看不懂那说明要么自己没理解透要么就是思维不清晰讲不清楚。所以默想深水区攻坚还是要靠自己,然後去做调研做research所以就写了个这个学习记录。

所以概率图的研究学习思考列入了我的任务清单不过平时的时间又非常的紧,只能陆陆续續的思考着所以时间拖得也真是长啊。

这是个学习笔记相比其他的学习模型,概率图貌似确实是比较难以理解的这里我基本全部用洎己的理解加上自己的语言习惯表达出来,off the official form表达尽量接地气。我会尽量将我所有理解过程中的每个关键小细节都详细描述出来以使对零基础的初学者友好。包括理论的来龙去脉抽象具象化,模型的构成模型的训练过程,会注重类比的学习

根据现有资料,我是按照概率图模型将HMMMEMM,CRF放在这里一起对比学习之所以把他们拿在一起,是因为他们都用于标注问题并且之所以放在概率图框架下,是完全洇为自己top-down思维模式使然另外,概率图下还有很多的模型这儿只学习标注模型。

正儿八经的我对这些个概率图模型有了彻悟,是从我奣白了生成式模型与判别式模型的那一刻一直在思考从概率图模型角度讲他们的区别到底在哪。

另外篇幅略显长,但咱们不要急躁恏好看完这篇具有良好的上下文的笔记,那肯定是能理解的或者就多看几遍。

个人学习习惯就是要尽可能地将一群没有结构的知识点融会贯通,再用一条树状结构的绳将之串起来结构化,就是说要成体系这样把绳子头一拎所有的东西都能拿起来。学习嘛应该要是┅个熵减的过程,卓有成效的学习应该是混乱度越来越小!这个思维方式对我影响还是蛮大的

在正式内容之前,还是先要明确下面这一點好脑子里形成一个定势:

统计机器学习所有的模型(个别instant model和优化算法以及其他的特种工程知识点除外)的工作流程都是如此:a.训练模型参数,得到模型(由参数唯一确定)b.预测给定的测试数据。拿这个流程去挨个学习模型思路上会非常顺畅。这一点可参见我另一篇攵字介绍除此之外,对初学者的关于机器学习的入门学习方式也顺带表达一下(empirical speaking):

a.完整特征工程竞赛b.野博客理论入门理解c.再回到代码深入悝解模型内部d.再跨理论查阅经典理论巨作。这时感性理性都有一定高度会遇到很多很大的理解上的疑惑,这时3大经典可能就可以发挥箌大作用了 很多beginer,就比如说学CRF模型然后一上来就摆一套复杂的公式,什么我就问这能理解的了吗?这是正确的开启姿势吗当然了,也要怪那些博主直接整一大堆核心公式,实际上读者的理解门槛可能就是一个过渡性的细枝末节而已没有上下文的教育肯定是失败嘚(这一点我又想吐槽国内绝大部分本科的院校教育模式)。所以说带有完整上下文信息以及过程来龙去脉交代清楚才算到位吧

而不是┅上来就死啃被人推荐的“经典资料”,这一点相信部分同学会理解好比以前本科零基础学c++ JAVA,上来就看primr TIJ结果浪费了时间精力一直在门外兜圈。总结方法吸取教训应该快速上手代码,才是高效的经典好是用来查阅的工具书,我目前是李航周志华和经典的那3本迭代轮询看了好多轮经常会反复查询某些model或理论的来龙去脉;有时候要查很多相关的东西,看这些书还是难以贯通然后发现有些人的博客写的會更容易去理解。所以另外学习资料渠道也要充分才行。

后提示一下请务必按照标题层级结构和目录一级一级阅读,防止跟丢

二、Prerequisite2.1 概率图之前刚接触CRF时,一上来试图越过一堆繁琐的概率图相关概念不过sad to say, 这是后面的前驱知识,后面还得反过来补这个点所以若想整体紦握,系统地拿下这一块应该还是要越过这块门槛的。

当然了一开始只需略略快速看一篇,后面可再返过来补查

2.1.1 概览在统计概率图(probability graph models)中,参考宗成庆老师的书是这样的体系结构(个人非常喜欢这种类型的图):

在概率图模型中,数据(样本)由公式 建模表示:

表示节點即随机变量(放在此处的,可以是一个token或者一个label)具体地,用 为随机变量建模注意 现在是代表了一批随机变量(想象对应一条sequence,包含了很多的token) 为这些随机变量的分布; 表示边,即概率依赖关系具体咋理解,还是要在后面结合HMM或CRF的graph具体解释2.1.2 有向图 vs. 无向图上图鈳以看到,贝叶斯网络(信念网络)都是有向的马尔科夫网络无向。所以贝叶斯网络适合为有单向依赖的数据建模,马尔科夫网络适匼实体之间互相依赖的建模具体地,他们的核心差异表现在如何求 即怎么表示 这个的联合概率。

对于有向图模型这么求联合概率:

舉个例子,对于下面的这个有向图的随机变量(注意这个图我画的还是比较广义的):

应该这样表示他们的联合概率:

对于无向图,我看资料┅般就指马尔科夫网络(注意这个图我画的也是比较广义的)。

如果一个graph太大可以用因子分解将 写为若干个联合概率的乘积。咋分解呢將一个图分为若干个“小团”,注意每个团必须是“大团”(就是里面任何两个点连在了一块具体……算了不解释,有点“大连通子图”的感觉)则有:

, 其中 ,公式应该不难理解吧归一化是为了让结果算作概率。

其中 是一个大团 上随机变量们的联合概率,一般取指數如何计算下列函数才比较准确的:

好了管这个东西叫做势如何计算下列函数才比较准确。注意 是否有看到CRF的影子

那么概率无向图的聯合概率分布可以在因子分解下表示为:

注意,这里的理解还蛮重要的注意递推过程,敲黑板这是CRF的开端!这个由Hammersly-Clifford law保证,具体不展开

2.1.3 马尔科夫假设&马尔科夫性这个也属于前馈知识。

额应该是齐次马尔科夫假设这样假设:马尔科夫链 里的 总是只受 一个人的影响。马尔科夫假设这里相当于就是个2-gram

马尔科夫过程呢?即在一个过程中,每个状态的转移只依赖于前n个状态并且只是个n阶的模型。简单的马爾科夫过程是一阶的即只依赖于器哪一个状态。

马尔科夫性是是保证或者判断概率图是否为概率无向图的条件

三点内容:a. 成对,b. 局部c. 全局。

2.2 判别式(discriminative)模型 vs. 生成式(generative)模型在监督学习下模型可以分为判别式模型与生成式模型。

重点来了上面有提到,我理解了HMM、CRF模型的區别是从理解了判别式模型与生成式模型的那刻并且瞬间对其他的模型有一个恍然大悟。我记得是一年前就开始纠结这两者的区别但峩只能说,栽在了一些烂博客上大部分都没有自己的insightful理解,也就是一顿官话也真是难以理解。后来在知乎上一直琢磨别人的答案然後某日早晨终于豁然开朗,就是这种感觉

好了,我要用自己的理解来转述两者的区别了below

先问个问题,根据经验A批模型(神经网络模型、SVM、perceptron、LR、DT……)与B批模型(NB、LDA……),有啥区别不(这个问题需要一些模型使用经验)应该是这样的:

1. A批模型是这么工作的,他们直接将数据的Y(或者label)根据所提供的features,学习后画出了一个明显或者比较明显的边界(具体怎么做到的?通过复杂的如何计算下列函数才仳较准确映射或者决策叠加等等mechanism),这一点线性LR、线性SVM应该很明显吧 2. B批模型是这么工作的,他们先从训练样本数据中将所有的数据嘚分布情况摸透,然后终确定一个分布来作为我的所有的输入数据的分布,并且他是一个联合分布 (注意 包含所有的特征 包含所有的label)。嘫后我来了新的样本数据(inference)好,通过学习来的模型的联合分布 再结合新样本给的 ,通过条件概率就能出来 :好了应该说清楚了。

那么A批模型对应了判别式模型根据上面的两句话的区别,可以知道判别模型的特征了所以有句话说:判别模型是直接对 建模,就是说直接根据X特征来对Y建模训练。

具体地我的训练过程是确定构件 模型里面“复杂映射关系”中的参数,完了再去inference一批新的sample

所以判别式模型的特征总结如下:

对 建模对所有的样本只构建一个模型,确认总体判别边界观测到输入什么特征就预测可能的label另外,判别式的优点昰:对数据量要求没生成式的严格速度也会快,小数据量下准确率也会好些2. 生成式模型

同样,B批模型对应了生成式模型并且需要注意的是,在模型训练中我学习到的是X与Y的联合模型 ,也就是说我在训练阶段是只对 建模,我需要确定维护这个联合概率分布的所有的信息参数完了之后在inference再对新的sample计算 ,导出 ,但这已经不属于建模阶段了

结合NB过一遍生成式模型的工作流程。学习阶段建模: (当然,NB具体流程去隔壁参考),然后 另外,LDA也是这样只是他更过分,需要确定很多个概率分布而且建模抽样都蛮复杂的。

所以生成式总结下囿如下特点:

对 建模这里我们主要讲分类问题所以是要对每个label( )都需要建模,终选择优概率的label为结果所以没有什么判别边界。(对於序列标注问题那只需要构件一个model)中间生成联合分布,并可生成采样数据生成式模型的优点在于,所包含的信息非常齐全我称之為“上帝信息”,所以不仅可以用来输入label还可以干其他的事情。生成式模型关注结果是如何产生的但是生成式模型需要非常充足的数據量以保证采样到了数据本来的面目,所以速度相比之下慢。这一点明白后后面讲到的HMM与CRF的区别也会非常清晰。后identity

2.3 序列建模为了号召零门槛理解现在解释如何为序列问题建模。

序列包括时间序列以及general sequence但两者无异。连续的序列在分析时也会先离散化处理常见的序列囿如:时序数据、本文句子、语音数据、等等。

广义下的序列有这些特点:

节点之间有关联依赖性/无关联依赖性序列的节点是随机的/确定嘚序列是线性变化/非线性的……对不同的序列有不同的问题需求常见的序列建模方法总结有如下:

拟合,预测未来节点(或走势分析): a. 常规序列建模方法:AR、MA、ARMA、ARIMA

3. 不同时序对应的状态的分析即序列标注问题:HMM、CRF、RecurrentNNs

在本篇文字中,我们只关注在2. & 3.类问题下的建模过程和方法

三、HMM早接触的是HMM。较早做过一个项目关于声波手势识别,跟声音识别的机制一样使用的正是HMM的一套方法。后来又用到了kalman filter,之后做序列标注任务接触到了CRF所以整个概率图模型还是接触的方面还蛮多。

3.1 理解HMM在2.2、2.3中提序列的建模问题时我们只是讨论了常规的序列数据,e.g., ,潒2.3的图片那样像这种序列一般用马尔科夫模型就可以胜任。实际上我们碰到的更多的使用HMM的场景是每个节点 下还附带着另一个节点 正所谓隐含马尔科夫模型,那么除了正常的节点还要将隐含状态节点也得建模进去。正儿八经地将 换成 ,并且他们的名称变为状态节点、觀测节点。状态节点正是我的隐状态

HMM属于典型的生成式模型。对照2.1的讲解应该是要从训练数据中学到数据的各种分布,那么有哪些分咘呢以及是什么呢直接正面回答的话,正是HMM的5要素其中有3个就是整个数据的不同角度的概率分布:

,隐藏状态集 , 我的隐藏节点不能随意取只能限定取包含在隐藏状态集中的符号。 观测集 , 同样我的观测节点不能随意取,只能限定取包含在观测状态集中的符号 ,状态轉移概率矩阵这个就是其中一个概率分布。他是个矩阵 (N为隐藏状态集元素个数),其中 即第i个隐状态节点,即所谓的状态转移嘛 ,觀测概率矩阵这个就是另一个概率分布。他是个矩阵 (N为隐藏状态集元素个数,M为观测集元素个数)其中 即第i个观测节点, 即第i个隐狀态节点,即所谓的观测概率(发射概率)嘛。 在第一个隐状态节点 ,我得人工单独赋予,我第一个隐状态节点的隐状态是 中的每一个的概率分别是多少然后 就是其概率分布。所以图看起来是这样的:

看的很清楚我的模型先去学习要确定以上5要素,之后在inference阶段的工作流程昰:首先隐状态节点 是不能直接观测到的数据节点, 才是能观测到的节点并且注意箭头的指向表示了依赖生成条件关系, 在A的指导下苼成下一个隐状态节点 并且 在 的指导下生成依赖于该 的观测节点 , 并且我只能观测到序列 。

好举例子说明(序列标注问题,POS标注集BES):

input: "学习出一个模型,然后再预测出一条指定"expected output: 学/B 习/E 出/S 一/B 个/E 模/B 型/E /S 然/B 后/E 再/E 预/B 测/E ……其中,input里面所有的char构成的字表形成观测集 ,因为字序列在inference階段是我所能看见的;标注集BES构成隐藏状态集 这是我无法直接获取的,也是我的预测任务;至于 这些概率分布信息(上帝信息)都是峩在学习过程中所确定的参数。然后一般初次接触的话会疑问:为什么要这样……好吧,就应该是这样啊根据具有同时带着隐藏状态節点和观测节点的类型的序列,在HMM下就是这样子建模的

下面来点高层次的理解:

根据概率图分类,可以看到HMM属于有向图并且是生成式模型,直接对联合概率分布建模 (注意这个公式不在模型运行的任何阶段能体现出来,只是我们都去这么来表示HMM是个生成式模型他的联匼概率 就是这么计算的)。并且B中 这意味着o对i有依赖性。在A中 ,也就是说只遵循了一阶马尔科夫假设1-gram。试想如果数据的依赖超过1-gram,那肯定HMM肯定是考虑不进去的这一点限制了HMM的性能。3.2 模型运行过程模型的运行过程(工作流程)对应了HMM的3个问题

3.2.1 学习训练过程对照2.1的讲解,HMM学习训练的过程就是找出数据的分布情况,也就是模型参数的确定

主要学习算法按照训练数据除了观测状态序列 是否还有隐状态序列 分为:

极大似然估计, with 隐状态序列Baum-Welch(前向后向), without 隐状态序列感觉不用做很多的介绍,都是很实实在在的算法看懂了就能理解。简要提一下

一般做NLP的序列标注等任务,在训练阶段肯定是有隐状态序列的所以极大似然估计法是非常常用的学习算法,我见过的很多代码里面也昰这么计算的比较简单。

step3. 直接估计 比如说在代码里计算完了就是这样的:

就是一个EM的过程,如果你对EM的工作流程有经验的话对这个Baum-Welch┅看就懂。EM的过程就是初始化一套值然后迭代计算,根据结果再调整值再迭代,后收敛……好吧这个理解是没有捷径的,去隔壁钻研EM吧

这里只提一下核心。因为我们手里没有隐状态序列 信息所以我先必须给初值 ,初步确定模型然后再迭代计算出 ,中间计算过程会鼡到给出的观测状态序列 。另外收敛性由EM的XXX定理保证。

3.2.2 序列标注(解码)过程好了学习完了HMM的分布参数,也就确定了一个HMM模型需要紸意的是,这个HMM是对我这一批全部的数据进行训练所得到的参数

序列标注问题也就是“预测过程”,通常称为解码过程对应了序列建模问题3.。对于序列标注问题我们只需要学习出一个HMM模型即可,后面所有的新的sample我都用这一个HMM去apply

我们的目的是,在学习后已知了 ,现在要求出 进一步

再直白点就是,我现在要在给定的观测序列下找出一条隐状态序列条件是这个隐状态序列的概率是大的那个。

具体地都昰用Viterbi算法解码,是用DP思想减少重复的计算Viterbi也是满大街的,不过要说的是Viterbi不是HMM的专属,也不是任何模型的专属他只是恰好被满足了被HMM鼡来使用的条件。谁知现在大家都把Viterbi跟HMM捆绑在一起了, shame。

Viterbi计算有向无环图的一条大路径应该还好理解。如图:

关键是注意每次工作热點区只涉及到t 与 t-1,这对应了DP的无后效性的条件。如果对某些同学还是很难理解请参考这个答案下@Kiwee的回答吧。

3.2.3 序列概率过程我通过HMM计算出序列的概率又有什么用针对这个点我把这个问题详细说一下。

实际上序列概率过程对应了序列建模问题2.,即序列分类在3.2.2第一句话我说,在序列标注问题中我用一批完整的数据训练出了一支HMM模型即可。好那在序列分类问题就不是训练一个HMM模型了。我应该这么做(结合語音分类识别例子):

inference:来了一条新的sample(sequence)我不知道是A的还是B的,没问题分别用HMM_A/HMM_B计算一遍序列的概率得到 ,比较两者大小哪个概率夶说明哪个更合理,更大概率作为目标类别

所以,本小节的理解重点在于如何对一条序列计算其整体的概率。即目标是计算出 这个問题前辈们在他们的经典中说的非常好了,比如参考李航老师整理的:

直接计算法(穷举搜索)前向算法后向算法后面两个算法采用了DP思想减少计算量,即每一次直接引用前一个时刻的计算结果以避免重复计算跟Viterbi一样的技巧。

还是那句因为这篇文档不是专门讲算法细節的,所以不详细展开这些毕竟,所有的科普HMM、CRF的博客貌似都是在扯这些算法妥妥的街货,就不搬运了

四、MEMMMEMM,即大熵马尔科夫模型这个是在接触了HMM、CRF之后才知道的一个模型。说到MEMM这一节时得转换思维了,因为现在这MEMM属于判别式模型

不过有一点很尴尬,MEMM貌似被使鼡或者讲解引用的不及HMM、CRF

4.1 理解MEMM这里还是啰嗦强调一下,MEMM正因为是判别模型所以不废话,我上来就直接为了确定边界而去建模比如说序列求概率(分类)问题,我直接考虑找出如何计算下列函数才比较准确分类边界这一点跟HMM的思维方式发生了很大的变化,如果不对这┅点有意识那么很难理解为什么MEMM、CRF要这么做。

HMM中观测节点 依赖隐藏状态节点 ,也就意味着我的观测节点只依赖当前时刻的隐藏状态。但茬更多的实际场景下观测序列是需要很多的特征来刻画的,比如说我在做NER时,我的标注 不仅跟当前状态 相关而且还跟前后标注 相关,比如字母大小写、词性等等

为此,提出来的MEMM模型就是能够直接允许“定义特征”直接学习条件概率,即 , 总体为:

并且 这个概率通過大熵分类器建模(取名MEMM的原因):

重点来了,这是ME的内容也是理解MEMM的关键: 这部分是归一化; 是特征如何计算下列函数才比较准确,具體点这个如何计算下列函数才比较准确是需要去定义的; 是特征如何计算下列函数才比较准确的权重,这是个未知参数需要从训练阶段學习而得。

比如我可以这么定义特征如何计算下列函数才比较准确:

其中特征如何计算下列函数才比较准确 个数可任意制定,

所以总体仩MEMM的建模公式这样:

是的,公式这部分之所以长成这样是由ME模型决定的。

请务必注意理解判别模型和定义特征两部分含义,这已经涉及到CRF的雏形了

所以说,他是判别式模型直接对条件概率建模。 上图:

MEMM需要两点注意:

与HMM的 依赖 不一样MEMM当前隐藏状态 应该是依赖当湔时刻的观测节点 和上一时刻的隐藏节点 需要注意,之所以图的箭头这么画是由MEMM的公式决定的,而公式是creator定义出来的好了,走一遍完整流程

step1. 先预定义特征如何计算下列函数才比较准确 ,step2. 在给定的数据上训练模型,确定参数即确定了MEMM模型step3. 用确定的模型做序列标注问題或者序列求概率问题。4.2 模型运行过程MEMM模型的工作流程也包括了学习训练问题、序列标注问题、序列求概率问题

4.2.1 学习训练过程一套MEMM由一套参数唯一确定,同样地我需要通过训练数据学习这些参数。MEMM模型很自然需要学习里面的特征权重λ。

不过跟HMM不用的是因为HMM是生成式模型,参数即为各种概率分布元参数数据量足够可以用大似然估计。而判别式模型是用如何计算下列函数才比较准确直接判别学习边堺,MEMM即通过特征如何计算下列函数才比较准确来界定但同样,MEMM也有极大似然估计方法、梯度下降、牛顿迭代发、拟牛顿下降、BFGS、L-BFGS等等各位应该对各种优化方法有所了解的。

嗯具体详细求解过程貌似问题不大。

4.2.2 序列标注过程还是跟HMM一样的用学习好的MEMM模型,在新的sample(观測序列 )上找出一条概率大可能的隐状态序列

只是现在的图中的每个隐状态节点的概率求法有一些差异而已,正确将每个节点的概率表示清楚,路径求解过程还是一样采用viterbi算法。

4.2.3 序列求概率过程跟HMM举的例子一样的也是分别去为每一批数据训练构建特定的MEMM,然后根据序列茬每个MEMM模型的不同得分概率选择高分数的模型为wanted类别。

应该可以不用展开吧……

是从街货上烤过来的……

用Viterbi算法解码MEMM,状态1倾向于转換到状态2同时状态2倾向于保留在状态2。 解码过程细节(需要会viterbi算法这个前提):

但是得到的优的状态转换路径是1->1->1->1为什么呢?因为状态2鈳以转换的状态比状态1要多从而使转移概率降低,即MEMM倾向于选择拥有更少转移的状态。

求和的作用在概率中是归一化但是这里归一化放茬了指数内部,管这叫local归一化 来了,viterbi求解过程是用dp的状态转移公式(MEMM的没展开,请参考CRF下面的公式)因为是局部归一化,所以MEMM的viterbi的轉移公式的第二部分出现了问题导致dp无法正确的递归到全局的优。

五、CRF我觉得一旦有了一个清晰的工作流程那么按部就班地,没有什麼很难理解的地方因为整体框架已经胸有成竹了,剩下了也只有添砖加瓦小修小补了有了上面的过程基础,CRF也是类似的只是有方法論上的细微区别。

5.1 理解CRF请看第一张概率图模型构架图CRF上面是马尔科夫随机场(马尔科夫网络),而条件随机场是在给定的随机变量 (具體对应观测序列 )条件下,随机变量 (具体对应隐状态序列 的马尔科夫随机场。广义的CRF的定义是: 满足 的马尔科夫随机场叫做条件随機场(CRF)

在2.1.2中有提到过,概率无向图的联合概率分布可以在因子分解下表示为:

而在线性链CRF示意图中每一个( )对为一个大团,即在上式中 。并且线性链CRF满足

所以CRF的建模公式如下:

我要敲黑板了,这个公式是非常非常关键的注意递推过程啊,我是怎么从 跳到 的

不过還是要多啰嗦一句,想要理解CRF必须判别式模型的概念要深入你心。正因为是判别模型所以不废话,我上来就直接为了确定边界而去建模因为我创造出来就是为了这个分边界的目的的。比如说序列求概率(分类)问题我直接考虑找出如何计算下列函数才比较准确分类邊界。所以才为什么会有这个公式所以再看到这个公式也别懵逼了,he was born for discriminating the given data from different classes. 就这样不过待会还会具体介绍特征如何计算下列函数才比较准确蔀分的东西。

除了建模总公式关键的CRF重点概念在MEMM中已强调过:判别式模型、特征如何计算下列函数才比较准确。

上面给出了CRF的建模公式:

下标i表示我当前所在的节点(token)位置下标k表示我这是第几个特征如何计算下列函数才比较准确,并且每个特征如何计算下列函数才比較准确都附属一个权重 也就是这么回事,每个团里面我将为 构造M个特征,每个特征执行一定的限定作用然后建模时我再为每个特征洳何计算下列函数才比较准确加权求和。 是用来归一化的为什么?想想LR以及softmax为何有归一化呢一样的嘛,形成概率值再来个重要的理解。 这个表示什么具体地,表示了在给定的一条观测序列 条件下我用CRF所求出来的隐状态序列 的概率,注意这里的I是一条序列,有多個元素(一组随机变量)而至于观测序列 ,它可以是一整个训练语料的所有的观测序列;也可以是在inference阶段的一句sample比如说对于序列标注問题,我对一条sample进行预测可能能得到 J条隐状态I,但我肯定终选的是优概率的那条(by viterbi)这一点希望你能理解。对于CRF可以为他定义两款特征如何计算下列函数才比较准确:转移特征&状态特征。 我们将建模总公式展开:

为i处的转移特征对应权重 ,每个 都有J个特征,转移特征针對的是前后token之间的限定。举个例子:

sl为i处的状态特征对应权重μl,每个tokeni都有L个特征举个例子:

不过一般情况下,我们不把两种特征区别的那么开合在一起:

满足特征条件就取值为1,否则没贡献甚至你还可以让他打负分,充分惩罚

再进一步理解的话,我们需要把特征如哬计算下列函数才比较准确部分抠出来:

是的我们为 打分,满足条件的就有所贡献后将所得的分数进行log线性表示,求和后归一化即鈳得到概率值……完了又扯到了log线性模型。现在稍作解释:

5.2 模型运行过程模型的工作流程跟MEMM是一样的:

step1. 先预定义特征如何计算下列函数財比较准确 ,step2. 在给定的数据上训练模型,确定参数 step3. 用确定的模型做序列标注问题或者序列求概率问题可能还是没做到100%懂,结合例子说奣:

……5.2.1 学习训练过程一套CRF由一套参数λ唯一确定(先定义好各种特征如何计算下列函数才比较准确)。

同样CRF用极大似然估计方法、梯喥下降、牛顿迭代、拟牛顿下降、IIS、BFGS、L-BFGS等等。各位应该对各种优化方法有所了解的其实能用在log-linear models上的求参方法都可以用过来。

嗯具体详細求解过程貌似问题不大。

5.2.2 序列标注过程还是跟HMM一样的用学习好的CRF模型,在新的sample(观测序列 )上找出一条概率大可能的隐状态序列

只昰现在的图中的每个隐状态节点的概率求法有一些差异而已,正确将每个节点的概率表示清楚,路径求解过程还是一样采用viterbi算法。

啰嗦一丅我们就定义i处的局部状态为 ,表示在位置i处的隐状态的各种取值可能为I,然后递推位置i+1处的隐状态写出来的DP转移公式为:

这里没写规范因子 是因为不规范化不会影响取大值后的比较。

5.2.3 序列求概率过程跟HMM举的例子一样的也是分别去为每一批数据训练构建特定的CRF,然后根據序列在每个MEMM模型的不同得分概率选择高分数的模型为wanted类别。只是貌似很少看到拿CRF或者MEMM来做分类的直接用网络模型不就完了不……

应該可以不用展开,吧……

5.3 CRF++分析本来做task用CRF++跑过baseline,后来在对CRF做调研时非常想透析CRF++的工作原理,以identify以及verify做的各种假设猜想当然,也看过其他的CRF實现源码

所以干脆写到这里来,结合CRF++实例讲解过程

有一批语料数据,并且已经tokenized好了:

按道理应该是定义特征如何计算下列函数才比较准确才对吧好的,在CRF++下应该是先定义特征模板,然后用模板自动批量产生大量的特征如何计算下列函数才比较准确我之前也蛮confused的,鼡完CRF++还以为模板就是特征后面就搞清楚了:每一条模板将在每一个token处生产若干个特征如何计算下列函数才比较准确。

CRF++的模板(template)有U系列(unigram)、B系列(bigram)不过我至今搞不清楚B系列的作用,因为U模板都可以完成2-gram的作用

U09 我定义了10个模板。

是的会产生大量的特征。 U00 - U04的模板产生的昰状态特征如何计算下列函数才比较准确;U05 - U09的模板产生的是转移特征如何计算下列函数才比较准确

在CRF++中,每个特征都会try每个标注label(这里囿13个)总共将生成 个特征如何计算下列函数才比较准确以及对应的权重出来。N表示每一套特征如何计算下列函数才比较准确 L表示标注集元素个数。

比如训练好的CRF模型的部分特征如何计算下列函数才比较准确是这样存储的:

一/个/人/……个/人/走/……3. 求参

对上述的各个特征以忣初始权重进行迭代参数学习

在CRF++ 训练好的模型里,权重是这样的:

大家都知道LSTM已经可以胜任序列标注问题了,为每个token预测一个label(LSTM后面接:分类器);而CRF也是一样的为每个token预测一个label。

但是他们的预测机理是不同的。CRF是全局范围内统计归一化的条件状态转移概率矩阵再預测出一条指定的sample的每个token的label;LSTM(RNNs,不区分here)是依靠神经网络的超强非线性拟合能力在训练时将samples通过复杂到让你窒息的高阶高纬度异度空間的非线性变换,学习出一个模型然后再预测出一条指定的sample的每个token的label。

但是会出现上述的错误:在B之后再来一个B这个错误在CRF中是不存茬的,因为CRF的特征如何计算下列函数才比较准确的存在就是为了对given序列观察学习各种特征(n-gram窗口),这些特征就是在限定窗口size下的各种詞之间的关系然后一般都会学到这样的一条规律(特征):B后面接E,不会出现E这个限定特征会使得CRF的预测结果不出现上述例子的错误。当然了CRF还能学到更多的限定特征,那越多越好啊!

后不用说,结果还真是好多了呢

发现有的同学还是对general 实现的CRF工具包代码,与CRF拼接在LSTM网络之后的代码具体实现(如在TensorFlow)理解的稀里糊涂的,所以还得要再次稍作澄清

在CRF相关的工具包里,CRF的具体实现是采用上述理论提到的为特征打分的方式统计出来的统计的特征分数作为每个token对应的tag的类别的分数,输入给CRF解码即可

而在TensorFlow中,LSTM每个节点的隐含表征vector:Hi嘚值作为CRF层对应的每个节点的统计分数再计算每个序列(句子)的整体得分score,作为损失目标后inference阶段让viterbi对每个序列的transition matrix去解码,搜出一条優路径

关键区别在于,在LSTM+CRF中CRF的特征分数直接来源于LSTM传上来的Hi的值;而在general CRF中,分数是统计来的所有导致有的同学认为LSTM+CRF中其实并没有实際意义的CRF。其实按刚才说的Hi本身当做特征分数形成transition matrix再让viterbi进行路径搜索,这整个其实就是CRF的意义了所以LSTM+CRF中的CRF没毛病。

六、总结1. 总体对比

應该看到了熟悉的图了现在看这个图的话,应该可以很清楚地get到他所表达的含义了这张图的内容正是按照生成式&判别式来区分的,NB在sequence建模下拓展到了HMM;LR在sequence建模下拓展到了CRF

将三者放在一块做一个总结:

HMM模型中存在两个假设:一是输出观察值之间严格独立,二是状态的转迻过程中当前状态只与前一状态有关但实际上序列标注问题不仅和单个词相关,而且和观察序列的长度单词的上下文,等等相关MEMM解決了HMM输出独立性假设的问题。因为HMM只限定在了观测与状态之间的依赖而MEMM引入自定义特征如何计算下列函数才比较准确,不仅可以表达观測之间的依赖还可表示当前观测与前后多个状态之间的复杂依赖。MEMM CRF:CRF不仅解决了HMM输出独立性假设的问题还解决了MEMM的标注偏置问题,MEMM容易陷入局部优是因为只在局部做归一化而CRF统计了全局概率,在做归一化时考虑了数据在全局的分布而不是仅仅在局部归一化,这样就解決了MEMM中的标记偏置的问题使得序列标注的解码变得优解。HMM、MEMM属于有向图所以考虑了x与y的影响,但没讲x当做整体考虑进去(这点问题应該只有HMM)CRF属于无向图,没有这种依赖性克服此问题。

为了一次将概率图模型理解的深刻到位我们需要再串一串,更深度与原有的知識体系融合起来

机器学习模型,按照学习的范式或方法以及加上自己的理解,给常见的部分的他们整理分了分类(主流上都喜欢从訓练样本的歧义型分,当然也可以从其他角度来):

1.1 分类算法(线性和非线性):{

大熵MEM(与LR同属于对数线性分类模型)

xgboost(传统GBDT以CART作为基分类器xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题);xgboost是Gradient Boosting的一种高效系统实现並不是一种单一算法。)

1.2 概率图模型:{

MEMM(大熵马尔科夫)

LDA隐含狄利克雷分析

(注意到没有把神经网络体系加进来。因为NNs的范式很灵活鈈太适用这套分法,largely, off this framework)

Generally speaking机器学习模型,尤其是有监督学习一般是为一条sample预测出一个label,作为预测结果 但与典型常见的机器学习模型不呔一样,序列模型(概率图模型)是试图为一条sample里面的每个基本元数据分别预测出一个label这一点,往往是beginner伊始难以理解的

具体的实现手段差异,就是:ML models通过直接预测得出label;Sequential models是给每个token预测得出label还没完还得将他们每个token对应的labels进行组合,具体的话用viterbi来挑选好的那个组合。

有叻这道开胃菜接下来,读者可以完成这些事情:完善细节算法、阅读原著相关论文达到彻底理解、理解相关拓展概念、理论创新……

有錯误之处请多多指正谢谢!

《统计自然语言处理》,宗成庆

如何用简单易懂的例子解释条件随机场(CRF)模型它和HMM有什么区别?

【中文汾词】大熵马尔可夫模型MEMM - Treant - 博客园

【中文分词】大熵马尔可夫模型MEMM - Treant - 博客园

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

条件随机场CRF(三) 模型学习与维特比算法解码

crf++里的特征模板得怎么理解?

CRF++代码分析-码农场

CRF++模型格式说明-码农场

}

我要回帖

更多关于 如何计算下列函数才比较准确 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信