{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Train a domain classifier on the [semantic scholar dataset](https://api.semanticscholar.org/corpus)\n",
"\n",
"> Part 2: train a model\n",
"\n",
"\n",
"> The blue boxes show the steps implemented in this notebook.\n",
"\n",
"In [Part 1](data.ipynb), we have cleaned and transformed our training data. We can now access this data using `great_ai.LargeFile`. Locally, it will gives us the cached version, otherwise, the latest version is downloaded from S3. \n",
"\n",
"In this part, we hyperparameter-optimise and train a simple, Naive Bayes classifier which we then export for deployment using `great_ai.save_model`."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"MODEL_KEY = \"small-domain-prediction\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load data that has been extracted in [part 1](data.ipynb)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[38;5;226m2022-06-19 15:08:22,338 | WARNING | Environment variable ENVIRONMENT is not set, defaulting to development mode ‼️\u001b[0m\n",
"\u001b[38;5;226m2022-06-19 15:08:22,338 | WARNING | The selected persistence driver (ParallelTinyDbDriver) is not recommended for production\u001b[0m\n",
"\u001b[38;5;39m2022-06-19 15:08:22,339 | INFO | Options: configured ✅\u001b[0m\n"
]
}
],
"source": [
"from great_ai import query_ground_truth\n",
"\n",
"data = query_ground_truth(\"train\")\n",
"X = [d.input for d in data for domain in d.feedback]\n",
"y = [domain for d in data for domain in d.feedback]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"alignmentgroup": "True",
"hovertemplate": "x=%{x}
y=%{y}
| \n", " | mean_fit_time | \n", "std_fit_time | \n", "mean_score_time | \n", "std_score_time | \n", "param_classifier__alpha | \n", "param_classifier__fit_prior | \n", "param_vectorizer__max_df | \n", "param_vectorizer__min_df | \n", "params | \n", "split0_test_score | \n", "split1_test_score | \n", "split2_test_score | \n", "mean_test_score | \n", "std_test_score | \n", "rank_test_score | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 7 | \n", "7.796924 | \n", "0.321314 | \n", "3.756043 | \n", "0.027860 | \n", "0.5 | \n", "False | \n", "0.05 | \n", "20 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.508013 | \n", "0.509086 | \n", "0.514455 | \n", "0.510518 | \n", "0.002818 | \n", "1 | \n", "
| 10 | \n", "8.055664 | \n", "0.206984 | \n", "3.748517 | \n", "0.088012 | \n", "0.5 | \n", "False | \n", "0.1 | \n", "20 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.503729 | \n", "0.506417 | \n", "0.511895 | \n", "0.507347 | \n", "0.003398 | \n", "2 | \n", "
| 11 | \n", "7.748360 | \n", "0.484361 | \n", "3.863216 | \n", "0.072048 | \n", "0.5 | \n", "False | \n", "0.1 | \n", "100 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.502211 | \n", "0.498949 | \n", "0.503744 | \n", "0.501635 | \n", "0.002000 | \n", "3 | \n", "
| 8 | \n", "7.400649 | \n", "0.087320 | \n", "3.658442 | \n", "0.011735 | \n", "0.5 | \n", "False | \n", "0.05 | \n", "100 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.501432 | \n", "0.493970 | \n", "0.501386 | \n", "0.498929 | \n", "0.003507 | \n", "4 | \n", "
| 19 | \n", "8.147969 | \n", "0.401980 | \n", "3.977119 | \n", "0.284028 | \n", "1 | \n", "False | \n", "0.05 | \n", "20 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.486410 | \n", "0.491891 | \n", "0.492515 | \n", "0.490272 | \n", "0.002743 | \n", "5 | \n", "
| 20 | \n", "7.472414 | \n", "0.130320 | \n", "3.771136 | \n", "0.146406 | \n", "1 | \n", "False | \n", "0.05 | \n", "100 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.486868 | \n", "0.489142 | \n", "0.492665 | \n", "0.489558 | \n", "0.002385 | \n", "6 | \n", "
| 23 | \n", "7.395585 | \n", "0.326162 | \n", "2.332031 | \n", "0.254146 | \n", "1 | \n", "False | \n", "0.1 | \n", "100 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.489489 | \n", "0.489987 | \n", "0.488543 | \n", "0.489340 | \n", "0.000599 | \n", "7 | \n", "
| 22 | \n", "7.452060 | \n", "0.162072 | \n", "2.937473 | \n", "0.116443 | \n", "1 | \n", "False | \n", "0.1 | \n", "20 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.478748 | \n", "0.485174 | \n", "0.484685 | \n", "0.482869 | \n", "0.002921 | \n", "8 | \n", "
| 6 | \n", "7.836380 | \n", "0.374669 | \n", "4.007429 | \n", "0.251199 | \n", "0.5 | \n", "False | \n", "0.05 | \n", "5 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.472793 | \n", "0.476460 | \n", "0.479583 | \n", "0.476279 | \n", "0.002775 | \n", "9 | \n", "
| 2 | \n", "7.839444 | \n", "0.174964 | \n", "3.914105 | \n", "0.379735 | \n", "0.5 | \n", "True | \n", "0.05 | \n", "100 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.469224 | \n", "0.472179 | \n", "0.476758 | \n", "0.472720 | \n", "0.003100 | \n", "10 | \n", "
| 5 | \n", "7.948454 | \n", "0.411364 | \n", "3.968444 | \n", "0.090030 | \n", "0.5 | \n", "True | \n", "0.1 | \n", "100 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.469310 | \n", "0.471916 | \n", "0.476900 | \n", "0.472708 | \n", "0.003149 | \n", "11 | \n", "
| 9 | \n", "7.373592 | \n", "0.143028 | \n", "3.777698 | \n", "0.008990 | \n", "0.5 | \n", "False | \n", "0.1 | \n", "5 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.463156 | \n", "0.466783 | \n", "0.463460 | \n", "0.464466 | \n", "0.001643 | \n", "12 | \n", "
| 1 | \n", "7.406839 | \n", "0.041973 | \n", "3.838634 | \n", "0.116634 | \n", "0.5 | \n", "True | \n", "0.05 | \n", "20 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.462315 | \n", "0.462975 | \n", "0.463192 | \n", "0.462827 | \n", "0.000373 | \n", "13 | \n", "
| 4 | \n", "7.481533 | \n", "0.224344 | \n", "3.789821 | \n", "0.098098 | \n", "0.5 | \n", "True | \n", "0.1 | \n", "20 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.457504 | \n", "0.460853 | \n", "0.459941 | \n", "0.459433 | \n", "0.001414 | \n", "14 | \n", "
| 14 | \n", "7.749725 | \n", "0.468469 | \n", "4.139534 | \n", "0.140173 | \n", "1 | \n", "True | \n", "0.05 | \n", "100 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.442930 | \n", "0.443183 | \n", "0.449577 | \n", "0.445230 | \n", "0.003076 | \n", "15 | \n", "
| 17 | \n", "7.703846 | \n", "0.357508 | \n", "4.034154 | \n", "0.265509 | \n", "1 | \n", "True | \n", "0.1 | \n", "100 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.439058 | \n", "0.443429 | \n", "0.449336 | \n", "0.443941 | \n", "0.004212 | \n", "16 | \n", "
| 18 | \n", "7.553105 | \n", "0.056077 | \n", "4.094978 | \n", "0.198813 | \n", "1 | \n", "False | \n", "0.05 | \n", "5 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.421488 | \n", "0.427530 | \n", "0.422329 | \n", "0.423782 | \n", "0.002672 | \n", "17 | \n", "
| 13 | \n", "7.438030 | \n", "0.237545 | \n", "3.915824 | \n", "0.029823 | \n", "1 | \n", "True | \n", "0.05 | \n", "20 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.404152 | \n", "0.411373 | \n", "0.406858 | \n", "0.407461 | \n", "0.002979 | \n", "18 | \n", "
| 21 | \n", "8.057189 | \n", "0.435052 | \n", "3.305222 | \n", "0.348995 | \n", "1 | \n", "False | \n", "0.1 | \n", "5 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.397182 | \n", "0.405247 | \n", "0.401505 | \n", "0.401311 | \n", "0.003295 | \n", "19 | \n", "
| 16 | \n", "7.710748 | \n", "0.559283 | \n", "4.034421 | \n", "0.073522 | \n", "1 | \n", "True | \n", "0.1 | \n", "20 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.392046 | \n", "0.397995 | \n", "0.396114 | \n", "0.395385 | \n", "0.002483 | \n", "20 | \n", "
| 0 | \n", "7.614647 | \n", "0.466252 | \n", "3.898220 | \n", "0.098618 | \n", "0.5 | \n", "True | \n", "0.05 | \n", "5 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.385156 | \n", "0.388866 | \n", "0.386509 | \n", "0.386844 | \n", "0.001533 | \n", "21 | \n", "
| 3 | \n", "8.176893 | \n", "0.252821 | \n", "4.071952 | \n", "0.265773 | \n", "0.5 | \n", "True | \n", "0.1 | \n", "5 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.371079 | \n", "0.377072 | \n", "0.374531 | \n", "0.374228 | \n", "0.002456 | \n", "22 | \n", "
| 12 | \n", "7.606435 | \n", "0.239001 | \n", "3.875793 | \n", "0.109225 | \n", "1 | \n", "True | \n", "0.05 | \n", "5 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.277031 | \n", "0.288065 | \n", "0.287913 | \n", "0.284336 | \n", "0.005166 | \n", "23 | \n", "
| 15 | \n", "8.077971 | \n", "0.733700 | \n", "4.135721 | \n", "0.235307 | \n", "1 | \n", "True | \n", "0.1 | \n", "5 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.260415 | \n", "0.267201 | \n", "0.266981 | \n", "0.264866 | \n", "0.003148 | \n", "24 | \n", "
Pipeline(steps=[('vectorizer',\n",
" TfidfVectorizer(max_df=0.05, min_df=20, sublinear_tf=True)),\n",
" ('classifier', MultinomialNB(alpha=0.5, fit_prior=False))])In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. Pipeline(steps=[('vectorizer',\n",
" TfidfVectorizer(max_df=0.05, min_df=20, sublinear_tf=True)),\n",
" ('classifier', MultinomialNB(alpha=0.5, fit_prior=False))])TfidfVectorizer(max_df=0.05, min_df=20, sublinear_tf=True)
MultinomialNB(alpha=0.5, fit_prior=False)