读取IOB标注数据,并转化为BIO标注格式(一)

BIO标注方法和IOB标注方法是用于命名实体识别(Named Entity Recognition,NER)任务的常用标注方法。

BIO是一种简单直观的标注方法。在BIO标注中,每个词被标记为以下三个类别之一:

  • B(Begin):表示一个词块的开始,即一个实体的开始部分。
  • I(Inside):表示词块的内部,即实体的非起始部分。
  • O(Outside):表示不属于任何词块,即非实体部分。
  • 苹果公司 B-ORG
  • 的 O
  • 创始人 O
  • 是 O
  • 史蒂夫 B-PER
  • · I-PER
  • 乔布斯 I-PER
  • 。 O

而在IOB中,标签B仅用于两个连续的同类型命名实体的边界区分,不用于命名实体的起始位置。而I和O含义BIO方法相同。

上述例子中,IOB标注方法结果如下:

  • 苹果公司 I-ORG
  • 的 O
  • 创始人 O
  • 是 O
  • 史蒂夫 I-PER
  • · I-PER
  • 乔布斯 I-PER
  • 。 O

IOB因为缺少B-tag作为实体标注的头部表示,丢失了部分标注信息,导致很多任务上的效果不佳,因此出现了IOB-2,约定了所有命名实体均以B tag开头。这样IOB-2其实与BIO的标注方式是等价的。

由于大部分模型均以BIO方法标注训练,因此下面以一个示例代码展示如何将IOB数据标注修改为BIO数据。


首先使用一个循环来迭代IOB标记列表。我们首先将当前标记初始化为'O',然后检查每个标记。

 bio_tags = []
 current_tag = 'O'

如果标记为'O',我们直接将'O'添加到BIO标记列表中,并将当前标记更新为'O'。

   for iob_tag in labels:
       if iob_tag == 'O':
       bio_tags.append('O')
       current_tag = 'O'

如果标记不是'O',我们使用split()函数将其拆分为实体类别(label)和标记(tag)。

else:
    label, tag = iob_tag.split('-')
                  

然后,我们检查当前标记是否与之前的标记相同。 如果不同,我们将'B-' + label作为开始标记添加到BIO标记列表中,并将当前标记更新为tag。 如果相同,我们将'I-' + label作为内部标记添加到BIO标记列表中。

 if tag != current_tag:
    bio_tags.append('B-' + tag)
    current_tag = tag
 else:
    bio_tags.append('I-' + tag)

最后,我们使用print()函数输出原始的IOB标记列表和转换后的BIO标记列表。

 print(bio_tags)   #新的BIO
 print(labels)     #旧的IOB

下期将以IOB标注的wikierNER数据集为例,做完整的数据集读取及BIO格式转化代码展示~

读取IOB标注数据,并转化为BIO标注格式(二)-CSDN博客

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IOB标记是一种用于命名实体识别(NER)任务的标记方案。在IOB标记中,每个单词被标记为三种类型之一:B(开始),I(内部)或O(外部)。B标记表示一个实体的开始,I标记表示一个实体的内部,O标记表示一个单词不属于任何实体。这种标记方案的目的是准确地标记出文本中的实体边界。例如,在一个句子中,如果一个实体由三个单词组成,那么第一个单词将被标记为B,后续的单词将被标记为I,而其他单词将被标记为O。\[1\] 引用\[2\]解释了IOB标记方案的原理。它引入了三种标记类型:B(开始),I(内部)和O(外部)。B标记用于标记实体的开始,I标记用于标记实体的内部,O标记用于标记不属于任何实体的单词。这种标记方案的目的是提供准确的实体边界信息。 在IOB标记中,还可以使用Bigram模板来生成特征。Bigram模板考虑了前一个标记的影响,以生成CRF模型中的边函数。这意味着前一个输出标记和当前标记将组合成Bigram特征。这种方法可以提供更多的上下文信息,有助于提高命名实体识别的准确性。\[3\] 总结来说,IOB标记是一种用于命名实体识别任务的标记方案,它通过B、I和O标记来准确标记实体的边界。使用Bigram模板可以提供更多的上下文信息,提高命名实体识别的准确性。 #### 引用[.reference_title] - *1* [Bidirectional LSTM-CRF Models for Sequence Tagging](https://blog.csdn.net/weixin_42486623/article/details/117757217)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [自然语言处理学习日记3](https://blog.csdn.net/shengshengwang/article/details/77018330)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值