自然语言处理入门(2) 二元语法与隐马尔可夫模型

《自然语言处理入门》阅读笔记(2) 第三章+第四章

二元语法

  • 语言模型:语言的数学抽象,模拟说话顺序——给定词语序列,预测下一个词语的后验概率
    • 数据稀疏
    • 计算代价大

马尔可夫链与二元语法

  • 马尔可夫假设:假定时间线上有一串事件按顺序发生,每个事件的发生概率只取决于前一个事件

    image-20210930185136550

  • 二元语法模型:

    image-20210930185201184

  • n元语法模型以此类推

    • n越大,数据稀疏问题越严重

    • 平滑:将n元语法频次的折线平滑为曲线——线性插值法

      image-20210930185315939

      • $\lambda$:常数,平滑因子

中文分词语料库

  • PKU:1998年《人民日报》语料库
  • MSR:微软亚洲研究院语料库
  • 繁体中文分词语料库
  • 语料库的统计特征:词语种数、总词频

训练和预测分词

  • 遍历一遍语料库即可,得到:

    image-20210930185605218

    • @分隔开二元语法的两个单词
    • 数字表明语法频次
    • 特殊符号:始##始、末##末
  • 对目标句子分词:以“商品和服务”为例

    • 构建“词网“

      image-20210930185816130

      • 词网的创建,是扫描出句子中所有的一元语法及其位置(与词典的全切分类似)

      • 起始位置相同的单词写在一行

      • 词网必须保证从起点出发的所有路径都将连通到终点,如果出现一元语法中没有的词语,则需要额外添加,以保证词网连通(如第五行”务“)

      • 首行、末行对应:始##始、末##末

      • 词网中的元素通过行号索引

      • 词网中,第$i$行词语$w$与第$i+len(w)$行的所有词相连,都能构成二元语法,从而形成词图,词图从起点到终点的每一条路径都代表句子的一种分词方式,二元语法模型的解码任务是找到最合理的路径

        image-20210930191401414

    • 节点距离与最短路径

      • 每条边的二元语法的概率作为距离——为防止下溢,将概率取负对数,浮点数乘法转为负对数加法

      • 可使用拉普拉斯平滑

        image-20210930191514896

      • 得到有向无环图

        image-20210930191659060

    • 维特比算法计算最短路径,即为最佳分词方式

隐马尔可夫模型

序列标注问题

  • 给定一个序列$x=x_1,…,x_n$,找出序列中每个元素对应的标签$y=y_1,…,y_n$

  • 中文分词:

    • 标注集为{切,过}

      image-20211001105657873

    • 标注集为{B(词语首部),M(词中),E(词语尾部),S(单字成词)},最近的两个BE标签内所有字符合并为一个词,S对应的字符为单字词语

      image-20211001105712040

  • 词性标注

    image-20211001105811069

  • 命名实体识别:将单词标注为”B/M/E/S-类别“,不构成命名实体的单词标注为O

    image-20211001105951094

隐马尔可夫模型

  • 隐马尔可夫模型描述两个时序序列联合分布$p(x,y)$的概率模型

    • $x$序列外部可见,为观测序列
    • $y$序列外部不可见,为状态序列
    • 如观测$x$为单词,状态$y$为词性,需要根据单词序列猜测词性
    • 三个要素:初始状态概率向量,状态转移概率矩阵,发射概率矩阵

    image-20211001110228198

  • 马尔可夫假设作用于状态序列,假设当前状态只依赖前一个状态,任意时刻的观测只依赖当前时刻的状态

  • 初始状态概率向量:第一个状态$y_1$为初始状态,若有N种取值,则$y_1$为独立的离散随机变量,由初始状态概率向量$\pi$描述,给定其取值分布

  • 状态转移概率矩阵:从$y_t$转移到$y_{t+1}$的概率(有N种状态,则有$N\times N$的方阵

    image-20211001112913063

  • 发射概率矩阵:给定状态$y_t$,$x$的概率分布参数向量。由于有N种状态,参数向量构成$N\times M$的矩阵

    image-20211001113056317

  • 基本应用:

    • 样本生成问题:给定模型$\lambda=(\pi,A,B)$,生成一系列的观测序列及其对应的状态序列
    • 模型训练问题:给定训练集(一系列观测序列及状态序列),估计模型参数$\lambda=(\pi,A,B)$
    • 序列预测问题:已知模型参数$\lambda=(\pi,A,B)$,给定观测序列$x$,求最可能的状态序列$y$

image-20211001113313077

样本生成问题

  • 例:医疗诊断

    image-20211001113741150

  • 生成算法:长$T$的样本序列,其生成过程即为沿隐马尔可夫链生成$T$次

    1. 根据初始状态率向量采样第一个时刻的状态$y_1=s_i$
    2. 根据状态转移概率矩阵第$i$行采样下一时刻状态
    3. 对每个状态$y_t=s_i$,根据发射概率矩阵第$i$行采样$x_t$
    4. 重复2、3步骤$T-1$和$T$次,输出序列$x$、序列$y$

模型训练问题

  • 根据训练集是否记录隐状态$y$,可分为完全数据(监督学习)和非完全数据(无监督学习)

  • 下面均为监督学习,无监督学习使用EM算法

  • 监督学习中,极大似然法来估计隐马尔可夫模型参数

  • 估计转移概率矩阵

    • 样本序列在时刻$t$处于状态$s_i$,下一时刻转移到状态$s_j$,统计此类转移频次,计入矩阵元素$A_{i,j}$,通过归一化估计$s_i$到$s_j$的转移概率

      image-20211001124008712

  • 估计初始状态概率向量

    • 可视为状态转移的特例,即从BOS转移到$y_1$,用类似的方法统计和归一化

      image-20211001124412894

  • 估计发射概率矩阵

    • 统计样本中状态为$s_i$,观测为$o_j$的频次,进入矩阵元素$B_{i,j}$,则状态$s_i$发射观测$o_j$的概率为

      image-20211001124520728

序列预测问题

  • 给定观测序列,求最可能的序列及其概率

  • 给定观测序列$x$和状态序列$y$,估计二者的联合概率$p(x,y)$

    • 初始状态的概率由$\pi$决定:

      image-20211001124658379

    • 之后的状态由前一个状态转移而来,转移概率由$A$决定,因此状态序列的概率为:

      image-20211001124758303

    • 每一个状态都会发射一个观测,因此给定状态序列$y$,对应$x$的概率为:

      image-20211001124854385

    • 由此得联合概率:

      image-20211001124926151

  • 寻找最大概率对应的状态序列:

    • 每个状态作为有向图的节点,节点距离由转移概率决定,节点本身花费由发射概率决定

    • 所有备选状态构成有向无环图,所求状态序列即为最长路径

      image-20211001125112121

    • 使用维特比算法搜索

      • 从起点到时刻$t$的最优路径,对时刻$t$到$T$的路径选取也是最优

      • 定义二维数组$\delta_{t,i}$表示时刻$t$以$s_i$结尾的所有局部路径最大概率

      • 定义二维数组$\psi_{t,i}$,存储局部最优路径最后状态$y_t$的前一个状态

      • 具体过程如下图所示:

        image-20211001125711217