jiesutd / LatticeLSTM

Chinese NER using Lattice LSTM. Code for ACL 2018 paper.
1.8k stars 453 forks source link

metric.py代码中的标签问题 #17

Closed precision2intelligence closed 6 years ago

precision2intelligence commented 6 years ago

Hi! 我们在使用ResumeNER的数据时,发现标签列是“B-”,“M-”,“E-”和“O”,可是在LatticeLSTM/utils/metric.py中约76行以后的几行,给出的标签检索中没有M,所以问题是:1、“M-”对于BMES的标签方式是不是必须的?代码里是否是漏写?2、真实标签是“O”,代码中是“S-”,这是否影响最后结果?

jiesutd commented 6 years ago
  1. 没有漏写。M是必须的,当然换成I 也可以。如果你理解了metric.py里面的实现逻辑就知道这是没问题的。代码里用不着每个标签都要定义。
  2. O 和S-是不一样的标签,当然会影响结果
precision2intelligence commented 6 years ago

针对第二个问题,如果用您提供的简历的数据测试,那代码中的“S-”需要替换为“O”,对吗?

jiesutd commented 6 years ago

不需要改代码,也不需要改数据。

precision2intelligence commented 6 years ago

在您的代码中,只有从B到E全都标注正确,才被认为是一个right的计数,是吗?

jiesutd commented 6 years ago

NER的评价标准是F值,是基于entity来算的。

whustan commented 4 years ago

https://github.com/jiesutd/LatticeLSTM/blob/24d17f4270f11d2f75046789d8b67eaa2b907dce/utils/metric.py#L102

实测数据:['O', 'M-ORG', 'M-ORG', 'E-ORG', 'E-ORG', 'B-LOC', 'E-ORG', 'O', 'B-PER', 'M-ORG', 'E-PER'] 得到实体:['[5,6]LOC', '[8,10]PER']

有几个问题,选最重要的来讨论: ['B-LOC', 'E-ORG']-->'LOC'在判断实体结束时没有检测实体类型一致性,那么这个实体类型被识别成'LOC'合适吗?

jiesutd commented 4 years ago

https://github.com/jiesutd/LatticeLSTM/blob/24d17f4270f11d2f75046789d8b67eaa2b907dce/utils/metric.py#L102

实测数据:['O', 'M-ORG', 'M-ORG', 'E-ORG', 'E-ORG', 'B-LOC', 'E-ORG', 'O', 'B-PER', 'M-ORG', 'E-PER'] 得到实体:['[5,6]LOC', '[8,10]PER']

有几个问题,选最重要的来讨论: ['B-LOC', 'E-ORG']-->'LOC'在判断实体结束时没有检测实体类型一致性,那么这个实体类型被识别成'LOC'合适吗?

在这种invalid的标签序列的情况下,不同种类的处理方式都可以理解。 比如选择不识别entity,以第一个词的类别作为entity的类别,以最后一个词类别作为entity类别,这些选择都可以。@whusunny

whustan commented 4 years ago

https://github.com/jiesutd/LatticeLSTM/blob/24d17f4270f11d2f75046789d8b67eaa2b907dce/utils/metric.py#L102

实测数据:['O', 'M-ORG', 'M-ORG', 'E-ORG', 'E-ORG', 'B-LOC', 'E-ORG', 'O', 'B-PER', 'M-ORG', 'E-PER'] 得到实体:['[5,6]LOC', '[8,10]PER'] 有几个问题,选最重要的来讨论: ['B-LOC', 'E-ORG']-->'LOC'在判断实体结束时没有检测实体类型一致性,那么这个实体类型被识别成'LOC'合适吗?

在这种invalid的标签序列的情况下,不同种类的处理方式都可以理解。 比如选择不识别entity,以第一个词的类别作为entity的类别,以最后一个词类别作为entity类别,这些选择都可以。@whusunny

既然是invalid的标签序列,选择不识别entity应该是最恰当的操作吧?因为另外两种启发式操作,都会改变预测结果(有时改对了有时又改错了),从而引起评测指标的不一致。我也是由于评测指标不一致,排查原因时才发现这个问题的,花费了一些时间。