适用于需要加载 ja_core_news_trf 的 conda 环境。
conda create -n ner_exp python=3.14
conda activate ner_exp
conda install -c conda-forge spacy
conda install -c conda-forge cupy
# 安装日语模型
python -m spacy download ja_core_news_trfja_core_news_trf 使用的是 spacy-curated-transformers,不需要安装
spacy-transformers。不要执行下面这一步:
# 不要安装:它可能带来旧版 transformers 与新版 huggingface_hub 的冲突
# conda install -c conda-forge spacy-transformersspacy-curated-transformers==0.3.1 本身仍然使用旧的
srsly.msgpack_encoders("...") / msgpack_decoders("...") 装饰器,
因此存在与 srsly==2.5.3 的 API 不兼容问题。
Python 3.14 还不满足该版本声明的 Python 要求(>=3.9,<3.14),
所以需要显式忽略 Python 版本限制,并使用下面的源码补丁:
python -m pip install \
--upgrade \
--ignore-requires-python \
--no-deps \
spacy-curated-transformers==0.3.1先备份文件:
cp "$CONDA_PREFIX/lib/python3.14/site-packages/spacy_curated_transformers/models/output.py" \
"$CONDA_PREFIX/lib/python3.14/site-packages/spacy_curated_transformers/models/output.py.bak"执行补丁:
python - <<'PY'
from pathlib import Path
p = Path.home() / "miniconda3/envs/ner_exp/lib/python3.14/site-packages/spacy_curated_transformers/models/output.py"
s = p.read_text()
s = s.replace(
'@srsly.msgpack_encoders("doc_transformer_output")',
'@_register_encoder',
)
s = s.replace(
'@srsly.msgpack_decoders("doc_transformer_output")',
'@_register_decoder',
)
marker = '@_register_encoder\n'
helpers = '''def _register_encoder(func):
srsly.msgpack_encoders.register("doc_transformer_output", func)
return func
def _register_decoder(func):
srsly.msgpack_decoders.register("doc_transformer_output", func)
return func
'''
if "def _register_encoder" not in s:
s = s.replace(marker, helpers + marker, 1)
p.write_text(s)
PY如果环境中已经安装了 spacy-transformers,将其移除:
python -m pip uninstall -y spacy-transformers这是因为旧版 spacy-transformers 可能依赖旧版 transformers,而环境中的
新版 huggingface_hub 已移除了 HfFolder。
python - <<'PY'
import spacy
nlp = spacy.load("ja_core_news_trf")
doc = nlp("東京大学で研究しています。")
print([(ent.text, ent.label_) for ent in doc.ents])
PY预期输出类似:
[('東京大学', 'ORG')]
spacy.prefer_gpu()只选择可用 GPU,不负责修复 Python 包版本冲突。- 该补丁修改了
site-packages中的文件;以后重新安装或升级spacy-curated-transformers后,可能需要重新执行补丁。 - 更稳妥的长期方案是使用 Python 3.12。