是否可以在标准 SpaCy 管道中使用外部矢量化器?

is it possible to use an external vectorizer in a standard SpaCy pipeline?

我有一个脚本几乎完全依赖 SpaCy 来完成一系列 nlp 任务。 由于 SpaCy 默认仅支持 3 个英语模型(sm、md、lg),我想用外部模型替换它们,这样我就可以矢量化我的文本并执行我目前在我的管道中执行的所有 SpaCy 方法。

是否可以替换 nlp = spacy.load('en_core_web_lg') 在不影响我管道的其余部分的情况下与其他东西保持一致?例如,通过使用 transformers 库中支持的语言模型之一定义 'nlp'?

例如,我使用 SpaCy 的 (a).similarity(b) 方法,并希望保留包含此的管道,除了基于非默认语言模型生成的词向量的计算。

取决于您打算如何准确地使用它,但可以继承自 SpaCy 类 仅覆盖 similarity 方法,该方法将使用您可能想要的任何其他矢量模型。

因此,根据您希望支持自定义相似性的 DocSpanToken,您可以按照以下方式做一些事情:

from spacy import Doc

class MyDoc(Doc):
    def __init__(...):
       super(Doc, self).__init__(...)

       self.__mymodel = <load your special vector model>

    def __similarity(v1, v2):
         <your implementation of similarity>

    def similarity(doc):
       v1 = <get vector for self from self.__mymodel>
       v2 = <get vector for doc param from self.__mymodel> 
       return self.__similarity(v1, v2)      

您可以对 SpanToken 类 使用类似的方法。