Let’s Work Together



BlazingText : An optimized Word2vec and Text classification algorithm

BlazingText, an Amazon SageMaker algorithm, is a highly optimised Word2vec and Text Classification algorithm.

Word2vec algorithm maps each word to high-quality distributed vectors using a neural networks model . The resulting vector representation of a word is called a word embedding. If two words are semantically similar then their vectors will also be close to each other(in n-dimesional plane), this is how word embeddings capture the semantic relationships between the words. Word2vec algorithm is useful for NLP tasks, such as sentiment analysis, recommendation systems, named entity recognition, web translation service etc.

Text classification algorithms assigns a set of pre-defined categories to open-ended text. It can be used to organise and categorise almost all kind of text. Some applications of Text Classification is to perform web searches, information retrieval, ranking, and document classification.

So, BlazingText can be used for Supervised(Text Classification) and Unsupervised(Word2vec) learning both, for Natural Language Processing(NLP) tasks.

BlazingText vs Other Word2vec Algorithms

The problem we normally faced with most of the implementations of Word2vec algorithm is that, they are not optimized for multi-core CPU architectures and hence it becomes very difficult to scale to large datasets. Some implementations of Word2vec have also attempted to leverage GPU parallelization but at the cost of accuracy and scalability (including the original C implementation by Mikolov et al. and FastText by Facebook).

With the BlazingText algorithm, we can scale to large datasets easily. We can train a model on more than a billion words in a couple of minutes using a multi-core CPU or a GPU. Also, we achieve performance on par with the state-of-the-art deep learning text classification algorithms.

Features of BlazingText

  • BlazingText makes use of GPU acceleration with custom CUDA  kernels.
  • It can achieve a training speed of up to 43M words/sec on 8 GPUs, which is a 9x speedup over 8-threaded CPU implementations, with minimal effect on the quality of the embeddings.
  • BlazingText is also very good in generating meaningful vectors for out-of-vocabulary(OOV) words by representing their vectors as the sum of the character n-gram(subword) vectors
  • We can use any of the training architectures between Skip-gram and continuous bag-of-words (CBOW), as per our requirement (similar to other Word2vec algorithms).
  • In addition to skip-gram and CBOW, BlazingText also provide one more mode i.e. batch_skipgram, which is very effective for faster training and distributed computation across multiple CPU modes. It will create mini-batches using the Negative Sample Sharing strategy to convert level-1 BLAS(Basic Linear Algebra Subprograms) operations into level-3 BLAS operations. This efficiently leverages the multiply-add instructions of modern architectures.

Input to the BlazingText

BlazingText expects a space-separated tokens file, each line in the file should contain a single sentence. We can only have one file for input, if you need to train on multiple text files, concatenate them into one file and upload the file in the respective channel.

For Word2Vec training, we need to upload the file under the train channel. The file should contain a training sentence per line.

For Text Classification(supervised) training, we can train with file mode or with the augmented manifest text format.

Model Training

File Mode

For supervised mode, the training/validation file should contain a training sentence per line along with the labels. Labels are words that are prefixed by the string __label__.

Here is an example of a training/validation file:

  • __label__1  linux ready for prime time , intel says , despite all the linux hype , the open-source movement has yet to make a huge splash in the desktop market . that may be about to change , thanks to chipmaking giant intel corp .
  • __label__2  bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly as the indian skippers return to international cricket was short lived .

Augmented Manifest Text Format

The supervised mode also supports the augmented manifest format, which enables you to do training in pipe mode without needing to create RecordIO files. While using the format, an S3 manifest file needs to be generated that contains the list of sentences and their corresponding labels.

  • {“source”:”linux ready for prime time , intel says , despite all the linux hype”, “label”:1}
  • {“source”:”bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly”, “label”:2}

Model Artifacts and Inference

Text Classification Algorithm

Training with supervised outputs creates a model.bin file that can be consumed by BlazingText hosting. For inference, the BlazingText model accepts a JSON file containing a list of sentences and returns a list of corresponding predicted labels and probability scores. Each sentence is expected to be a string with space-separated tokens, words, or both.

Sample JSON Request

Mime-type: application/json

By default, the server returns only one prediction, the one with the highest probability. For retrieving the top k predictions, you can set k in the configuration, as follows:

Word2vec Algorithm

For Word2Vec training, the model artifacts consist of vectors.txt, which contains words-to-vectors mapping, and vectors.bin, a binary used by BlazingText for hosting, inference, or both. vectors.txt stores the vectors in a format that is compatible with other tools like Gensim and Spacy.

If the evaluation parameter is set to True, an additional file, eval.json, is created. This file contains the similarity evaluation results (using Spearman’s rank correlation coefficients) on WS-353 dataset. The number of words from the WS-353 dataset that aren’t there in the training corpus are reported.

For inference requests, the model accepts a JSON file containing a list of strings and returns a list of vectors. If the word is not found in vocabulary, inference returns a vector of zeros. If subwords is set to True during training, the model is able to generate vectors for out-of-vocabulary (OOV) words.

Sample JSON Request

Mime-type: application/json

For both supervised (text classification) and unsupervised (Word2Vec) modes, the binaries (*.bin) produced by BlazingText can be cross-consumed by fastText and vice versa. You can use binaries produced by BlazingText by fastText. Likewise, you can host the model binaries created with fastText using BlazingText.

Metrics generated by BlazingText

The BlazingText Word2Vec algorithm (skipgram, cbow, and batch_skipgram modes) reports on a single metric during training: train:mean_rho(Spearman’s rank correlation coefficients). This metric is computed on WS-353 word similarity datasets. When tuning the hyperparameter values for the Word2Vec algorithm, use this metric as the objective.

The BlazingText Text Classification algorithm (supervised mode), also reports on a single metric during training: the validation:accuracy. When tuning the hyperparameter values for the text classification algorithm, use these metrics as the objective.

Hyperparameter Tuning for the Text Classification Algorithm

We can tune an Amazon SageMaker BlazingText text classification model with the following hyperparameters.

Hyperparameter Tuning for the Text Classification Algorithm

Hyperparameter Tuning for the Word2vec Algorithm

We can tune an Amazon SageMaker BlazingText Word2Vec model with the following hyperparameters. The hyperparameters that have the greatest impact on Word2Vec objective metrics are: mode, learning_rate, window_size, vector_dim, and negative_samples.

Hyperparameter Tuning for the Word2vec Algorithm

We need to perform the hyperparameter running on the sample dataset.

In some of the use cases, mean_rho might not be the right parameter to judge the Word2vec model performance, so it’s better we calculate the model performance on our test dataset. We can locally load all the models from S3 location(generated during hyperparameter tuning) in fastText model and see how the model is performing on our dataset and see what particular combination of hyperparamters are working for our use case/dataset.

Implementation References

For Implementation of text classification we can refer this link : https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/blazingtext_text_classification_dbpedia/blazingtext_text_classification_dbpedia.ipynb

For implementation of Word2vec we can refer this link :  https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/blazingtext_word2vec_text8/blazingtext_word2vec_text8.ipynb




Add Comment