第4章 实体识别:图模型基础

第四章 实体识别:图模型基础

实战:https://blog.csdn.net/weixin_42486623/article/details/118347853
代码:https://github.com/daiyizheng/NER-Set/tree/master/hmm

概率模型

机器学习
最重要的任务是根据已观察到的证据(例如训练样本)对感兴趣的未知变量(例如类别标记)进行估计和推测。
概率模型(probabilistic model)
提供了一种描述框架,将任务归结为计算变量的概率分布。在概率模型中,利用已知的变量推测未知变量的分布称为“推断(inference)",其核心在于基于可观测的变量推测出未知变量的条件分布,即由 P ( Y , R , O ) P(Y,R,O) P(Y,R,O) P ( Y , R ∣ O ) P(Y,R|O) P(Y,RO)得到 P ( Y ∣ O ) P(Y|O) P(YO)

  • 生成式:计算联合分布 P ( Y , R , O ) P(Y,R,O) P(Y,R,O)
  • 判别式:计算条件分布 P ( Y , R I O ) P(Y,RIO) P(Y,RIO)

符号约定

  • y为未知变量的集合,O为可观测变量集合,R为其他变量集合

如何由 P ( Y , R , O ) P(Y,R,O) P(Y,R,O) P ( Y , R I O ) P(Y,RIO) P(Y,RIO)得到 P ( Y ∣ O ) P(Y|O) P(YO)
思路:直接利用概率求和规则消去变量。
可行性:不可行!即便未知变量集合Y和其他变量集合R中,每个变量只有简单的两种取值,则该方法的时间和空间复杂度为指数级别 O ( 2 ∣ Y ∣ + ∣ R ∣ ) O(2^{|Y|+|R|}) O(2Y+R)

