//- 💫 DOCS > USAGE > FACTS & FIGURES > OTHER LIBRARIES p | Data scientists, researchers and machine learning engineers have | converged on Python as the language for AI. This gives developers a rich | ecosystem of NLP libraries to work with. Here's how we think the pieces | fit together. //-+aside("Using spaCy with other libraries") | For details on how to use spaCy together with popular machine learning | libraries like TensorFlow, Keras or PyTorch, see the | #[+a("/usage/deep-learning") usage guide on deep learning]. +infobox +infobox-logos(["nltk", 80, 25, "http://nltk.org"]) | #[+label-inline NLTK] offers some of the same functionality as spaCy. | Although originally developed for teaching and research, its longevity | and stability has resulted in a large number of industrial users. It's | the main alternative to spaCy for tokenization and sentence segmentation. | In comparison to spaCy, NLTK takes a much more "broad church" approach – | so it has some functions that spaCy doesn't provide, at the expense of a | bit more clutter to sift through. spaCy is also much more | performance-focussed than NLTK: where the two libraries provide the same | functionality, spaCy's implementation will usually be faster and more | accurate. +infobox +infobox-logos(["gensim", 40, 40, "https://radimrehurek.com/gensim/"]) | #[+label-inline Gensim] provides unsupervised text modelling algorithms. | Although Gensim isn't a runtime dependency of spaCy, we use it to train | word vectors. There's almost no overlap between the libraries – the two | work together. +infobox +infobox-logos(["tensorflow", 35, 42, "https://www.tensorflow.org"], ["keras", 45, 45, "https://www.keras.io"]) | #[+label-inline Tensorflow / Keras] is the most popular deep learning library. | spaCy provides efficient and powerful feature extraction functionality, | that can be used as a pre-process to any deep learning library. You can | also use Tensorflow and Keras to create spaCy pipeline components, to add | annotations to the #[code Doc] object. +infobox +infobox-logos(["scikitlearn", 90, 44, "http://scikit-learn.org"]) | #[+label-inline scikit-learn] features a number of useful NLP functions, | especially for solving text classification problems using linear models | with bag-of-words features. If you know you need exactly that, it might | be better to use scikit-learn's built-in pipeline directly. However, if | you want to extract more detailed features, using part-of-speech tags, | named entity labels, or string transformations, you can use spaCy as a | pre-process in your classification system. scikit-learn also provides a | lot of experiment management and evaluation utilities that people use | alongside spaCy. +infobox +infobox-logos(["pytorch", 100, 48, "http://pytorch.org"], ["dynet", 80, 34, "http://dynet.readthedocs.io/"], ["chainer", 80, 43, "http://chainer.org"]) | #[+label-inline PyTorch, DyNet and Chainer] are dynamic neural network | libraries, which can be much easier to work with for NLP. Outside of | Google, there's a general shift among NLP researchers to both DyNet and | Pytorch. spaCy is the front-end of choice for PyTorch's | #[code torch.text] extension. You can use any of these libraries to | create spaCy pipeline components, to add annotations to the #[code Doc] | object. +infobox +infobox-logos(["allennlp", 124, 22, "http://allennlp.org"]) | #[+label-inline AllenNLP] is a new library designed to accelerate NLP | research, by providing a framework that supports modern deep learning | workflows for cutting-edge language understanding problems. AllenNLP uses | spaCy as a preprocessing component. You can also use AllenNLP to develop | spaCy pipeline components, to add annotations to the #[code Doc] object.