模型

训练好的模型与处理流程

可下载的spaCy预训练模型和权重
语言
加载样式
选择用于
选项
python -m spacy download en_core_web_smimport spacynlp = spacy.load("en_core_web_sm")import en_core_web_smnlp = en_core_web_sm.load()doc = nlp("This is a sentence.")print([(w.text, w.pos_) for w in doc])

包命名规范

一般来说,spaCy期望所有流程包遵循[lang]_[name]的命名约定。对于spaCy的流程,我们还选择将名称分为三个组成部分:

  1. 类型: 功能(例如 core 表示通用流程,包含标注、解析、词形还原和命名实体识别;dep 表示仅包含标注、解析和词形还原)。

  2. 文本类型: 该流水线训练所用的文本类型,例如 webnews

  3. 大小: 包大小指示器,smmdlgtrf

    smtrf 流水线没有静态词向量。

    对于带有默认向量的流水线,md 包含一个缩减版的词向量表,包含约50万个单词中的2万个独特向量,而 lg 包含一个大型词向量表,约50万个条目。

    对于带有floret向量的流水线,md 向量表包含5万个条目,lg 向量表包含20万个条目。

例如,en_core_web_sm是一个基于网络书面文本(博客、新闻、评论)训练的小型英文处理流程,包含词汇、句法和实体识别功能。

包版本管理

此外,流水线包的版本号既反映了与spaCy的兼容性,也反映了模型版本。包版本a.b.c对应关系如下:

  • a: spaCy主版本号. 例如, 2 代表spaCy v2.x版本.
  • b: spaCy 次要版本号. 例如, 3 对应 spaCy v2.3.x.
  • c: 模型版本。不同的模型配置:例如基于不同数据训练、使用不同参数、不同迭代次数、不同向量等。

如需查看详细的兼容性概览,请参阅 compatibility.json。 该文件也是spaCy内部兼容性检查的来源,当您运行 download命令时会执行此检查。

训练好的流水线设计

spaCy v3训练好的流程旨在高效且可配置。例如,多个组件可以共享一个通用的"token-to-vector"模型,并且很容易替换或禁用词形还原器。这些流程在设计上兼顾了速度和体积的效率,当完整运行流程时表现良好。

在修改已训练好的处理流程时,理解各组件之间的依赖关系非常重要。与spaCy v2版本中taggerparserner组件相互独立不同,v3版本的某些组件依赖于流程中更早的组件。因此,禁用或重新排序组件可能会影响标注质量,甚至导致警告和错误。

spaCy v2 模型的主要变更:

  • Tok2Vec组件可以是一个独立的共享组件。像标注器或解析器这样的组件可以监听先前的tok2vectransformer,而不需要拥有自己独立的tok2vec层。
  • 基于规则的例外情况从单个组件转移到attribute_ruler。词形还原和词性标注例外从分词器例外转移到属性标尺,而标签映射和形态规则则从标注器转移到属性标尺。
  • 词形还原表和处理过程从词汇库和标注器转移到一个独立的lemmatizer组件。

CNN/CPU 流水线设计

Components and their dependencies in the CNN pipelines

sm/md/lg 模型中:

  • taggermorphologizerparser组件依赖于tok2vec组件。如果词形还原器是可训练的(v3.3+版本),lemmatizer也会依赖tok2vec
  • 如果没有morphologizerattribute_ruler会将token.tag映射到token.posattribute_ruler还会确保空格标记一致,并在没有标记器时将token.pos复制到token.tag。对于英文,如果存在来自parser的依存句法分析,属性规则器可以改进从token.tagtoken.pos的映射,但解析器不是必需的。
  • 许多语言的lemmatizer组件需要来自tagger+attribute_rulermorphologizertoken.pos标注。
  • ner组件是独立的,拥有其内部的tok2vec层。

使用floret向量的CNN/CPU管道

克罗地亚语、芬兰语、韩语、斯洛文尼亚语、瑞典语和乌克兰语的mdlg流水线使用floret向量而非默认向量。如果您在文本上运行训练过的流水线并处理Doc对象,您不会注意到floret向量有任何差异。使用floret向量时所有词汇都不会超出词典范围,因此Token.is_oov会对所有词汇返回False

如果直接访问向量进行相似性比较,会有一些差异,因为floret向量不像默认向量那样包含固定的单词列表作为向量键。

  • 如果你的工作流程需要遍历向量键,你需要改用外部词表:

  • Vectors.most_similar 不支持此功能,因为没有固定的向量列表可供比较。

Transformer流水线设计

在transformer (trf) 管道中,taggerparserner(如果存在)都会监听transformer组件。attribute_rulerlemmatizer 的配置与CNN模型中的相同。

对于spaCy v3.0-v3.6版本,trf管道使用 spacy-transformers,而 doc._.trf_data中的transformer输出是一个 TransformerData对象。

对于spaCy v3.7+版本,trf流水线使用 spacy-curated-transformersdoc._.trf_data是一个 DocTransformerOutput对象。

修改默认管道

为了加快处理速度,您可能只想运行训练好的管道中的部分组件。spacy.load中的disableexclude参数可让您控制加载和运行哪些组件。被禁用的组件会在后台加载,因此未来可以通过nlp.enable_pipe在同一管道中重新启用它们。若要完全跳过加载某个组件,请使用exclude而非disable

禁用词性标注和词形还原

要禁用词性标注和词形还原功能,请禁用taggermorphologizerattribute_rulerlemmatizer组件。

使用senter而非parser进行快速句子分割

如果需要在没有依存分析的情况下快速进行句子分割,请禁用parser并使用senter组件替代:

senter 组件的速度比解析器快约10倍,并且比基于规则的 sentencizer 更准确。

从可训练词形还原器切换至默认词形还原器

自v3.3版本起,多个流水线采用了可训练的词汇还原器。您可以通过以下方式检查该还原器是否可训练:

如果您想切换到一个类似于v3.2或更早版本的非可训练词形还原器,可以用默认的非可训练词形还原器替换可训练词形还原器:

从基于规则切换到查找式词形还原

对于荷兰语、英语、法语、希腊语、马其顿语、挪威语和西班牙语的流程管线,您可以用查找式词形还原器替换可训练或基于规则的词形还原器:

禁用除NER之外的所有功能

对于非transformer模型,ner组件是独立的,因此你可以禁用其他所有组件:

在transformer模型中,ner监听transformer组件,因此你可以禁用所有与标注、解析和词形还原相关的组件。

将NER移至处理流程的最后阶段

要在entity_ruler中访问POSLEMMA特征,请将ner移动到管道末尾,位于attribute_rulerlemmatizer之后: