Skip to main content

Practical Machine Learning for NLP

Project description

Thinc: Practical Machine Learning for NLP in Python

Thinc is the machine learning library powering spaCy. It features a battle-tested linear model designed for large sparse learning problems, and a flexible neural network model under development for spaCy v2.0.

Thinc is a practical toolkit for implementing models that follow the "Embed, encode, attend, predict" architecture. It's designed to be easy to install, efficient for CPU usage and optimised for NLP and deep learning with text – in particular, hierarchically structured input and variable-length sequences.

🔮 Read the release notes here.

Azure Pipelines Current Release Version PyPi Version conda Version Python wheels

What's where (as of v7.0.0)

Module Description
thinc.v2v.Model Base class.
thinc.v2v Layers transforming vectors to vectors.
thinc.i2v Layers embedding IDs to vectors.
thinc.t2v Layers pooling tensors to vectors.
thinc.t2t Layers transforming tensors to tensors (e.g. CNN, LSTM).
thinc.api Higher-order functions, for building networks. Will be renamed.
thinc.extra Datasets and utilities.
thinc.neural.ops Container classes for mathematical operations. Will be reorganized.
thinc.linear.avgtron Legacy efficient Averaged Perceptron implementation.

Development status

Thinc's deep learning functionality is still under active development: APIs are unstable, and we're not yet ready to provide usage support. However, if you're already quite familiar with neural networks, there's a lot here you might find interesting. Thinc's conceptual model is quite different from TensorFlow's. Thinc also implements some novel features, such as a small DSL for concisely wiring up models, embedding tables that support pre-computation and the hashing trick, dynamic batch sizes, a concatenation-based approach to variable-length sequences, and support for model averaging for the Adam solver (which performs very well).

No computational graph – just higher order functions

The central problem for a neural network implementation is this: during the forward pass, you compute results that will later be useful during the backward pass. How do you keep track of this arbitrary state, while making sure that layers can be cleanly composed?

Most libraries solve this problem by having you declare the forward computations, which are then compiled into a graph somewhere behind the scenes. Thinc doesn't have a "computational graph". Instead, we just use the stack, because we put the state from the forward pass into callbacks.

All nodes in the network have a simple signature:

f(inputs) -> {outputs, f(d_outputs)->d_inputs}

To make this less abstract, here's a ReLu activation, following this signature:

def relu(inputs):
    mask = inputs > 0
    def backprop_relu(d_outputs, optimizer):
        return d_outputs * mask
    return inputs * mask, backprop_relu

When you call the relu function, you get back an output variable, and a callback. This lets you calculate a gradient using the output, and then pass it into the callback to perform the backward pass.

This signature makes it easy to build a complex network out of smaller pieces, using arbitrary higher-order functions you can write yourself. To make this clearer, we need a function for a weights layer. Usually this will be implemented as a class — but let's continue using closures, to keep things concise, and to keep the simplicity of the interface explicit.

