昇思25天学习打卡营第25天|LSTM+CRF序列标注

概述

序列标注指给定输入序列,给序列中每个Token进行标注标签的过程。序列标注问题通常用于从文本中进行信息抽取,包括分词(Word Segmentation)、词性标注(Position Tagging)、命名实体识别(Named Entity Recognition, NER)等。以命名实体识别为例:

输入序列
输出标注BIIIOOOOOBI

如上表所示,清华大学北京是地名,需要将其识别,我们对每个输入的单词预测其标签,最后根据标签来识别实体。

这里使用了一种常见的命名实体识别的标注方法——“BIOE”标注,将一个实体(Entity)的开头标注为B,其他部分标注为I,非实体标注为O。

条件随机场(Conditional Random Field, CRF)

从上文的举例可以看到,对序列进行标注,实际上是对序列中每个Token进行标签预测,可以直接视作简单的多分类问题。但是序列标注不仅仅需要对单个Token进行分类预测,同时相邻Token直接有关联关系。以清华大学一词为例:

输入序列
输出标注BIII
输出标注OIII×

如上表所示,正确的实体中包含的4个Token有依赖关系,I前必须是B或I,而错误输出结果将字标注为O,违背了这一依赖。将命名实体识别视为多分类问题,则每个词的预测概率都是独立的,易产生类似的问题,因此需要引入一种能够学习到此种关联关系的算法来保证预测结果的正确性。而条件随机场是适合此类场景的一种概率图模型。下面对条件随机场的定义和参数化形式进行简析。

考虑到序列标注问题的线性序列特点,本节所述的条件随机场特指线性链条件随机场(Linear Chain CRF)

x = { x 0 , . . . , x n } x=\{x_0, ..., x_n\} x={x0,...,xn}为输入序列, y = { y 0 , . . . , y n } , y ∈ Y y=\{y_0, ..., y_n\},y \in Y y={y0,...,yn}yY为输出的标注序列,其中 n n n为序列的最大长度, Y Y Y表示 x x x对应的所有可能的输出序列集合。则输出序列 y y y的概率为:

P ( y ∣ x ) = exp ⁡ ( Score ( x , y ) ) ∑ y ′ ∈ Y exp ⁡ ( Score ( x , y ′ ) ) ( 1 ) \begin{align}P(y|x) = \frac{\exp{(\text{Score}(x, y)})}{\sum_{y' \in Y} \exp{(\text{Score}(x, y')})} \qquad (1)\end{align} P(yx)=yYexp(Score(x,y))exp(Score(x,y))(1)

x i x_i xi, y i y_i yi为序列的第 i i i个Token和对应的标签,则 Score \text{Score} Score需要能够在计算 x i x_i xi y i y_i yi的映射的同时,捕获相邻标签 y i − 1 y_{i-1} yi1 y i y_{i} yi之间的关系,因此我们定义两个概率函数:

  1. 发射概率函数 ψ EMIT \psi_\text{EMIT} ψEMIT:表示 x i → y i x_i \rightarrow y_i xiyi的概率。
  2. 转移概率函数 ψ TRANS \psi_\text{TRANS} ψTRANS:表示 y i − 1 → y i y_{i-1} \rightarrow y_i yi1yi的概率。

则可以得到 Score \text{Score} Score的计算公式:

Score ( x , y ) = ∑ i log ⁡ ψ EMIT ( x i → y i ) + log ⁡ ψ TRANS ( y i − 1 → y i ) ( 2 ) \begin{align}\text{Score}(x,y) = \sum_i \log \psi_\text{EMIT}(x_i \rightarrow y_i) + \log \psi_\text{TRANS}(y_{i-1} \rightarrow y_i) \qquad (2)\end{align} Score(x,y)=ilogψEMIT(xiyi)+logψTRANS(yi1yi)(2)

设标签集合为 T T T,构造大小为 ∣ T ∣ x ∣ T ∣ |T|x|T| TxT的矩阵 P \textbf{P} P,用于存储标签间的转移概率;由编码层(可以为Dense、LSTM等)输出的隐状态 h h h可以直接视作发射概率,此时 Score \text{Score} Score的计算公式可以转化为:

