HanLP《天然语言处理入门》笔记--6.条件随机场与序列标注

笔记转载于GitHub项目https://github.com/NLP-LOVE/Introduction-NLPgit

6. 条件随机场与序列标注

本章介绍一种新的序列标注模型条件随机场。这种模型与感知机同属结构化学习你们族,但性能比感知机还要强大。为了厘清该模型的前因后果,咱们先对机器学习模型作番柿理。而后结合代码介绍条件随机场理论,探究它与结构化感知机的异同。github

6.1 机器学习的模型谱系

机器学习的模型谱系图以下图所示:算法

根据建模的到底是联合几率分布 P(x,y) 仍是条件几率分布 P(y|x)。派生出生成式模型与判别式模型。api

  1. 生成式模型框架

    生成式模型:模拟数据的生成过程,两类随机变量存在因果前后关系,先有因素 y,后有结果 x,这种因果关系由联合分布模拟:dom

    \[P(x,y)=P(y)P(x|y)\]机器学习

    经过联合分布 P(x,y),生成式模型其实间接建模了 P(x):函数

    \[P(x)=\sum_{y\in{Y}}P(x,y)\]工具

    这里有两个缺陷:性能

    • P(x) 很难准确估计,由于特征之间并不是相互独立,而是存在错综复杂的依赖关系。
    • P(x) 在分类中也没有直接做用。

    为了克服这两个问题,判别式模型出现。

  2. 判别式模型

    判别式模型直接跳过了 P(x),直接对条件几率 P(y|x) 建模。无论 x 内部存在多复杂的关系,也不影响判别式模型对 y 的判断,因而就可以放心大胆的利用各类各样丰富的、有关联的特征。 因此咱们会看到感知机分词的准确率高于隐马尔可夫模型。

    \[P(y|x)=\frac{exp(score(x,y))}{\sum_{x,y}exp(score(x,y))}\]

    其中,exp 为指数函数。随机变量关系错综复杂,为了分析这些关系,使用几率图模型。

  3. 有向几率图模型

    几率图模型( Probabilistic Graphical Model, PGM)是用来表示与推断多维随机变量联合分布 p(x,y) 的强大框架,被普遍用于计算机视觉、知识表达、贝叶斯统计与天然语言处理。它利用节点 V 来表示随机变量,用边 E 链接有关联的随机变量,将多维随机变量分布表示为图 G=(V,E)。这样就带来了一个好处,那就是整个图能够分解为子图再进行分析.子图中的随机变量更少,建模更加简单。具体如何分解,据此派生出有向图模型和无向图模型。

    有向图模型按事件的前后因果顺序将节点链接为有向图。若是事件 A 致使事件 B,则用箭头链接两个事件 A-->B。

    有向图模型都将几率有向图分解为一系列条件几率之积,有向图模型常常用生成式模型来实现。定义 π(v) 表示节点 v 的全部前驱节点,则分布为:
    \[ p(\boldsymbol{x}, \boldsymbol{y})=\prod_{v=V} p(v | \boldsymbol{\pi}(v)) \]

  4. 无向几率图模型

    相反,无向图模型则不探究每一个事件的因果关系,也就是说不涉及条件几率分解。无向图模型的边没有方向,仅仅表明两个事件有关联。

    无向图模型将几率分解为全部最大团上的某种函数之积。

    在图论中,最大团指的是知足全部节点相互链接的最大子图。由于最大团须要考虑全部变量,为此,无向图模型定义了一些虚拟的因子节点,每一个因子节点只链接部分节点,组成更小的最大团。

    蓝色虚线表示最大团,黑色方块表因子节点,圆圈则表示变量节点,无向图模型将多维随机变量的联合分布分解为一系列最大团中的因子之积:
    \[ p(x, y)=\frac{1}{Z} \prod_{a} \Psi_{a}\left(x_{a}, y_{a}\right) \]
    其中,a 是因子节点,Ψa 则是一个因子节点对应的函数,参数 Xa,Ya 是与因子节点相连的全部变量节点。为了将式子约束为几率分布,定义常数 Z 为以下归一化因子:
    \[ Z=\sum_{x, y} \prod_{a} \Psi_{a}\left(x_{a}, y_{a}\right) \]
    在机器学习中,经常使用指数家族的因子函数:
    \[ \Psi_{a}\left(x_{a}, y_{a}\right)=\exp \left\{\sum_{k} w_{a k} f_{a k}\left(x_{a}, y_{a}\right)\right\} \]
    其中,k 为特征的编号,Fak 是特征函数,Wak 为相应的特征权重。

    判别式模型常常用无向图来表示,只须要在归一化时,对每种 x 都求一个归一化因子:
    \[ Z(\boldsymbol{x})=\sum_{y} \prod_{a} \Psi_{a}\left(\boldsymbol{x}_{a}, \boldsymbol{y}_{a}\right) \]
    而后 P(x,y) 就转化为判别式模型所需的条件几率分布:
    \[ p(\boldsymbol{y} | \boldsymbol{x})=\frac{1}{Z(\boldsymbol{x})} \prod_{a} \boldsymbol{\Psi}_{a}\left(\boldsymbol{x}_{a}, \boldsymbol{y}_{a}\right) \]
    到这里,最后一个公式就是条件随机场的通常形式。

