模型

训练模型与管道

用于 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 对应于

  • aspaCy 主要版本。例如,2 表示 spaCy v2.x。
  • bspaCy 次要版本。例如,3 表示 spaCy v2.3.x。
  • c模型版本。不同的模型配置:例如,从不同的数据训练、使用不同的参数、进行不同迭代次数、使用不同的向量等。

有关详细的兼容性概述,请参阅 compatibility.json。这也是 spaCy 在您运行 download 命令时执行的内部兼容性检查的来源。

训练管道设计

spaCy v3 训练管道旨在高效且可配置。例如,多个组件可以共享通用的“token-to-vector”模型,并且很容易交换或禁用词形还原器。这些管道旨在在速度和大小方面高效,并在管道完全运行时效果良好。

修改训练管道时,了解组件依赖于彼此非常重要。与 spaCy v2 不同,在 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
  • attribute_rulertoken.tag 映射到 token.pos(如果没有 morphologizer)。attribute_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-transformers,并且 doc._.trf_data 是一个 DocTransformerOutput 对象。

修改默认管道

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

禁用词性标注和词形还原

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

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

如果您需要快速的句子分割而不需要依赖句法分析,请禁用 parser 并使用 senter 组件

senter 组件比 parser 快约 10 倍,并且比基于规则的 sentencizer 更准确。

切换到默认词形还原器而不是可训练词形还原器

从 v3.3 开始,许多管道使用可训练的词形还原器。您可以检查词形还原器是否可训练

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

切换到基于查找的词形还原

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

禁用所有内容,仅保留 NER

对于非 Transformer 模型,ner 组件是独立的,因此您可以禁用其他所有组件。

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

将 NER 移动到流水线的末尾

为了在 entity_ruler 中访问 POSLEMMA 特征,请将 ner 移动到流水线的末尾,在 attribute_rulerlemmatizer 之后。