基本框架
NN-CRF是目前命名实体识别的基线模型,如BiLSTM-CRF、BERT-CRF等,基本框架图如下:
因此重点在于引入CRF模型及CRF模型的计算过程。
为什么要引入CRF模型呢?
论文里面给出了解释: Neural Architectures for Named Entity Recognition
对于BIO标注,I-PER 不可能接在B-LOC之后,同样I-PER和I-LOC也不可能出现在相邻序列当中。因此需要一种方法去约束这种条件,CRF通过构造转移矩阵,学习各个标签之间的转移概率,通过这种方式可以大大减少无效标签序列的产生。
CRF计算过程
目标:给每一个可能的标注序列算一个分数,通过训练,使得那个唯一的真实的标签序列得分最高
假设文本长度m,标签为n,则优化目标:
p
r
o
b
=
e
P
r
e
a
l
p
a
t
h
e
p
1
+
e
p
2
+
.
.
.
+
e
p
m
n
prob = \frac {e^{P_{realpath}}}{e^{p_1}+e^{p_2}+...+e^{p_{m^n}}}
prob=ep1+ep2+...+epmnePrealpath
即:
−
l
o
g
(
p
r
o
b
)
=
l
o
g
(
e
p
1
+
e
p
2
+
e
p
3
+
.
.
.
+
e
p
m
n
)
−
P
r
e
a
l
p
a
t
h
-log(prob) = log(e^{p_1}+e^{p_2}+e^{p_3}+...+e^{p_{m^n}})- P_{realpath}
−log(prob)=log(ep1+ep2+ep3+...+epmn)−Prealpath
如何计算某一种路径的分数?
对于第m个字符的输出,对于标签为1的路径节点p1,m:
则路径为
p
1
,
m
p_{1,m}
p1,m 的概率值为:
e
m
1
e_{m1}
em1为
w
m
w_m
wm对标签
l
1
l_1
l1的发射概率,由NN网络提供;
t
i
1
t_{i1}
ti1为
l
i
l_i
li到
l
1
l_1
l1的转移概率,由CRF提供;
由以上公式,可以递归求出所有路径的分数,
其中的主要参数:
发射概率矩阵
E
m
∗
n
E_{m*n}
Em∗n
转移概率矩阵
T
n
∗
n
T_{n*n}
Tn∗n
假设文本长度m,标签个数为n,则发射矩阵和转移矩阵:
已知发射矩阵和转移矩阵,模型如何输出最佳路径?
维特比算法(动态规划):每一个节点均为当前节点的最优路径
step1: 计算每一种路径的概率值;
step2: 获取最后一步的最大概率值,然后反向查找当前概率下的路径。
扩展:IDCNN-CRF
编码层引入空洞卷积
优点:1、去掉池化层;2.可以看到更多的信息;3.轻量级,适合生产部署。
IDCNN-CRF业界使用方案:美团搜索中NER技术的探索与实践
github
https://github.com/KATEhuang920909/tensorflow2.0_NER/tree/main/tf2_ner