CRF损失函数与Viterbi算法

该博客深入探讨了条件随机场(CRF)模型,重点在于其损失函数的构建和Viterbi算法的应用。CRF考虑了输出标签之间的关联性,通过发射分数和转移分数来计算序列概率。损失函数定义为负对数似然,而Viterbi算法用于寻找概率最高的标签序列,通过动态规划将时间复杂度从指数级降低到线性级。博客还介绍了如何通过反向传播和梯度下降优化模型参数。
摘要由CSDN通过智能技术生成

CRF考虑到了输出层面的关联性,如下图所示:
在这里插入图片描述

损失函数

时间步 t t t 输出的标签值由两部分组成:

  • 发射分数: h ( y t ; X ) h(y_t;X) h(yt;X)
  • 转移分数: g ( y t ; y t − 1 ) g(y_t;y_{t-1}) g(yt;yt1)

一条路径标识为 y 1 , y 2 , … , y n y_1, y_2, \dots , y_n y1,y2,,yn 的概率为:
P ( y 1 , y 2 , … , y n ∣ X ) = 1 Z ( X ) e h ( y 1 ; x ) + ∑ i = 2 n g ( y i ; y i − 1 ) + h ( y i ; X ) P(y_1, y_2, \dots, y_n | X) = \frac{1}{Z(X)} e^{h(y_1;x)+\sum_{i=2}^{n}g(y_i;y_{i-1})+h(y_i;X)} P(y1,y2,,ynX)=Z(X)1eh(y1;x)+i=2ng(yi;yi1)+h(yi;X)
其中 Z ( X ) Z(X) Z(X) 为归一化因子。在 CRF 模型中,由于我们只考虑了临近标签的联系(马尔可夫假设),因此我们可以递归地算出归一化因子,这使得原来是指数级的计算量降低为线性级别。

具体来说,我们将计算到时刻 t t t 的归一化因子记为 Z t Z_t Zt,并将它分为 k k k 个部分:
Z t = Z t 1 + Z t 2 + ⋯ + Z t k Z_t = Z_t^1 + Z_t^2 + \cdots + Z_t^k Zt=Zt1+Zt2++Ztk
上式分别是截止到当前时刻 t t t 中、以标签 1 , 2 , ⋯   , k 1,2,\cdots, k 1,2,,k 为终点的所有路径的得分指数和。那么,我们可以递归地计算:
Z t + 1 ( 1 ) = ( Z t ( 1 ) G 11 + Z t ( 2 ) G 21 + ⋯ + Z t ( k ) G k 1 ) H t + 1 ( 1 ∣ X ) Z t + 1 ( 2 ) = ( Z t ( 1 ) G 12 + Z t ( 2 ) G 22 + ⋯ + Z t ( k ) G k 2 ) H t + 1 ( 2 ∣ X ) ⋮ Z t + 1 ( k ) = ( Z i ( 1 ) G 1 k + Z t ( 2 ) G 2 k + ⋯ + Z t ( k ) G k k ) H t + 1 ( k ∣ X ) \begin{array}{l} Z_{t+1}^{(1)}=\left(Z_{t}^{(1)} G_{11}+Z_{t}^{(2)} G_{21}+\cdots+Z_{t}^{(k)} G_{k 1}\right) H_{t+1}(1 \mid X) \\ Z_{t+1}^{(2)}=\left(Z_{t}^{(1)} G_{12}+Z_{t}^{(2)} G_{22}+\cdots+Z_{t}^{(k)} G_{k 2}\right) H_{t+1}(2 \mid X) \\ \vdots \\ Z_{t+1}^{(k)}=\left(Z_{i}^{(1)} G_{1 k}+Z_{t}^{(2)} G_{2 k}+\cdots+Z_{t}^{(k)} G_{k k}\right) H_{t+1}(k \mid X) \end{array} Zt+1(1)=(Zt(1)G11+Zt(2)G21++Zt(k)Gk1)Ht+1(1X)Zt+1(2)=(Zt(1)G12+Zt(2)G22++Zt(k)Gk2)Ht+1(2X)Zt+1(k)=(Zi(1)G1k+Zt(2)G2k++Zt(k)Gkk)Ht+1(kX)
其中 G i j = e g ( y j ; y i ) , H ( y t + 1 ∣ X ) = e h ( y t + 1 ∣ X ) G_{ij} = e^{g(y_j;y_i)}, H(y_{t+1}|X)=e^{h(y_{t+1}|X)} Gij=eg(yj;yi),H(yt+1X)=eh(yt+1X),上式简写成矩阵形式为:
Z t + 1 = Z t G ⊗ H t + 1 Z_{t+1} = Z_tG \otimes H_{t+1} Zt+1=ZtGHt+1
为了符合损失函数的含义,将其定义为:
L o s s = − l o g P ( y 1 , y 2 , … , y n ∣ X ) Loss = -logP(y_1, y_2, \dots, y_n | X) Loss=logP(y1,y2,,ynX)

viterbi 算法

有了损失函数后,就可以通过反向传播结合梯度下降来求解最优参数。

序列标注的目标是找出一条概率最高的路径。假设整个网络的宽度为 k k k,网络长度为 N N N ,按照穷举法求最佳路径的时间复杂度为 O ( k N ) O(k^N) O(kN),但CRF采用了马尔可夫假设,因此可以使用动态规划来求解,时间复杂度优化到 O ( N × k 2 ) O(N \times k^2) O(N×k2)

具体示例可见:如何通俗地讲解 viterbi 算法?


参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值