Skip to content

Instantly share code, notes, and snippets.

@ak64th
Last active September 11, 2026 06:51
Show Gist options
  • Select an option

  • Save ak64th/073f9ac83e84c8185782ad6e34254d3e to your computer and use it in GitHub Desktop.

Select an option

Save ak64th/073f9ac83e84c8185782ad6e34254d3e to your computer and use it in GitHub Desktop.

spaCy 日语 Transformer 模型安装流程

适用于需要加载 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_trf

ja_core_news_trf 使用的是 spacy-curated-transformers,不需要安装 spacy-transformers。不要执行下面这一步:

# 不要安装:它可能带来旧版 transformers 与新版 huggingface_hub 的冲突
# conda install -c conda-forge spacy-transformers

Python 3.14 / srsly 兼容补丁

spacy-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。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment