在 Spacy 的最新文档中,以下链接给出了以下示例:
https://spacy.io/usage/embeddings-transformers
import spacy
from spacy.tokens import Doc
from spacy_transformers import TransformerData
from thinc.api import set_gpu_allocator, require_gpu
def custom_annotation_setter(docs, trf_data):
doc_data = list(trf_data.doc_data)
for doc, data in zip(docs, doc_data):
doc._.custom_attr = data
nlp = spacy.load("en_core_web_trf")
nlp.get_pipe("transformer").set_extra_annotations = custom_annotation_setter
doc = nlp("This is a text")
assert isinstance(doc._.custom_attr, TransformerData)
print(doc._.custom_attr.tensors)
此代码在尝试处理测试数据时抛出异常:
AttributeError:[E047] 无法为未注册的扩展属性“custom_attr”赋值。你忘记调用set_extension
方法了吗?
我使用以下方式设置扩展名:
Doc.set_extension('custom_attr', default=True)
我的问题是,Transform 类是否应该自己处理添加这个特殊扩展(如示例代码中所暗示的那样),或者这只是示例中的一个错误?