作者:Henrycelia | 来源:互联网 | 2023-09-25 19:48
我将 SpaCy3.0.1
与变压器模型 ( en_core_web_trf
)一起使用。
当我以前使用 SpaCy 转换器时,可以从 aToken
或获取转换器向量Span
。然而,在 SpaCy 3 中,您似乎只能通过Doc
( doc._.trf_data
)访问转换器向量,而没有与 SpaCy 标记正确对齐。
如何获得 SpaCy 令牌和矢量/文字之间的对齐?
或者替代地;是否有一些函数可以让您直接获取 aToken
或的向量Span
?
回答
我现在已经找到了解决方案。当有一个doc
:
doc = nlp("Helsinki is the capital of Finland.")
词条在哪里:
[['',
'H',
'els',
'inki',
'?is',
'?the',
'?capital',
'?of',
'?Finland',
'.',
'']]
然后,您可以使用以下代码访问例如第一个令牌的对齐方式:
# 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
.
来源:
https://applied-language-technology.readthedocs.io/en/latest/notebooks/part_iii/04_embeddings_continued.html
(还提供了关于在spacy中使用transformer的更详细的解释和信息)