spaCy如何通过IOB格式的实体数据初始化Doc对象
你遇到的报错是因为传入Doc构造函数的ents参数不符合spaCy要求的IOB标签格式规范,两种错误写法的问题分别如下:
- 用二元组
("", "O")传参:ents参数要求每个元素为单个IOB格式字符串,不接受元组类型 - 传空字符串/纯实体名:IOB标签必须遵循固定格式,非实体统一用
O,实体开头token用B-实体类型,实体后续token用I-实体类型,不允许空值或不带前缀的实体名
对应你的业务场景,修改后的可运行代码如下:
import spacy from spacy.tokens import Doc nlp = spacy.load("en_core_web_sm") token_texts = ["I", "like", "potatoes", "!"] # 第三个token是单个token构成的food实体,用B-food,其余非实体用O labels = ["O", "O", "B-food", "O"] whitespaces = [True, True, False, False] doc = Doc(nlp.vocab, words=token_texts, ents=labels, spaces=whitespaces) # 验证实体是否设置成功 print([(ent.text, ent.label_) for ent in doc.ents]) # 输出:[('potatoes', 'food')]
如果是多token构成的实体,例如["fried", "potatoes"]都属于food实体,那么对应的IOB标签应为["B-food", "I-food"]。
内容的提问来源于stack exchange,提问作者Dustin
相关产品推荐
相关产品推荐

