Train and deploy a sentence classifier#
Let's see great-ai in action by going over the lifecycle of a simple service.
Objectives#
- You will see how the great_ai.utilities can integrate into your Data Science workflow.
- You will use great_ai.large_file to version and store your trained model.
- You will use GreatAI to add tracing and API scaffolding to your inference function, then review the remaining deployment requirements.
Overview#
You will train a field of study (domain) classifier for scientific sentences using a Linear SVM. The training notebook's recorded run achieves a test macro F1-score of about 0.69 on the MAG sentence-classification dataset, compared with the historical SciBERT baseline of 0.6571 associated with the 2019 SciBERT work.
This is a comparison with one historical baseline. A current state-of-the-art claim would require an up-to-date benchmark against comparable systems, using the same data splits, preprocessing, and evaluation metric.
We use the same synthetic dataset derived from the Microsoft Academic Graph. The dataset is available here.
Success
You are ready to start the tutorial. Feel free to return to the summary section once you're finished.
Summary#
Training notebook#
We load and preprocess the dataset while relying on great_ai.utilities.clean for doing the heavy-lifting. Additionally, the preprocessing is parallelised using great_ai.utilities.simple_parallel_map
After training and evaluating a model, it is exported using great_ai.save_model.
Remote storage
To store your model remotely, you must set your credentials before calling save_model.
For example, to use AWS S3:
from great_ai.large_file import LargeFileS3
LargeFileS3.configure_credentials(
aws_region_name='eu-west-2',
aws_access_key_id='MY_AWS_ACCESS_KEY',
aws_secret_access_key='MY_AWS_SECRET_KEY',
large_files_bucket_name='my_bucket_for_models'
)
from great_ai import save_model
save_model(model, key='my-domain-predictor')
For more info, check out the configuration how-to page.
Deployment notebook#
We wrap an inference function in a GreatAI instance to add tracing, model loading, and API scaffolding. Evaluating the model's trustworthiness remains a separate responsibility.
from great_ai import GreatAI, use_model
from great_ai.utilities import clean
@GreatAI.create
@use_model('my-domain-predictor') #(1)
def predict_domain(sentence, model):
inputs = [clean(sentence)]
return str(model.predict(inputs)[0])
- @use_model loads and injects your model into the
predict_domainfunction'smodelargument. You can freely reference it, knowing that the function is always provided with it.
Finally, we test the model's inference function through the GreatAI dashboard. Before production, configure a suitable tracing database and storage, evaluate the model for its intended use, review the remaining best practices, and deploy the service.