本文介绍了条件随机场模型,首先对比了隐马尔科夫模型、最大熵马尔科夫模型、条件随机场模型。基于前二者存在的1)独立性假设问题,2)标注偏置问题,条件随机场采用最大熵模型的特征模板定义克服独立性问题,参数学习过程建立在最大化整条序列的概率,而不是在时刻上进行归一化。
作者 | 文杰
编辑 | yuquanle
条件随机场
条件随机场是一个概率图模型,深入图模型的话实在有太多东西。这里,我们接着隐马尔科夫模型和最大熵马尔科夫模型基础理解条件随机场。在序列标注问题上,条件随机场与两者之间的差异:
1)隐马尔科夫模型是一个生成模型,其假设当前时刻状态只与上一状态有关,而当前的观测值只与当前的状态有关,所以独立性假设非常强。
2)最大熵马尔科夫模型则通过特征模板的定义克服了独立性假设问题。基于熵原理,在满足所有条件经验期望的条件下,熵最大的为最好的模型,也就导出了对数线性模型,是一个标准的判别模型。
3)条件随机场同最大熵马尔科夫模型非常一致,也是一个基于特征模板的判别模型。然而在序列标注问题上,最大熵马尔科夫模型将每个时刻看作是一个分类问题,每时刻独立归一化,这就导致标注偏置问题,条件随机场则归一化作用于整个序列。
结合最大熵模型,模型输出条件概率
,假设所有的特征模板为
,(其中一些书中分为转移特征和发射特征)。最大化条件概率为:
考虑整个序列的条件概率
,条件随机场的目标函数是最大化
:
对于参数的学习,同样可以采用最大熵模型使用的优化算法,比如梯度下降的方法。
状态预测问题就是一个最大化序列概率获得状态序列:
其中归一化因子忽略,分子的指数形式单调递增也忽略。所以整个序列的状态等价于在最优的状态序列下特征模板与特征模板权重乘积和最大。就此,条件随机场就变成了一个特征模板定义的问题了,特征模板直接决定条件随机场的性能。
代码实战
int CRF_CWS()
{
cout<<"-----------training-----------"<<endl;
DataStr traindata;
LoadDataStr(traindata,"data\\pku_training.utf8");
createVocabList_C(traindata);
cout<<"------------test-------------"<<endl;
DataStr testdata;;//加载测试数据
LoadDataStr(testdata,"data\\pku_test.utf8");
cout<<"------------FenCi--------------"<<endl;
FenCi(testdata);
cout<<"-----------PingCe---------------"<<endl;
DataStr resultdata;
LoadDataStr(resultdata,"data\\result.utf8");
DataStr golddata;
LoadDataStr(golddata,"data\\pku_test_gold.utf8");
PingCe(resultdata,golddata);
return 0;
}
本文转载自公众号:AI小白入门,作者文杰
推荐阅读
Siamese network 孪生神经网络--一个简单神奇的结构
我们建了一个免费的知识星球:AINLP芝麻街,欢迎来玩,期待一个高质量的NLP问答社区
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP君微信(id:AINLP2),备注工作/研究方向+加群目的。