spaCy 3无法添加负样本至训练集,该如何解决?
解决spaCy 3中添加无实体负样本到DocBin的问题
- 核心思路:无实体的负样本不需要强行创建占位Span,直接把
doc.ents设为空元组即可,DocBin就能正常接收该文档。 - 具体操作代码示例:
import spacy from spacy.tokens import DocBin nlp = spacy.load("zh_core_web_sm") # 替换成你使用的语言模型 doc = nlp("这段文本里没有任何需要标注的实体") # 关键操作:将doc.ents设为空元组,明确表示该文档无实体 doc.ents = () # 加入DocBin并保存 db = DocBin() db.add(doc) db.to_disk("negative_samples.spacy") - 原理说明:spaCy的
Doc.ents本身支持空元组值,这完全匹配负样本的定义——没有任何实体标注。之前尝试用doc.char_span(0,0,"NO_ENTITY")是无效操作,因为spaCy不认可零长度的Span作为有效实体,直接设空元组才是正确逻辑。 - 批量处理提示:处理数据集时,对有实体的文本正常创建Span并赋值给
doc.ents,对无实体的文本执行doc.ents = (),最后统一将两类文档加入DocBin即可,两者都能被正确保存。
内容的提问来源于stack exchange,提问作者Yunrui Huang
相关产品推荐
相关产品推荐

