CRF三大问题举例计算(以词性标注举例)

CRF三大问题举例计算(以词性标注举例)


0. 相关设定

观测序列O为:“我-参加-面试”(已分词)
当前词性集包含{PN(代词),VV(动词),NN(名词)}
“我”有PN,NN的可能词性(如:古代“我”也指兵器)
“参加” 有VV,NN的可能性(如:感谢您的“参加”)
“面试”有VV,NN的可能性(如:参加“面试”、“面试”求职者)


1. 学习问题(Learning problem)

问题描述

已知观测序列O,求最优的W=(λ,μ)

解决方式:梯度下降法

CRF对状态之间的转移 和 观测对状态的影响,分别由二元(局部)特征函数 t(yi-1, yi, X) 和一元(节点)函数 s(yi, Xi) 来描述。即能够转移或者能够标注,函数值为1(如:t(yi-1 = VV, yi = PN, X) == 1, s(yi = PN,xi = ‘我’) == 1)。两类特征函数分别具有参数λ,μ,并且每个特定位置的函数参数都不同,这些参数为问题1中所要学习的参数
不妨将

  • λk * t(yj-1, yj, X) 称为转移分数 T[j-1, j]
  • μl * s(yj, Xi) 称为发射分数E[j, i]
  • 观测下标 = i到状态下标 = j的分数称为S[j, i]
  • S[i, i] = T[i-1, i] + E[i, i] + S[i-1, i-1]

则状态序列总分数score(X, Y) = S[n, n] = ΣT[i-1, i] + ΣE[i, i] (n为序列长度)
定义某种由观测序列X求得的状态序列Y的出现概率为P(Y|X) = exp[score(X,Y)] / Σ exp[score(X,Y)]。分母为每种可能的状态序列的score的 总和。令P(Y|X)最大时,或者说令-log[P(Y|X)] 最小的Yi,对应的Wi=(λ,μ),为最优参数,此时的Yi为最合适的状态序列。将**-log[P(Yi|X)]** 作为损失函数,即可按梯度下降法进行参数Wi的求解。
图片借鉴自susht:知乎用户的《序列标注任务的常见套路》一文
图片借鉴自susht:知乎用户的《序列标注任务的常见套路》一文

整体流程

1.随机初始化各参数W0
2.根据训练集真实Y序列与所有可能求出的Y序列对应的score计算损失函数
3.进行梯度下降,迭代更新参数
4.确定全局最优点对应的参数Wi

score计算的流程

假设梯度下降法求得下一步迭代的μl和λk,则易求发射分数矩阵E和转移分数矩阵T

E:发射分数矩阵(E[i, i] = s(yi, Xi) * μl)

如图所示
E[0, 0]∈ {s(y0=PN, x0=‘我’)x0.5, s(y0=NN, x0=‘我’)x0.1}
E[1, 1]∈ {s(y1=VV, ‘x1=参加’)x0.3, s(y1=NN, x1=‘参加’)x0.2}
E[2, 2]∈ {s(y2=VV, x2=‘面试’)x0.2, s(y2=NN, x2=‘面试’)x0.4}
l∈[1,6]

我(i=0)参加(i=1)面试(i=2)
PN0.500
VV00.30.2
NN0.10.20.4
T:转移分数矩阵(T[i-1, i] = t(yi-1, yi) * λk)

如图所示
T[0, 1]∈{t(y0=PN, y1=VV)x0.3, t(y0=VV, y1=PN)x0.2, t(y0=VV, y1=NN)x0.5, t(y0=NN, y1=VV)x0.2, t(y0=NN, y1=NN)x0.1}
T[1, 2]∈{t(y0=PN, y1=VV)x0.3, t(y0=VV, y1=PN)x0.1, t(y0=VV, y1=NN)x0.6, t(y0=NN, y1=VV)x0.2}
K∈[1, 9]

