With a bit of care (and benchmarking) you can get very respectable speed. The main drawback is that the further you go, the more C knowledge you need in order to not blast your own feet off.
If you're just after a bit more performance in general, a drop in solution like pypy might be enough.
I'm curious, since most of the big libraries are already just cuda calls anyway but I'm always interested in anything to speed up the full process.
1. We recently implemented an edit tree lemmatizer for spaCy. The machine learning model predicts labels that map to edit trees. However, in order to lemmatize tokens, the trees need to be applied. I implemented all the tree wrangling in Cython to speed up processing and save memory (trees are encoded as compact C unions):
https://github.com/explosion/spaCy/blob/master/spacy/pipelin...
2. I am working on a biaffine parser for spaCy. Most implementations of biaffine parsing use a Python implementation of MST decoding, which is unfortunately quite slow. Some people have reported that decoding dominates parsing time (rather than applying an expensive transformer + biaffine layer). I have implemented MST decoding in Cython and it barely shows up in profiles:
https://github.com/explosion/spacy-experimental/blob/master/...
if you successfully use numba, probably nothing that you couldn't already do.
if you want something that lives much closer to C, it's perfect.