Score ( x , y ) = ∑ i h i [ y i ] + P y i − 1 , y i ( 3 ) \begin{align}\text{Score}(x,y) = \sum_i h_i[y_i] + \textbf{P}_{y_{i-1}, y_{i}} \qquad (3)\end{align} Score(x,y)=ihi[yi]+Pyi1,yi(3)

接下来我们根据上述公式,使用MindSpore来实现CRF的参数化形式。首先实现CRF层的前向训练部分,将CRF和损失函数做合并,选择分类问题常用的负对数似然函数(Negative Log Likelihood, NLL),则有:

Loss = − l o g ( P ( y ∣ x ) ) ( 4 ) \begin{align}\text{Loss} = -log(P(y|x)) \qquad (4)\end{align} Loss=log(P(yx))(4)

由公式 ( 1 ) (1) (1)可得,

Loss = − l o g ( exp ⁡ ( Score ( x , y ) ) ∑ y ′ ∈ Y exp ⁡ ( Score ( x , y ′ ) ) ) ( 5 ) \begin{align}\text{Loss} = -log(\frac{\exp{(\text{Score}(x, y)})}{\sum_{y' \in Y} \exp{(\text{Score}(x, y')})}) \qquad (5)\end{align} Loss=log(yYexp(Score(x,y))exp(Score(x,y)))(5)

= l o g ( ∑ y ′ ∈ Y exp ⁡ ( Score ( x , y ′ ) ) − Score ( x , y ) \begin{align}= log(\sum_{y' \in Y} \exp{(\text{Score}(x, y')}) - \text{Score}(x, y) \end{align} =log(yYexp(Score(x,y))Score(x,y)

根据公式 ( 5 ) (5) (5),我们称被减数为Normalizer,减数为Score,分别实现后相减得到最终Loss。

Normalizer计算

根据公式 ( 5 ) (5) (5),Normalizer是 x x x对应的所有可能的输出序列的Score的对数指数和(Log-Sum-Exp)。此时如果按穷举法进行计算,则需要将每个可能的输出序列Score都计算一遍,共有 ∣ T ∣ n |T|^{n} Tn个结果。这里我们采用动态规划算法,通过复用计算结果来提高效率。

假设需要计算从第 0 0 0至第 i i i个Token所有可能的输出序列得分 Score i \text{Score}_{i} Scorei,则可以先计算出从第 0 0 0至第 i − 1 i-1 i1个Token所有可能的输出序列得分 Score i − 1 \text{Score}_{i-1} Scorei1。因此,Normalizer可以改写为以下形式:

l o g ( ∑ y 0 , i ′ ∈ Y exp ⁡ ( Score i ) ) = l o g ( ∑ y 0 , i − 1 ′ ∈ Y exp ⁡ ( Score i − 1 + h i + P ) ) ( 6 ) log(\sum_{y'_{0,i} \in Y} \exp{(\text{Score}_i})) = log(\sum_{y'_{0,i-1} \in Y} \exp{(\text{Score}_{i-1} + h_{i} + \textbf{P}})) \qquad (6) log(y0,iYexp(Scorei))=log(y0,i1Yexp(Scorei1+hi+P))(6)

其中 h i h_i hi为第 i i i个Token的发射概率, P \textbf{P} P是转移矩阵。由于发射概率矩阵 h h h和转移概率矩阵 P \textbf{P} P独立于 y y y的序列路径计算,可以将其提出,可得:

l o g ( ∑ y 0 , i ′ ∈ Y exp ⁡ ( Score i ) ) = l o g ( ∑ y 0 , i − 1 ′ ∈ Y exp ⁡ ( Score i − 1 ) ) + h i + P ( 7 ) log(\sum_{y'_{0,i} \in Y} \exp{(\text{Score}_i})) = log(\sum_{y'_{0,i-1} \in Y} \exp{(\text{Score}_{i-1}})) + h_{i} + \textbf{P} \qquad (7) log(y0,iYexp(Scorei))=log(y0,i1Yexp(Scorei1))+hi+P(7)

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值