index 0->1PN(i=1)VV(i=1)NN(i=1)
PN(i=0)00.30
VV(i=0)0.200.5
NN(i=0)00.20.1
index 1->2PN(i=2)VV(i=2)NN(i=2)
PN(i=1)00.30
VV(i=1)0.100.6
NN(i=1)00.20
所有取值大于0的分数

E[0, 0]∈ {s(y0=PN, x0=‘我’)x0.5, s(y0=NN, x0=‘我’)x0.1}
E[1, 1]∈ {s(y1=VV, ‘x1=参加’)x0.3, s(y1=NN, x1=‘参加’)x0.2}
E[2, 2]∈ {s(y2=VV, x2=‘面试’)x0.2, s(y2=NN, x2=‘面试’)x0.4}

T[0, 1]∈{t(y0=PN, y1=VV)x0.3, t(y0=VV, y1=PN)x0.2, t(y0=VV, y1=NN)x0.5, t(y0=NN, y1=VV)x0.2, t(y0=NN, y1=NN)x0.1}
T[1, 2]∈{t(y0=PN, y1=VV)x0.3, t(y0=VV, y1=PN)x0.1, t(y0=VV, y1=NN)x0.6, t(y0=NN, y1=VV)x0.2}
K∈[1, 9]

存在形成观测序列O的部分可能的状态序列I及分数计算(略去了起始为VV的可能,)
E[0, 0]S[0, 0]T[0, 1]E[1, 1]S[1, 1]T[1, 2]E[2, 2]S[2, 2]备注
(PN:我)0.50.5(PN-VV)0.3(VV:参加)0.30.5+0.3+0.3=1.1(VV-PN)0.1(PN:面试)01.1+0.1+0=1.2存在E为0
(PN:我)0.50.5(PN-VV)0.3(VV:参加)0.30.5+0.3+0.3=1.1(VV-NN)0.6(NN:面试)0.41.1+0.6+0.4=2.1
(NN:我)0.10.1(NN-VV)0.2(VV:参加)0.30.1+0.2+0.3=0.6(VV-PN)0.1(PN:面试)00.6+0.1+0=0.7存在E为0
(NN:我)0.10.1(NN-VV)0.2(VV:参加)0.30.1+0.2+0.3=0.6(VV-NN)0.6(NN:面试)0.40.6+0.6+0.4=1.6
(NN:我)0.10.1(NN-NN)0.1(NN:参加)0.20.1+0.1+0.3=0.5(NN-VV)0.2(VV:面试)0.20.5+0.2+0.2=0.9

注:如上图所示,最优的序列只可能从1,3,4行状态序列中取,因为0,2行存在E为0,其实路径中E为0和T为0都不是最优解(基于贪心),只是在计算总score时会去计算(总score需要计算全部的路径)


2. 概率推断问题(marginal probability inference problem)

问题描述

已知当前观测序列X,算出状态序列中每个位置所对应标注的概率P(yi | X) yi∈当前词性集,如P(y1=VV|X={“我”“参加”“面试”})

解决方式:前向-后向算法

本质是上述可能性计算中所有可能的状态序列中y1=VV的概率,中间确定,左右两端不定,所以当前总分数s[1, 1]=s[0,0] + T[0, 1] (且index1必须是词性是VV) + E[1, 1](且必须词性是VV),后续T[1, 2] (且index2必须是词性是VV)
求出s后,P(Y|X) = exp[s] / Σ exp[score(X,Y)]即求出结果
由于过程存在子问题重复,且后向也可递推,可用前向-后向递推,动态规划减少计算量,降低复杂度


3. 解码问题(MAP inference problem)

问题描述

已知当前观测序列X, 已知当前W=(λ,μ),找到一个最有可能的序列Y,即:Y^=argmaxP(Y|X),或者说当前句子最可能的词性标注方案是?

解决方式:维特比算法

本质是上述可能性序列概率最大的一个(例如非规范化分数=2.1的那个),注意不考虑E T为0的序列(贪心)
由于过程存在子问题重复,可用动态规划减少计算量,降低复杂度


4. 与HMM三大问题解法异同

