Skip to main content

Practical Machine Learning for NLP

Project description

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.

🔮 Version 6.10 out now! Read the release notes here.

Build Status Appveyor Build Status Test Coverage Current Release Version pypi Version conda Version Thinc on Gitter Follow us on Twitter

What’s where (as of v6.9.0)

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:

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 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 Chainer as an explicit dependency — so building Thinc for GPU requires some extra steps:

export CUDA_HOME=/usr/local/cuda-8.0 # Or wherever your CUDA is
export PATH=$PATH:$CUDA_HOME/bin
pip install chainer
python -c "import cupy; assert cupy" # Check it installed
pip install thinc
python -c "import thinc.neural.gpu_ops" # Check the GPU ops were built

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

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.3

2017-01-09

n/a

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-6.12.0.tar.gz (7.1 MB view details)

Uploaded Source

Built Distributions

thinc-6.12.0-cp37-cp37m-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.7m Windows x86-64

thinc-6.12.0-cp37-cp37m-win32.whl (1.7 MB view details)

Uploaded CPython 3.7m Windows x86

thinc-6.12.0-cp37-cp37m-manylinux1_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.7m

thinc-6.12.0-cp37-cp37m-manylinux1_i686.whl (1.8 MB view details)

Uploaded CPython 3.7m

thinc-6.12.0-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.7m macOS 10.10+ intel macOS 10.10+ x86-64 macOS 10.6+ intel macOS 10.9+ intel macOS 10.9+ x86-64

thinc-6.12.0-cp36-cp36m-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.6m Windows x86-64

thinc-6.12.0-cp36-cp36m-win32.whl (1.7 MB view details)

Uploaded CPython 3.6m Windows x86

thinc-6.12.0-cp36-cp36m-manylinux1_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.6m

thinc-6.12.0-cp36-cp36m-manylinux1_i686.whl (1.8 MB view details)

Uploaded CPython 3.6m

thinc-6.12.0-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.6m macOS 10.10+ intel macOS 10.10+ x86-64 macOS 10.6+ intel macOS 10.9+ intel macOS 10.9+ x86-64

thinc-6.12.0-cp35-cp35m-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.5m Windows x86-64

thinc-6.12.0-cp35-cp35m-win32.whl (1.7 MB view details)

Uploaded CPython 3.5m Windows x86

thinc-6.12.0-cp35-cp35m-manylinux1_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.5m

thinc-6.12.0-cp35-cp35m-manylinux1_i686.whl (1.8 MB view details)

Uploaded CPython 3.5m

thinc-6.12.0-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.5m macOS 10.10+ intel macOS 10.10+ x86-64 macOS 10.6+ intel macOS 10.9+ intel macOS 10.9+ x86-64

thinc-6.12.0-cp27-cp27mu-manylinux1_x86_64.whl (1.9 MB view details)

Uploaded CPython 2.7mu

thinc-6.12.0-cp27-cp27mu-manylinux1_i686.whl (1.8 MB view details)

Uploaded CPython 2.7mu

thinc-6.12.0-cp27-cp27m-win_amd64.whl (1.8 MB view details)

Uploaded CPython 2.7m Windows x86-64

thinc-6.12.0-cp27-cp27m-win32.whl (1.7 MB view details)

Uploaded CPython 2.7m Windows x86

thinc-6.12.0-cp27-cp27m-manylinux1_x86_64.whl (1.9 MB view details)

Uploaded CPython 2.7m

thinc-6.12.0-cp27-cp27m-manylinux1_i686.whl (1.8 MB view details)

Uploaded CPython 2.7m

thinc-6.12.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (2.6 MB view details)

Uploaded CPython 2.7m macOS 10.10+ intel macOS 10.10+ x86-64 macOS 10.6+ intel macOS 10.9+ intel macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: thinc-6.12.0.tar.gz
  • Upload date:
  • Size: 7.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0.tar.gz
Algorithm Hash digest
SHA256 757ae2d54250e30919aa3171a64c801f28ac74446e8b9fc44a32e7b31170cd51
MD5 3af6e6b0bbf80af04e6d0d6ee606644b
BLAKE2b-256 a4f3a930b0172244234f8d7ed23202983197bf6c451946ce4517b5900ec6d74f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: thinc-6.12.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 9e3973042edda691d4edbfcf36d88b60403eb4f3219db8f6f43b716c41c814c7
MD5 b388585f3379a40baee5e1f34e0d9978
BLAKE2b-256 c416cb94e2f8e5b95e81eb52565abd054df4b7f4099bff993402d9b1d1df34eb

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp37-cp37m-win32.whl.

