【机器学习】最大熵马尔科夫模型

点击上方蓝色字体,关注AI小白入门

跟着博主的脚步,每天进步一点点

【机器学习】最大熵马尔科夫模型_第1张图片

本文介绍了最大熵马尔可夫模型,在隐马尔可夫模型(隐状态序列)的基础上应用最大熵模型思想,将一个概率生成模型转化为概率判别模型,同样最大熵马尔可夫模型带解决的三个问题:1)概率计算,2)参数学习,3)序列预测,其中概率计算与参数学习类比于最大熵模型,序列标注采用维特比解码。

作者 | 文杰

编辑 | yuquanle

最大熵马尔科夫模型

有最大熵模型和隐马尔可夫模型的基础,再看最大熵马尔科夫模型就直观多了。在隐马尔可夫模型中:

即 与 之间独立作用 。在最大熵马尔科夫模型中则没有这一假设,而直接采用条件概率的形式 输出模型。

【机器学习】最大熵马尔科夫模型_第2张图片

结合最大熵模型,不考虑整个序列时,第 时刻的状态可以看作是一个分类问题,采用最大熵模型,由 和 , 构成分类模型 , ,有最大熵模型的结论,我们知道分类模型是一个关于 的函数,表达式如下:


其中 是联合标签 特征模板, 是特征模板的权重, 是联合所有可能的标签 特征模板求和,表示归一化因子。对于参数 的求解,可以采用最大熵模型的使用的优化算法,但是值得注意的是,在优化求解过程中,每个时刻单独归一化,不考虑序列性。

这里,由于笔者之前的误解,对于最大熵模型的特征模板的概率求解采用最大似然估计的方式直接对特征模板进行统计,以其频率作为概率,结果发现还是有效。其中原因可能是我的这种统计方式是基于期望最大化的思想,运用最大似然估计得到模型参数正好是统计频率。


在状态预测中,考虑最大化整个序列的概率,意味着目标函数如下:


目标函数也就是求解一条最优的状态转移路径,同样可以采用Viterbi算法。

代码实战

A、最大熵模型维特比算法

int Viterbi_M(const DataStr &testdata) 
 { 
 int t,i,j,k; 
 int pos; 
 double deta[VEC_LEN][STATE]; 
 int fai[VEC_LEN][STATE]; 
 double max_deta; 
 double max_fai; 
 int max_i; 
 for(i=0; imax_deta) 
 { 
 max_deta=deta[t-1][j]*dicos_m.pss[j][i]*dicos_m.pos[pos][i]; 
 } 
 if(deta[t-1][j]*dicos_m.pss[j][i]>max_fai) 
 { 
 max_fai=deta[t-1][j]*dicos_m.pss[j][i]; 
 max_i=j; 
 } 
 } 
 deta[t][i]=max_deta; 
 fai[t][i]=max_i; 
 } 
 } 
 max_deta=double_min; 
 for(i=0; imax_deta) 
 { 
 max_deta=deta[testdata[k].size()-1][i]; 
 max_i=i; 
 } 
 } 
 cout<=0; t--) 
 { 
 max_deta=double_min; 
 cout<max_deta) 
 { 
 max_deta=deta[t][i]; 
 max_i=i; 
 } 
 } 
 } 
 cout<

完整代码见阅读原文

The End

方便交流学习,备注:昵称-学校or公司-方向,进入DL&NLP交流群。

【机器学习】最大熵马尔科夫模型_第3张图片

记得备注呦

【推荐阅读】

初学者|NLP相关任务简介

【科研】自然语言理解难在哪儿?

自然语言处理中注意力机制综述

新年送福气|您有一份NLP大礼包待领取

“达观杯”文本智能处理挑战赛,季军带你飞

【机器学习】一文读懂线性回归、岭回归和Lasso回归

【机器学习】最大熵马尔科夫模型_第4张图片

长按二维码关注
AI小白入门

ID:StudyForAI

学习AI学习ai(爱)

期待与您的相遇~

你点的每个在看,我都认真当成了喜欢

你可能感兴趣的:(【机器学习】最大熵马尔科夫模型)