SpaCy 3 变压器矢量令牌对齐

问题描述

我将 SpaCy 3.0.1 与转换器模型 (en_core_web_trf) 一起使用。
当我以前使用 SpaCy 转换器时,可以从 TokenSpan 获取转换器向量。 然而,在 SpaCy 3 中,您似乎只能通过 Doc (doc._.trf_data) 访问转换器向量,而没有与 SpaCy 标记正确对齐。

我怎样才能让 SpaCy Tokens 和 Vectors/Wordpieces 对齐?
或者替代地;是否有一些函数可以让您直接获取 TokenSpan 的向量?

解决方法

我现在找到了解决方案。当有 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 中提取相应的向量。


来源

https://applied-language-technology.readthedocs.io/en/latest/notebooks/part_iii/04_embeddings_continued.html

(还提供了更详细的解释和关于在spacy中使用transformer的信息)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...