File metadata

  • Download URL: thinc-6.12.0-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 2cec30fa1072aff0e765e4e030498630ac01eb133054819ef68d0d26ed3ad30c
MD5 488a5c40f0b73d7b5aef4cb52cdd57de
BLAKE2b-256 5867b83642b2c074fc86a44c539b396578c480c39c30e4e3670753d4d166cb13

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: thinc-6.12.0-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 8828a4068be4d256bad9564f1dd64813266e248e4735378c73b783165ebd4528
MD5 a3540a9357759ba379ecea1e01b05a2e
BLAKE2b-256 f850a7f6f4167dc29951e387fea5756bae79fe444e38193ee84530c964201240

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp37-cp37m-manylinux1_i686.whl.

File metadata

  • Download URL: thinc-6.12.0-cp37-cp37m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 be7173fee70022e77c82b785d62eeeb7b19f9a6d590d75864ec11c93e450b8d1
MD5 86a2d7a9518ce93d718e29f2d058b665
BLAKE2b-256 a72225f0c2a6a6446c73029a95a10665dd5928e5997b520402b9fff92c25d181

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for thinc-6.12.0-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 68fc772c8b05e93e0b0f08e168cf651d14c77c61bafbfdc294a8898b9846bd26
MD5 f6375e66b246bea7a2a57022b5f2452b
BLAKE2b-256 4394c7f7e4e1db8f4e3df905b9d3cb66e7a561c2a15f35e4e19f50d328b4058f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: thinc-6.12.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 957496822ec6d10378842fa0f21fa8bfa5facc154c0cde8cd6ddcfa963faca8d
MD5 fdd30f2498c136c91a6b186a4b78231a
BLAKE2b-256 dd093c7dbb8a3af8d0c4c183ca2e52641dc8dafbec5fb64e587890eba5b593dd

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp36-cp36m-win32.whl.

File metadata

  • Download URL: thinc-6.12.0-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 256534fa9e7e54786bb2e9ec938523a4aa073ad1c1326b8af08e859ebbe6b181
MD5 1685255b9f95a733173c67929c6aa496
BLAKE2b-256 c8a70de353e929fa355923db9b3edc52aef2c234b4bedbf1260b572068e33af3

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: thinc-6.12.0-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 b7483c0dc417141d5886329e0d4d5eeef98dde9da47b498bd8f93c76d1ae2fb5
MD5 b59ac309bb244f7812ee2d7d0a29b81d
BLAKE2b-256 1f18e320bfc57c20df39cc5ffa1915c7b5402a9038f290ddd85b5b72689bd57a

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp36-cp36m-manylinux1_i686.whl.

File metadata

  • Download URL: thinc-6.12.0-cp36-cp36m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 d71e64018a36156a50992383002d6bc8bd3a509519f7c5649788300ebd7f91a8
MD5 bb293531744a82b02d2e8ef17aca4692
BLAKE2b-256 77f9f1a6965798cd74d18cc0efda742da3bb462ffa9c7f5bdd297fffe60a75aa

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for thinc-6.12.0-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 b625692ef32fd1d04ffb6cefc3a3910aec7cf28a346652adbdbba17c7322c02d
MD5 11fcce3380ca9b01e29d84a476a2147a
BLAKE2b-256 b306b0ea04f8fa16fa95d3c2763e9725324d40957441a7ce5b51c63984efa1bd

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: thinc-6.12.0-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 076c2804d7c251b8b53dca04b7d6e28fccf6e193cdc9f77cc13cd5e193a907ea
MD5 6f431b3e0b98f06e8995cdb8ec581408
BLAKE2b-256 f891e4dde9c107d10adff7386e1ea1cc17ba435e67b738e3fa6e9146ade627ce

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp35-cp35m-win32.whl.

File metadata

  • Download URL: thinc-6.12.0-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.5m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 03888366f61d59b71f8270c7383ebbd8b7a05369c60c08585f8c64e5301c73ef