6.2 条件随机场

条件随机场( Conditional Random Field, CRF)是一种给定输入随机变量 x,求解条件几率 p(y| x) 的几率无向图模型。用于序列标注时,特例化为线性链( linear chain )条件随机场。此时,输人输出随机变量为等长的两个序列。

  1. 线性链条件随机场

    线性链条件随机场以下图所示:

    每一个 Xt 上方有 3 个灰色节点,表明 Xt 的 3 个特征,固然还能够是任意数量的特征,体现了特征的丰富性,黑色方块是因子节点,能够理解为一个特征函数 \(f_k(y_{t-1},y_t,x_t)\)。其中仅仅利用了 Xt 和 Yt 的特征称做状态特征,利用了 Yt-1 的特征则称做转移特征,与感知机的特征函数相同。

    线性链条件随机场的定义以下:
    \[ p(\boldsymbol{y} | \boldsymbol{x})=\frac{1}{Z(\boldsymbol{x})} \prod_{t=1}^{T} \exp \left\{\sum_{k=1}^{K} \boldsymbol{w}_{k} f_{k}\left(y_{t-1}, y_{t}, \boldsymbol{x}_{t}\right)\right\} \]
    其中,Z(x)为归一化函数:
    \[ Z(\boldsymbol{x})=\sum_{y} \prod_{t=1}^{T} \exp \left\{\sum_{k=1}^{K} w_{k} f_{k}\left(y_{t-1}, y_{t}, \boldsymbol{x}_{t}\right)\right\} \]
    上式定义在全部可能的标注序列上。若是将全部特征函数与权重分别写做向量形式,则线性链条件随机场的定义可简化为:
    \[ \begin{aligned} p(\boldsymbol{y} | \boldsymbol{x}) &=\frac{1}{Z(\boldsymbol{x})} \prod_{t=1}^{T} \exp \left\{\boldsymbol{w} \cdot \phi\left(y_{t-1}, y_{t}, \boldsymbol{x}_{t}\right)\right\} \\ &=\frac{1}{Z(\boldsymbol{x})} \exp \left\{\sum_{t=1}^{T} \boldsymbol{w} \cdot \phi\left(y_{t-1}, y_{t}, \boldsymbol{x}_{t}\right)\right\} \end{aligned} \]
    对比结构化感知机的打分函数:
    \[ \operatorname{score}(x, y)=\sum_{t=1}^{T} w \cdot \phi\left(y_{t-1}, y_{t}, x_{t}\right) \]
    能够发现结构化感知机打分函数与条件随机场的指数部分彻底相同,因为给定实例 x,Z(x) 就是一个常数 c,因此有:
    \[ p(y | x)=\frac{1}{c} \exp \{\operatorname{score}(x, y)\} \]
    因而,条件随机场就和结构化感知机有如下联系:

    • 条件随机场和结构化感知机的特征函数彻底一致。
    • 结构化感知机预测打分越高,条件随机场给予该预测的几率也越大。

    这种类似性使得咱们可以复用结构化感知机的预测算法,也就是维特比算法。

    条件随机场的训练过程详见《天然语言处理入门》第6章。

  2. 对比结构化感知机

    结构化感知机和条件随机场的相同点:

    • 特征函数相同
    • 权重向量相同
    • 打分函数相同
    • 预测算法相同
    • 同属结构化学习

    不一样点

    • 感知机更新参数时,只使用一个训练实例,没有考虑整个数据集,不免顾此失彼;而条件随机场对数似然函数及其梯度则使用了整个数据集。

    • 条件随机场更新参数更加合理,条件随机场更新参数以下:
      \[ w \leftarrow w+\phi\left(x^{(i)}, y^{(i)}\right)-E_{w}\left[\phi\left(x^{(i)}, y\right)\right] \]
      对比感知机的更新参数表达式:
      \[ w \leftarrow w+\phi\left(x^{(i)}, y^{(i)}\right)-\phi\left(x^{(i)}, \hat{y}\right) \]
      二者的差距一目了然,感知机奖励正确答案对应的特征函数 ϕ,但仅惩罚错误最厉害的那个 y,而条件随机场同时惩罚全部答案 y,分摊惩罚总量。

