问题描述
我将 SpaCy 3.0.1
与转换器模型 (en_core_web_trf
) 一起使用。
当我以前使用 SpaCy 转换器时,可以从 Token
或 Span
获取转换器向量。
然而,在 SpaCy 3 中,您似乎只能通过 Doc
(doc._.trf_data
) 访问转换器向量,而没有与 SpaCy 标记正确对齐。
我怎样才能让 SpaCy Tokens 和 Vectors/Wordpieces 对齐?
或者替代地;是否有一些函数可以让您直接获取 Token
或 Span
的向量?
解决方法
我现在找到了解决方案。当有 doc
时:
doc = nlp("Helsinki is the capital of Finland.")
词条在哪里:
[['<s>','H','els','inki','Ġis','Ġthe','Ġcapital','Ġof','ĠFinland','.','</s>']]
然后您可以使用以下代码访问例如第一个令牌的对齐方式:
# Get the first spaCy Token,"Helsinki",and its alignment data
doc[0],doc._.trf_data.align[0].data
输出:
(Helsinki,array([[1],[2],[3]],dtype=int32))
然后您可以使用这些索引从 doc._.trf_data.tensors
中提取相应的向量。
来源:
(还提供了更详细的解释和关于在spacy中使用transformer的信息)