{
"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 11:25:08,430 | WARNING | Environment variable ENVIRONMENT is not set, defaulting to development mode ‼️\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 11:25:08,431 | INFO | Found credentials file (/data/projects/great-ai/examples/simple/mongo.ini), initialising MongodbDriver\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 11:25:08,432 | INFO | Found credentials file (/data/projects/great-ai/examples/simple/mongo.ini), initialising LargeFileMongo\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 11:25:08,432 | INFO | Settings: configured ✅\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 11:25:08,433 | INFO | 🔩 tracing_database: MongodbDriver\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 11:25:08,433 | INFO | 🔩 large_file_implementation: LargeFileMongo\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 11:25:08,434 | INFO | 🔩 is_production: False\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 11:25:08,434 | INFO | 🔩 should_log_exception_stack: True\u001b[0m\n",
"\u001b[38;5;39m2022-06-25 11:25:08,434 | INFO | 🔩 prediction_cache_size: 512\u001b[0m\n",
"\u001b[38;5;226m2022-06-25 11:25:08,435 | 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 11:25:08,435 | WARNING | > Find out more at https://se-ml.github.io/practices/\u001b[0m\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'filter': {'$and': [{'tags': 'train'}, {'feedback': {'$ne': None}}]}, 'sort': []}\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.986588 | \n", "0.050896 | \n", "1.090251 | \n", "0.135508 | \n", "0.5 | \n", "False | \n", "0.05 | \n", "20 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.459165 | \n", "0.473024 | \n", "0.475462 | \n", "0.469217 | \n", "0.007177 | \n", "1 | \n", "
| 10 | \n", "2.070333 | \n", "0.038396 | \n", "0.976315 | \n", "0.033742 | \n", "0.5 | \n", "False | \n", "0.1 | \n", "20 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.457524 | \n", "0.463575 | \n", "0.458007 | \n", "0.459702 | \n", "0.002745 | \n", "2 | \n", "
| 19 | \n", "2.049166 | \n", "0.193113 | \n", "1.064576 | \n", "0.087034 | \n", "1 | \n", "False | \n", "0.05 | \n", "20 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.441657 | \n", "0.452933 | \n", "0.451286 | \n", "0.448625 | \n", "0.004973 | \n", "3 | \n", "
| 6 | \n", "2.288145 | \n", "0.131338 | \n", "1.133445 | \n", "0.099583 | \n", "0.5 | \n", "False | \n", "0.05 | \n", "5 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.436976 | \n", "0.449693 | \n", "0.437911 | \n", "0.441527 | \n", "0.005787 | \n", "4 | \n", "
| 22 | \n", "1.872234 | \n", "0.072997 | \n", "0.748070 | \n", "0.085882 | \n", "1 | \n", "False | \n", "0.1 | \n", "20 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.432322 | \n", "0.438805 | \n", "0.428209 | \n", "0.433112 | \n", "0.004362 | \n", "5 | \n", "
| 11 | \n", "2.067691 | \n", "0.126923 | \n", "0.910947 | \n", "0.078748 | \n", "0.5 | \n", "False | \n", "0.1 | \n", "100 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.426436 | \n", "0.429182 | \n", "0.437410 | \n", "0.431009 | \n", "0.004662 | \n", "6 | \n", "
| 23 | \n", "1.847330 | \n", "0.147504 | \n", "0.495354 | \n", "0.018589 | \n", "1 | \n", "False | \n", "0.1 | \n", "100 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.422130 | \n", "0.430875 | \n", "0.430829 | \n", "0.427945 | \n", "0.004112 | \n", "7 | \n", "
| 9 | \n", "2.071489 | \n", "0.256086 | \n", "1.055936 | \n", "0.037198 | \n", "0.5 | \n", "False | \n", "0.1 | \n", "5 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.416746 | \n", "0.425938 | \n", "0.417381 | \n", "0.420022 | \n", "0.004192 | \n", "8 | \n", "
| 20 | \n", "1.776546 | \n", "0.064677 | \n", "0.888485 | \n", "0.093302 | \n", "1 | \n", "False | \n", "0.05 | \n", "100 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.413441 | \n", "0.417122 | \n", "0.427196 | \n", "0.419253 | \n", "0.005814 | \n", "9 | \n", "
| 8 | \n", "2.015992 | \n", "0.062583 | \n", "0.974434 | \n", "0.082582 | \n", "0.5 | \n", "False | \n", "0.05 | \n", "100 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.412522 | \n", "0.410409 | \n", "0.425047 | \n", "0.415993 | \n", "0.006460 | \n", "10 | \n", "
| 18 | \n", "2.032050 | \n", "0.104313 | \n", "0.969210 | \n", "0.070997 | \n", "1 | \n", "False | \n", "0.05 | \n", "5 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.392393 | \n", "0.396143 | \n", "0.386439 | \n", "0.391659 | \n", "0.003996 | \n", "11 | \n", "
| 1 | \n", "2.307611 | \n", "0.142902 | \n", "1.102178 | \n", "0.078755 | \n", "0.5 | \n", "True | \n", "0.05 | \n", "20 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.385834 | \n", "0.392225 | \n", "0.366549 | \n", "0.381536 | \n", "0.010914 | \n", "12 | \n", "
| 4 | \n", "1.876958 | \n", "0.050648 | \n", "1.031975 | \n", "0.029341 | \n", "0.5 | \n", "True | \n", "0.1 | \n", "20 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.377309 | \n", "0.384224 | \n", "0.366632 | \n", "0.376055 | \n", "0.007236 | \n", "13 | \n", "
| 21 | \n", "1.897479 | \n", "0.094903 | \n", "0.740516 | \n", "0.143821 | \n", "1 | \n", "False | \n", "0.1 | \n", "5 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.360551 | \n", "0.366311 | \n", "0.350439 | \n", "0.359101 | \n", "0.006561 | \n", "14 | \n", "
| 5 | \n", "1.824982 | \n", "0.038113 | \n", "0.960814 | \n", "0.041330 | \n", "0.5 | \n", "True | \n", "0.1 | \n", "100 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.347831 | \n", "0.350708 | \n", "0.349963 | \n", "0.349501 | \n", "0.001219 | \n", "15 | \n", "
| 2 | \n", "2.151446 | \n", "0.120440 | \n", "0.887620 | \n", "0.037900 | \n", "0.5 | \n", "True | \n", "0.05 | \n", "100 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.335093 | \n", "0.340020 | \n", "0.341502 | \n", "0.338872 | \n", "0.002739 | \n", "16 | \n", "
| 17 | \n", "2.004961 | \n", "0.196640 | \n", "0.953482 | \n", "0.113914 | \n", "1 | \n", "True | \n", "0.1 | \n", "100 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.300093 | \n", "0.306020 | \n", "0.305047 | \n", "0.303720 | \n", "0.002595 | \n", "17 | \n", "
| 13 | \n", "1.890709 | \n", "0.056234 | \n", "1.006219 | \n", "0.042628 | \n", "1 | \n", "True | \n", "0.05 | \n", "20 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.297119 | \n", "0.302061 | \n", "0.298975 | \n", "0.299385 | \n", "0.002038 | \n", "18 | \n", "
| 14 | \n", "2.022432 | \n", "0.201745 | \n", "0.931837 | \n", "0.047467 | \n", "1 | \n", "True | \n", "0.05 | \n", "100 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.300746 | \n", "0.291492 | \n", "0.297456 | \n", "0.296565 | \n", "0.003830 | \n", "19 | \n", "
| 0 | \n", "2.081572 | \n", "0.123875 | \n", "1.058692 | \n", "0.034084 | \n", "0.5 | \n", "True | \n", "0.05 | \n", "5 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.296667 | \n", "0.294715 | \n", "0.292144 | \n", "0.294509 | \n", "0.001852 | \n", "20 | \n", "
| 16 | \n", "1.961700 | \n", "0.108977 | \n", "0.964816 | \n", "0.089735 | \n", "1 | \n", "True | \n", "0.1 | \n", "20 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.278389 | \n", "0.287134 | \n", "0.286320 | \n", "0.283948 | \n", "0.003945 | \n", "21 | \n", "
| 3 | \n", "2.272779 | \n", "0.155897 | \n", "0.982528 | \n", "0.045744 | \n", "0.5 | \n", "True | \n", "0.1 | \n", "5 | \n", "{'classifier__alpha': 0.5, 'classifier__fit_pr... | \n", "0.275833 | \n", "0.272693 | \n", "0.278427 | \n", "0.275651 | \n", "0.002344 | \n", "22 | \n", "
| 12 | \n", "1.979826 | \n", "0.106524 | \n", "0.938829 | \n", "0.050975 | \n", "1 | \n", "True | \n", "0.05 | \n", "5 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.181309 | \n", "0.186707 | \n", "0.193406 | \n", "0.187141 | \n", "0.004948 | \n", "23 | \n", "
| 15 | \n", "1.952817 | \n", "0.107900 | \n", "0.938851 | \n", "0.048295 | \n", "1 | \n", "True | \n", "0.1 | \n", "5 | \n", "{'classifier__alpha': 1, 'classifier__fit_prio... | \n", "0.160402 | \n", "0.172025 | \n", "0.171455 | \n", "0.167960 | \n", "0.005350 | \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)