The main complication for the weights layer is that we now have a side-effect to manage: we would like to update the weights. There are a few ways to handle this. In Thinc we currently pass a callable into the backward pass. (I'm not convinced this is best.)

import numpy

def create_linear_layer(n_out, n_in):
    W = numpy.zeros((n_out, n_in))
    b = numpy.zeros((n_out, 1))

    def forward(X):
        Y = W @ X + b
        def backward(dY, optimizer):
            dX = W.T @ dY
            dW = numpy.einsum('ik,jk->ij', dY, X)
            db = dY.sum(axis=0)

            optimizer(W, dW)
            optimizer(b, db)

            return dX
        return Y, backward
    return forward

If we call Wb = create_linear_layer(5, 4), the variable Wb will be the forward() function, implemented inside the body of create_linear_layer(). The Wb instance will have access to the W and b variable defined in its outer scope. If we invoke create_linear_layer() again, we get a new instance, with its own internal state.

The Wb instance and the relu function have exactly the same signature. This makes it easy to write higher order functions to compose them. The most obvious thing to do is chain them together:

def chain(*layers):
    def forward(X):
        backprops = []
        Y = X
        for layer in layers:
            Y, backprop = layer(Y)
            backprops.append(backprop)
        def backward(dY, optimizer):
            for backprop in reversed(backprops):
                dY = backprop(dY, optimizer)
            return dY
        return Y, backward
    return forward

We could now chain our linear layer together with the relu activation, to create a simple feed-forward network:

Wb1 = create_linear_layer(10, 5)
Wb2 = create_linear_layer(3, 10)

model = chain(Wb1, relu, Wb2)

X = numpy.random.uniform(size=(5, 4))

y, bp_y = model(X)

dY = y - truth
dX = bp_y(dY, optimizer)

This conceptual model makes Thinc very flexible. The trade-off is that Thinc is less convenient and efficient at workloads that fit exactly into what TensorFlow etc. are designed for. If your graph really is static, and your inputs are homogenous in size and shape, Keras will likely be faster and simpler. But if you want to pass normal Python objects through your network, or handle sequences and recursions of arbitrary length or complexity, you might find Thinc's design a better fit for your problem.

Quickstart

Thinc should install cleanly with both pip and conda, for Pythons 2.7+ and 3.5+, on Linux, macOS / OSX and Windows. Its only system dependency is a compiler tool-chain (e.g. build-essential) and the Python development headers (e.g. python-dev).

pip install -U pip setuptools wheel
pip install thinc

For GPU support, we're grateful to use the work of Chainer's cupy module, which provides a numpy-compatible interface for GPU arrays. However, installing Chainer when no GPU is available currently causes an error. We therefore do not list cupy as an explicit dependency — so cupy is installed using an extra option with the correct CUDA version:

pip install thinc[cuda102]

Alternatively, to install cupy from source use thinc[cuda] or install cupy directly using its source package with pip install cupy.

The rest of this section describes how to build Thinc from source. If you have Fabric installed, you can use the shortcut:

git clone https://github.com/explosion/thinc
cd thinc
fab clean env make test

You can then run the examples as follows:

fab eg.mnist
fab eg.basic_tagger
fab eg.cnn_tagger

Otherwise, you can build and test explicitly with:

git clone https://github.com/explosion/thinc
cd thinc

virtualenv .env
source .env/bin/activate

pip install -r requirements.txt
python setup.py build_ext --inplace
py.test thinc/

And then run the examples as follows:

python examples/mnist.py
python examples/basic_tagger.py
python examples/cnn_tagger.py

Usage

The Neural Network API is still subject to change, even within minor versions. You can get a feel for the current API by checking out the examples. Here are a few quick highlights.

1. Shape inference

Models can be created with some dimensions unspecified. Missing dimensions are inferred when pre-trained weights are loaded or when training begins. This eliminates a common source of programmer error:

# Invalid network — shape mismatch
model = chain(ReLu(512, 748), ReLu(512, 784), Softmax(10))

# Leave the dimensions unspecified, and you can't be wrong.
model = chain(ReLu(512), ReLu(512), Softmax())

2. Operator overloading

The Model.define_operators() classmethod allows you to bind arbitrary binary functions to Python operators, for use in any Model instance. The method can (and should) be used as a context-manager, so that the overloading is limited to the immediate block. This allows concise and expressive model definition:

with Model.define_operators({'>>': chain}):
    model = ReLu(512) >> ReLu(512) >> Softmax()

The overloading is cleaned up at the end of the block. A fairly arbitrary zoo of functions are currently implemented. Some of the most useful:

  • chain(model1, model2): Compose two models f(x) and g(x) into a single model computing g(f(x)).
  • clone(model1, int): Create n copies of a model, each with distinct weights, and chain them together.
  • concatenate(model1, model2): Given two models with output dimensions (n,) and (m,), construct a model with output dimensions (m+n,).
  • add(model1, model2): add(f(x), g(x)) = f(x)+g(x)
  • make_tuple(model1, model2): Construct tuples of the outputs of two models, at the batch level. The backward pass expects to receive a tuple of gradients, which are routed through the appropriate model, and summed.

Putting these things together, here's the sort of tagging model that Thinc is designed to make easy.

with Model.define_operators({'>>': chain, '**': clone, '|': concatenate}):
    model = (
        add_eol_markers('EOL')
        >> flatten
        >> memoize(
            CharLSTM(char_width)
            | (normalize >> str2int >> Embed(word_width)))
        >> ExtractWindow(nW=2)
        >> BatchNorm(ReLu(hidden_width)) ** 3
        >> Softmax()
    )

Not all of these pieces are implemented yet, but hopefully this shows where we're going. The memoize function will be particularly important: in any batch of text, the common words will be very common. It's therefore important to evaluate models such as the CharLSTM once per word type per minibatch, rather than once per token.

3. Callback-based backpropagation

Most neural network libraries use a computational graph abstraction. This takes the execution away from you, so that gradients can be computed automatically. Thinc follows a style more like the autograd library, but with larger operations. Usage is as follows:

def explicit_sgd_update(X, y):
    sgd = lambda weights, gradient: weights - gradient * 0.001
    yh, finish_update = model.begin_update(X, drop=0.2)
    finish_update(y-yh, sgd)

Separating the backpropagation into three parts like this has many advantages. The interface to all models is completely uniform — there is no distinction between the top-level model you use as a predictor and the internal models for the layers. We also make concurrency simple, by making the begin_update() step a pure function, and separating the accumulation of the gradient from the action of the optimizer.

4. Class annotations

To keep the class hierarchy shallow, Thinc uses class decorators to reuse code for layer definitions. Specifically, the following decorators are available:

  • describe.attributes(): Allows attributes to be specified by keyword argument. Used especially for dimensions and parameters.
  • describe.on_init(): Allows callbacks to be specified, which will be called at the end of the __init__.py.
  • describe.on_data(): Allows callbacks to be specified, which will be called on Model.begin_training().

🛠 Changelog

Version Date Description
v7.3.1 2019-10-30 Relax dependecy requirements
v7.3.0 2019-10-28 Mish activation and experimental optimizers
v7.2.0 2019-10-20 Simpler GPU install and bug fixes
v7.1.1 2019-09-10 Support preshed v3.0.0
v7.1.0 2019-08-23 Support other CPUs, read-only arrays
v7.0.8 2019-07-11 Fix version for PyPi
v7.0.7 2019-07-11 Avoid allocating a negative shape for ngrams
v7.0.6 2019-07-11 Fix LinearModel regression
v7.0.5 2019-07-10 Bug fixes for pickle, threading, unflatten and consistency
v7.0.4 2019-03-19 Don't require thinc_gpu_ops
v7.0.3 2019-03-15 Fix pruning in beam search
v7.0.2 2019-02-23 Fix regression in linear model class
v7.0.1 2019-02-16 Fix import errors
v7.0.0 2019-02-15 Overhaul package dependencies
v6.12.1 2018-11-30 Fix msgpack pin
v6.12.0 2018-10-15 Wheels and separate GPU ops
v6.10.3 2018-07-21 Python 3.7 support and dependency updates
v6.11.2 2018-05-21 Improve GPU installation
v6.11.1 2018-05-20 Support direct linkage to BLAS libraries
v6.11.0 2018-03-16 n/a
v6.10.2 2017-12-06 Efficiency improvements and bug fixes
v6.10.1 2017-11-15 Fix GPU install and minor memory leak
v6.10.0 2017-10-28 CPU efficiency improvements, refactoring
v6.9.0 2017-10-03 Reorganize layers, bug fix to Layer Normalization
v6.8.2 2017-09-26 Fix packaging of gpu_ops
v6.8.1 2017-08-23 Fix Windows support
v6.8.0 2017-07-25 SELU layer, attention, improved GPU/CPU compatibility
v6.7.3 2017-06-05 Fix convolution on GPU
v6.7.2 2017-06-02 Bug fixes to serialization
v6.7.1 2017-06-02 Improve serialization
v6.7.0 2017-06-01 Fixes to serialization, hash embeddings and flatten ops
v6.6.0 2017-05-14 Improved GPU usage and examples
v6.5.2 2017-03-20 n/a
v6.5.1 2017-03-20 Improved linear class and Windows fix
v6.5.0 2017-03-11 Supervised similarity, fancier embedding and improvements to linear model
v6.4.0 2017-02-15 n/a
v6.3.0 2017-01-25 Efficiency improvements, argument checking and error messaging
v6.2.0 2017-01-15 Improve API and introduce overloaded operators
v6.1.3 2017-01-10 More neural network functions and training continuation
v6.1.2 2017-01-09 n/a
v6.1.1 2017-01-09 n/a
v6.1.0 2017-01-09 n/a
v6.0.0 2016-12-31 Add thinc.neural for NLP-oriented deep learning

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

thinc-7.4.3.tar.gz (1.3 MB view details)

Uploaded Source

Built Distributions

thinc-7.4.3-cp39-cp39-win_amd64.whl (903.5 kB view details)

Uploaded CPython 3.9 Windows x86-64

thinc-7.4.3-cp39-cp39-manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.9

thinc-7.4.3-cp39-cp39-macosx_10_9_x86_64.whl (991.9 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

thinc-7.4.3-cp38-cp38-win_amd64.whl (910.0 kB view details)

Uploaded CPython 3.8 Windows x86-64

thinc-7.4.3-cp38-cp38-manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.8

thinc-7.4.3-cp38-cp38-macosx_10_9_x86_64.whl (981.6 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

thinc-7.4.3-cp37-cp37m-win_amd64.whl (887.8 kB view details)

Uploaded CPython 3.7m Windows x86-64

thinc-7.4.3-cp37-cp37m-manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.7m

thinc-7.4.3-cp37-cp37m-macosx_10_9_x86_64.whl (968.6 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

thinc-7.4.3-cp36-cp36m-win_amd64.whl (889.1 kB view details)

Uploaded CPython 3.6m Windows x86-64

thinc-7.4.3-cp36-cp36m-manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.6m

thinc-7.4.3-cp36-cp36m-macosx_10_9_x86_64.whl (987.6 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

Details for the file thinc-7.4.3.tar.gz.

File metadata

  • Download URL: thinc-7.4.3.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for thinc-7.4.3.tar.gz
Algorithm Hash digest
SHA256 c98491b083165f48bda95f5533f7d9dbd3980d32ad621bfe579ff08ef625a4d3
MD5 f71d34810d0d7c318d23facb5933f93e
BLAKE2b-256 2599e21c2a1622c193b2c93a628496fea4525a0ce93e3b47f3cb06559b6ff3ee

See more details on using hashes here.

File details

Details for the file thinc-7.4.3-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: thinc-7.4.3-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 903.5 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for thinc-7.4.3-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 16002dc0feb941d4fc985cee90a0af8081190d098247d4e7f6db7d3da1ae0222
MD5 bc67085284e317dba3d66a4806104fd0
BLAKE2b-256 87e033330cd9fc0375e6ddfd3b073e6d47e9989318235efaeefd3f96f9040153

See more details on using hashes here.

File details

Details for the file thinc-7.4.3-cp39-cp39-manylinux2014_x86_64.whl.

File metadata

  • Download URL: thinc-7.4.3-cp39-cp39-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for thinc-7.4.3-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1e516f78d63ab710fcea49f0eed1c8068f2ca29ce5c6323a2a23fb8140fceb45
MD5 0bb56c51b43d8aaf4dc670aaca5d4a72
BLAKE2b-256 955e6f5f3ec587efbf24e27a1fe6e00e267d0abd4a13eddde09016909419e59d

See more details on using hashes here.

File details

Details for the file thinc-7.4.3-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: thinc-7.4.3-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 991.9 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for thinc-7.4.3-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 39405be25a5d232e4fb6e1d4830568bd826867d43878d093497c9db277f3e90f
MD5 dedee62225233811534aae245e1fdbba
BLAKE2b-256 e6a7d6b629fb3ec7dd3bd87197ca5483992669116569a339a1c4626ba5e65d5d

See more details on using hashes here.

File details

Details for the file thinc-7.4.3-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: thinc-7.4.3-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 910.0 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for thinc-7.4.3-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 d28d5b300f7e18fa143b3efba0c9321e886fa6ec36a553fac5b32f686df6584a
MD5 59099de54733a3e7eabf89431f013335
BLAKE2b-256 b8e40958d850af0dad21bbd333072e576920f5c93082ba2cb905bc50e0324ecf

See more details on using hashes here.

File details

Details for the file thinc-7.4.3-cp38-cp38-manylinux2014_x86_64.whl.

File metadata

  • Download URL: thinc-7.4.3-cp38-cp38-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for thinc-7.4.3-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 63471847f282ca2f2b2f88d3e6fb15240f4ea0ec6931549ddceb57967deeca18
MD5 f239726ddbf81f88618d8163e7fa099c
BLAKE2b-256 ba60130418e761ebce379b6b8db9681e65cf10fcfc7e12e64c1bfa7d643ab97b

See more details on using hashes here.

File details

Details for the file thinc-7.4.3-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: thinc-7.4.3-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 981.6 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for thinc-7.4.3-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 241b8c9e9e068d1728e1fb97d95bfc4a956a8eebb40c63ecbe68aad416dac26c
MD5 6147a49e1d6e22dfdb706e9c800adc9e
BLAKE2b-256 c53ec6d3b124a48e912fb7af11f2f0ea31a721fcfcfcde31d1564b2035e30ebb

See more details on using hashes here.

File details

Details for the file thinc-7.4.3-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: thinc-7.4.3-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 887.8 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for thinc-7.4.3-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 e609261414e6978692c17b9ae091925edf3361b47c8f8c086390684ce604805f
MD5 ad2147a11ebdaa22f2bcf4f6f449f9a2
BLAKE2b-256 ad014b9f8efc03978319a8919ae03b176ae0ef7d2f9b9e3bbc60bc01d5d4b9ad

See more details on using hashes here.

File details

Details for the file thinc-7.4.3-cp37-cp37m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: thinc-7.4.3-cp37-cp37m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for thinc-7.4.3-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 187b8245124305b0a709a7f7c79775742c270d6c176a3879afecdaadcfb92fb4
MD5 02a268bfdc1fdcdb1e0d4c2399b0807e
BLAKE2b-256 10dbf36c16846d98a1b386c4330d0063240fa7e16bf5c4b90cc69b3a76b666d9

See more details on using hashes here.

File details

Details for the file thinc-7.4.3-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: thinc-7.4.3-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 968.6 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for thinc-7.4.3-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 862e846033a31644be600c7f9606a965e913bcc42a45cad64a0c77c81c677bdf
MD5 471d5acf3add22bf0a06cce9882bc94e
BLAKE2b-256 1efd6af0aa300c310d08f7f3852c2cbf8995ac2b3f5b2a77c33d69404f4d3257

See more details on using hashes here.

File details

Details for the file thinc-7.4.3-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: thinc-7.4.3-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 889.1 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for thinc-7.4.3-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 9e4772c1094b2997394fe95377eb76e15c2a2f50cdb46e2351442a8a9c370146
MD5 47f9ab288d43acf9dbf59911c6d7b3ff
BLAKE2b-256 8cbb6ef14b5f5dd832f076c3052bb13502eca60acc3d1be5c2ce72e7cb16bceb

See more details on using hashes here.

File details

Details for the file thinc-7.4.3-cp36-cp36m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: thinc-7.4.3-cp36-cp36m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for thinc-7.4.3-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 312bbb18f668e190b14563c2d38928d187faaef69217ea5ff4d7e0d6e2e1f21c
MD5 33774d04e347cd18098c7fec4ef45165
BLAKE2b-256 1bc9ce2e03720a5647fd90da575325376ff258653a05f357aa970fd87e6c1a55

See more details on using hashes here.

File details

Details for the file thinc-7.4.3-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: thinc-7.4.3-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 987.6 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.7.9

File hashes

Hashes for thinc-7.4.3-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2ea3fd503974078a24a9f3d07c49d2adf4f0252530780eda38de3bf6517237e2
MD5 2b8d0141613a5854fdd84813aaf2d618
BLAKE2b-256 e1ae867192810138f0bd14b467873f364e1535b3d0c327b1382d3fba1e52635f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page