CRF学习

刚才写了半天的文章,因为不小心点了舍弃,一切都要重来。怪自己不小心,不过这优快云的自动保存功能做的有点弱。

迅速进入正题。这些天在研究CRF的东西,由于之前对机器学习的方面接触比较少,看CRF比较费力,现在把看到的一些想法分享出来,理解不到位的地方希望大牛过来指点指点。

一、CRF的概念和原理

参考《条件随机场理论综述》(韩冬雪、周彩根),这篇文章里面对CRF的基本理论都做了介绍,主要包括了以下一些问题。

1.离散马尔科夫过程,即当前所处的状态仅与它之前的一条状态有关。

2.隐马尔科夫五个要素:N、M、A、B、PI。一个完整的马尔科夫模型要求两个具体的模型参数N和M,三个概率矩阵A、B、PI。

3.隐性马尔科夫模型的三个基本问题:

1)给定一个模型λ =(N、M、A、B、PI),如何高效的计算某一输出字符序列O=O1O2O3…Ot的概率P(O|λ)。可以采用forward-backward算法,迭代求出alpha和beta,然后求得P(O|λ)(公式9)。

2)给定一个模型λ =(N、M、A、B、PI)和一个输出字符O=O1O2O3…Ot,如何找到产生这一序列的最大状态序列Q。这个可以通过viterbi算法来求解。

3)给定一个模型λ =(N、M、A、B、PI)和一个输出字符O=O1O2O3…Ot,如何调整模型的参数使得产生这一序列的的概率最大。这个可以通过参数估计来计算。

4.最大熵模型:最大熵模型的实质是,在已知部分知识的前提下,关于未知分布最合理的推断是符合已知知识的最不确定或最随机的推断,这是我们可以做出的唯一一个不偏不倚的选择。

1)最大熵模型的约束条件,即经验期望等于模型期望(公式22)。

2)根据最大熵模型构造关于p和λ 的拉格朗日函数,求得p(公式29)以及模型估计的经验分布p的对数似然(公式34)。

5.条件随机场

1)根据Hammersley-Clifford定理和最大熵模型,可以得到条件随机场的联合概率公式(公式37,39)。λ 为特征权重,f为特征函数。

2)根据对数似然函数,可以得到(公式49),求偏导数得到(公式52)。

3)由于学习过度的问题,引入了罚函数,形成(公式53和54)。但54中p不好计算,所以采用矩阵的形式来计算。p的计算(公式61)包括了上面提到的alpha 和 beta。

我的理解是,上面的整个过程都是为了求得目标函数(49),偏导数(52),然后设定初始的λ ,放到参数优化函数中去优化,求得最佳的λ 。

二、CRF++程序

1.这个程序的总体流程可以用下面这张图来表示,包括学习和解码两个过程。学习的过程会产生特征、特征权重,编码的过程是利用这些特征权重来标记待标记的字符序列。


2.学习过程的基本过程如下图


1)feature_index.open函数用来打开模板和训练文件。shrink()用来形成模板和训练集的匹配。

程序中,对于训练集中的每个单词都包括三个标记符号(B I O ),并且每个单词都会和模板文件中的20个模板相结合,因此形成60个特征。特征的格式为:

(“特征”,(特征序号,特征出现次数))。

关于conference和in两个单词的匹配结果如下:


然后进行CRF算法。下面这些解释来自于:http://blog.sina.com.cn/s/blog_5980285201018ijz.html

2)其中的重点是obj += x[i]->gradient(&expected[0])函数。首先使用buildLattice()函数来构造格子。同时求得每个节点的cost的值,这里的求解过程calcCost()和(公式55)相对应。

3)forward-backward算法。calcAlpha, calcBeta和(公式59,60)相对应。

4)expectation与论文中(公式61)相对应。(公式52)来计算梯度,公式中的第一项已经在代码的calcExpectation中加上去了
公式中的第二项体现在gradient函数中的两个地方:
--expected[*f + answer_[i]];  //对应于unigram
--expected[*f +(*it)->lnode->y * ysize_ +(*it)->rnode->y]; //对应于bigram