差异

  • 一是解决了HMM的观测独立性限制特征选择,使得前序观测序列的输入会影响当前观测序列的输入,体现在HMM中一个转移矩阵便可各个状态之间不考虑输入位置进行转移,而CRF中会出现(序列长度-1)个与当前位置相关的转移矩阵(如本文的index0->1矩阵,index1->2矩阵)
  • 二是解决了MEMM由于齐次马尔可夫性导致的label bias问题,体现在进行了全局归一化处理,必须计算全部路径的score
  • 三是在概率推断和解码问题上,HMM作为生成式模型,对问题的条件概率分布建模,而 HMM 是生成模型,对联合概率分布建模,必须求出联合概率才能累加出结果;在学习问题上,HMM采用EM算法,基于统计从语料中计算参数,CRF采用梯度下降的方法,基于损失函数更新参数

共性

  • 在概率推断和解码问题上,还是能采用前向-后向算法和维特比算法进行动归式的求解

5. 后记

下面几个链接是笔者学习过程中觉得非常不错的文章和视频,分享给大家,也希望对我的文章的内容多批评指正
B站:手推讲解的白板推导CRF系列课程, by shuhuai008
Github:【NLP】从隐马尔科夫到条件随机场, by Maxma
知乎:通俗的解释条件随机场(CRF)模型, by 忆臻

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
显象: 词性标注(Part-of-Speech Tagging)在自然语言处理中具有广泛的应用场景和需求。例如,在文本分析中,词性标注可以帮助识别文本中每个词语的词性,从而进行更精确的语义分析和构建句法树。在信息检索中,词性标注可以用于提取关键词和过滤停用词,以提高搜索结果的质量。在机器翻译和语言生成中,词性标注可以为翻译模型提供更准确的上下文信息。 真象: 词性标注是指为文本中的每个词语赋予其所属的词性类别。词性是指词语在句子中所扮演的语法角色,如名词、动词、形容词等。在英文中,常见的词性有名词(noun)、动词(verb)、形容词(adjective)、副词(adverb)等。在中文中,常见的词性有名词、动词、形容词、副词、代词等。 特征: 词性标注的结构通常包括一个标注器和一个标签集。标注器是执行词性标注任务的工具或算法,用于为每个词语分配相应的词性标签。标签集是一组预定义的词性类别,用于表示词语所属的语法角色。词性标注可以基于规则、统计和机器学习等技术来实现。 举例说明如何实现: 1. 基于规则的方法:可以使用预定义的规则和模式来进行词性标注。例如,在英文中,可以通过词尾的形态变化来判断动词的时态和人称,如"walked"为过去式动词,"walks"为第三人称单数形式动词。 2. 基于统计的方法:常见的统计方法包括基于马尔可夫模型(Markov models)和隐马尔可夫模型(Hidden Markov Models,HMM)的词性标注。这些方法通过统计训练数据中词语和其上下文的共现关系来进行标注。例如,在英文中,可以根据词语前后出现的词性概率来进行标注,如"he"之后通常是动词。 3. 基于机器学习的方法:可以使用机器学习算法,如条件随机场(Conditional Random Fields,CRF)或者神经网络模型,来进行词性标注。这些模型可以通过训练数据来学习词语和上下文之间的关系,并进行标注。例如,在中文中,可以使用CRF模型学习词语和前后词性之间的转移概率,从而进行词性标注。 现象: 词性标注的功能包括提供词语的语法角色信息、帮助句法分析和语义分析、辅助信息检索和机器翻译等。准确的词性标注可以提高后续任务的效果和准确性,而不准确的词性标注可能导致信息丢失或错误。评价词性标注系统的指标包括准确性、召回率、速度和适用性等。 变化: 在词性标注中,可以根据具体需求和场景进行不同的组合和流程。例如,在文本分析中,可以将分词和词性标注作为一个流程,先对文本进行分词,然后对分词结果进行词性标注。这样可以更准确地分析文本的语义结构和句法关系。同时,不同的词性标注技术和工具可以根据具体需求进行选择和调整,以达到更好的词性标注效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值