如何使用displacy在spaCy 3中可视化NER训练数据及实体标注
spaCy 3 使用displacy验证NER标注数据的操作步骤
你只需要将自己的标注数据转换为spaCy可识别的Doc对象,即可直接调用displacy完成可视化验证,具体操作如下:
步骤1:导入依赖模块
import spacy from spacy import displacy from spacy.tokens import Doc, Span
步骤2:将自定义标注数据转换为Doc对象
默认你的数据集格式为(文本内容, 实体列表),其中每个实体的结构为(实体起始字符下标, 实体结束字符下标, 实体类型),转换代码示例:
# 加载空白语言pipeline,和你数据集的语言保持一致即可,英文填"en"、日文填"ja" nlp = spacy.blank("zh") # 示例标注数据,替换为你自己的数据集即可 sample_data = [ ("小米公司2024年在北京发布了新款手机", [(0, 4, "ORG"), (5, 9, "DATE"), (10, 12, "GPE")]), ("张三昨天去上海迪士尼玩了一整天", [(0, 2, "PER"), (2, 4, "DATE"), (5, 10, "LOC")]) ] def convert_to_doc(text, entities, nlp): doc = nlp.make_doc(text) ents = [] for start, end, label in entities: # 校验标注下标是否和文本分词结果匹配 span = doc.char_span(start, end, label=label) if span is None: print(f"标注异常:文本「{text}」中的标注[{start}:{end}]{label} 不匹配分词边界") else: ents.append(span) doc.ents = ents return doc # 批量转换所有标注数据 docs = [convert_to_doc(text, ents, nlp) for text, ents in sample_data]
注意:转换过程中输出的标注异常提示,就是你需要优先修正的标注错误,这类错误会直接影响后续NER模型的训练效果。
步骤3:调用displacy生成可视化结果
根据你的使用场景二选一即可:
- 若在Jupyter Notebook/Lab环境下操作,可直接在单元格内渲染可视化结果:
# 渲染单条标注数据 displacy.render(docs[0], style="ent", jupyter=True) # 批量渲染所有标注数据 displacy.render(docs, style="ent", jupyter=True)
- 若在本地脚本中运行,可导出为HTML文件打开查看:
# 生成完整HTML内容 html_content = displacy.render(docs, style="ent", page=True) # 保存到本地 with open("ner_annotation_verify.html", "w", encoding="utf-8") as f: f.write(html_content)
生成的可视化结果会用不同颜色标记不同类型的实体,你可以直接核对实体的标注范围、类型是否符合预期,快速排查漏标、多标、类型标错、下标错位等问题。
内容的提问来源于stack exchange,提问作者user17179901
相关产品推荐
相关产品推荐

