【问题标题】:Spacy 3.1 example code for Transformers in the online documentation seems to be wrong在线文档中的 Transformers 的 Spacy 3.1 示例代码似乎是错误的
【发布时间】:2021-08-06 15:26:42
【问题描述】:

在 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 类应该自己处理添加这个特殊扩展(如示例代码中所暗示的那样),还是这只是示例中的一个错误?

【问题讨论】:

    标签: transformer code-documentation spacy-3 spacy-transformers


    【解决方案1】:

    如果我在您的函数定义之前设置扩展名,您的代码运行不会出错。

    import spacy
    from spacy.tokens import Doc
    from spacy_transformers import TransformerData
    from thinc.api import set_gpu_allocator, require_gpu
    
    Doc.set_extension('custom_attr', default=True)
    
    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)
    

    也许你打错了set_extension

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 2016-10-24
      相关资源
      最近更新 更多