MD5 657a00d154feda1ded4c375090a6ab8c
BLAKE2b-256 de38307ebf05996c0d1abc665a02f1456a83f42a38d514bd4a832c2f22fe88c1

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: thinc-6.12.0-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 f8c5b71e30383edd782957bf7f4098a0a3a347b7f631bf38e9e2d89db445e530
MD5 777a9bc5244fd121b13b77ea47192a5b
BLAKE2b-256 e341c072537c49900db582d0b4fab943d819b420db891d767c858a0aa36ee169

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp35-cp35m-manylinux1_i686.whl.

File metadata

  • Download URL: thinc-6.12.0-cp35-cp35m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 49f9f2a8189f818d3a68d585dfa1d5ba1ee1dae8536c723f2662f846f826f02d
MD5 a7d3b02224d7c58fc34ca21f64c2b96d
BLAKE2b-256 1fbc36a05ee43962448be94fb77c892b9abec5a515de535a7b1740cf2622a0bf

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for thinc-6.12.0-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 5af682d61bce995d369dc6f1eec9f960ae3b68823b4921ca9989ce4b1f1788e1
MD5 829291aadf298c9f72231d7a06765d58
BLAKE2b-256 7e197c0cfc666ed4d07e7158d2ab377127431641152209b8c094d2d11bc38672

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp27-cp27mu-manylinux1_x86_64.whl.

File metadata

  • Download URL: thinc-6.12.0-cp27-cp27mu-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 2.7mu
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 ae6f7e3231968deaa508b73a1513bd5f0c0b4bfb97e014b94ac5665bad0e3050
MD5 643080668289d3ae3bed8da43a81368e
BLAKE2b-256 d2c02d47b78d66fe5d6c405e4b8739ddae3788ce537675de2675f8eb69eab158

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp27-cp27mu-manylinux1_i686.whl.

File metadata

  • Download URL: thinc-6.12.0-cp27-cp27mu-manylinux1_i686.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 2.7mu
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp27-cp27mu-manylinux1_i686.whl
Algorithm Hash digest
SHA256 8e03914a8e7c10b6ffd7485c1356ba4b754a7c79670e88920c9f0093bbc52945
MD5 b03aef25235137ddddc00c8807c8c20d
BLAKE2b-256 2af556e791ef89ad86f5c24e7fda0794c0de8c3caa67b8c2c3de2e35495c8760

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp27-cp27m-win_amd64.whl.

File metadata

  • Download URL: thinc-6.12.0-cp27-cp27m-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 2.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 a571fa0820c5053decfdd5c359b87c9775558946973a7cf81d601453db38d86a
MD5 3fb338a6c05c8a1c4481bd666998dd2a
BLAKE2b-256 7076999148d3c210ef48b91960df9c18bc80f1ab986803a2595bf65ed463ce0d

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp27-cp27m-win32.whl.

File metadata

  • Download URL: thinc-6.12.0-cp27-cp27m-win32.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 2.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 809090926f4c65a2d715b6ccda78353e12f576e2ac130183abef6771a5f528f1
MD5 87018a182c29af5dabe801612401c504
BLAKE2b-256 39d2d0c786400344cfe68c0940f16b3e23f3f1e8f8cab498cf7f87619e51c27a

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp27-cp27m-manylinux1_x86_64.whl.

File metadata

  • Download URL: thinc-6.12.0-cp27-cp27m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 2.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 6201b033f2a31829383fa029c2a5aae0b91ac36669507599bde2cde87047d18d
MD5 490d6513c5fe756b5a428efa36293328
BLAKE2b-256 c52d3ab6269c6dd72284d9f0ee486470777d5fb9f86049717e4dca106d4b3a27

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp27-cp27m-manylinux1_i686.whl.

File metadata

  • Download URL: thinc-6.12.0-cp27-cp27m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 2.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for thinc-6.12.0-cp27-cp27m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 ba1368c40f74759fa2fdb10e5c7be8fadc1ee7b1e3b378d1fb753d9de769bf70
MD5 33f454c7aa09556fe8241647f245811b
BLAKE2b-256 c9351751cfa7955ee3e2c2d1a18e1a73962ac8b343b95f2f785817d02de48bee

See more details on using hashes here.

File details

Details for the file thinc-6.12.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for thinc-6.12.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 edc3a70351aa15d165a95f78b6dae61904ecaec420ea5857a15fcaed66e82695
MD5 57622e566aecd672787978b54ab787f8
BLAKE2b-256 8ea2f434b6debe86a5113e46db74b729440ddc227e3e459e50c1512d53141d6b

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