概率图模型分类

  • 有向图:贝叶斯网(适合为有单向依赖的数据建模)
  • 无向图:马尔可夫网(适合实体之间互相依赖的建模

有向图概率

概率乘法公式

联合概率

无向图概率

联合概率

用因子分解将p(Y)写为若干个联合概率的乘积

隐马尔可夫模型(Hidden Markoy Model,HMM)

组成

  • 状态变量: { y 1 , y 2 … , y n } \{y_1,y_2…,y_n\} {y1,y2,yn}通常假定是隐藏的,不可被观测的

    • 系统通常在多个状态 { S 1 , S 2 , … , S N } \{S_1,S_2,…,S_N\} {S1,S2,,SN}之间切换,因此,状态变量 y i y_i yi的取值范围(状态空间)通常有N个可能取值的离散空间;
  • 观测变量: { x 1 , x 2 , … , x n } \{x_1,x_2,…,x_n\} {x1,x2,,xn}表示第刻的观测值集合

    • 观测变量可以为离散或连续型(本章中只讨论离散型观测变量), x i x_i xi取值范围为 { o 1 , o 2 , … , o w } \{o_1,o_2,…,o_w\} {o1,o2,,ow},即观测变量通常有M个可能取值的离散空间。
      t时刻,观测变量 x t x_t xt的取值仅依赖于状态变量 y t y_t yt
      t时刻,状态 y y y,仅依赖于 t − 1 t-1 t1时刻状态 y t − 1 y_{t-1} yt1,与其余 n − 2 n-2 n2个状态无关

HMM的基本组成

  1. 确定一个HMM需要三组参数 λ = [ A , B , T ] \lambda=[A,B,T] λ=[A,B,T]
    状态转移概率:模型在各个状态间转换的概率
    表示在任意时刻 t t t,若状态为 s i s_i si;,下一状态为 s j s_j sj的概率;
    A = [ a i j ] N × N A=[a_{ij}]_{N \times N} A=[aij]N×N a i j = p ( y t + 1 = s j ∣ y t = s i ) , 1 ≤ i , j ≤ N a_{ij}=p(y{t+1}=s_j|y_t=s_i), 1≤i,j≤N aij=p(yt+1=sjyt=si),1i,jN
    N表示隐藏状态可能取值的离散空间
    输出观测概率:模型根据当前状态获得各个观测值的概率
    在任意时刻 t t t,若状态为 s i s_i si;,则其对应的输出变量为 o j o_j oj的概率;
    B = [ b i j ] N × N b i j = p ( x t = o j ∣ y t = s i ) , 1 ≤ i ≤ N , 1 ≤ j ≤ M B=[b_{ij}]_{N \times N} b_{ij}=p(x_t=o_j|y_t=s_i), 1≤i≤N,1≤j≤M B=[bij]N×Nbij=p(xt=ojyt=si),1iN1jM
    M表示观测变量可能取值的离散空间
    初始状态概率:模型在初始时刻各个状态出现的概率
    π = [ π 1 , … , π n ] π i = P ( y 1 = s i , 1 ≤ i ≤ N \pi=[\pi_1,…,\pi_n] \pi_i=P(y_1=s_i, 1≤i≤N π=[π1,,πn]πi=P(y1=si,1iN
    P ( x 1 , y 1 , … , x n , y n ) = P ( y 1 ) P ( x 1 ∣ y 1 ) ∏ n i = 2 P ( y i ∣ y i − 1 ) P ( x i ∣ y i ) P(x_1,y_1,…,x_n,y_n)=P(y_1)P(x_1 |y_1)\prod_{n}^{i=2}P(y_i|y_{i-1})P(x_i|y_i) P(x1,y1,,xn,yn=P(y1)P(x1y1)ni=2P(yiyi1)P(xiyi)

HMM的生成过程

通过指定状态空间 y y y,观测空间X和上述三组参教,就能确定一个隐马尔可夫模型。给定 λ = [ A , B , π ] \lambda=[A,B,\pi] λ=[A,B,π],它按如下过程生成观察序列

  1. 设置 t = 1 t=1 t=1,并根据初始状态m选择初始状态 y 1 y_1 y1
  2. 根据状态 y t y_t yt,和输出观测概率B选择观测变量取值 x t x_t xt
  3. 根据状态 y y y,和状态转移矩阵A转移模型状态,即确定 y t + 1 y_{t+1} yt+1
  4. t < n t<n t<n,设置 t = t + 1 t=t+1 t=t+1,并转到第2步,否则停止。

对于模型 A = [ A , B , π ] A=[A,B,\pi] A=[A,B,π],给定观测序列 x = { x 1 , x 2 . . X n } x=\{x_1,x_2..X_n\} x={x1,x2..Xn}

  • 概率计算问题:评估模型和观测序列之间的匹配程度,有效计算观测序列其产生的概率 P ( x ∣ A ) P(x|A) P(xA)
  • 预测问题:根据观测序列“推测”隐藏的模型状态 y = { y 1 , y 2 . . … y n } y=\{y_1,y_2..…y_n\} y={y1,y2..yn},即求得使概率 P ( y ∣ x ) P(y|x) P(yx)最大的状态序列 y y y
  • 参数学习问题:如何调整模型参数 λ = [ A , B , π ] \lambda=[A,B,\pi] λ=[A,B,π]以使得该序列出现的概率 P ( x ∣ π ) P(x|\pi) P(xπ)最大。

具体应用

  • 根据以往的观测序列 x = { x 1 , x 2 . . . , x n } x=\{x_1,x_2...,x_n\} x={x1x2...,xn}预测当前时刻最有可能的观测值。
  • 语音识别:根据观测的语音信号推测最有可能的状态序列(即:对应的文字)。
  • 通过数据学习参数(模型训练)。

基于马尔可夫的条件独立性,隐马尔可夫模型的这三个问题均能高效解决(动态规划)

马尔可夫随机场

马尔可夫随机场(Markov Random Field,MRF)

  • 是典型的马尔可夫网
  • 著名的无向图模型

图模型表示

  • 结点表示变量(集),边表示依赖关系;
  • 有一组势函数(Potential Functions),亦称“因子”(factor),这是定义在变量子集上的非负实函数,主要用于定义概率分布函数。

分布形式化

  • 使用基于极大团的势函数(因子)
    • 对于图中结点的一个子集,若其中任意两结点间都有边连接,则称该结点子集为一个“团”(clique)。若一个团中加入另外任何一个结点都不再形成团,则称该团为“极大团”(maximal clique)。
    • 图中(x1,x2],{x2,x6},{x2,x5,x6]等为团,但{x2,x6)不是极大团,因为(x2,x5,x6}也是一个团。
    • 每个结点至少出现在一个极大团中。
  • 多个变量之间的连续分布可基于团分解为多个因子(势函数)的乘积

基于极大团的势函数

  • 联合概率分布可以使用极大团定义;
  • 假设所有极大团构成的集合为 C ∗ C* C,则

图模型的联合概率分布

马尔可夫随机场中的分离集

  • 马尔可夫随机场中得到“条件独立性"。
  • 借助“分离”的概念,若从结点集A中的结点到B中的结点都必须经过结点集C中的结点,则称结点集A与B被结点集C分离,称C为分离集(separating set)。

马尔可夫随机场–全局马尔可夫性

  • 借助“分离”的概念,可以得到:
    • 全局马尔可夫性(global Markov property):在给定分离集的条件下,两个变量子集条件独立。
      比如,令A,B,C对应的变量集分别为 x A , x B , x C x_A, x_B, x_C xA,xB,xC,则在给定 x C x_C xC的条件下, x A x_A xA x B x_B xB独立,记为 x A ⊥ x B ∣ x C x_A \bot x_B|x_C xAxBxC

全局马尔可夫性的验证

  • 全局马尔可夫性(global Markov property):在给定分离集的条件下,两个变量子集条件独立。
  • 图模型简化:- 图模型的联合概率为:

    在这里插入图片描述- 条件概率
    - 验证

马尔可夫随机场中的条件独立性

由全局马尔可夫性可以导出:

  • 局部马尔可夫性(local Markov property):在给定邻接变量的情况下,一个变量条件独立于其它所有变量
    • V V V为图的结点集, n ( v ) n(v) n(v)为结点 v v v在图上的邻接节点,

(这是因为 n ( v ) n_{(v)} n(v) x v x_v xv x V \ n ∗ ( v ) x_{V\backslash n^*(v)} xV\n(v)的分离集)

  • 成对马尔可夫性(pairwise Markov property):在给定所有其它变量的情况下,两个非邻接变量条件独立。
    • V V V为图的结点集,边集为 E E E,对图中的两个结点 u u u, v v v,若 < u , v ∉ E <u,v \notin E <u,v/E,有 x u ⊥ x v ∣ x V \ < u , v > x_u \bot x_v|x_{V\backslash <u,v> } xuxvxV\<u,v>

马尔可夫随机场中的势函数

势函数 φ Q ( x Q ) \varphi_Q(x_Q) φQ(xQ)中变量的相关关系,应为非负函数,且在所偏好的变量取值上有较大的函数值。


上图中,假定变量均为二值变量,定义势函数:

说明模型偏好 x A x_A xA x C x_C xC有相同的取值, x B x_B xB x C x_C xC有不同的取值,换言之, x A x_A xA x C x_C xC正相关, x B x_B xB x C x_C xC负相关。所以令 x A x_A xA x C x_C xC相同且 x B x_B xB x C x_C xC不同的变量值,联合概率取值较高。

势函数 φ Q ( x Q ) \varphi_Q(x_Q) φQ(xQ)的作用是定量刻画变量集 x Q x_Q xQ中变量的相关关系,应为非负函数,且在所偏好的变量取值上有较大的函数值。
为了满足非负性,指数函数常被用于定义势函数,即:

其中, H Q ( x Q ) H_Q(x_Q) HQ(xQ)是一个定义在变量 x Q x_Q xQ上的实值函数,常见形式为:
其中, α u v \alpha_{uv} αuv β v β_v βv,是参数,上式第一项考虑每一对结点的关系,第二项考虑单结点。

条件随机场(CRF)

CRF是一种判别式无向图模型,条件随机场对多个变量给定相应观测值后的条件概率进行建模,若令 x = x 1 , x 2 . . … , x n x={x_1,x_2..…,x_n} x=x1,x2..,xn
为观测序列, y = y 1 , y 2 … , y n y={y_1,y_2…,y_n} y=y1,y2,yn为对应的标记序列,CRF的目标是构建条件概率模型 P ( y ∣ x ) P(y|x) P(yx)

标记变量y可以是结构型变量,它各个分量之间具有某种相关性。

  • 词性标注任务中,观测数据为单词序列,标记为相应的词性序列,具有线性序列结构;
  • 语法分析任务中,观测数据为单词序列,输出标记是语法树,具有树形结构。

    G = < V , E > G=<V,E> G=<V,E>表示结点与标记变量 y y y中元素一一对应的无向图。无向图中, y v y_v yv表示与节点 v v v对应的标记变量, n ( v ) n_{(v)} n(v)表示结点的邻接结点,若图 G G G中的每个结点都满足马尔可夫性,
    ( y , x ) (y,x) (y,x)构成条件随机场。
  • CRF使用势函数和图结构上的团来定义 P ( y ∣ x ) P(y|x) P(yx)
  • 考虑链式条件随机场(chain-structured CRF),如下所示:
    包含两种关于标记变量的团:
  • 相邻的标记变量,即 { y i − 1 , y } \{y_{i-1},y\} {yi1,y}
  • 单个标记变量, { y i } \{y_i\} {yi}

链式条件随机场

条件概率可被定义为:

其中,
t i ( y i + 1 , x , i ) t_i(y_{i+1,x,i}) ti(yi+1,x,i):观测序列的两个相邻标记位置上的转移特征函数,用于刻画相邻标记变量之间的相关关系以及观测序列对它们的影响;
s k ( y i , x , i ) s_k(y_i,x,i) sk(yi,x,i):观测序列的标记位置i上的状态特征函数,用于刻画观测序列对标记变量的影响;
λ j , u k \lambda_j, u_k λj,uk为参数, Z Z Z为规范化因子。
通常特征函数 t j t_j tj,和 s k s_k sk取值为1或0;当满足特征条件时取1,否则为0

CRF特征函数的直观理解

特征函数通常是实值函数,用于刻画数据中一些大概率成立或者期望成立的经验特性。特征函数本质上是一种规则。
以词性标注任务为例:
某一特征函数:

表示第 i i i个观测值x为单词’knock’时,相应的标记 y , y i + 1 y,y_{i+1} y,yi+1很可能分别为 [ V ] , [ P ] [V],[P] [V],[P]
其实,该特征函数定义了一个规则,该规则为 “ x i “x_i xi为单词knock时,其词性 y i y_i yi;为动词,且该单词后面一个词的标签需要是介词"。

特征函数本质上是一种规则,一个训练好的模型可以看作是多个规则的集合。

那么,每个规则在这个模型中的价值(重要性)都是相同的吗?这就是权值 λ j , u k \lambda_j,u_k λj,uk的意义,即衡量不同规则的重要程度。

示例

MRF与CRF的对比

MRF

  • 使用团上的势函数定义概率
  • 对联合概率建模

CRF

  • 使用团上的势函数定义概率
  • 有观测变量,对条件概率建模
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CRF(Conditional Random Field)是一种常用的序列标注模型,常用于命名实体识别任务。CRF模型的训练和预测都是基于条件概率的计算,具有较高的准确度和泛化能力。 CRF模型的训练过程包括以下几个步骤: 1. 特征提取:将每个样本转化为一系列特征,如词性、字形、位置等,用于描述样本的上下文信息。 2. 标注转换:将标注序列转化为数字序列,便于后续计算。 3. 模型训练:使用训练数据集训练CRF模型,学习特征权重和转移概率。 4. 模型评估:使用测试数据集评估模型的性能,如准确率、召回率、F1值等。 CRF模型的预测过程包括以下几个步骤: 1. 特征提取:将待标注的文本转化为一系列特征。 2. 标注预测:根据CRF模型计算条件概率,预测每个位置的标注。 3. 标注转换:将数字标注序列转化为标注字符串,输出结果。 在Python中,可以使用第三方库pycrfsuite实现CRF模型的训练和预测,具体步骤如下: 1. 安装pycrfsuite库: ```pip install python-crfsuite``` 2. 加载训练数据集,并使用特征模板提取特征: ``` import pycrfsuite # 加载训练数据集 train_sents = ... # 定义特征模板 def word2features(sent, i): ... # 提取训练数据集的特征 X_train = [ [word2features(sent, i) for i in range(len(sent))] for sent in train_sents ] y_train = [ [label for token, label in sent] for sent in train_sents ] ``` 3. 创建CRF模型,并训练模型: ``` # 创建CRF模型 trainer = pycrfsuite.Trainer(verbose=False) # 添加训练数据集 for xseq, yseq in zip(X_train, y_train): trainer.append(xseq, yseq) # 设置参数并训练模型 trainer.set_params({ 'c1': 0.1, 'c2': 0.01, 'max_iterations': 200, 'feature.possible_transitions': True }) trainer.train('ner.model') ``` 4. 加载测试数据集,并使用训练好的模型预测标注: ``` # 加载测试数据集 test_sents = ... # 加载训练好的模型 tagger = pycrfsuite.Tagger() tagger.open('ner.model') # 预测测试数据集的标注 y_pred = [ [tagger.tag([word2features(sent, i)])[0] for i in range(len(sent))] for sent in test_sents ] ``` 5. 计算模型的性能指标: ``` # 计算准确率、召回率、F1值等指标 from sklearn.metrics import classification_report y_test = [ [label for token, label in sent] for sent in test_sents ] print(classification_report(y_test, y_pred)) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发呆的比目鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值