File: README.md
spaCy: Industrial-strength NLP
spaCy is a library for advanced Natural Language Processing in Python and
Cython. It's built on the very latest research, and was designed from day one to
be used in real products.
spaCy comes with pretrained pipelines and currently
supports tokenization and training for 70+ languages. It features
state-of-the-art speed and neural network models for tagging, parsing,
named entity recognition, text classification and more, multi-task
learning with pretrained transformers like BERT, as well as a
production-ready training system and easy
model packaging, deployment and workflow management. spaCy is commercial
open-source software, released under the
MIT license.
๐ซ Version 3.8 out now!
Check out the release notes here.
๐ Documentation
| Documentation | |
|---|---|
| โญ๏ธ spaCy 101 | New to spaCy? Here's everything you need to know! |
| ๐ Usage Guides | How to use spaCy and its features. |
| ๐ New in v3.0 | New features, backwards incompatibilities and migration guide. |
| ๐ช Project Templates | End-to-end workflows you can clone, modify and run. |
| ๐ API Reference | The detailed reference for spaCy's API. |
| โฉ GPU Processing | Use spaCy with CUDA-compatible GPU processing. |
| ๐ฆ Models | Download trained pipelines for spaCy. |
| ๐ฆ Large Language Models | Integrate LLMs into spaCy pipelines. |
| ๐ Universe | Plugins, extensions, demos and books from the spaCy ecosystem. |
| โ๏ธ spaCy VS Code Extension | Additional tooling and features for working with spaCy's config files. |
| ๐ฉโ๐ซ Online Course | Learn spaCy in this free and interactive online course. |
| ๐ฐ Blog | Read about current spaCy and Prodigy development, releases, talks and more from Explosion. |
| ๐บ Videos | Our YouTube channel with video tutorials, talks and more. |
| ๐ด Live Stream | Join Matt as he works on spaCy and chat about NLP. |
| ๐ Changelog | Changes and version history. |
| ๐ Contribute | How to contribute to the spaCy project and code base. |
| ๐ Swag | Support us and our work with unique, custom-designed swag! |
| Custom NLP consulting, implementation and strategic advice by spaCyโs core development team. Streamlined, production-ready, predictable and maintainable. Send us an email or take our 5-minute questionnaire, and well'be in touch! Learn more → |
๐ฌ Where to ask questions
The spaCy project is maintained by the spaCy team.
Please understand that we won't be able to provide individual support via email.
We also believe that help is much more valuable if it's shared publicly, so that
more people can benefit from it.
| Type | Platforms |
|---|---|
| ๐จ Bug Reports | GitHub Issue Tracker |
| ๐ Feature Requests & Ideas | GitHub Discussions ยท Live Stream |
| ๐ฉโ๐ป Usage Questions | GitHub Discussions ยท Stack Overflow |
| ๐ฏ General Discussion | GitHub Discussions ยท Live Stream |
Features
- Support for 70+ languages
- Trained pipelines for different languages and tasks
- Multi-task learning with pretrained transformers like BERT
- Support for pretrained word vectors and embeddings
- State-of-the-art speed
- Production-ready training system
- Linguistically-motivated tokenization
- Components for named entity recognition, part-of-speech-tagging,
dependency parsing, sentence segmentation, text classification,
lemmatization, morphological analysis, entity linking and more - Easily extensible with custom components and attributes
- Support for custom models in PyTorch, TensorFlow and other frameworks
- Built in visualizers for syntax and NER
- Easy model packaging, deployment and workflow management
- Robust, rigorously evaluated accuracy
๐ For more details, see the
facts, figures and benchmarks.
โณ Install spaCy
For detailed installation instructions, see the
documentation.
- Operating system: macOS / OS X ยท Linux ยท Windows (Cygwin, MinGW, Visual
Studio) - Python version: Python >=3.7, <3.13 (only 64 bit)
- Package managers: pip ยท conda (via
conda-forge)
pip
Using pip, spaCy releases are available as source packages and binary wheels.
Before you install spaCy and its dependencies, make sure that your pip,setuptools and wheel are up to date.
pip install -U pip setuptools wheel
pip install spacyTo install additional data tables for lemmatization and normalization you can
run pip install spacy[lookups] or installspacy-lookups-data
separately. The lookups package is needed to create blank models with
lemmatization data, and to lemmatize in languages that don't yet come with
pretrained models and aren't powered by third-party libraries.
When using pip it is generally recommended to install packages in a virtual
environment to avoid modifying system state:
python -m venv .env
source .env/bin/activate
pip install -U pip setuptools wheel
pip install spacyconda
You can also install spaCy from conda via the conda-forge channel. For the
feedstock including the build recipe and configuration, check out
this repository.
conda install -c conda-forge spacyUpdating spaCy
Some updates to spaCy may require downloading new statistical models. If you're
running spaCy v2.0 or higher, you can use the validate command to check if
your installed models are compatible and if not, print details on how to update
them:
pip install -U spacy
python -m spacy validateIf you've trained your own models, keep in mind that your training and runtime
inputs must match. After updating spaCy, we recommend retraining your models
with the new version.
๐ For details on upgrading from spaCy 2.x to spaCy 3.x, see the
migration guide.
๐ฆ Download model packages
Trained pipelines for spaCy can be installed as Python packages. This means
that they're a component of your application, just like any other module. Models
can be installed using spaCy's download
command, or manually by pointing pip to a path or URL.
| Documentation | |
|---|---|
| Available Pipelines | Detailed pipeline descriptions, accuracy figures and benchmarks. |
| Models Documentation | Detailed usage and installation instructions. |
| Training | How to train your own pipelines on your data. |
# Download best-matching version of specific model for your spaCy installation
python -m spacy download en_core_web_sm
# pip install .tar.gz archive or .whl from path or URL
pip install /Users/you/en_core_web_sm-3.0.0.tar.gz
pip install /Users/you/en_core_web_sm-3.0.0-py3-none-any.whl
pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.0.0/en_core_web_sm-3.0.0.tar.gzLoading and using models
To load a model, use spacy.load()
with the model name or a path to the model data directory.
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("This is a sentence.")You can also import a model directly via its full name and then call itsload() method with no arguments.
import spacy
import en_core_web_sm
nlp = en_core_web_sm.load()
doc = nlp("This is a sentence.")๐ For more info and examples, check out the
models documentation.
โ Compile from source
The other way to install spaCy is to clone its
GitHub repository and build it from
source. That is the common way if you want to make changes to the code base.
You'll need to make sure that you have a development environment consisting of a
Python distribution including header files, a compiler,
pip,
virtualenv and
git installed. The compiler part is the trickiest. How to
do that depends on your system.
| Platform | |
|---|---|
| Ubuntu | Install system-level dependencies via apt-get: sudo apt-get install build-essential python-dev git . |
| Mac | Install a recent version of XCode, including the so-called "Command Line Tools". macOS and OS X ship with Python and git preinstalled. |
| Windows | Install a version of the Visual C++ Build Tools or Visual Studio Express that matches the version that was used to compile your Python interpreter. |
For more details and instructions, see the documentation on
compiling spaCy from source and the
quickstart widget to get the right
commands for your platform and Python version.
git clone https://github.com/explosion/spaCy
cd spaCy
python -m venv .env
source .env/bin/activate
# make sure you are using the latest pip
python -m pip install -U pip setuptools wheel
pip install -r requirements.txt
pip install --no-build-isolation --editable .To install with extras:
pip install --no-build-isolation --editable .[lookups,cuda102]๐ฆ Run tests
spaCy comes with an extensive test suite. In order to run the
tests, you'll usually want to clone the repository and build spaCy from source.
This will also install the required development dependencies and test utilities
defined in the requirements.txt.
Alternatively, you can run pytest on the tests from within the installedspacy package. Don't forget to also install the test utilities via spaCy'srequirements.txt:
pip install -r requirements.txt
python -m pytest --pyargs spacyFile: examples/training/README.md
spaCy examples
File: examples/README.md
spaCy examples
For spaCy v3 we've converted many of the v2 example
scripts into
end-to-end spacy projects workflows. The
workflows include all the steps to go from data to packaged spaCy models.
๐ช Pipeline component demos
The simplest demos for training a single pipeline component are in thepipelines category
including:
pipelines/ner_demo:
Train a named entity recognizerpipelines/textcat_demo:
Train a text classifierpipelines/parser_intent_demo:
Train a dependency parser for custom semantics
๐ช Tutorials
The tutorials
category includes examples that work through specific NLP use cases end-to-end:
tutorials/textcat_goemotions:
Train a text classifier to categorize emotions in Reddit poststutorials/nel_emerson:
Use an entity linker to disambiguate mentions of the same name
Check out the projects documentation and
browse through the available
projects!
๐ Get started with a demo project
Thepipelines/ner_demo
project converts the spaCy v2train_ner.py
demo script into a spaCy v3 project.
Clone the project:
bashpython -m spacy project clone pipelines/ner_demoInstall requirements and download any data assets:
bashcd ner_demo python -m pip install -r requirements.txt python -m spacy project assetsRun the default workflow to convert, train and evaluate:
bashpython -m spacy project run allSample output:
text
/* Detailed source-code truncated for AI context efficiency. */
4. Package the model:
```bash
python -m spacy project run packageVisualize the model's output with Streamlit:
bashpython -m spacy project run visualize-model
File: extra/example_data/textcat_example_data/README.md
Examples of textcat training data
spacy JSON training files were generated from JSONL with:
python textcatjsonl_to_trainjson.py -m en file.jsonl .cooking.json is an example with mutually-exclusive classes with two labels:
bakingnot_baking
jigsaw-toxic-comment.json is an example with multiple labels per instance:
insultobscenesevere_toxictoxic
Data Sources
cooking.jsonl: https://cooking.stackexchange.com. The meta IDs link to the
original question ashttps://cooking.stackexchange.com/questions/ID, e.g.,https://cooking.stackexchange.com/questions/2for the first instance.jigsaw-toxic-comment.jsonl: Jigsaw Toxic Comments Classification
Challenge
Data Licenses
cooking.jsonl: CC BY-SA 4.0 (CC_BY-SA-4.0.txt)jigsaw-toxic-comment.jsonl:- text: CC BY-SA 3.0 (
CC_BY-SA-3.0.txt) - annotation: CC0 (
CC0.txt)
- text: CC BY-SA 3.0 (
File: extra/example_data/ner_example_data/README.md
Examples of NER/IOB data that can be converted with `spacy convert`
To convert an IOB file to .spacy (DocBin)
for spaCy v3:
python -m spacy convert -c iob -s -n 10 -b en_core_web_sm file.iob .See all the spacy convert options: https://spacy.io/api/cli#convert
The spaCy v2 JSON training files were generated using spaCy v2 with:
python -m spacy convert -c iob -s -n 10 -b en file.iobTo convert an existing JSON training file to .spacy for spaCy v3, convert
with spaCy v3:
python -m spacy convert file.json .File: extra/DEVELOPER_DOCS/README.md
Developer Documentation
This directory includes additional documentation and explanations of spaCy's internals. It's mostly intended for the spaCy core development team and contributors interested in the more complex parts of the library. The documents generally focus on more abstract implementation details and how specific methods and algorithms work, and they assume knowledge of what's already available in the usage documentation and API reference.
If you're looking to contribute to spaCy, make sure to check out the documentation and contributing guide first.
File: website/docs/models/index.mdx
title: Trained Models & Pipelines
teaser: Downloadable trained pipelines and weights for spaCy
menu:
- ['Quickstart', 'quickstart']
- ['Conventions', 'conventions']
- ['Pipeline Design', 'design']
{/* TODO: include interactive demo */}
Quickstart {hidden="true"}
๐ Installation and usage
For more details on how to use trained pipelines with spaCy, see the
usage guide.
Package naming conventions {id="conventions"}
In general, spaCy expects all pipeline packages to follow the naming convention
of [lang]_[name]. For spaCy's pipelines, we also chose to divide the name into
three components:
Type: Capabilities (e.g.
corefor general-purpose pipeline with
tagging, parsing, lemmatization and named entity recognition, ordepfor
only tagging, parsing and lemmatization).Genre: Type of text the pipeline is trained on, e.g.
webornews.Size: Package size indicator,
sm,md,lgortrf.smandtrfpipelines have no static word vectors.For pipelines with default vectors,
mdhas a reduced word vector table with
20k unique vectors for ~500k words andlghas a large word vector table
with ~500k entries.For pipelines with floret vectors,
mdvector tables have 50k entries andlgvector tables have 200k entries.
For example, en_core_web_sm is a small English
pipeline trained on written web text (blogs, news, comments), that includes
vocabulary, syntax and entities.
Package versioning {id="model-versioning"}
Additionally, the pipeline package versioning reflects both the compatibility
with spaCy, as well as the model version. A package version a.b.c translates
to:
a: spaCy major version. For example,2for spaCy v2.x.b: spaCy minor version. For example,3for spaCy v2.3.x.c: Model version. Different model config: e.g. from being trained on
different data, with different parameters, for different numbers of
iterations, with different vectors, etc.
For a detailed compatibility overview, see thecompatibility.json.
This is also the source of spaCy's internal compatibility check, performed when
you run the download command.
Trained pipeline design {id="design"}
The spaCy v3 trained pipelines are designed to be efficient and configurable.
For example, multiple components can share a common "token-to-vector" model and
it's easy to swap out or disable the lemmatizer. The pipelines are designed to
be efficient in terms of speed and size and work well when the pipeline is run
in full.
When modifying a trained pipeline, it's important to understand how the
components depend on each other. Unlike spaCy v2, where the tagger,parser and ner components were all independent, some v3 components depend on
earlier components in the pipeline. As a result, disabling or reordering
components can affect the annotation quality or lead to warnings and errors.
Main changes from spaCy v2 models:
- The
Tok2Veccomponent may be a separate, shared component. A
component like a tagger or parser can
listen to an earliertok2vecortransformerrather than having its own separate tok2vec layer. - Rule-based exceptions move from individual components to the
attribute_ruler. Lemma and POS exceptions move from the tokenizer exceptions
to the attribute ruler and the tag map and morph rules move from the tagger to
the attribute ruler. - The lemmatizer tables and processing move from the vocab and tagger to a
separatelemmatizercomponent.
CNN/CPU pipeline design {id="design-cnn"}
In the sm/md/lg models:
- The
tagger,morphologizerandparsercomponents listen to thetok2vec
component. If the lemmatizer is trainable (v3.3+),lemmatizeralso listens
totok2vec. - The
attribute_rulermapstoken.tagtotoken.posif there is nomorphologizer. Theattribute_ruleradditionally makes sure whitespace is
tagged consistently and copiestoken.postotoken.tagif there is no
tagger. For English, the attribute ruler can improve its mapping fromtoken.tagtotoken.posif dependency parses from aparserare present,
but the parser is not required. - The
lemmatizercomponent for many languages requirestoken.posannotation
from eithertagger+attribute_rulerormorphologizer. - The
nercomponent is independent with its own internal tok2vec layer.
CNN/CPU pipelines with floret vectors
The Croatian, Finnish, Korean, Slovenian, Swedish and Ukrainian md and lg
pipelines use floret vectors instead of default vectors.
If you're running a trained pipeline on texts and working with Doc
objects, you shouldn't notice any difference with floret vectors. With floret
vectors no tokens are out-of-vocabulary, soToken.is_oov will return False for all tokens.
If you access vectors directly for similarity comparisons, there are a few
differences because floret vectors don't include a fixed word list like the
vector keys for default vectors.
If your workflow iterates over the vector keys, you need to use an external
word list instead:diff- lexemes = [nlp.vocab[orth] for orth in nlp.vocab.vectors] + lexemes = [nlp.vocab[word] for word in external_word_list]Vectors.most_similaris not supported because
there's no fixed list of vectors to compare your vectors to.
Transformer pipeline design {id="design-trf"}
In the transformer (trf) pipelines, the tagger, parser and ner (if
present) all listen to the transformer component. The attribute_ruler andlemmatizer have the same configuration as in the CNN models.
For spaCy v3.0-v3.6, trf pipelines usespacy-transformers and the
transformer output in doc._.trf_data is aTransformerData object.
For spaCy v3.7+, trf pipelines usespacy-curated-transformers
and doc._.trf_data is aDocTransformerOutput object.
Modifying the default pipeline {id="design-modify"}
For faster processing, you may only want to run a subset of the components in a
trained pipeline. The disable and exclude arguments tospacy.load let you control which components are
loaded and run. Disabled components are loaded in the background so it's
possible to reenable them in the same pipeline in the future withnlp.enable_pipe. To skip loading a component
completely, use exclude instead of disable.
Disable part-of-speech tagging and lemmatization
To disable part-of-speech tagging and lemmatization, disable the tagger,morphologizer, attribute_ruler and lemmatizer components.
# Note: English doesn't include a morphologizer
nlp = spacy.load("en_core_web_sm", disable=["tagger", "attribute_ruler", "lemmatizer"])
nlp = spacy.load("en_core_web_trf", disable=["tagger", "attribute_ruler", "lemmatizer"])The lemmatizer depends on tagger+attribute_ruler or morphologizer for a
number of languages. If you disable any of these components, you'll see
lemmatizer warnings unless the lemmatizer is also disabled.
v3.3: Catalan, English, French, Russian and Spanish
v3.0-v3.2: Catalan, Dutch, English, French, Greek, Italian, Macedonian,
Norwegian, Polish, Russian and Spanish
Use senter rather than parser for fast sentence segmentation
If you need fast sentence segmentation without dependency parses, disable theparser use the senter component instead:
nlp = spacy.load("en_core_web_sm")
nlp.disable_pipe("parser")
nlp.enable_pipe("senter")The senter component is ~10× faster than the parser and more accurate
than the rule-based sentencizer.
Switch from trainable lemmatizer to default lemmatizer
Since v3.3, a number of pipelines use a trainable lemmatizer. You can check
whether the lemmatizer is trainable:
nlp = spacy.load("de_core_web_sm")
assert nlp.get_pipe("lemmatizer").is_trainableIf you'd like to switch to a non-trainable lemmatizer that's similar to v3.2 or
earlier, you can replace the trainable lemmatizer with the default non-trainable
lemmatizer:
# Requirements: pip install spacy-lookups-data
nlp = spacy.load("de_core_web_sm")
# Remove existing lemmatizer
nlp.remove_pipe("lemmatizer")
# Add non-trainable lemmatizer from language defaults
# and load lemmatizer tables from spacy-lookups-data
nlp.add_pipe("lemmatizer").initialize()Switch from rule-based to lookup lemmatization
For the Dutch, English, French, Greek, Macedonian, Norwegian and Spanish
pipelines, you can swap out a trainable or rule-based lemmatizer for a lookup
lemmatizer:
# Requirements: pip install spacy-lookups-data
nlp = spacy.load("en_core_web_sm")
nlp.remove_pipe("lemmatizer")
nlp.add_pipe("lemmatizer", config={"mode": "lookup"}).initialize()Disable everything except NER
For the non-transformer models, the ner component is independent, so you can
disable everything else:
nlp = spacy.load("en_core_web_sm", disable=["tok2vec", "tagger", "parser", "attribute_ruler", "lemmatizer"])In the transformer models, ner listens to the transformer component, so you
can disable all components related tagging, parsing, and lemmatization.
nlp = spacy.load("en_core_web_trf", disable=["tagger", "parser", "attribute_ruler", "lemmatizer"])Move NER to the end of the pipeline
As of v3.1, the NER component is at the end of the pipeline by default.
For access to POS and LEMMA features in an entity_ruler, move ner to the
end of the pipeline after attribute_ruler and lemmatizer:
# load without NER
nlp = spacy.load("en_core_web_sm", exclude=["ner"])
# source NER from the same pipeline package as the last component
nlp.add_pipe("ner", source=spacy.load("en_core_web_sm"))
# insert the entity ruler
nlp.add_pipe("entity_ruler", before="ner")File: website/docs/api/architectures.mdx
title: Model Architectures
teaser: Pre-defined model architectures included with the core library
source: spacy/ml/models
menu:
- ['Tok2Vec', 'tok2vec-arch']
- ['Transformers', 'transformers']
- ['Pretraining', 'pretrain']
- ['Parser & NER', 'parser']
- ['Tagging', 'tagger']
- ['Text Classification', 'textcat']
- ['Span Classification', 'spancat']
- ['Entity Linking', 'entitylinker']
- ['Coreference', 'coref-architectures']
A model architecture is a function that wires up aModel instance, which you can then use in a
pipeline component or as a layer of a larger network. This page documents
spaCy's built-in architectures that are used for different NLP tasks. All
trainable built-in components expect a model
argument defined in the config and document their the default architecture.
Custom architectures can be registered using the@spacy.registry.architectures decorator and used as
part of the training config. Also see the
usage documentation on
layers and model architectures.
Tok2Vec architectures {id="tok2vec-arch",source="spacy/ml/models/tok2vec.py"}
spacy.Tok2Vec.v2 {id="Tok2Vec"}
Example config
ini[model] @architectures = "spacy.Tok2Vec.v2" [model.embed] @architectures = "spacy.CharacterEmbed.v2" # ... [model.encode] @architectures = "spacy.MaxoutWindowEncoder.v2" # ...
Construct a tok2vec model out of two subnetworks: one for embedding and one for
encoding. See the
"Embed, Encode, Attend, Predict"
blog post for background.
| Name | Description |
|---|---|
embed |
Embed tokens into context-independent word vector representations. For example, CharacterEmbed or MultiHashEmbed. |
encode |
Encode context into the embeddings, using an architecture such as a CNN, BiLSTM or transformer. For example, MaxoutWindowEncoder. |
| CREATES | The model using the architecture. |
spacy.HashEmbedCNN.v2 {id="HashEmbedCNN"}
Example Config
ini[model] @architectures = "spacy.HashEmbedCNN.v2" pretrained_vectors = null width = 96 depth = 4 embed_size = 2000 window_size = 1 maxout_pieces = 3 subword_features = true
Build spaCy's "standard" tok2vec layer. This layer is defined by a
MultiHashEmbed embedding layer that uses
subword features, and a
MaxoutWindowEncoder encoding layer
consisting of a CNN and a layer-normalized maxout activation function.
| Name | Description |
|---|---|
width |
The width of the input and output. These are required to be the same, so that residual connections can be used. Recommended values are 96, 128 or 300. |
depth |
The number of convolutional layers to use. Recommended values are between 2 and 8. |
embed_size |
The number of rows in the hash embedding tables. This can be surprisingly small, due to the use of the hash embeddings. Recommended values are between 2000 and 10000. |
window_size |
The number of tokens on either side to concatenate during the convolutions. The receptive field of the CNN will be depth * window_size * 2 + 1, so a 4-layer network with a window size of 2 will be sensitive to 17 words at a time. Recommended value is 1. |
maxout_pieces |
The number of pieces to use in the maxout non-linearity. If 1, the Mish non-linearity is used instead. Recommended values are 1-3. |
subword_features |
Whether to also embed subword features, specifically the prefix, suffix and word shape. This is recommended for alphabetic languages like English, but not if single-character tokens are used for a language such as Chinese. |
pretrained_vectors |
Whether to also use static vectors. |
| CREATES | The model using the architecture. |
spacy.Tok2VecListener.v1 {id="Tok2VecListener"}
Example config
ini[components.tok2vec] factory = "tok2vec" [components.tok2vec.model] @architectures = "spacy.HashEmbedCNN.v2" width = 342 [components.tagger] factory = "tagger" [components.tagger.model] @architectures = "spacy.Tagger.v2" [components.tagger.model.tok2vec] @architectures = "spacy.Tok2VecListener.v1" width = ${components.tok2vec.model.width}
A listener is used as a sublayer within a component such as aDependencyParser,EntityRecognizerorTextCategorizer. Usually you'll have multiple
listeners connecting to a single upstream Tok2Vec component
that's earlier in the pipeline. The listener layers act as proxies, passing
the predictions from the Tok2Vec component into downstream components, and
communicating gradients back upstream.
Instead of defining its own Tok2Vec instance, a model architecture like
Tagger can define a listener as its tok2vec
argument that connects to the shared tok2vec component in the pipeline.
Listeners work by caching the Tok2Vec output for a given batch of Docs. This
means that in order for a component to work with the listener, the batch ofDocs passed to the listener must be the same as the batch of Docs passed to
the Tok2Vec. As a result, any manipulation of the Docs which would affectTok2Vec output, such as to create special contexts or remove Docs for which
no prediction can be made, must happen inside the model, after the call to
the Tok2Vec component.
| Name | Description |
|---|---|
width |
The width of the vectors produced by the "upstream" Tok2Vec component. |
upstream |
A string to identify the "upstream" Tok2Vec component to communicate with. By default, the upstream name is the wildcard string "*", but you could also specify the name of the Tok2Vec component. You'll almost never have multiple upstream Tok2Vec components, so the wildcard string will almost always be fine. |
| CREATES | The model using the architecture. |
spacy.MultiHashEmbed.v2 {id="MultiHashEmbed"}
Example config
ini[model] @architectures = "spacy.MultiHashEmbed.v2" width = 64 attrs = ["NORM", "PREFIX", "SUFFIX", "SHAPE"] rows = [2000, 1000, 1000, 1000] include_static_vectors = true
Construct an embedding layer that separately embeds a number of lexical
attributes using hash embedding, concatenates the results, and passes it through
a feed-forward subnetwork to build a mixed representation. The features used can
be configured with the attrs argument. The suggested attributes are NORM,PREFIX, SUFFIX and SHAPE. This lets the model take into account some
subword information, without construction a fully character-based
representation. If pretrained vectors are available, they can be included in the
representation as well, with the vectors table kept static (i.e. it's not
updated).
| Name | Description |
|---|---|
width |
The output width. Also used as the width of the embedding tables. Recommended values are between 64 and 300. If static vectors are included, a learned linear layer is used to map the vectors to the specified width before concatenating it with the other embedding outputs. A single maxout layer is then used to reduce the concatenated vectors to the final width. |
attrs |
The token attributes to embed. A separate embedding table will be constructed for each attribute. |
rows |
The number of rows for each embedding tables. Can be low, due to the hashing trick. Recommended values are between 1000 and 10000. The layer needs surprisingly few rows, due to its use of the hashing trick. Generally between 2000 and 10000 rows is sufficient, even for very large vocabularies. A number of rows must be specified for each table, so the rows list must be of the same length as the attrs parameter. |
include_static_vectors |
Whether to also use static word vectors. Requires a vectors table to be loaded in the Doc objects' vocab. |
| CREATES | The model using the architecture. |
spacy.CharacterEmbed.v2 {id="CharacterEmbed"}
Example config
ini[model] @architectures = "spacy.CharacterEmbed.v2" width = 128 rows = 7000 nM = 64 nC = 8
Construct an embedded representation based on character embeddings, using a
feed-forward network. A fixed number of UTF-8 byte characters are used for each
word, taken from the beginning and end of the word equally. Padding is used in
the center for words that are too short.
For instance, let's say nC=4, and the word is "jumping". The characters used
will be "jung" (two from the start, two from the end). If we had nC=8, the
characters would be "jumpping": 4 from the start, 4 from the end. This ensures
that the final character is always in the last position, instead of being in an
arbitrary position depending on the word length.
The characters are embedded in a embedding table with a given number of rows,
and the vectors concatenated. A hash-embedded vector of the NORM of the word
is also concatenated on, and the result is then passed through a feed-forward
network to construct a single vector to represent the information.
| Name | Description |
|---|---|
width |
The width of the output vector and the NORM hash embedding. |
rows |
The number of rows in the NORM hash embedding table. |
nM |
The dimensionality of the character embeddings. Recommended values are between 16 and 64. |
nC |
The number of UTF-8 bytes to embed per word. Recommended values are between 3 and 8, although it may depend on the length of words in the language. |
| CREATES | The model using the architecture. |
spacy.MaxoutWindowEncoder.v2 {id="MaxoutWindowEncoder"}
Example config
ini[model] @architectures = "spacy.MaxoutWindowEncoder.v2" width = 128 window_size = 1 maxout_pieces = 3 depth = 4
Encode context using convolutions with maxout activation, layer normalization
and residual connections.
| Name | Description |
|---|---|
width |
The input and output width. These are required to be the same, to allow residual connections. This value will be determined by the width of the inputs. Recommended values are between 64 and 300. |
window_size |
The number of words to concatenate around each token to construct the convolution. Recommended value is 1. |
maxout_pieces |
The number of maxout pieces to use. Recommended values are 2 or 3. |
depth |
The number of convolutional layers. Recommended value is 4. |
| CREATES | The model using the architecture. |
spacy.MishWindowEncoder.v2 {id="MishWindowEncoder"}
Example config
ini[model] @architectures = "spacy.MishWindowEncoder.v2" width = 64 window_size = 1 depth = 4
Encode context using convolutions withMish activation, layer normalization
and residual connections.
| Name | Description |
|---|---|
width |
The input and output width. These are required to be the same, to allow residual connections. This value will be determined by the width of the inputs. Recommended values are between 64 and 300. |
window_size |
The number of words to concatenate around each token to construct the convolution. Recommended value is 1. |
depth |
The number of convolutional layers. Recommended value is 4. |
| CREATES | The model using the architecture. |
spacy.TorchBiLSTMEncoder.v1 {id="TorchBiLSTMEncoder"}
Example config
ini[model] @architectures = "spacy.TorchBiLSTMEncoder.v1" width = 64 depth = 2 dropout = 0.0
Encode context using bidirectional LSTM layers. Requires
PyTorch.
| Name | Description |
|---|---|
width |
The input and output width. These are required to be the same, to allow residual connections. This value will be determined by the width of the inputs. Recommended values are between 64 and 300. |
depth |
The number of recurrent layers, for instance depth=2 results in stacking two LSTMs together. |
dropout |
Creates a Dropout layer on the outputs of each LSTM layer except the last layer. Set to 0.0 to disable this functionality. |
| CREATES | The model using the architecture. |
spacy.StaticVectors.v2 {id="StaticVectors"}
Example config
ini[model] @architectures = "spacy.StaticVectors.v2" nO = null nM = null dropout = 0.2 key_attr = "ORTH" [model.init_W] @initializers = "glorot_uniform_init.v1"
Embed Doc objects with their vocab's vectors table, applying a
learned linear projection to control the dimensionality. Unknown tokens are
mapped to a zero vector. See the documentation on
static vectors for details.
| Name | Description |
|---|---|
nO |
The output width of the layer, after the linear projection. |
nM |
The width of the static vectors. |
dropout |
Optional dropout rate. If set, it's applied per dimension over the whole batch. Defaults to None. |
init_W |
The initialization function. Defaults to glorot_uniform_init. |
key_attr |
This setting is ignored in spaCy v3.6+. To set a custom key attribute for vectors, configure it through Vectors or spacy init vectors. Defaults to "ORTH". |
| CREATES | The model using the architecture. |
spacy.FeatureExtractor.v1 {id="FeatureExtractor"}
Example config
ini[model] @architectures = "spacy.FeatureExtractor.v1" columns = ["NORM", "PREFIX", "SUFFIX", "SHAPE", "ORTH"]
Extract arrays of input features from Doc objects. Expects a list
of feature names to extract, which should refer to token attributes.
| Name | Description |
|---|---|
columns |
The token attributes to extract. |
| CREATES | The created feature extraction layer. |
Transformer architectures {id="transformers",source="github.com/explosion/spacy-transformers/blob/master/spacy_transformers/architectures.py"}
The following architectures are provided by the packagespacy-transformers. See the
usage documentation for how to
integrate the architectures into your training config.
Note that in order to use these architectures in your config, you need to
install thespacy-transformers. See the
installation docs
for details and system requirements.
spacy-transformers.TransformerModel.v3 {id="TransformerModel"}
Example Config
ini[model] @architectures = "spacy-transformers.TransformerModel.v3" name = "roberta-base" tokenizer_config = {"use_fast": true} transformer_config = {} mixed_precision = true grad_scaler_config = {"init_scale": 32768} [model.get_spans] @span_getters = "spacy-transformers.strided_spans.v1" window = 128 stride = 96
Load and wrap a transformer model from the
HuggingFace transformers library. You
can use any transformer that has pretrained weights and a PyTorch
implementation. The name variable is passed through to the underlying library,
so it can be either a string or a path. If it's a string, the pretrained weights
will be downloaded via the transformers library if they are not already
available locally.
In order to support longer documents, the
TransformerModel layer allows you to pass
in a get_spans function that will divide up the Doc objects
before passing them through the transformer. Your spans are allowed to overlap
or exclude tokens. This layer is usually used directly by theTransformer component, which allows you to share the
transformer weights across your pipeline. For a layer that's configured for use
in other components, see
Tok2VecTransformer.
| Name | Description |
|---|---|
name |
Any model name that can be loaded by transformers.AutoModel. |
get_spans |
Function that takes a batch of Doc object and returns lists of Span objects to process by the transformer. See here for built-in options and examples. |
tokenizer_config |
Tokenizer settings passed to transformers.AutoTokenizer. |
transformer_config |
Transformer settings passed to transformers.AutoConfig |
mixed_precision |
Replace whitelisted ops by half-precision counterparts. Speeds up training and prediction on GPUs with Tensor Cores and reduces GPU memory use. |
grad_scaler_config |
Configuration to pass to thinc.api.PyTorchGradScaler during training when mixed_precision is enabled. |
| CREATES | The model using the architecture. |
Mixed-precision support is currently an experimental feature.
- The
transformer_configargument was added inspacy-transformers.TransformerModel.v2. - The
mixed_precisionandgrad_scaler_configarguments were added inspacy-transformers.TransformerModel.v3.
The other arguments are shared between all versions.
spacy-transformers.TransformerListener.v1 {id="TransformerListener"}
Example Config
ini[model] @architectures = "spacy-transformers.TransformerListener.v1" grad_factor = 1.0 [model.pooling] @layers = "reduce_mean.v1"
Create a TransformerListener layer, which will connect to aTransformer component earlier in the pipeline. The layer
takes a list of Doc objects as input, and produces a list of
2-dimensional arrays as output, with each array having one row per token. Most
spaCy models expect a sublayer with this signature, making it easy to connect
them to a transformer model via this sublayer. Transformer models usually
operate over wordpieces, which usually don't align one-to-one against spaCy
tokens. The layer therefore requires a reduction operation in order to calculate
a single token vector given zero or more wordpiece vectors.
| Name | Description |
|---|---|
pooling |
A reduction layer used to calculate the token vectors based on zero or more wordpiece vectors. If in doubt, mean pooling (see reduce_mean) is usually a good choice. |
grad_factor |
Reweight gradients from the component before passing them upstream. You can set this to 0 to "freeze" the transformer weights with respect to the component, or use it to make some components more significant than others. Leaving it at 1.0 is usually fine. |
upstream |
A string to identify the "upstream" Transformer component to communicate with. By default, the upstream name is the wildcard string "*", but you could also specify the name of the Transformer component. You'll almost never have multiple upstream Transformer components, so the wildcard string will almost always be fine. |
| CREATES | The model using the architecture. |
spacy-transformers.Tok2VecTransformer.v3 {id="Tok2VecTransformer"}
Example Config
ini[model] @architectures = "spacy-transformers.Tok2VecTransformer.v3" name = "albert-base-v2" tokenizer_config = {"use_fast": false} transformer_config = {} grad_factor = 1.0 mixed_precision = true grad_scaler_config = {"init_scale": 32768}
Use a transformer as a Tok2Vec layer directly. This does
not allow multiple components to share the transformer weights and does
not allow the transformer to set annotations into the Doc
object, but it's a simpler solution if you only need the transformer within
one component.
| Name | Description |
|---|---|
get_spans |
Function that takes a batch of Doc object and returns lists of Span objects to process by the transformer. See here for built-in options and examples. |
tokenizer_config |
Tokenizer settings passed to transformers.AutoTokenizer. |
transformer_config |
Settings to pass to the transformers forward pass. |
pooling |
A reduction layer used to calculate the token vectors based on zero or more wordpiece vectors. If in doubt, mean pooling (see reduce_mean) is usually a good choice. |
grad_factor |
Reweight gradients from the component before passing them upstream. You can set this to 0 to "freeze" the transformer weights with respect to the component, or use it to make some components more significant than others. Leaving it at 1.0 is usually fine. |
mixed_precision |
Replace whitelisted ops by half-precision counterparts. Speeds up training and prediction on GPUs with Tensor Cores and reduces GPU memory use. |
grad_scaler_config |
Configuration to pass to thinc.api.PyTorchGradScaler during training when mixed_precision is enabled. |
| CREATES | The model using the architecture. |
Mixed-precision support is currently an experimental feature.
- The
transformer_configargument was added inspacy-transformers.Tok2VecTransformer.v2. - The
mixed_precisionandgrad_scaler_configarguments were added inspacy-transformers.Tok2VecTransformer.v3.
The other arguments are shared between all versions.
Curated Transformer architectures {id="curated-trf",source="https://github.com/explosion/spacy-curated-transformers/blob/main/spacy_curated_transformers/models/architectures.py"}
The following architectures are provided by the packagespacy-curated-transformers.
See the usage documentation for
how to integrate the architectures into your training config.
When loading the model
from the Hugging Face Hub, the
model config's parameters must be same as the hyperparameters used by the
pre-trained model. Theinit fill-curated-transformer CLI
command can be used to automatically fill in these values.
spacy-curated-transformers.AlbertTransformer.v1
Construct an ALBERT transformer model.
| Name | Description |
|---|---|
vocab_size |
Vocabulary size. |
with_spans |
Callback that constructs a span generator model. |
piece_encoder |
The piece encoder to segment input tokens. |
attention_probs_dropout_prob |
Dropout probability of the self-attention layers. |
embedding_width |
Width of the embedding representations. |
hidden_act |
Activation used by the point-wise feed-forward layers. |
hidden_dropout_prob |
Dropout probability of the point-wise feed-forward and embedding layers. |
hidden_width |
Width of the final representations. |
intermediate_width |
Width of the intermediate projection layer in the point-wise feed-forward layer. |
layer_norm_eps |
Epsilon for layer normalization. |
max_position_embeddings |
Maximum length of position embeddings. |
model_max_length |
Maximum length of model inputs. |
num_attention_heads |
Number of self-attention heads. |
num_hidden_groups |
Number of layer groups whose constituents share parameters. |
num_hidden_layers |
Number of hidden layers. |
padding_idx |
Index of the padding meta-token. |
type_vocab_size |
Type vocabulary size. |
mixed_precision |
Use mixed-precision training. |
grad_scaler_config |
Configuration passed to the PyTorch gradient scaler. |
| CREATES | The model using the architecture |
spacy-curated-transformers.BertTransformer.v1
Construct a BERT transformer model.
| Name | Description |
|---|---|
vocab_size |
Vocabulary size. |
with_spans |
Callback that constructs a span generator model. |
piece_encoder |
The piece encoder to segment input tokens. |
attention_probs_dropout_prob |
Dropout probability of the self-attention layers. |
hidden_act |
Activation used by the point-wise feed-forward layers. |
hidden_dropout_prob |
Dropout probability of the point-wise feed-forward and embedding layers. |
hidden_width |
Width of the final representations. |
intermediate_width |
Width of the intermediate projection layer in the point-wise feed-forward layer. |
layer_norm_eps |
Epsilon for layer normalization. |
max_position_embeddings |
Maximum length of position embeddings. |
model_max_length |
Maximum length of model inputs. |
num_attention_heads |
Number of self-attention heads. |
num_hidden_layers |
Number of hidden layers. |
padding_idx |
Index of the padding meta-token. |
type_vocab_size |
Type vocabulary size. |
mixed_precision |
Use mixed-precision training. |
grad_scaler_config |
Configuration passed to the PyTorch gradient scaler. |
| CREATES | The model using the architecture |
spacy-curated-transformers.CamembertTransformer.v1
Construct a CamemBERT transformer model.
| Name | Description |
|---|---|
vocab_size |
Vocabulary size. |
with_spans |
Callback that constructs a span generator model. |
piece_encoder |
The piece encoder to segment input tokens. |
attention_probs_dropout_prob |
Dropout probability of the self-attention layers. |
hidden_act |
Activation used by the point-wise feed-forward layers. |
hidden_dropout_prob |
Dropout probability of the point-wise feed-forward and embedding layers. |
hidden_width |
Width of the final representations. |
intermediate_width |
Width of the intermediate projection layer in the point-wise feed-forward layer. |
layer_norm_eps |
Epsilon for layer normalization. |
max_position_embeddings |
Maximum length of position embeddings. |
model_max_length |
Maximum length of model inputs. |
num_attention_heads |
Number of self-attention heads. |
num_hidden_layers |
Number of hidden layers. |
padding_idx |
Index of the padding meta-token. |
type_vocab_size |
Type vocabulary size. |
mixed_precision |
Use mixed-precision training. |
grad_scaler_config |
Configuration passed to the PyTorch gradient scaler. |
| CREATES | The model using the architecture |
spacy-curated-transformers.RobertaTransformer.v1
Construct a RoBERTa transformer model.
| Name | Description |
|---|---|
vocab_size |
Vocabulary size. |
with_spans |
Callback that constructs a span generator model. |
piece_encoder |
The piece encoder to segment input tokens. |
attention_probs_dropout_prob |
Dropout probability of the self-attention layers. |
hidden_act |
Activation used by the point-wise feed-forward layers. |
hidden_dropout_prob |
Dropout probability of the point-wise feed-forward and embedding layers. |
hidden_width |
Width of the final representations. |
intermediate_width |
Width of the intermediate projection layer in the point-wise feed-forward layer. |
layer_norm_eps |
Epsilon for layer normalization. |
max_position_embeddings |
Maximum length of position embeddings. |
model_max_length |
Maximum length of model inputs. |
num_attention_heads |
Number of self-attention heads. |
num_hidden_layers |
Number of hidden layers. |
padding_idx |
Index of the padding meta-token. |
type_vocab_size |
Type vocabulary size. |
mixed_precision |
Use mixed-precision training. |
grad_scaler_config |
Configuration passed to the PyTorch gradient scaler. |
| CREATES | The model using the architecture |
spacy-curated-transformers.XlmrTransformer.v1
Construct a XLM-RoBERTa transformer model.
| Name | Description |
|---|---|
vocab_size |
Vocabulary size. |
with_spans |
Callback that constructs a span generator model. |
piece_encoder |
The piece encoder to segment input tokens. |
attention_probs_dropout_prob |
Dropout probability of the self-attention layers. |
hidden_act |
Activation used by the point-wise feed-forward layers. |
hidden_dropout_prob |
Dropout probability of the point-wise feed-forward and embedding layers. |
hidden_width |
Width of the final representations. |
intermediate_width |
Width of the intermediate projection layer in the point-wise feed-forward layer. |
layer_norm_eps |
Epsilon for layer normalization. |
max_position_embeddings |
Maximum length of position embeddings. |
model_max_length |
Maximum length of model inputs. |
num_attention_heads |
Number of self-attention heads. |
num_hidden_layers |
Number of hidden layers. |
padding_idx |
Index of the padding meta-token. |
type_vocab_size |
Type vocabulary size. |
mixed_precision |
Use mixed-precision training. |
grad_scaler_config |
Configuration passed to the PyTorch gradient scaler. |
| CREATES | The model using the architecture |
spacy-curated-transformers.ScalarWeight.v1
Construct a model that accepts a list of transformer layer outputs and returns a
weighted representation of the same.
| Name | Description |
|---|---|
num_layers |
Number of transformer hidden layers. |
dropout_prob |
Dropout probability. |
mixed_precision |
Use mixed-precision training. |
grad_scaler_config |
Configuration passed to the PyTorch gradient scaler. |
| CREATES | The model using the architecture |
spacy-curated-transformers.TransformerLayersListener.v1
Construct a listener layer that communicates with one or more upstream
Transformer components. This layer extracts the output of the last transformer
layer and performs pooling over the individual pieces of each Doc token,
returning their corresponding representations. The upstream name should either
be the wildcard string '*', or the name of the Transformer component.
In almost all cases, the wildcard string will suffice as there'll only be one
upstream Transformer component. But in certain situations, e.g: you have
disjoint datasets for certain tasks, or you'd like to use a pre-trained pipeline
but a downstream task requires its own token representations, you could end up
with more than one Transformer component in the pipeline.
| Name | Description |
|---|---|
layers |
The number of layers produced by the upstream transformer component, excluding the embedding layer. |
width |
The width of the vectors produced by the upstream transformer component. |
pooling |
Model that is used to perform pooling over the piece representations. |
upstream_name |
A string to identify the 'upstream' Transformer component to communicate with. |
grad_factor |
Factor to multiply gradients with. |
| CREATES | A model that returns the relevant vectors from an upstream transformer component. |
spacy-curated-transformers.LastTransformerLayerListener.v1
Construct a listener layer that communicates with one or more upstream
Transformer components. This layer extracts the output of the last transformer
layer and performs pooling over the individual pieces of each Doc token,
returning their corresponding representations. The upstream name should either
be the wildcard string '*', or the name of the Transformer component.
In almost all cases, the wildcard string will suffice as there'll only be one
upstream Transformer component. But in certain situations, e.g: you have
disjoint datasets for certain tasks, or you'd like to use a pre-trained pipeline
but a downstream task requires its own token representations, you could end up
with more than one Transformer component in the pipeline.
| Name | Description |
|---|---|
width |
The width of the vectors produced by the upstream transformer component. |
pooling |
Model that is used to perform pooling over the piece representations. |
upstream_name |
A string to identify the 'upstream' Transformer component to communicate with. |
grad_factor |
Factor to multiply gradients with. |
| CREATES | A model that returns the relevant vectors from an upstream transformer component. |
spacy-curated-transformers.ScalarWeightingListener.v1
Construct a listener layer that communicates with one or more upstream
Transformer components. This layer calculates a weighted representation of all
transformer layer outputs and performs pooling over the individual pieces of
each Doc token, returning their corresponding representations.
Requires its upstream Transformer components to return all layer outputs from
their models. The upstream name should either be the wildcard string '*', or
the name of the Transformer component.
In almost all cases, the wildcard string will suffice as there'll only be one
upstream Transformer component. But in certain situations, e.g: you have
disjoint datasets for certain tasks, or you'd like to use a pre-trained pipeline
but a downstream task requires its own token representations, you could end up
with more than one Transformer component in the pipeline.
| Name | Description |
|---|---|
width |
The width of the vectors produced by the upstream transformer component. |
weighting |
Model that is used to perform the weighting of the different layer outputs. |
pooling |
Model that is used to perform pooling over the piece representations. |
upstream_name |
A string to identify the 'upstream' Transformer component to communicate with. |
grad_factor |
Factor to multiply gradients with. |
| CREATES | A model that returns the relevant vectors from an upstream transformer component. |
spacy-curated-transformers.BertWordpieceEncoder.v1
Construct a WordPiece piece encoder model that accepts a list of token sequences
or documents and returns a corresponding list of piece identifiers. This encoder
also splits each token on punctuation characters, as expected by most BERT
models.
This model must be separately initialized using an appropriate loader.
spacy-curated-transformers.ByteBpeEncoder.v1
Construct a Byte-BPE piece encoder model that accepts a list of token sequences
or documents and returns a corresponding list of piece identifiers.
This model must be separately initialized using an appropriate loader.
spacy-curated-transformers.CamembertSentencepieceEncoder.v1
Construct a SentencePiece piece encoder model that accepts a list of token
sequences or documents and returns a corresponding list of piece identifiers
with CamemBERT post-processing applied.
This model must be separately initialized using an appropriate loader.
spacy-curated-transformers.CharEncoder.v1
Construct a character piece encoder model that accepts a list of token sequences
or documents and returns a corresponding list of piece identifiers.
This model must be separately initialized using an appropriate loader.
spacy-curated-transformers.SentencepieceEncoder.v1
Construct a SentencePiece piece encoder model that accepts a list of token
sequences or documents and returns a corresponding list of piece identifiers.
This model must be separately initialized using an appropriate loader.
spacy-curated-transformers.WordpieceEncoder.v1
Construct a WordPiece piece encoder model that accepts a list of token sequences
or documents and returns a corresponding list of piece identifiers. This encoder
also splits each token on punctuation characters, as expected by most BERT
models.
This model must be separately initialized using an appropriate loader.
spacy-curated-transformers.XlmrSentencepieceEncoder.v1
Construct a SentencePiece piece encoder model that accepts a list of token
sequences or documents and returns a corresponding list of piece identifiers
with XLM-RoBERTa post-processing applied.
This model must be separately initialized using an appropriate loader.
Pretraining architectures {id="pretrain",source="spacy/ml/models/multi_task.py"}
The spacy pretrain command lets you initialize a Tok2Vec layer in your
pipeline with information from raw text. To this end, additional layers are
added to build a network for a temporary task that forces the Tok2Vec layer to
learn something about sentence structure and word cooccurrence statistics. Two
pretraining objectives are available, both of which are variants of the cloze
task Devlin et al. (2018) introduced for
BERT.
For more information, see the section on
pretraining.
spacy.PretrainVectors.v1 {id="pretrain_vectors"}
Example config
ini[pretraining] component = "tok2vec" [initialize] vectors = "en_core_web_lg" ... [pretraining.objective] @architectures = "spacy.PretrainVectors.v1" maxout_pieces = 3 hidden_size = 300 loss = "cosine"
Predict the word's vector from a static embeddings table as pretraining
objective for a Tok2Vec layer. To use this objective, make sure that theinitialize.vectors section in the config refers to a model with static
vectors.
| Name | Description |
|---|---|
maxout_pieces |
The number of maxout pieces to use. Recommended values are 2 or 3. |
hidden_size |
Size of the hidden layer of the model. |
loss |
The loss function can be either "cosine" or "L2". We typically recommend to use "cosine". ~~~str~~ |
| CREATES | A callable function that can create the Model, given the vocab of the pipeline and the tok2vec layer to pretrain. |
spacy.PretrainCharacters.v1 {id="pretrain_chars"}
Example config
ini[pretraining] component = "tok2vec" ... [pretraining.objective] @architectures = "spacy.PretrainCharacters.v1" maxout_pieces = 3 hidden_size = 300 n_characters = 4
Predict some number of leading and trailing UTF-8 bytes as pretraining objective
for a Tok2Vec layer.
| Name | Description |
|---|---|
maxout_pieces |
The number of maxout pieces to use. Recommended values are 2 or 3. |
hidden_size |
Size of the hidden layer of the model. |
n_characters |
The window of characters - e.g. if n_characters = 2, the model will try to predict the first two and last two characters of the word. |
| CREATES | A callable function that can create the Model, given the vocab of the pipeline and the tok2vec layer to pretrain. |
Parser & NER architectures {id="parser"}
spacy.TransitionBasedParser.v2 {id="TransitionBasedParser",source="spacy/ml/models/parser.py"}
Example Config
ini[model] @architectures = "spacy.TransitionBasedParser.v2" state_type = "ner" extra_state_tokens = false hidden_width = 64 maxout_pieces = 2 use_upper = true [model.tok2vec] @architectures = "spacy.HashEmbedCNN.v2" pretrained_vectors = null width = 96 depth = 4 embed_size = 2000 window_size = 1 maxout_pieces = 3 subword_features = true
Build a transition-based parser model. Can apply to NER or dependency parsing.
Transition-based parsing is an approach to structured prediction where the task
of predicting the structure is mapped to a series of state transitions. You
might find this tutorial
helpful for background information. The neural network state prediction model
consists of either two or three subnetworks:
- tok2vec: Map each token into a vector representation. This subnetwork is
run once for each batch. - lower: Construct a feature-specific vector for each
(token, feature)
pair. This is also run once for each batch. Constructing the state
representation is then a matter of summing the component features and applying
the non-linearity. - upper (optional): A feed-forward network that predicts scores from the
state representation. If not present, the output from the lower model is used
as action scores directly.
| Name | Description |
|---|---|
tok2vec |
Subnetwork to map tokens into vector representations. |
state_type |
Which task to extract features for. Possible values are "ner" and "parser". |
extra_state_tokens |
Whether to use an expanded feature set when extracting the state tokens. Slightly slower, but sometimes improves accuracy slightly. Defaults to False. |
hidden_width |
The width of the hidden layer. |
maxout_pieces |
How many pieces to use in the state prediction layer. Recommended values are 1, 2 or 3. If 1, the maxout non-linearity is replaced with a Relu non-linearity if use_upper is True, and no non-linearity if False. |
use_upper |
Whether to use an additional hidden layer after the state vector in order to predict the action scores. It is recommended to set this to False for large pretrained models such as transformers, and True for smaller networks. The upper layer is computed on CPU, which becomes a bottleneck on larger GPU-based models, where it's also less necessary. |
nO |
The number of actions the model will predict between. Usually inferred from data at the beginning of training, or loaded from disk. |
| CREATES | The model using the architecture. |
TransitionBasedParser.v1 had the exact
same signature, but the use_upper argument was True by default.
Tagging architectures {id="tagger",source="spacy/ml/models/tagger.py"}
spacy.Tagger.v2 {id="Tagger"}
Example Config
ini[model] @architectures = "spacy.Tagger.v2" nO = null normalize = false [model.tok2vec] # ...
Build a tagger model, using a provided token-to-vector component. The tagger
model adds a linear layer with softmax activation to predict scores given the
token vectors.
| Name | Description |
|---|---|
tok2vec |
Subnetwork to map tokens into vector representations. |
nO |
The number of tags to output. Inferred from the data if None. |
normalize |
Normalize probabilities during inference. Defaults to False. |
| CREATES | The model using the architecture. |
- The
normalizeargument was added inspacy.Tagger.v2.spacy.Tagger.v1
always normalizes probabilities during inference.
The other arguments are shared between all versions.
Text classification architectures {id="textcat",source="spacy/ml/models/textcat.py"}
A text classification architecture needs to take a Doc as input,
and produce a score for each potential label class. Textcat challenges can be
binary (e.g. sentiment analysis) or involve multiple possible labels.
Multi-label challenges can either have mutually exclusive labels (each example
has exactly one label), or multiple labels may be applicable at the same time.
As the properties of text classification problems can vary widely, we provide
several different built-in architectures. It is recommended to experiment with
different architectures and settings to determine what works best on your
specific data and challenge.
When the architecture for a text classification challenge contains a setting forexclusive_classes, it is important to use the correct value for the correct
pipeline component. The textcat component should always be used for
single-label use-cases where exclusive_classes = true, while thetextcat_multilabel should be used for multi-label settings withexclusive_classes = false.
spacy.TextCatEnsemble.v2 {id="TextCatEnsemble"}
Example Config
ini[model] @architectures = "spacy.TextCatEnsemble.v2" nO = null [model.linear_model] @architectures = "spacy.TextCatBOW.v3" exclusive_classes = true length = 262144 ngram_size = 1 no_output_layer = false [model.tok2vec] @architectures = "spacy.Tok2Vec.v2" [model.tok2vec.embed] @architectures = "spacy.MultiHashEmbed.v2" width = 64 rows = [2000, 2000, 1000, 1000, 1000, 1000] attrs = ["ORTH", "LOWER", "PREFIX", "SUFFIX", "SHAPE", "ID"] include_static_vectors = false [model.tok2vec.encode] @architectures = "spacy.MaxoutWindowEncoder.v2" width = ${model.tok2vec.embed.width} window_size = 1 maxout_pieces = 3 depth = 2
Stacked ensemble of a linear bag-of-words model and a neural network model. The
neural network is built upon a Tok2Vec layer and uses attention. The setting for
whether or not this model should cater for multi-label classification, is taken
from the linear model, where it is stored in model.attrs["multi_label"].
| Name | Description |
|---|---|
linear_model |
The linear bag-of-words model. |
tok2vec |
The tok2vec layer to build the neural network upon. |
nO |
Output dimension, determined by the number of different labels. If not set, the TextCategorizer component will set it when initialize is called. |
| CREATES | The model using the architecture. |
TextCatEnsemble.v1 was functionally similar,
but used an internal tok2vec instead of taking it as argument:
| Name | Description |
|---|---|
exclusive_classes |
Whether or not categories are mutually exclusive. |
pretrained_vectors |
Whether or not pretrained vectors will be used in addition to the feature vectors. |
width |
Output dimension of the feature encoding step. |
embed_size |
Input dimension of the feature encoding step. |
conv_depth |
Depth of the tok2vec layer. |
window_size |
The number of contextual vectors to concatenate from the left and from the right. |
ngram_size |
Determines the maximum length of the n-grams in the BOW model. For instance, ngram_size=3would give unigram, trigram and bigram features. |
dropout |
The dropout rate. |
nO |
Output dimension, determined by the number of different labels. If not set, the TextCategorizer component will set it when initialize is called. |
| CREATES | The model using the architecture. |
spacy.TextCatBOW.v3 {id="TextCatBOW"}
Example Config
ini[model] @architectures = "spacy.TextCatBOW.v3" exclusive_classes = false length = 262144 ngram_size = 1 no_output_layer = false nO = null
An n-gram "bag-of-words" model. This architecture should run much faster than
the others, but may not be as accurate, especially if texts are short.
| Name | Description |
|---|---|
exclusive_classes |
Whether or not categories are mutually exclusive. |
ngram_size |
Determines the maximum length of the n-grams in the BOW model. For instance, ngram_size=3 would give unigram, trigram and bigram features. |
no_output_layer |
Whether or not to add an output layer to the model (Softmax activation if exclusive_classes is True, else Logistic). |
length |
The size of the weights vector. The length will be rounded up to the next power of two if it is not a power of two. Defaults to 262144. |
nO |
Output dimension, determined by the number of different labels. If not set, the TextCategorizer component will set it when initialize is called. |
| CREATES | The model using the architecture. |
- TextCatBOW.v1 was not yet resizable. Since v2,
new labels can be added to this component, even after training. - TextCatBOW.v1 and
TextCatBOW.v2 used an erroneous sparse linear
layer that only used a small number of the allocated parameters. - TextCatBOW.v1 and
TextCatBOW.v2 did not have thelengthargument.
spacy.TextCatParametricAttention.v1 {id="TextCatParametricAttention"}
Example Config
ini[model] @architectures = "spacy.TextCatParametricAttention.v1" exclusive_classes = true nO = null [model.tok2vec] @architectures = "spacy.Tok2Vec.v2" [model.tok2vec.embed] @architectures = "spacy.MultiHashEmbed.v2" width = 64 rows = [2000, 2000, 1000, 1000, 1000, 1000] attrs = ["ORTH", "LOWER", "PREFIX", "SUFFIX", "SHAPE", "ID"] include_static_vectors = false [model.tok2vec.encode] @architectures = "spacy.MaxoutWindowEncoder.v2" width = ${model.tok2vec.embed.width} window_size = 1 maxout_pieces = 3 depth = 2
A neural network model that is built upon Tok2Vec and uses parametric attention
to attend to tokens that are relevant to text classification.
| Name | Description |
|---|---|
tok2vec |
The tok2vec layer to build the neural network upon. |
exclusive_classes |
Whether or not categories are mutually exclusive. |
nO |
Output dimension, determined by the number of different labels. If not set, the TextCategorizer component will set it when initialize is called. |
| CREATES | The model using the architecture. |
spacy.TextCatReduce.v1 {id="TextCatReduce"}
Example Config
ini[model] @architectures = "spacy.TextCatReduce.v1" exclusive_classes = false use_reduce_first = false use_reduce_last = false use_reduce_max = false use_reduce_mean = true nO = null [model.tok2vec] @architectures = "spacy.HashEmbedCNN.v2" pretrained_vectors = null width = 96 depth = 4 embed_size = 2000 window_size = 1 maxout_pieces = 3 subword_features = true
A classifier that pools token hidden representations of each Doc using first,
max or mean reduction and then applies a classification layer. Reductions are
concatenated when multiple reductions are used.
TextCatReduce is a generalization of the olderTextCatCNN model. TextCatCNN always uses a mean
reduction, whereas TextCatReduce also supports first/max reductions.
| Name | Description |
|---|---|
exclusive_classes |
Whether or not categories are mutually exclusive. |
tok2vec |
The tok2vec layer of the model. |
use_reduce_first |
Pool by using the hidden representation of the first token of a Doc. |
use_reduce_last |
Pool by using the hidden representation of the last token of a Doc. |
use_reduce_max |
Pool by taking the maximum values of the hidden representations of a Doc. |
use_reduce_mean |
Pool by taking the mean of all hidden representations of a Doc. |
nO |
Output dimension, determined by the number of different labels. If not set, the TextCategorizer component will set it when initialize is called. |
| CREATES | The model using the architecture. |
Span classification architectures {id="spancat",source="spacy/ml/models/spancat.py"}
spacy.SpanCategorizer.v1 {id="SpanCategorizer"}
Example Config
ini[model] @architectures = "spacy.SpanCategorizer.v1" scorer = {"@layers": "spacy.LinearLogistic.v1"} [model.reducer] @layers = spacy.mean_max_reducer.v1" hidden_size = 128 [model.tok2vec] @architectures = "spacy.Tok2Vec.v1" [model.tok2vec.embed] @architectures = "spacy.MultiHashEmbed.v1" # ... [model.tok2vec.encode] @architectures = "spacy.MaxoutWindowEncoder.v1" # ...
Build a span categorizer model to power aSpanCategorizer component, given a token-to-vector
model, a reducer model to map the sequence of vectors for each span down to a
single vector, and a scorer model to map the vectors to probabilities.
| Name | Description |
|---|---|
tok2vec |
The token-to-vector model. |
reducer |
The reducer model. |
scorer |
The scorer model. |
| CREATES | The model using the architecture. |
spacy.mean_max_reducer.v1 {id="mean_max_reducer"}
Reduce sequences by concatenating their mean and max pooled vectors, and then
combine the concatenated vectors with a hidden layer.
| Name | Description |
|---|---|
hidden_size |
The size of the hidden layer. |
Entity linking architectures {id="entitylinker",source="spacy/ml/models/entity_linker.py"}
An EntityLinker component disambiguates textual mentions
(tagged as named entities) to unique identifiers, grounding the named entities
into the "real world". This requires 3 main components:
- A
KnowledgeBase(KB) holding the unique identifiers, potential
synonyms and prior probabilities. - A candidate generation step to produce a set of likely identifiers, given a
certain textual mention. - A machine learning
Modelthat picks the
most plausible ID from the set of candidates.
spacy.EntityLinker.v2 {id="EntityLinker"}
Example Config
ini[model] @architectures = "spacy.EntityLinker.v2" nO = null [model.tok2vec] @architectures = "spacy.HashEmbedCNN.v2" pretrained_vectors = null width = 96 depth = 2 embed_size = 2000 window_size = 1 maxout_pieces = 3 subword_features = true
The EntityLinker model architecture is a Thinc Model with aLinear output layer.
| Name | Description |
|---|---|
tok2vec |
The tok2vec layer of the model. |
nO |
Output dimension, determined by the length of the vectors encoding each entity in the KB. If the nO dimension is not set, the entity linking component will set it when initialize is called. |
| CREATES | The model using the architecture. |
spacy.EmptyKB.v1 {id="EmptyKB.v1"}
A function that creates an empty KnowledgeBase from a Vocab
instance.
| Name | Description |
|---|---|
entity_vector_length |
The length of the vectors encoding each entity in the KB. Defaults to 64. |
spacy.EmptyKB.v2 {id="EmptyKB"}
A function that creates an empty KnowledgeBase from a Vocab
instance. This is the default when a new entity linker component is created. It
returns a Callable[[Vocab, int], InMemoryLookupKB].
spacy.KBFromFile.v1 {id="KBFromFile"}
A function that reads an existing KnowledgeBase from file.
| Name | Description |
|---|---|
kb_path |
The location of the KB that was stored to file. |
spacy.CandidateGenerator.v1 {id="CandidateGenerator"}
A function that takes as input a KnowledgeBase and aSpan object denoting a named entity, and returns a list of
plausible Candidate objects. The defaultCandidateGenerator uses the text of a mention to find its potential aliases in
the KnowledgeBase. Note that this function is case-dependent.
spacy.CandidateBatchGenerator.v1 {id="CandidateBatchGenerator"}
A function that takes as input a KnowledgeBase and an Iterable ofSpan objects denoting named entities, and returns a list of
plausible Candidate objects per specifiedSpan. The default CandidateBatchGenerator uses the text of a
mention to find its potential aliases in the KnowledgeBase. Note that this
function is case-dependent.
Coreference {id="coref-architectures",tag="experimental"}
A CoreferenceResolver component identifies tokens that refer to
the same entity. A SpanResolver component infers spans
from single tokens. Together these components can be used to reproduce
traditional coreference models. You can also omit the SpanResolver if working
with only token-level clusters is acceptable.
spacy-experimental.Coref.v1 {id="Coref",tag="experimental"}
Example Config
ini[model] @architectures = "spacy-experimental.Coref.v1" distance_embedding_size = 20 dropout = 0.3 hidden_size = 1024 depth = 2 antecedent_limit = 50 antecedent_batch_size = 512 [model.tok2vec] @architectures = "spacy-transformers.TransformerListener.v1" grad_factor = 1.0 upstream = "transformer" pooling = {"@layers":"reduce_mean.v1"}
The Coref model architecture is a Thinc Model.
| Name | Description |
|---|---|
tok2vec |
The tok2vec layer of the model. |
distance_embedding_size |
A representation of the distance between candidates. |
dropout |
The dropout to use internally. Unlike some Thinc models, this has separate dropout for the internal PyTorch layers. |
hidden_size |
Size of the main internal layers. |
depth |
Depth of the internal network. |
antecedent_limit |
How many candidate antecedents to keep after rough scoring. This has a significant effect on memory usage. Typical values would be 50 to 200, or higher for very long documents. |
antecedent_batch_size |
Internal batch size. |
| CREATES | The model using the architecture. |
spacy-experimental.SpanResolver.v1 {id="SpanResolver",tag="experimental"}
Example Config
ini[model] @architectures = "spacy-experimental.SpanResolver.v1" hidden_size = 1024 distance_embedding_size = 64 conv_channels = 4 window_size = 1 max_distance = 128 prefix = "coref_head_clusters" [model.tok2vec] @architectures = "spacy-transformers.TransformerListener.v1" grad_factor = 1.0 upstream = "transformer" pooling = {"@layers":"reduce_mean.v1"}
The SpanResolver model architecture is a Thinc Model. Note thatMentionClusters is List[List[Tuple[int, int]]].
| Name | Description |
|---|---|
tok2vec |
The tok2vec layer of the model. |
hidden_size |
Size of the main internal layers. |
distance_embedding_size |
A representation of the distance between two candidates. |
conv_channels |
The number of channels in the internal CNN. |
window_size |
The number of neighboring tokens to consider in the internal CNN. 1 means consider one token on each side. |
max_distance |
The longest possible length of a predicted span. |
prefix |
The prefix that indicates spans to use for input data. |
| CREATES | The model using the architecture. |
File: website/docs/api/attributeruler.mdx
title: AttributeRuler tag: class source: spacy/pipeline/attributeruler.py version: 3 teaser: 'Pipeline component for rule-based token attribute assignment' api_string_name: attribute_ruler api_trainable: false
The attribute ruler lets you set token attributes for tokens identified byMatcher patterns. The attribute ruler is
typically used to handle exceptions for token attributes and to map values
between attributes such as mapping fine-grained POS tags to coarse-grained POS
tags. See the usage guide for
examples.
Config and implementation {id="config"}
The default config is defined by the pipeline component factory and describes
how the component should be configured. You can override its settings via theconfig argument on nlp.add_pipe or in yourconfig.cfg for training.
Example
pythonconfig = {"validate": True} nlp.add_pipe("attribute_ruler", config=config)
| Setting | Description |
|---|---|
validate |
Whether patterns should be validated (passed to the Matcher). Defaults to False. |
%%GITHUB_SPACY/spacy/pipeline/attributeruler.pyAttributeRuler.\_\_init\_\_ {id="init",tag="method"}
Initialize the attribute ruler.
Example
python# Construction via add_pipe ruler = nlp.add_pipe("attribute_ruler")
| Name | Description |
|---|---|
vocab |
The shared vocabulary to pass to the matcher. |
name |
Instance name of the current pipeline component. Typically passed in automatically from the factory when the component is added. |
| keyword-only | |
validate |
Whether patterns should be validated (passed to the Matcher). Defaults to False. |
scorer |
The scoring method. Defaults to Scorer.score_token_attr for the attributes "tag", "pos", "morph" and "lemma" and Scorer.score_token_attr_per_feat for the attribute "morph". |
AttributeRuler.\_\_call\_\_ {id="call",tag="method"}
Apply the attribute ruler to a Doc, setting token attributes for tokens
matched by the provided patterns.
| Name | Description |
|---|---|
doc |
The document to process. |
| RETURNS | The processed document. |
AttributeRuler.add {id="add",tag="method"}
Add patterns to the attribute ruler. The patterns are a list of Matcher
patterns and the attributes are a dict of attributes to set on the matched
token. If the pattern matches a span of more than one token, the index can be
used to set the attributes for the token at that index in the span. The index
may be negative to index from the end of the span.
Example
pythonruler = nlp.add_pipe("attribute_ruler") patterns = [[{"TAG": "VB"}]] attrs = {"POS": "VERB"} ruler.add(patterns=patterns, attrs=attrs)
| Name | Description |
|---|---|
patterns |
The Matcher patterns to add. |
attrs |
The attributes to assign to the target token in the matched span. |
index |
The index of the token in the matched span to modify. May be negative to index from the end of the span. Defaults to 0. |
AttributeRuler.add_patterns {id="add_patterns",tag="method"}
Example
pythonruler = nlp.add_pipe("attribute_ruler") patterns = [ { "patterns": [[{"TAG": "VB"}]], "attrs": {"POS": "VERB"} }, { "patterns": [[{"LOWER": "two"}, {"LOWER": "apples"}]], "attrs": {"LEMMA": "apple"}, "index": -1 }, ] ruler.add_patterns(patterns)
Add patterns from a list of pattern dicts. Each pattern dict can specify the
keys "patterns", "attrs" and "index", which match the arguments ofAttributeRuler.add.
| Name | Description |
|---|---|
patterns |
The patterns to add. |
AttributeRuler.patterns {id="patterns",tag="property"}
Get all patterns that have been added to the attribute ruler in thepatterns_dict format accepted byAttributeRuler.add_patterns.
| Name | Description |
|---|---|
| RETURNS | The patterns added to the attribute ruler. |
AttributeRuler.initialize {id="initialize",tag="method"}
Initialize the component with data and used before training to load in rules
from a file. This method is typically called byLanguage.initialize and lets you customize
arguments it receives via the[initialize.components] block in the
config.
Example
pythonruler = nlp.add_pipe("attribute_ruler") ruler.initialize(lambda: [], nlp=nlp, patterns=patterns)ini### config.cfg [initialize.components.attribute_ruler] [initialize.components.attribute_ruler.patterns] @readers = "srsly.read_json.v1" path = "corpus/attribute_ruler_patterns.json
| Name | Description |
|---|---|
get_examples |
Function that returns gold-standard annotations in the form of Example objects (the training data). Not used by this component. |
| keyword-only | |
nlp |
The current nlp object. Defaults to None. |
patterns |
A list of pattern dicts with the keys as the arguments to AttributeRuler.add (patterns/attrs/index) to add as patterns. Defaults to None. |
tag_map |
The tag map that maps fine-grained tags to coarse-grained tags and morphological features. Defaults to None. |
morph_rules |
The morph rules that map token text and fine-grained tags to coarse-grained tags, lemmas and morphological features. Defaults to None. |
AttributeRuler.load_from_tag_map {id="load_from_tag_map",tag="method"}
Load attribute ruler patterns from a tag map.
| Name | Description |
|---|---|
tag_map |
The tag map that maps fine-grained tags to coarse-grained tags and morphological features. |
AttributeRuler.load_from_morph_rules {id="load_from_morph_rules",tag="method"}
Load attribute ruler patterns from morph rules.
| Name | Description |
|---|---|
morph_rules |
The morph rules that map token text and fine-grained tags to coarse-grained tags, lemmas and morphological features. |
AttributeRuler.to_disk {id="to_disk",tag="method"}
Serialize the pipe to disk.
Example
pythonruler = nlp.add_pipe("attribute_ruler") ruler.to_disk("/path/to/attribute_ruler")
| Name | Description |
|---|---|
path |
A path to a directory, which will be created if it doesn't exist. Paths may be either strings or Path-like objects. |
| keyword-only | |
exclude |
String names of serialization fields to exclude. |
AttributeRuler.from_disk {id="from_disk",tag="method"}
Load the pipe from disk. Modifies the object in place and returns it.
Example
pythonruler = nlp.add_pipe("attribute_ruler") ruler.from_disk("/path/to/attribute_ruler")
| Name | Description |
|---|---|
path |
A path to a directory. Paths may be either strings or Path-like objects. |
| keyword-only | |
exclude |
String names of serialization fields to exclude. |
| RETURNS | The modified AttributeRuler object. |
AttributeRuler.to_bytes {id="to_bytes",tag="method"}
Example
pythonruler = nlp.add_pipe("attribute_ruler") ruler = ruler.to_bytes()
Serialize the pipe to a bytestring.
| Name | Description |
|---|---|
| keyword-only | |
exclude |
String names of serialization fields to exclude. |
| RETURNS | The serialized form of the AttributeRuler object. |
AttributeRuler.from_bytes {id="from_bytes",tag="method"}
Load the pipe from a bytestring. Modifies the object in place and returns it.
Example
pythonruler_bytes = ruler.to_bytes() ruler = nlp.add_pipe("attribute_ruler") ruler.from_bytes(ruler_bytes)
| Name | Description |
|---|---|
bytes_data |
The data to load from. |
| keyword-only | |
exclude |
String names of serialization fields to exclude. |
| RETURNS | The AttributeRuler object. |
Serialization fields {id="serialization-fields"}
During serialization, spaCy will export several data fields used to restore
different aspects of the object. If needed, you can exclude them from
serialization by passing in the string names via the exclude argument.
Example
pythondata = ruler.to_disk("/path", exclude=["vocab"])
| Name | Description |
|---|---|
vocab |
The shared Vocab. |
patterns |
The Matcher patterns. You usually don't want to exclude this. |
attrs |
The attributes to set. You usually don't want to exclude this. |
indices |
The token indices. You usually don't want to exclude this. |
File: website/docs/api/attributes.mdx
title: Attributes teaser: Token attributes source: spacy/attrs.pyx
Token attributes are specified using internal IDs in many places
including:
Matcherpatterns,Doc.to_arrayandDoc.from_arrayDoc.has_annotationMultiHashEmbedTok2Vec architectureattrs
pythonimport spacy from spacy.attrs import DEP nlp = spacy.blank("en") doc = nlp("There are many attributes.") # DEP always has the same internal value assert DEP == 76 # "DEP" is automatically converted to DEP assert DEP == nlp.vocab.strings["DEP"] assert doc.has_annotation(DEP) == doc.has_annotation("DEP") # look up IDs in spacy.attrs.IDS from spacy.attrs import IDS assert IDS["DEP"] == DEP
All methods automatically convert between the string version of an ID ("DEP")
and the internal integer symbols (DEP). The internal IDs can be imported fromspacy.attrs or retrieved from the StringStore. A map
from string attribute names to internal attribute IDs is stored inspacy.attrs.IDS.
The corresponding Token object attributes can be
accessed using the same names in lowercase, e.g. token.orth or token.length.
For attributes that represent string values, the internal integer ID is accessed
as Token.attr, e.g. token.dep, while the string value can be retrieved by
appending _ as in token.dep_.
| Attribute | Description |
|---|---|
DEP |
The token's dependency label. |
ENT_ID |
The token's entity ID (ent_id). |
ENT_IOB |
The IOB part of the token's entity tag. Uses custom integer values rather than the string store: unset is 0, I is 1, O is 2, and B is 3. |
ENT_KB_ID |
The token's entity knowledge base ID. |
ENT_TYPE |
The token's entity label. |
IS_ALPHA |
Token text consists of alphabetic characters. |
IS_ASCII |
Token text consists of ASCII characters. |
IS_DIGIT |
Token text consists of digits. |
IS_LOWER |
Token text is in lowercase. |
IS_PUNCT |
Token is punctuation. |
IS_SPACE |
Token is whitespace. |
IS_STOP |
Token is a stop word. |
IS_TITLE |
Token text is in titlecase. |
IS_UPPER |
Token text is in uppercase. |
LEMMA |
The token's lemma. |
LENGTH |
The length of the token text. |
LIKE_EMAIL |
Token text resembles an email address. |
LIKE_NUM |
Token text resembles a number. |
LIKE_URL |
Token text resembles a URL. |
LOWER |
The lowercase form of the token text. |
MORPH |
The token's morphological analysis. |
NORM |
The normalized form of the token text. |
ORTH |
The exact verbatim text of a token. |
POS |
The token's universal part of speech (UPOS). |
SENT_START |
Token is start of sentence. |
SHAPE |
The token's shape. |
SPACY |
Token has a trailing space. |
TAG |
The token's fine-grained part of speech. |