6.3 条件随机场工具包

谈到条件随机场工具包,最著名的就是 CRF++,有各大平台的安装方法,HanLP已经集成了。

  1. CRF++ 语料格式

    CRF++ 接受纯文本语料,约定为一种空格或制表符分隔的表格格式。每一个序列做为一个表格,每行为序列的一个时刻 Xt,Yt,除了最后一列为输出变量 y 以外,其它列都是输入变量 x,以下所示:

    商 s 中 B
    品 p 中 E
    和 h 中 S
    服 f 中 B
    务 w 中 E
    
    A a 英 B
    K k 英 M
    B b 英 M
    4 s 数 M
    8 b 数 E

6.4 HanLP中的CRF++ API

详细代码请见: evaluate_crf_cws.py

https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch06/evaluate_crf_cws.py

训练耗时很长。

标准化评测

算法 P R F1 R(oov) R(IV)
最长匹配 89.41 94.64 91.95 2.58 97.14
二元语法 92.38 96.70 94.49 2.58 99.26
一阶HHM 78.49 80.38 79.42 41.11 81.44
二阶HHM 78.34 80.01 79.16 42.06 81.04
平均感知机 96.69 96.45 96.57 70.34 97.16
结构化感知机 96.67 96.64 96.65 70.52 97.35
条件随机场 96.86 96.64 96.75 71.54 97.33

条件随机场的各项指标全面赛过告终构化感知机,综合 F1 更达到 96.8%, 是传统方法中最准确的分词模型。

6.5 GitHub

HanLP何晗--《天然语言处理入门》笔记:

https://github.com/NLP-LOVE/Introduction-NLP

项目持续更新中......

目录


章节
第 1 章:新手上路
第 2 章:词典分词
第 3 章:二元语法与中文分词
第 4 章:隐马尔可夫模型与序列标注
第 5 章:感知机分类与序列标注
第 6 章:条件随机场与序列标注
第 7 章:词性标注
第 8 章:命名实体识别
第 9 章:信息抽取
第 10 章:文本聚类
第 11 章:文本分类
第 12 章:依存句法分析
第 13 章:深度学习与天然语言处理
相关文章
相关标签/搜索