{
"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": "markdown",
"metadata": {},
"source": [
"## Load data that has been extracted in [part 1](data.ipynb)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[38;5;226m2022-06-25 14:50:29,879 | WARNING | Environment variable ENVIRONMENT is not set, defaulting to development mode ‼️\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 14:50:29,880 | INFO | Found credentials file (/data/projects/great_ai_example/mongo.ini), initialising MongodbDriver\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 14:50:29,881 | INFO | Found credentials file (/data/projects/great_ai_example/mongo.ini), initialising LargeFileMongo\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 14:50:29,881 | INFO | Settings: configured ✅\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 14:50:29,882 | INFO | 🔩 tracing_database: MongodbDriver\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 14:50:29,883 | INFO | 🔩 large_file_implementation: LargeFileMongo\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 14:50:29,883 | INFO | 🔩 is_production: False\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 14:50:29,884 | INFO | 🔩 should_log_exception_stack: True\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 14:50:29,884 | INFO | 🔩 prediction_cache_size: 512\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 14:50:29,885 | INFO | 🔩 dashboard_table_size: 50\u001b[0m\n",
"\u001b[38;5;226m2022-06-25 14:50:29,885 | WARNING | You still need to check whether you follow all best practices before trusting your deployment.\u001b[0m\n",
"\u001b[38;5;226m2022-06-25 14:50:29,885 | WARNING | > Find out more at https://se-ml.github.io/practices/\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": 2,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"alignmentgroup": "True",
"hovertemplate": "domain=%{x}
count=%{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", "1.962260 | \n", "0.147449 | \n", "0.935357 | \n", "0.063659 | \n", "0.5 | \n", "False | \n", "0.05 | \n", "20 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.485030 | \n", "0.463849 | \n", "0.481840 | \n", "0.476906 | \n", "0.009324 | \n", "1 | \n", "
| 10 | \n", "1.942605 | \n", "0.111027 | \n", "0.952361 | \n", "0.066812 | \n", "0.5 | \n", "False | \n", "0.1 | \n", "20 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.482890 | \n", "0.459556 | \n", "0.479362 | \n", "0.473936 | \n", "0.010270 | \n", "2 | \n", "
| 19 | \n", "2.145152 | \n", "0.068978 | \n", "1.002291 | \n", "0.047358 | \n", "1 | \n", "False | \n", "0.05 | \n", "20 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.467330 | \n", "0.442994 | \n", "0.464302 | \n", "0.458208 | \n", "0.010829 | \n", "3 | \n", "
| 22 | \n", "1.971888 | \n", "0.126950 | \n", "0.739795 | \n", "0.071551 | \n", "1 | \n", "False | \n", "0.1 | \n", "20 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.454830 | \n", "0.422902 | \n", "0.450677 | \n", "0.442803 | \n", "0.014174 | \n", "4 | \n", "
| 6 | \n", "1.861275 | \n", "0.013389 | \n", "1.058907 | \n", "0.111122 | \n", "0.5 | \n", "False | \n", "0.05 | \n", "5 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.456127 | \n", "0.422456 | \n", "0.443827 | \n", "0.440803 | \n", "0.013912 | \n", "5 | \n", "
| 11 | \n", "1.825397 | \n", "0.105754 | \n", "0.892227 | \n", "0.057003 | \n", "0.5 | \n", "False | \n", "0.1 | \n", "100 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.438232 | \n", "0.440464 | \n", "0.422667 | \n", "0.433788 | \n", "0.007916 | \n", "6 | \n", "
| 23 | \n", "1.693333 | \n", "0.009667 | \n", "0.501491 | \n", "0.006545 | \n", "1 | \n", "False | \n", "0.1 | \n", "100 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.433915 | \n", "0.439470 | \n", "0.416031 | \n", "0.429805 | \n", "0.010001 | \n", "7 | \n", "
| 8 | \n", "2.008045 | \n", "0.145330 | \n", "0.944559 | \n", "0.155925 | \n", "0.5 | \n", "False | \n", "0.05 | \n", "100 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.436178 | \n", "0.425724 | \n", "0.418396 | \n", "0.426766 | \n", "0.007297 | \n", "8 | \n", "
| 20 | \n", "1.749200 | \n", "0.022959 | \n", "0.889532 | \n", "0.047517 | \n", "1 | \n", "False | \n", "0.05 | \n", "100 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.428215 | \n", "0.425398 | \n", "0.411051 | \n", "0.421555 | \n", "0.007516 | \n", "9 | \n", "
| 9 | \n", "1.960889 | \n", "0.098004 | \n", "0.985957 | \n", "0.080925 | \n", "0.5 | \n", "False | \n", "0.1 | \n", "5 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.430638 | \n", "0.406619 | \n", "0.420213 | \n", "0.419157 | \n", "0.009834 | \n", "10 | \n", "
| 18 | \n", "1.807799 | \n", "0.064891 | \n", "0.881872 | \n", "0.030810 | \n", "1 | \n", "False | \n", "0.05 | \n", "5 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.402402 | \n", "0.372353 | \n", "0.386189 | \n", "0.386981 | \n", "0.012280 | \n", "11 | \n", "
| 1 | \n", "2.009232 | \n", "0.043125 | \n", "0.899676 | \n", "0.036977 | \n", "0.5 | \n", "True | \n", "0.05 | \n", "20 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.389797 | \n", "0.372619 | \n", "0.388358 | \n", "0.383591 | \n", "0.007781 | \n", "12 | \n", "
| 4 | \n", "1.868087 | \n", "0.094739 | \n", "1.005353 | \n", "0.101466 | \n", "0.5 | \n", "True | \n", "0.1 | \n", "20 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.379323 | \n", "0.364667 | \n", "0.379060 | \n", "0.374350 | \n", "0.006848 | \n", "13 | \n", "
| 21 | \n", "1.958430 | \n", "0.039639 | \n", "0.890963 | \n", "0.012546 | \n", "1 | \n", "False | \n", "0.1 | \n", "5 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.366936 | \n", "0.343361 | \n", "0.363883 | \n", "0.358060 | \n", "0.010468 | \n", "14 | \n", "
| 5 | \n", "1.940692 | \n", "0.018320 | \n", "0.898865 | \n", "0.030651 | \n", "0.5 | \n", "True | \n", "0.1 | \n", "100 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.354850 | \n", "0.349237 | \n", "0.342737 | \n", "0.348941 | \n", "0.004950 | \n", "15 | \n", "
| 2 | \n", "1.855691 | \n", "0.029506 | \n", "0.866492 | \n", "0.038048 | \n", "0.5 | \n", "True | \n", "0.05 | \n", "100 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.349005 | \n", "0.341832 | \n", "0.328617 | \n", "0.339818 | \n", "0.008444 | \n", "16 | \n", "
| 17 | \n", "1.798559 | \n", "0.103497 | \n", "0.888273 | \n", "0.069050 | \n", "1 | \n", "True | \n", "0.1 | \n", "100 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.312332 | \n", "0.297655 | \n", "0.307471 | \n", "0.305819 | \n", "0.006104 | \n", "17 | \n", "
| 14 | \n", "2.016041 | \n", "0.232138 | \n", "0.967630 | \n", "0.146144 | \n", "1 | \n", "True | \n", "0.05 | \n", "100 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.304942 | \n", "0.296921 | \n", "0.297121 | \n", "0.299661 | \n", "0.003735 | \n", "18 | \n", "
| 13 | \n", "1.829513 | \n", "0.112645 | \n", "0.885848 | \n", "0.027726 | \n", "1 | \n", "True | \n", "0.05 | \n", "20 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.301539 | \n", "0.285396 | \n", "0.297272 | \n", "0.294736 | \n", "0.006830 | \n", "19 | \n", "
| 0 | \n", "1.905362 | \n", "0.018052 | \n", "0.885552 | \n", "0.023985 | \n", "0.5 | \n", "True | \n", "0.05 | \n", "5 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.295635 | \n", "0.276759 | \n", "0.296270 | \n", "0.289555 | \n", "0.009052 | \n", "20 | \n", "
| 16 | \n", "1.793688 | \n", "0.049995 | \n", "0.921301 | \n", "0.060980 | \n", "1 | \n", "True | \n", "0.1 | \n", "20 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.286746 | \n", "0.272260 | \n", "0.277084 | \n", "0.278696 | \n", "0.006023 | \n", "21 | \n", "
| 3 | \n", "2.078568 | \n", "0.045549 | \n", "0.963691 | \n", "0.048281 | \n", "0.5 | \n", "True | \n", "0.1 | \n", "5 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.276452 | \n", "0.265509 | \n", "0.268949 | \n", "0.270303 | \n", "0.004569 | \n", "22 | \n", "
| 12 | \n", "1.839506 | \n", "0.048910 | \n", "0.921812 | \n", "0.010374 | \n", "1 | \n", "True | \n", "0.05 | \n", "5 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.183196 | \n", "0.186144 | \n", "0.180323 | \n", "0.183221 | \n", "0.002376 | \n", "23 | \n", "
| 15 | \n", "1.909279 | \n", "0.110639 | \n", "1.056087 | \n", "0.129738 | \n", "1 | \n", "True | \n", "0.1 | \n", "5 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.165277 | \n", "0.165840 | \n", "0.167088 | \n", "0.166068 | \n", "0.000757 | \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)