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

Spacy en_core_web_sm词表长度远低于参考值问题咨询

Spacy len(doc.vocab) 数值远小于预期的原因及解决方案

问题原因

  • 版本机制差异:你参考的Udemy课程大概率使用的是Spacy 2.x版本,该版本默认会预加载模型的全部词表到内存中,因此加载中等体量的模型后len(doc.vocab)会达到5万+的量级;而你本地安装的是Spacy 3.x及以上版本,该版本改为了懒加载词表机制,只会把当前处理文本中出现过的词汇、以及少量内置特殊标记加入到doc.vocab中,所以如果你的测试文本较短,最终统计出来的长度就只有几百个。
  • 测量对象错误:doc.vocab统计的是当前文档关联的已加载词项,并非模型内置的全量预训练词表,即便你下载了大体积带词向量的模型,没有触发全量加载的前提下,doc.vocab也不会包含全量词项。
  • 模型匹配问题:如果下载的是en_core_web_sm这类小体量模型,本身就不携带静态预训练词向量,自然也不会有全量词表数据。

解决方案

  • 方案1:匹配课程环境降级版本
    如果你只是为了复现课程的操作结果,可以直接将本地Spacy及对应模型降级到2.x版本,执行以下命令安装即可:
    pip install spacy==2.3.7
    python -m spacy download en_core_web_md==2.3.1
    
    安装完成后加载模型处理文本,len(doc.vocab)即可得到和课程一致的5万+结果。
  • 方案2:Spacy 3.x版本下正确统计全量词表
    如果你不想降级版本,不要用len(doc.vocab)统计全量词表,改为统计模型的预训练向量长度即可,对应代码为:
    import spacy
    nlp = spacy.load("en_core_web_md")
    print(len(nlp.vocab.vectors))
    
    该输出值就是模型内置的全量预训练词项数量,和课程给出的数值一致。
  • 方案3:Spacy 3.x手动触发全量词表加载
    如果你确实需要让doc.vocab包含全量词项,可以手动遍历向量列表触发加载,代码如下:
    import spacy
    nlp = spacy.load("en_core_web_md")
    # 遍历所有向量键,触发词项加载到vocab
    for key in nlp.vocab.vectors.keys():
        _ = nlp.vocab[key]
    doc = nlp("你的测试文本")
    print(len(doc.vocab))
    
    执行后即可得到和课程一致的统计结果。

内容的提问来源于stack exchange,提问作者nlpkind

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:24:04