You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何预训练spaCy管道添加至空白管道后失效,所有Token被识别为名词?

问题原因及解决办法

核心问题:多余的nlp.initialize()调用

你调用的nlp.initialize()会重置从预训练模型加载的组件参数,把它们还原到未训练的初始状态,导致组件无法正确识别词性和句法结构,只能输出默认的名词标签。

解决步骤

直接移除nlp.initialize()这一行即可,从预训练模型加载的组件本身就带有训练好的权重,不需要重新初始化。

修改后的代码:

import spacy
from spacy import displacy

nlp = spacy.blank("nb")
wanted_pipes = ["morphologizer", "parser"] 

# 提前加载预训练模型,避免重复加载
pretrained_nlp = spacy.load("nb_core_news_sm")
for pipe_name in wanted_pipes:
    if pipe_name not in nlp.pipe_names:
        nlp.add_pipe(pipe_name, source=pretrained_nlp)

# 直接处理文本
doc = nlp("Katten heter Petrus.")

# 可以打印结果验证
for token in doc:
    print(f"词: {token.text}, 词性: {token.pos_}, 依存关系: {token.dep_}")

额外说明

如果后续需要基于这个管道微调自定义数据,才需要调用nlp.initialize(),但此时要确保正确传入预训练权重作为初始化基础,避免参数被清空。

内容的提问来源于stack exchange,提问作者Sofie Jægtvik Benjaminsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:15:40