title: 命名实体识别学习-从基础算法开始(02)lstm+crf序列标注
date: 2020-06-22 21:23:07
tags:
命名实体识别学习-从基础算法开始(02)lstm+crf序列标注
代码地址: https://github.com/SStarLib/NERfromBasic
序列标注
将命名实体识别看作序列标注问题,则可以用词性标注的方法来做。
标注方法:Inside–outside–beginning (tagging)
LSTM的不足
序列标注问题,lstm就可以做,但是lstm生成的标注序列是无约束的。而CRFs可以给模型增加约束,以下面例子为例,单纯的lstm极有可能生成第二个非法序列(没有先出现B,就出现了I),而条件随机场可以从训练数据中学习约束
合法序列:
"the wall street journal reported today that apple corporation made money"
" B I I I O O O B I O O"
非法序列:
"the wall street journal reported today that apple corporation made money"
" I I I I O O O B I O O"
条件随机场(CRFs):
概率图模型:
隐马尔可夫模型和条件随机场的区别在CRFs中,观察序列X并不是由模型生成的。标记序列取值以观察序列为条件,同时来自于其邻接点。
从CRFs模型推到代码实现
模型要解决序列标注问题。所以主要使用的是线性链式的CRFs。
李航老师在《统计学习方法》里的定义:
条件随机场(conditional random field)是给定随机变量X条件下,随机变量Y的马尔可夫随机场。其中线性链条件随机场可以用于标注等问题。这时, 在条件概率模型 P ^ ( Y ∣ X ) \hat{P}(Y|X) P^(Y∣X)中,Y是输出变量,表示标记序列,X是输入变量,表示需要标注的观测序列。也把标记序列称为状态序列(参见隐马尔可夫模型)。学习时,利用训练数据集通过极大似然估计或正则化的极大似然估计得到条件概率模型 P ^ ( y ∣ x ) \hat{P}(y|x) P^(y∣x);预测时,对于给定的输入序列 x x x,求出条件概率 P ^ ( y ∣ x ) \hat{P}(y|x) P^(y∣x)最大的输出序列 。
线性链条件随机场参数化形式如:
P ( y ∣ x ) = 1 Z ( x ) e x p ( ∑ i , k λ k t k ( y i − 1 , y i , x , i ) + ∑ i , l μ l s l ( y i , x , i ) ) Z ( x ) = ∑ y e x p ( ∑ i , k λ k t k ( y i − 1 , y i , x , i ) + ∑ i , l μ l s l ( y i , x , i ) ) P(y | x) = \frac{1}{Z(x)}exp\bigg( \sum_{i,k}\lambda_k t_k (y_{i-1}, y_i, x, i) + \sum_{i,l}\mu_l s_l (y_i, x, i) \bigg) \\ Z(x) = \sum_{y}exp\bigg( \sum_{i,k}\lambda_k t_k (y_{i-1}, y_i, x, i) + \sum_{i,l}\mu_l s_l (y_i, x, i) \bigg) \\ P(y∣x)=Z(x)1exp(i,k∑λktk(yi−1,yi,x,i)+i,l∑μlsl(yi,x,i))Z(x)=y∑exp(i,k∑λktk(yi−1,yi,x,i)+i,l∑μlsl(yi,x,i))
可以使用梯度下降的方法对CRF参数进行梯度学习。(这里跟HMM模型很像),同时需要用前向算法递归的计算概率及期望值。前向算法本质是动态规划算法,基本思想L:定义前向变量 α t ( i ) \alpha_t(i) αt(i),递推式: