HMM(隐含马尔可夫模型)

HMM参数

中文分词为例:

隐藏(状态)序列:词语的词性 States = {B,M,E,S}

观察序列:每个词语(小明 ,去,学校,了)

状态转移矩阵A,其中第i行j列表示状态i转移到状态j的概率(转移概率)

状态序列到观察序列的分布矩阵B,即每个单词为某一次性的概率(发射概率)

这个时候我们就完成了训练阶段的参数估计,得到了

三个概率矩阵:

  • TransProbMatrix: 转移概率矩阵(array_A)
  • EmitProbMatrix: 发射概率矩阵(array_B)
  • InitStatus: 初始状态分布(array_pi)

两个序列:

  • 观察序列
  • 状态序列

推导算法:

Viterbi(维特比)算法

viterbi算法解决HMM

假设我们需要测试语句为:小明是中国人

  • 初始状态矩阵通过训练数据的统计很容易得到。
  • 发射概率矩阵统计训练集每个状态下这个单词出现的次数即可。
  • 转移矩阵统计每一个状态下,下一个状态的数量即可。

观察矩阵已给出,我们需要的是得到状态矩阵。

算法编程思想:动态规划法。

  • 设p[n][state]表示已n结束的序列中n的状态为state最大概率。
  • 则n+1只需要考虑n为state的最大概率即可
  • 单词1:p[0][state] = array_pi[state]*array_b[state]['小']
  • 单词n:p[n][state] = p[n-1][pre_state]*array_a[pre_state][state]*array_b[state0][sentence[i]]

HMM中文分词进阶

  • 在上诉实验中我们只考虑到了一个单词对于前一个单词的转移概率,但是在实际上一个单词不仅仅与前一个单词有关,可能与前后多个。有关
  • 在HMM中概率可以用log表示,这样可以达到平滑的效果。

CRF(条件随机场)

判别模型与生成模型

HMM与CRF的区别

HMM是生成式模型,它的发射概率和转移概率由统计得到,是上帝信息,它在统计出两个概率的情况下,用维特比算法得到最优路径。HMM有两大假设,一个是有限历史假设,二是输出独立假设。前者说明一个隐状态的转移概率只与上一个隐状态有关,CRF定义了很多特征函数,可以引入很多全局特征来计算这个转移概率,即crf++里面的转移特征函数。后者限定了隐状态和显状态之间的依赖,同理,crf里面的状态特征函数也可以引入很多全局特征。

crf里面可以自定义很多特征函数,它是判别模型,由HMM的概率图转为函数拟合,你就把它理解为它的特征函数即是它的一个个特征,我们要学习的东西是特征函数的权重,在预测的时候就和逻辑回归的分类器类似。

它的全局最优在于它是计算完序列概率之后进行归一化,而不是标注一个归一化一次(类似最大熵马尔可夫模型),这样就解决了MEMM的标注偏执问题。

如果你用CRF++的话,拥有训练集的情况下,你只要手写模板,定义一个词的前后多少unigram或者bigram对这次标注有影响,会自动生成很多特征函数,在训练的时候特征函数会训练出不同的权重。预测的时候,顺着无数个特征函数的打分加起来,会得到一个score,与其他不同标注方式的打分做做归一化就能得到概率了。

 
目前共有0条评论
  • 暂无Trackback
你目前的身份是游客,评论请输入昵称和电邮!