使用spacy.load加载en_core_web_trf时无向量返回是什么原因?
spaCy不同模型下
has_vector返回结果差异的原因 核心差异点
两种模型的向量设计逻辑完全不同,不属于配置错误:
en_core_web_lg是基于静态词嵌入的传统模型,自带预训练好的全局静态词向量,处理文本时会默认对所有token的静态向量做平均生成文档级向量,因此doc.has_vector默认返回True,可直接调用doc.vector获取生成的平均向量。en_core_web_trf是基于Transformer的上下文感知模型,本身没有内置全局静态词向量,spaCy默认不会主动将Transformer输出的上下文编码作为通用doc.vector属性存储,因此默认doc.has_vector返回False。
解决方案
如果需要在使用en_core_web_trf时获取文档向量,可以手动提取Transformer层的输出,示例代码如下:
import spacy nlp = spacy.load("en_core_web_trf") doc = nlp("test text") # 取Transformer最后一层隐藏层的均值作为文档向量,可根据需求调整取数逻辑 doc_vector = doc._.trf_data.last_hidden_state[0].mean(axis=0)
如果需要让doc.has_vector返回True,手动给doc.vector赋值即可:
doc.vector = doc_vector print(doc.has_vector) # 输出为True
内容的提问来源于stack exchange,提问作者VikR
相关产品推荐
相关产品推荐

