gpt4 book ai didi

python - 使用 SpaCy DisplaCy 可视化自定义 IOB 标签

转载 作者:行者123 更新时间:2023-12-05 05:57:40 31 4
gpt4 key购买 nike

我有一个文本文件,我使用 SpaCy 创建了一个 DOC 对象:

doc = nlp.make_doc(raw_text)

我还有一个针对此 DOC 对象中每个单词的自定义 IOP 标签列表:

['O', 'B-PER', 'I-PER', 'O', 'O', 'O', 'O', 'B-DATE', 'I-DATE', 'I-DATE', 'I-DATE', 'I-DATE', 'O', 'O', 'O', 'O', 'O', 'B-ORG', 'I-ORG']

我想将这些标签中的每一个分配给 DOC 对象中的每个单词,并使用 DisplaCy 可视化结果(标签列表的长度等于 doc 对象的长度):

 displacy.render(doc, style="ent", jupyter=True)

但是,我不知道如何实现这个。我使用了 doc.char_span 方法来获取每个标签的开始和结束索引:

def Visulaizer(file_name, path):
nlp = spacy.blank("fa")
f = open(path+'/'+file_name+'.txt', 'r')
raw_text = f.read()
doc = nlp.make_doc(raw_text)
spans = tags
ents = []
for span_start, span_end, label in spans:
ent = doc.char_span(span_start, span_end, label=label)
if ent is None:
continue
ents.append(ent)
doc.ents = ents
displacy.render(doc, style="ent", jupyter=True)

visualized_data = Visulaizer('test', path)

如何更改我的代码以使其与我当前的设置相匹配?

最佳答案

您只能通过在初始化 Doc 时一次性提供整个列表来直接从 IOB 标签分配实体。使用 Doc(ents=):

from spacy.tokens import Doc
doc = Doc(nlp.vocab, words=words, ents=iob_tags)

或者,您可以使用 spacy.training.iob_utils.biluo_tags_to_spans 将 IOB 标签转换为 ent span 并分配给 doc.ents。但是,由于来自 nlp 的默认分词器可能不会生成与原始注释中完全相同的词,因此最好从对齐的 wordsents 然后您确定标签与正确的词对齐。

关于python - 使用 SpaCy DisplaCy 可视化自定义 IOB 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68758391/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com