诸神缄默不语-个人CSDN博文目录
本文是作者学习CRF后的笔记。
最近更新时间:2022.11.17
最早更新时间:2022.11.15
条件随机场CRF是适宜于顺序预测任务的判别模型,可用于命名实体识别、词性标注等。
在序列预测任务中,用邻近(上下文)样本来辅助学习当前样本。
以Part-of-Speech Tagging任务为例:
任务示例:输入Bob drank coffee at Starbucks
,标记为Bob (NOUN) drank (VERB) coffee (NOUN) at (PREPOSITION) Starbucks (NOUN)
本节限制特征仅取决于当前和前一个标签,而非句中任一标签:
特征函数feature function f i f_i fi(需要一堆):
给每个feature function f j f_j fj分配一个权重 λ j \lambda_j λj
给出一个句子 s s s,对labeling的打分方式是对所有单词的所有feature function求和:
s c o r e ( l ∣ s ) = ∑ j = 1 m ∑ i = 1 n λ j f j ( s , i , l i , l i − 1 ) score(l | s) = \sum_{j = 1}^m \sum_{i = 1}^n \lambda_j f_j(s, i, l_i, l_{i-1}) score(l∣s)=j=1∑mi=1∑nλjfj(s,i,li,li−1)
将所有labeling的打分转换为概率(通过exponentiating and normalizing,即softmax):
p ( l ∣ s ) = e x p [ s c o r e ( l ∣ s ) ] ∑ l ’ e x p [ s c o r e ( l ’ ∣ s ) ] = e x p [ ∑ j = 1 m ∑ i = 1 n λ j f j ( s , i , l i , l i − 1 ) ] ∑ l ’ e x p [ ∑ j = 1 m ∑ i = 1 n λ j f j ( s , i , l ’ i , l ’ i − 1 ) ] p(l | s) = \frac{exp[score(l|s)]}{\sum_{l’} exp[score(l’|s)]} = \frac{exp[\sum_{j = 1}^m \sum_{i = 1}^n \lambda_j f_j(s, i, l_i, l_{i-1})]}{\sum_{l’} exp[\sum_{j = 1}^m \sum_{i = 1}^n \lambda_j f_j(s, i, l’_i, l’_{i-1})]} p(l∣s)=∑l’exp[score(l’∣s)]exp[score(l∣s)]=∑l’exp[∑j=1m∑i=1nλjfj(s,i,l’i,l’i−1)]exp[∑j=1m∑i=1nλjfj(s,i,li,li−1)]
CRF概率长得像逻辑回归→CRF就是逻辑回归的序列版:whereas logistic regression is a log-linear model for classification, CRFs are a log-linear model for sequential labels.
算出CRF模型后,应用在新的句子上:
原始方法——算出所有 p ( l ∣ s ) p(l | s) p(l∣s)的值:太慢了
(polynomial-time) dynamic programming algorithm(由于linear-chain CRFs满足 optimal substructure 特性)(类似HMM的维特比算法)
在第一节中我们得到了:
p ( l ∣ s ) = e x p [ ∑ j = 1 m ∑ i = 1 n λ j f j ( s , i , l i , l i − 1 ) ] ∑ l ’ e x p [ ∑ j = 1 m ∑ i = 1 n λ j f j ( s , i , l ’ i , l ’ i − 1 ) ] p(l | s)= \frac{exp[\sum_{j = 1}^m \sum_{i = 1}^n \lambda_j f_j(s, i, l_i, l_{i-1})]}{\sum_{l’} exp[\sum_{j = 1}^m \sum_{i = 1}^n \lambda_j f_j(s, i, l’_i, l’_{i-1})]} p(l∣s)=∑l’exp[∑j=1m∑i=1nλjfj(s,i,l’i,l’i−1)]exp[∑j=1m∑i=1nλjfj(s,i,li,li−1)]
将 ∑ i = 1 n f j ( s , i , l ’ i , l ’ i − 1 ) ] \sum_{i = 1}^nf_j(s, i, l’_i, l’_{i-1})] ∑i=1nfj(s,i,l’i,l’i−1)]记为 f j ( x , y ) f_j(x,y) fj(x,y)(s,l)
CRF模型的定义式:
P ( y ∣ x ) = 1 Z ( x ) exp [ ∑ j λ j ( f j ( x , i ) ) ] P(y|x)=\frac{1}{Z(x)}\exp\Big[\sum_j\lambda_j\big(f_j(x,i)\big)\Big] P(y∣x)=Z(x)1exp[j∑λj(fj(x,i))]
(其中 Z ( x ) = ∑ y [ ∑ j λ j ( f j ( x , i ) ) ] Z(x)=\sum_y\Big[\sum_j\lambda_j\big(f_j(x,i)\big)\Big] Z(x)=∑y[∑jλj(fj(x,i))],可以看作所有可能的隐状态序列的score值之和)
我们的最终目标是找到能使得score值最大( P ( y ∣ x ) P(y|x) P(y∣x)最大)的隐状态序列。在定义好feature functions后,我们需要学习 λ \lambda λ
用梯度学习优化feature function的权重: