bojone / bert4keras

keras implement of transformers for humans
https://kexue.fm/archives/6915
Apache License 2.0
5.36k stars 926 forks source link

关于”用CRF做中文命名实体识别“例子 #490

Open Lufffya opened 2 years ago

Lufffya commented 2 years ago

对应 task_sequence_labeling_ner_crf.py,有个地方没看懂,想请教一下苏神:

image

经过观察,categories 是一个['PER','LOC',‘ORG’] 三类别的List

不太理解,这个label为什么是这样设计的: labels[start] = categories.index(label) * 2 + 1 labels[start + 1:end + 1] = categories.index(label) * 2 + 2

谢谢苏神!!!

Thove commented 2 years ago

这个问题我可以尝试回答。因为在本案例中,作者将作为每个类别开头的token标记为了 index2 + 1,也就是BIO中的B;而将作为每个类别中间的tokens都标记为了index 2 + 2,也就是BIO中的I,这一过程请参看class data_generator的代码。因此实际上的label包含同一个标签作为B 和 I 的两种情况,也就是3*2 = 6个标签,再加上O标签也就是什么也不属于的标签,一共是7种。