5)接下来调用viterbi函数。

6)Z_-S与(公式49)相对应。这里和expected的计算,我还不是很明白。根据后面对罚函数的计算,这里的Z和S应该正好和论文公式中的前后相是颠倒的。

7)计算完这些之后,程序中还有关于罚函数的计算。整个计算完之后吧obj,expected,alpha(也就是λ)带入到LBFGS中去优化。通过迭代计算最后获得model文件。

8)model文件中主要包括了模板文件、所有的特征、所有特征的权重等信息。至此,学习算法结束。

3.CRF++解码过程。

解码过程是从mode读取模板、特征和特赠权重(λ),然后根据对每个解码文件中的单词构建lattice,求得cost,然后再利用viterbi算法来求得最佳路劲。

关于解码过程http://www.52nlp.cn 中的“初学者报道3-crf-中文分词解码过程理解”有形象的解释。

文章就写到这里吧。关于文章的PPT和资料可以在这里下载:http://pan.baidu.com/share/link?shareid=1886870677&uk=654680323

在Shubham Bhatt的搜索结果中增强了自定义设置的字段搜索和工具提示。感谢Sameer N Miraj。 通过使用级快速查找,您可以缩短代码几次单击的时间。 另外,您可以搜索代码的任何字符串使用此扩展名,您可以搜索您的salesforce实例的代码组件:1)顶点类2)Apex触发器3)visualforce页面4)Visualforce组件5)自定义设置及其字段搜索6)用户搜索按名称7)按配置文件名称搜索配置文件8)权限集9)队列10)自定义标签除上述内容外,您还可以使用此扩展名从左侧的级快速查找部分跳转到类/页面/触发器。 在悬停时,需要更多信息,我们提供了工具提示。 在firefox上可以找到类似的插件,可以在这里下载:https://addons.mozilla.org/en-US/firefox/addon/salesforce-quick-search/使用方法:以下两个部分都添加到了设置页面,因此这仅对开发员和管理员有用,此工具对Salesforce用户没有任何意义。 1)“级快速查找”部分:在所有设置页面的侧面导航栏中添加了此部分。 选择要转到的代码组件,然后开始输入代码名称,将弹出一个自动完成建议,然后选择要转到的代码。 2)开发员实用工具:2.1)仅在force.com主页中添加了此组件。 假设您想知道自己在代码中将配置文件名称硬编码的位置,例如if(profile.name =='sys Admin'){//您正在做某事}。 现在要找到答案,您必须单独浏览所有代码,或者在eclipse中创建一个force.com项目,然后在其中进行搜索。 我们无法直接在Salesforce中做到这一点。 此字符串搜索将帮助您做到这一点。 您必须检查要在其中搜索代码的代码组件,在输入文本字段中输入字符串,然后按Enter。 您将看到一个使用该字符串的代码组件列表。 2.2)代码覆盖率摘录:您可以在组织中查看和下载代码覆盖率。 1.1.1版更新将快速搜索范围扩展到电子邮件模板,验证规则,工作流规则,添加的自定义对象版本检查。 Update 1.2更新了UI,使其与Lightning Update 1.3更加同步,增加了Code Coverage提取部分,允许用户查看和下载Code Coverage。 更新1.3.3:更新了cookie问题。 注意:1)Salesforce的REST API用于完成上述功能。更新1.3.5 1)添加了对删除所有调试日志的支持2)在traceflag上添加了一个按钮以更新startDate /到期日期。 更新2.0.0 1)添加了对工具提示的支持2)添加了自定义设置及其字段搜索Update 2.1 1)修复了工具查询的自定义设置限制的错误Update 2.2 1)添加了用户和配置文件搜索Update 2.3 1)修复了该错误工具查询更新2.3的自定义设置限制1)添加了对权限集,队列和自定义标签的搜索 支持语言:English
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值