美文网首页
李航-第11章条件随机场

李航-第11章条件随机场

作者: 瘦长的丰一禾 | 来源:发表于2018-06-28 21:43 被阅读96次

    条件随机场(CRF,conditonal random field)是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔可夫随机场。

    什么样的问题需要CRF模型?

    条件随机场可以用于不同的预测问题,可以用于标注问题。《统计学习方法》这一章主要讲的是标注问题。

    自然语言处理中的词性标注(POS Tagging)就是非常适合CRF使用的地方。词性标注的目标是给出一个句子中每个词的词性(名词,动词,形容词等)。而这些词的词性往往和上下文的词的词性有关,因此,使用CRF来处理是很适合的,当然CRF不是唯一的选择,也有很多其他的词性标注方法。

    从随机场到线性链条件随机场

    X和Y有相同的结构的CRF就构成了线性链条件随机场(Linear chain Conditional Random Fields,以下简称 linear-CRF)。

    即线性链条件随机场是条件随机场的特殊形式。

    线性链条件随机场.jpg

    从随机场到马尔科夫模型
    马尔科夫随机场是随机场的特例,它假设随机场中某一个位置的赋值仅仅与和它相邻的位置的赋值有关,和与其不相邻的位置的赋值无关。继续举十个词的句子词性标注的例子: 如果我们假设所有词的词性只和它相邻的词的词性有关时,这个随机场就特化成一个马尔科夫随机场。比如第三个词的词性除了与自己本身的位置有关外,只与第二个词和第四个词的词性有关。

    c.前向-后向算法评估标记序列概率

    条件随机场j简写为CRF,隐马尔科夫模型简写为HMM

    前向-后向标记序列位置概率.jpg
    模型学习与维特比算法解码

    条件随机场的预测问题是给定条件随机场P(Y|X)和输入序列(观测序列)x,求条件概率最大的输出序列(标记序列)y*,即对观测序列进行标注。条件随机场的预测算法是著名的维特比算法。

    条件随机场预测的维特比算法.jpg
    条件随机场的维特比预测算法
    
    In [23]: def predict(self, x_vec, debug=False):
       ...:     """给定x,预测y。使用Viterbi算法"""
       ...:     # all_features, len(x_vec) + 1, Y, Y, K
       ...:     all_features = self.get_all_features(x_vec)
       ...:     # log_potential: len(x_vec) + 1, Y, Y  保存各个下标的非规范化概率
       ...:     log_potential = np.dot(all_features, self.w)
       ...:     T = len(x_vec)
       ...:     Y = len(self.labels)
       ...:     # Psi保存每个时刻最优情况的下标
       ...:     Psi = np.ones((T, Y), dtype=np.int32) * -1
       ...:     # 初始化
       ...:     delta = log_potential[0, 0]
       ...:     # 递推
       ...:     for t in range(1, T):
       ...:         next_delta = np.zeros(Y)
       ...:         for y in range(Y):
       ...:             w = delta + log_potential[t, :, y]
       ...:             Psi[t, y] = psi = w.argmax()
       ...:             next_delta[y] = w[psi]
       ...:         delta = next_delta
       ...:     # 回溯找到最优路径
       ...:     y = delta.argmax()
       ...:     trace = []
       ...:     for t in reversed(range(T)):
       ...:         trace.append(y)
       ...:         y = Psi[t, y]
       ...:     trace.reverse()
       ...:     return [self.labels[i] for i in trace]
    

    参考链接:
    条件随机场CRF(一)从随机场到线性链条件随机场
    Simple CRF
    条件随机场CRF总结和实现
    线性链条件随机场-tutorial(一)
    条件随机场CRF(三) 模型学习与维特比算法解码
    HMM、MEMM、CRF

    相关文章

      网友评论

          本文标题:李航-第11章条件随机场

          本文链接:https://www.haomeiwen.com/subject/rdtvyftx.html