diff --git a/examples/simple-mag/mag-distribution.png b/examples/simple-mag/mag-distribution.png index a724ab1..c3246cc 100644 Binary files a/examples/simple-mag/mag-distribution.png and b/examples/simple-mag/mag-distribution.png differ diff --git a/examples/simple-mag/train/index.html b/examples/simple-mag/train/index.html index 8cdd2cd..65bb54d 100644 --- a/examples/simple-mag/train/index.html +++ b/examples/simple-mag/train/index.html @@ -1800,7 +1800,7 @@ This notebook shows that better results can be achieved without even using trans
import json
 from typing import Tuple
-from great_ai.utilities import clean, parallel_map
+from great_ai.utilities import clean, simple_parallel_map
 from tqdm.cli import tqdm
 
 
@@ -1810,22 +1810,22 @@ This notebook shows that better results can be achieved without even using trans
     return (clean(data_point["text"], convert_to_ascii=True), data_point["label"])
 
 
-with open("mag/train.txt", encoding="utf-8") as f:
-    training_data = list(tqdm(parallel_map(preprocess, f.readlines())))
+with open("../../tutorial/data/train.txt", encoding="utf-8") as f:
+    training_data = simple_parallel_map(preprocess, f.readlines())
 
 X_train = [d[0] for d in training_data]
 y_train = [d[1] for d in training_data]
 
 
-with open("mag/test.txt", encoding="utf-8") as f:
-    test_data = list(tqdm(parallel_map(preprocess, f.readlines())))
+with open("../../tutorial/data/test.txt", encoding="utf-8") as f:
+    test_data = simple_parallel_map(preprocess, f.readlines())
 
 X_test = [d[0] for d in test_data]
 y_test = [d[1] for d in test_data]
 
import json from typing import Tuple -from great_ai.utilities import clean, parallel_map +from great_ai.utilities import clean, simple_parallel_map from tqdm.cli import tqdm @@ -1835,15 +1835,15 @@ def preprocess(line: str) -> Tuple[str, str]: return (clean(data_point["text"], convert_to_ascii=True), data_point["label"]) -with open("mag/train.txt", encoding="utf-8") as f: - training_data = list(tqdm(parallel_map(preprocess, f.readlines()))) +with open("../../tutorial/data/train.txt", encoding="utf-8") as f: + training_data = simple_parallel_map(preprocess, f.readlines()) X_train = [d[0] for d in training_data] y_train = [d[1] for d in training_data] -with open("mag/test.txt", encoding="utf-8") as f: - test_data = list(tqdm(parallel_map(preprocess, f.readlines()))) +with open("../../tutorial/data/test.txt", encoding="utf-8") as f: + test_data = simple_parallel_map(preprocess, f.readlines()) X_test = [d[0] for d in test_data] y_test = [d[1] for d in test_data]
@@ -1868,8 +1868,8 @@ y_test = [d[1] for d in test_data]
-
84000it [00:09, 8647.60it/s] 
-22399it [00:03, 6368.63it/s]
+
100%|██████████| 84000/84000 [00:08<00:00, 9514.74it/s] 
+100%|██████████| 22399/22399 [00:02<00:00, 7728.92it/s] 
 
@@ -1900,21 +1900,45 @@ y_test = [d[1] for d in test_data] -
import pandas as pd
-from collections import Counter
-import plotly.express as px
+            
from collections import Counter
+import matplotlib.pyplot as plt
 
+domains, counts = zip(*Counter(y_train).most_common())
 
-df = pd.DataFrame(Counter(y_train).most_common(), columns=["domain", "count"])
-px.bar(df, "domain", "count", width=1200, height=400).show()
+# Configure matplotlib to have nice, high-resolution charts
+%matplotlib inline
+plt.rcParams["figure.facecolor"] = "white"
+plt.rcParams["font.size"] = 18
+plt.rcParams["figure.figsize"] = (8, 5)
+
+fig, ax = plt.subplots()
+
+plt.xticks(rotation=90)
+ax.bar(domains, counts)
+ax.set_ylabel("Count")
+fig.tight_layout()
+fig.savefig("mag-distribution.png", dpi=500)
+None
 
-
import pandas as pd -from collections import Counter -import plotly.express as px +
from collections import Counter +import matplotlib.pyplot as plt +domains, counts = zip(*Counter(y_train).most_common()) -df = pd.DataFrame(Counter(y_train).most_common(), columns=["domain", "count"]) -px.bar(df, "domain", "count", width=1200, height=400).show()
+# Configure matplotlib to have nice, high-resolution charts +%matplotlib inline +plt.rcParams["figure.facecolor"] = "white" +plt.rcParams["font.size"] = 18 +plt.rcParams["figure.figsize"] = (8, 5) + +fig, ax = plt.subplots() + +plt.xticks(rotation=90) +ax.bar(domains, counts) +ax.set_ylabel("Count") +fig.tight_layout() +fig.savefig("mag-distribution.png", dpi=500) +None
@@ -1937,6 +1961,12 @@ px.bar(df, "domain", "count", width=1200, height=400).show() +
+ +
@@ -2021,6 +2051,7 @@ def create_pipeline() -> Pipeline:
from sklearn.model_selection import GridSearchCV
+import pandas as pd
 
 optimisation_pipeline = GridSearchCV(
     create_pipeline(),
@@ -2041,6 +2072,7 @@ def create_pipeline() -> Pipeline:
 results.sort_values("rank_test_score")
 
from sklearn.model_selection import GridSearchCV +import pandas as pd optimisation_pipeline = GridSearchCV( create_pipeline(), @@ -2131,10 +2163,10 @@ results.sort_values("rank_test_score")
12 - 1.227354 - 0.011710 - 0.652844 - 0.040511 + 1.410234 + 0.165616 + 0.616949 + 0.017791 1 True 0.05 @@ -2149,10 +2181,10 @@ results.sort_values("rank_test_score") 15 - 1.279783 - 0.037969 - 0.634761 - 0.068606 + 1.356129 + 0.033539 + 0.799676 + 0.077166 1 True 0.1 @@ -2167,10 +2199,10 @@ results.sort_values("rank_test_score") 18 - 1.332854 - 0.171405 - 0.743611 - 0.109792 + 1.191132 + 0.046271 + 0.633976 + 0.009344 1 False 0.05 @@ -2185,10 +2217,10 @@ results.sort_values("rank_test_score") 21 - 1.253222 - 0.072134 - 0.612344 - 0.016771 + 1.206345 + 0.121633 + 0.494508 + 0.101456 1 False 0.1 @@ -2203,10 +2235,10 @@ results.sort_values("rank_test_score") 3 - 1.472035 - 0.080849 - 0.654935 - 0.044302 + 1.434749 + 0.077467 + 0.665522 + 0.042225 0.5 True 0.1 @@ -2221,10 +2253,10 @@ results.sort_values("rank_test_score") 0 - 1.380641 - 0.054306 - 0.739966 - 0.053385 + 1.338873 + 0.100248 + 0.791040 + 0.061094 0.5 True 0.05 @@ -2239,10 +2271,10 @@ results.sort_values("rank_test_score") 9 - 1.284987 - 0.113903 - 0.696876 - 0.003757 + 1.429841 + 0.071771 + 0.868423 + 0.097744 0.5 False 0.1 @@ -2257,10 +2289,10 @@ results.sort_values("rank_test_score") 6 - 1.291148 - 0.101837 - 0.686561 - 0.083989 + 1.320994 + 0.115772 + 0.708544 + 0.028758 0.5 False 0.05 @@ -2275,10 +2307,10 @@ results.sort_values("rank_test_score") 13 - 1.268873 - 0.042412 - 0.645649 - 0.022738 + 1.430184 + 0.068179 + 0.667534 + 0.045122 1 True 0.05 @@ -2293,10 +2325,10 @@ results.sort_values("rank_test_score") 16 - 1.147120 - 0.009335 - 0.599006 - 0.045637 + 1.230683 + 0.097298 + 0.657511 + 0.015534 1 True 0.1 @@ -2311,10 +2343,10 @@ results.sort_values("rank_test_score") 4 - 1.186988 - 0.057330 - 0.642233 - 0.078248 + 1.247198 + 0.061587 + 0.684918 + 0.085735 0.5 True 0.1 @@ -2329,10 +2361,10 @@ results.sort_values("rank_test_score") 1 - 1.413231 - 0.153288 - 0.765960 - 0.099535 + 1.367997 + 0.161019 + 0.720563 + 0.047895 0.5 True 0.05 @@ -2347,10 +2379,10 @@ results.sort_values("rank_test_score") 19 - 1.193013 - 0.079000 - 0.691768 - 0.027448 + 1.276051 + 0.053059 + 0.670412 + 0.055486 1 False 0.05 @@ -2365,10 +2397,10 @@ results.sort_values("rank_test_score") 22 - 1.043618 - 0.098733 - 0.450375 - 0.061660 + 1.098513 + 0.062989 + 0.454028 + 0.049762 1 False 0.1 @@ -2383,10 +2415,10 @@ results.sort_values("rank_test_score") 7 - 1.301459 - 0.062143 - 0.660748 - 0.056054 + 1.246671 + 0.070173 + 0.678239 + 0.061924 0.5 False 0.05 @@ -2401,10 +2433,10 @@ results.sort_values("rank_test_score") 10 - 1.433934 - 0.155240 - 0.636608 - 0.024064 + 1.335585 + 0.055454 + 0.714089 + 0.031715 0.5 False 0.1 @@ -2419,10 +2451,10 @@ results.sort_values("rank_test_score") 14 - 1.325535 - 0.073539 - 0.672542 - 0.085835 + 1.433829 + 0.102381 + 0.584196 + 0.020291 1 True 0.05 @@ -2437,10 +2469,10 @@ results.sort_values("rank_test_score") 17 - 1.237677 - 0.070063 - 0.651091 - 0.102538 + 1.259510 + 0.128875 + 0.561018 + 0.006103 1 True 0.1 @@ -2455,10 +2487,10 @@ results.sort_values("rank_test_score") 2 - 1.394873 - 0.105286 - 0.637073 - 0.041708 + 1.369987 + 0.103349 + 0.699614 + 0.033642 0.5 True 0.05 @@ -2473,10 +2505,10 @@ results.sort_values("rank_test_score") 5 - 1.270732 - 0.013414 - 0.620984 - 0.025393 + 1.292009 + 0.083116 + 0.621565 + 0.058068 0.5 True 0.1 @@ -2491,10 +2523,10 @@ results.sort_values("rank_test_score") 20 - 1.177219 - 0.039633 - 0.586308 - 0.044247 + 1.158813 + 0.039281 + 0.524616 + 0.016054 1 False 0.05 @@ -2509,10 +2541,10 @@ results.sort_values("rank_test_score") 8 - 1.165583 - 0.046999 - 0.603675 - 0.031774 + 1.302560 + 0.095545 + 0.709228 + 0.144463 0.5 False 0.05 @@ -2527,10 +2559,10 @@ results.sort_values("rank_test_score") 23 - 0.907388 - 0.121543 - 0.354655 - 0.023775 + 1.093018 + 0.033991 + 0.331076 + 0.005935 1 False 0.1 @@ -2545,10 +2577,10 @@ results.sort_values("rank_test_score") 11 - 1.210845 - 0.041339 - 0.653606 - 0.028117 + 1.534622 + 0.081777 + 0.649834 + 0.033149 0.5 False 0.1 @@ -2778,7 +2810,7 @@ class=" Last update: - July 11, 2022 + July 16, 2022 diff --git a/examples/simple-mag/train/train.ipynb b/examples/simple-mag/train/train.ipynb index cb4f991..75ed417 100644 --- a/examples/simple-mag/train/train.ipynb +++ b/examples/simple-mag/train/train.ipynb @@ -19,15 +19,15 @@ "name": "stderr", "output_type": "stream", "text": [ - "84000it [00:09, 8647.60it/s] \n", - "22399it [00:03, 6368.63it/s]\n" + "100%|██████████| 84000/84000 [00:08<00:00, 9514.74it/s] \n", + "100%|██████████| 22399/22399 [00:02<00:00, 7728.92it/s] \n" ] } ], "source": [ "import json\n", "from typing import Tuple\n", - "from great_ai.utilities import clean, parallel_map\n", + "from great_ai.utilities import clean, simple_parallel_map\n", "from tqdm.cli import tqdm\n", "\n", "\n", @@ -37,15 +37,15 @@ " return (clean(data_point[\"text\"], convert_to_ascii=True), data_point[\"label\"])\n", "\n", "\n", - "with open(\"mag/train.txt\", encoding=\"utf-8\") as f:\n", - " training_data = list(tqdm(parallel_map(preprocess, f.readlines())))\n", + "with open(\"../../tutorial/data/train.txt\", encoding=\"utf-8\") as f:\n", + " training_data = simple_parallel_map(preprocess, f.readlines())\n", "\n", "X_train = [d[0] for d in training_data]\n", "y_train = [d[1] for d in training_data]\n", "\n", "\n", - "with open(\"mag/test.txt\", encoding=\"utf-8\") as f:\n", - " test_data = list(tqdm(parallel_map(preprocess, f.readlines())))\n", + "with open(\"../../tutorial/data/test.txt\", encoding=\"utf-8\") as f:\n", + " test_data = simple_parallel_map(preprocess, f.readlines())\n", "\n", "X_test = [d[0] for d in test_data]\n", "y_test = [d[1] for d in test_data]" @@ -58,910 +58,35 @@ "outputs": [ { "data": { - "application/vnd.plotly.v1+json": { - "config": { - "plotlyServerURL": "https://plot.ly" - }, - "data": [ - { - "alignmentgroup": "True", - "hovertemplate": "domain=%{x}
count=%{y}", - "legendgroup": "", - "marker": { - "color": "#636efa", - "pattern": { - "shape": "" - } - }, - "name": "", - "offsetgroup": "", - "orientation": "v", - "showlegend": false, - "textposition": "auto", - "type": "bar", - "x": [ - "geography", - "politics", - "economics", - "business", - "sociology", - "medicine", - "psychology" - ], - "xaxis": "x", - "y": [ - 12145, - 12051, - 11995, - 11990, - 11977, - 11928, - 11914 - ], - "yaxis": "y" - } - ], - "layout": { - "barmode": "relative", - "height": 400, - "legend": { - "tracegroupgap": 0 - }, - "margin": { - "t": 60 - }, - "template": { - "data": { - "bar": [ - { - "error_x": { - "color": "#2a3f5f" - }, - "error_y": { - "color": "#2a3f5f" - }, - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "bar" - } - ], - "barpolar": [ - { - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "barpolar" - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "type": "carpet" - } - ], - "choropleth": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "choropleth" - } - ], - "contour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "contour" - } - ], - "contourcarpet": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "contourcarpet" - } - ], - "heatmap": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "heatmap" - } - ], - "heatmapgl": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "heatmapgl" - } - ], - "histogram": [ - { - "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "histogram" - } - ], - "histogram2d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "histogram2d" - } - ], - "histogram2dcontour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "histogram2dcontour" - } - ], - "mesh3d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "mesh3d" - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "parcoords" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ], - "scatter": [ - { - "fillpattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - }, - "type": "scatter" - } - ], - "scatter3d": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter3d" - } - ], - "scattercarpet": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattercarpet" - } - ], - "scattergeo": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergeo" - } - ], - "scattergl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergl" - } - ], - "scattermapbox": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattermapbox" - } - ], - "scatterpolar": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolar" - } - ], - "scatterpolargl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolargl" - } - ], - "scatterternary": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterternary" - } - ], - "surface": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "surface" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - }, - "type": "table" - } - ] - }, - "layout": { - "annotationdefaults": { - "arrowcolor": "#2a3f5f", - "arrowhead": 0, - "arrowwidth": 1 - }, - "autotypenumbers": "strict", - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ] - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#FFA15A", - "#19d3f3", - "#FF6692", - "#B6E880", - "#FF97FF", - "#FECB52" - ], - "font": { - "color": "#2a3f5f" - }, - "geo": { - "bgcolor": "white", - "lakecolor": "white", - "landcolor": "#E5ECF6", - "showlakes": true, - "showland": true, - "subunitcolor": "white" - }, - "hoverlabel": { - "align": "left" - }, - "hovermode": "closest", - "mapbox": { - "style": "light" - }, - "paper_bgcolor": "white", - "plot_bgcolor": "#E5ECF6", - "polar": { - "angularaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "radialaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "scene": { - "xaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "yaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "zaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - } - }, - "shapedefaults": { - "line": { - "color": "#2a3f5f" - } - }, - "ternary": { - "aaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "baxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "caxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - }, - "yaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - } - } - }, - "width": 1200, - "xaxis": { - "anchor": "y", - "domain": [ - 0, - 1 - ], - "title": { - "text": "domain" - } - }, - "yaxis": { - "anchor": "x", - "domain": [ - 0, - 1 - ], - "title": { - "text": "count" - } - } - } - } + "image/png": "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59rzJSMjAxcvXlTpS0RERO/nnXYMs7e3x8WLF7Fw4UI4OztDT08PDx8+hJ6eHlxcXLBw4UKcP38ednZ2xRY0ISEhz/vfffcdXrx4AXd3dwCvlgy7u7vjyJEjuHTpkrJfWloaVqxYgdq1a6ustunVqxeePn2qnA+SY8GCBShTpgx69uypvNezZ09IkoQFCxao9F2+fDmePn2KPn36FPVtEhERlXrvfLaOgYEBfH19lRuVlbTp06fj9OnTaN++PWrWrIm0tDTs2bMHhw8fRqtWrVRyzZo1CwcPHsRHH32Eb7/9FhUrVsTy5ctx7949/Pbbb8oN2IBXe5SsXr0afn5+iI2NRf369bFnzx5s374dkydPhrW1tbKvg4MDRowYgcWLF6N79+7o0qWLcofYtm3bcgM2IiIiNXivg//k0K5dO/z7779Ys2YNEhISoKenh9q1a2PGjBnw8/NTGU6yt7fHyZMnMX78eMyePRtZWVlo1qwZ9u3bl2tDuXLlyiEyMhKTJ0/Gxo0bkZCQADs7OyxatAgjRozIlWPBggWwtrZGaGgofvvtN5ibm8PX1xdTp07l1vVERERqoDXFiYeHBzw8PN65f/369d+6wiiHqakpFi9ejMWLF7+1r56eHvz9/d9paTUREREVHj/qExERkUZhcUJEREQahcUJERERaRQWJ0RERKRRWJwQERGRRmFxQkRERBqFxQkRERFpFBYnREREpFFYnBAREZFGYXFCREREGoXFCREREWkUFidERESkUVicEBERkUZhcUJEREQahcUJERERaRQWJ0RERKRRWJwQERGRRmFxQkRERBqFxQkRERFpFBYnREREpFFYnBAREZFGYXFCREREGoXFCREREWkUFidERESkUVicEBERkUZhcUJEREQahcUJERERaRQWJ0RERKRRWJwQERGRRmFxQkRERBqFxQkRERFpFBYnREREpFFYnBAREZFGYXFCREREGoXFCREREWkUFidERESkUVicEBERkUZhcUJEREQahcUJERERaRQWJ0RERKRRWJwQERGRRmFxQkRERBqFxQkRERFpFBYnREREpFFYnBAREZFGYXFCREREGoXFCREREWkUFidERESkUVicEBERkUZhcUJEREQahcUJERERaRQWJ0RERKRRWJwQERGRRmFxQkRERBqFxQkRERFpFBYnREREpFFYnBAREZFG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", + "text/plain": [ + "
" + ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ - "import pandas as pd\n", "from collections import Counter\n", - "import plotly.express as px\n", + "import matplotlib.pyplot as plt\n", "\n", + "domains, counts = zip(*Counter(y_train).most_common())\n", "\n", - "df = pd.DataFrame(Counter(y_train).most_common(), columns=[\"domain\", \"count\"])\n", - "px.bar(df, \"domain\", \"count\", width=1200, height=400).show()" + "# Configure matplotlib to have nice, high-resolution charts\n", + "%matplotlib inline\n", + "plt.rcParams[\"figure.facecolor\"] = \"white\"\n", + "plt.rcParams[\"font.size\"] = 18\n", + "plt.rcParams[\"figure.figsize\"] = (8, 5)\n", + "\n", + "fig, ax = plt.subplots()\n", + "\n", + "plt.xticks(rotation=90)\n", + "ax.bar(domains, counts)\n", + "ax.set_ylabel(\"Count\")\n", + "fig.tight_layout()\n", + "fig.savefig(\"mag-distribution.png\", dpi=500)\n", + "None" ] }, { @@ -1037,10 +162,10 @@ " \n", " \n", " 12\n", - " 1.227354\n", - " 0.011710\n", - " 0.652844\n", - " 0.040511\n", + " 1.410234\n", + " 0.165616\n", + " 0.616949\n", + " 0.017791\n", " 1\n", " True\n", " 0.05\n", @@ -1055,10 +180,10 @@ " \n", " \n", " 15\n", - " 1.279783\n", - " 0.037969\n", - " 0.634761\n", - " 0.068606\n", + " 1.356129\n", + " 0.033539\n", + " 0.799676\n", + " 0.077166\n", " 1\n", " True\n", " 0.1\n", @@ -1073,10 +198,10 @@ " \n", " \n", " 18\n", - " 1.332854\n", - " 0.171405\n", - " 0.743611\n", - " 0.109792\n", + " 1.191132\n", + " 0.046271\n", + " 0.633976\n", + " 0.009344\n", " 1\n", " False\n", " 0.05\n", @@ -1091,10 +216,10 @@ " \n", " \n", " 21\n", - " 1.253222\n", - " 0.072134\n", - " 0.612344\n", - " 0.016771\n", + " 1.206345\n", + " 0.121633\n", + " 0.494508\n", + " 0.101456\n", " 1\n", " False\n", " 0.1\n", @@ -1109,10 +234,10 @@ " \n", " \n", " 3\n", - " 1.472035\n", - " 0.080849\n", - " 0.654935\n", - " 0.044302\n", + " 1.434749\n", + " 0.077467\n", + " 0.665522\n", + " 0.042225\n", " 0.5\n", " True\n", " 0.1\n", @@ -1127,10 +252,10 @@ " \n", " \n", " 0\n", - " 1.380641\n", - " 0.054306\n", - " 0.739966\n", - " 0.053385\n", + " 1.338873\n", + " 0.100248\n", + " 0.791040\n", + " 0.061094\n", " 0.5\n", " True\n", " 0.05\n", @@ -1145,10 +270,10 @@ " \n", " \n", " 9\n", - " 1.284987\n", - " 0.113903\n", - " 0.696876\n", - " 0.003757\n", + " 1.429841\n", + " 0.071771\n", + " 0.868423\n", + " 0.097744\n", " 0.5\n", " False\n", " 0.1\n", @@ -1163,10 +288,10 @@ " \n", " \n", " 6\n", - " 1.291148\n", - " 0.101837\n", - " 0.686561\n", - " 0.083989\n", + " 1.320994\n", + " 0.115772\n", + " 0.708544\n", + " 0.028758\n", " 0.5\n", " False\n", " 0.05\n", @@ -1181,10 +306,10 @@ " \n", " \n", " 13\n", - " 1.268873\n", - " 0.042412\n", - " 0.645649\n", - " 0.022738\n", + " 1.430184\n", + " 0.068179\n", + " 0.667534\n", + " 0.045122\n", " 1\n", " True\n", " 0.05\n", @@ -1199,10 +324,10 @@ " \n", " \n", " 16\n", - " 1.147120\n", - " 0.009335\n", - " 0.599006\n", - " 0.045637\n", + " 1.230683\n", + " 0.097298\n", + " 0.657511\n", + " 0.015534\n", " 1\n", " True\n", " 0.1\n", @@ -1217,10 +342,10 @@ " \n", " \n", " 4\n", - " 1.186988\n", - " 0.057330\n", - " 0.642233\n", - " 0.078248\n", + " 1.247198\n", + " 0.061587\n", + " 0.684918\n", + " 0.085735\n", " 0.5\n", " True\n", " 0.1\n", @@ -1235,10 +360,10 @@ " \n", " \n", " 1\n", - " 1.413231\n", - " 0.153288\n", - " 0.765960\n", - " 0.099535\n", + " 1.367997\n", + " 0.161019\n", + " 0.720563\n", + " 0.047895\n", " 0.5\n", " True\n", " 0.05\n", @@ -1253,10 +378,10 @@ " \n", " \n", " 19\n", - " 1.193013\n", - " 0.079000\n", - " 0.691768\n", - " 0.027448\n", + " 1.276051\n", + " 0.053059\n", + " 0.670412\n", + " 0.055486\n", " 1\n", " False\n", " 0.05\n", @@ -1271,10 +396,10 @@ " \n", " \n", " 22\n", - " 1.043618\n", - " 0.098733\n", - " 0.450375\n", - " 0.061660\n", + " 1.098513\n", + " 0.062989\n", + " 0.454028\n", + " 0.049762\n", " 1\n", " False\n", " 0.1\n", @@ -1289,10 +414,10 @@ " \n", " \n", " 7\n", - " 1.301459\n", - " 0.062143\n", - " 0.660748\n", - " 0.056054\n", + " 1.246671\n", + " 0.070173\n", + " 0.678239\n", + " 0.061924\n", " 0.5\n", " False\n", " 0.05\n", @@ -1307,10 +432,10 @@ " \n", " \n", " 10\n", - " 1.433934\n", - " 0.155240\n", - " 0.636608\n", - " 0.024064\n", + " 1.335585\n", + " 0.055454\n", + " 0.714089\n", + " 0.031715\n", " 0.5\n", " False\n", " 0.1\n", @@ -1325,10 +450,10 @@ " \n", " \n", " 14\n", - " 1.325535\n", - " 0.073539\n", - " 0.672542\n", - " 0.085835\n", + " 1.433829\n", + " 0.102381\n", + " 0.584196\n", + " 0.020291\n", " 1\n", " True\n", " 0.05\n", @@ -1343,10 +468,10 @@ " \n", " \n", " 17\n", - " 1.237677\n", - " 0.070063\n", - " 0.651091\n", - " 0.102538\n", + " 1.259510\n", + " 0.128875\n", + " 0.561018\n", + " 0.006103\n", " 1\n", " True\n", " 0.1\n", @@ -1361,10 +486,10 @@ " \n", " \n", " 2\n", - " 1.394873\n", - " 0.105286\n", - " 0.637073\n", - " 0.041708\n", + " 1.369987\n", + " 0.103349\n", + " 0.699614\n", + " 0.033642\n", " 0.5\n", " True\n", " 0.05\n", @@ -1379,10 +504,10 @@ " \n", " \n", " 5\n", - " 1.270732\n", - " 0.013414\n", - " 0.620984\n", - " 0.025393\n", + " 1.292009\n", + " 0.083116\n", + " 0.621565\n", + " 0.058068\n", " 0.5\n", " True\n", " 0.1\n", @@ -1397,10 +522,10 @@ " \n", " \n", " 20\n", - " 1.177219\n", - " 0.039633\n", - " 0.586308\n", - " 0.044247\n", + " 1.158813\n", + " 0.039281\n", + " 0.524616\n", + " 0.016054\n", " 1\n", " False\n", " 0.05\n", @@ -1415,10 +540,10 @@ " \n", " \n", " 8\n", - " 1.165583\n", - " 0.046999\n", - " 0.603675\n", - " 0.031774\n", + " 1.302560\n", + " 0.095545\n", + " 0.709228\n", + " 0.144463\n", " 0.5\n", " False\n", " 0.05\n", @@ -1433,10 +558,10 @@ " \n", " \n", " 23\n", - " 0.907388\n", - " 0.121543\n", - " 0.354655\n", - " 0.023775\n", + " 1.093018\n", + " 0.033991\n", + " 0.331076\n", + " 0.005935\n", " 1\n", " False\n", " 0.1\n", @@ -1451,10 +576,10 @@ " \n", " \n", " 11\n", - " 1.210845\n", - " 0.041339\n", - " 0.653606\n", - " 0.028117\n", + " 1.534622\n", + " 0.081777\n", + " 0.649834\n", + " 0.033149\n", " 0.5\n", " False\n", " 0.1\n", @@ -1473,30 +598,30 @@ ], "text/plain": [ " mean_fit_time std_fit_time mean_score_time std_score_time \\\n", - "12 1.227354 0.011710 0.652844 0.040511 \n", - "15 1.279783 0.037969 0.634761 0.068606 \n", - "18 1.332854 0.171405 0.743611 0.109792 \n", - "21 1.253222 0.072134 0.612344 0.016771 \n", - "3 1.472035 0.080849 0.654935 0.044302 \n", - "0 1.380641 0.054306 0.739966 0.053385 \n", - "9 1.284987 0.113903 0.696876 0.003757 \n", - "6 1.291148 0.101837 0.686561 0.083989 \n", - "13 1.268873 0.042412 0.645649 0.022738 \n", - "16 1.147120 0.009335 0.599006 0.045637 \n", - "4 1.186988 0.057330 0.642233 0.078248 \n", - "1 1.413231 0.153288 0.765960 0.099535 \n", - "19 1.193013 0.079000 0.691768 0.027448 \n", - "22 1.043618 0.098733 0.450375 0.061660 \n", - "7 1.301459 0.062143 0.660748 0.056054 \n", - "10 1.433934 0.155240 0.636608 0.024064 \n", - "14 1.325535 0.073539 0.672542 0.085835 \n", - "17 1.237677 0.070063 0.651091 0.102538 \n", - "2 1.394873 0.105286 0.637073 0.041708 \n", - "5 1.270732 0.013414 0.620984 0.025393 \n", - "20 1.177219 0.039633 0.586308 0.044247 \n", - "8 1.165583 0.046999 0.603675 0.031774 \n", - "23 0.907388 0.121543 0.354655 0.023775 \n", - "11 1.210845 0.041339 0.653606 0.028117 \n", + "12 1.410234 0.165616 0.616949 0.017791 \n", + "15 1.356129 0.033539 0.799676 0.077166 \n", + "18 1.191132 0.046271 0.633976 0.009344 \n", + "21 1.206345 0.121633 0.494508 0.101456 \n", + "3 1.434749 0.077467 0.665522 0.042225 \n", + "0 1.338873 0.100248 0.791040 0.061094 \n", + "9 1.429841 0.071771 0.868423 0.097744 \n", + "6 1.320994 0.115772 0.708544 0.028758 \n", + "13 1.430184 0.068179 0.667534 0.045122 \n", + "16 1.230683 0.097298 0.657511 0.015534 \n", + "4 1.247198 0.061587 0.684918 0.085735 \n", + "1 1.367997 0.161019 0.720563 0.047895 \n", + "19 1.276051 0.053059 0.670412 0.055486 \n", + "22 1.098513 0.062989 0.454028 0.049762 \n", + "7 1.246671 0.070173 0.678239 0.061924 \n", + "10 1.335585 0.055454 0.714089 0.031715 \n", + "14 1.433829 0.102381 0.584196 0.020291 \n", + "17 1.259510 0.128875 0.561018 0.006103 \n", + "2 1.369987 0.103349 0.699614 0.033642 \n", + "5 1.292009 0.083116 0.621565 0.058068 \n", + "20 1.158813 0.039281 0.524616 0.016054 \n", + "8 1.302560 0.095545 0.709228 0.144463 \n", + "23 1.093018 0.033991 0.331076 0.005935 \n", + "11 1.534622 0.081777 0.649834 0.033149 \n", "\n", " param_classifier__alpha param_classifier__fit_prior \\\n", "12 1 True \n", @@ -1636,6 +761,7 @@ ], "source": [ "from sklearn.model_selection import GridSearchCV\n", + "import pandas as pd\n", "\n", "optimisation_pipeline = GridSearchCV(\n", " create_pipeline(),\n", diff --git a/examples/simple/data/data.ipynb b/examples/simple/data/data.ipynb index 0835917..30c437b 100644 --- a/examples/simple/data/data.ipynb +++ b/examples/simple/data/data.ipynb @@ -87,7 +87,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 4/4 [04:42<00:00, 70.62s/it] \n" + "100%|██████████| 4/4 [04:22<00:00, 65.51s/it] \n" ] } ], @@ -103,10 +103,11 @@ " unchunk,\n", ")\n", "\n", + "\n", "def preprocess_chunk(chunk_key: str) -> List[Tuple[str, List[str]]]:\n", " response = urllib.request.urlopen(\n", " f\"https://s3-us-west-2.amazonaws.com/ai2-s2-research-public/\"\n", - " \"open-corpus/2022-02-01/{chunk_key}\"\n", + " f\"open-corpus/2022-02-01/{chunk_key}\"\n", " ) # a gzipped JSON Lines file\n", "\n", " decompressed = gzip.decompress(response.read())\n", @@ -165,9 +166,29 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[38;5;226mEnvironment variable ENVIRONMENT is not set, defaulting to development mode ‼️\u001b[0m\n", + "\u001b[38;5;226mCannot find credentials files, defaulting to using ParallelTinyDbDriver\u001b[0m\n", + "\u001b[38;5;226mThe selected tracing database (ParallelTinyDbDriver) is not recommended for production\u001b[0m\n", + "\u001b[38;5;226mCannot find credentials files, defaulting to using LargeFileLocal\u001b[0m\n", + "\u001b[38;5;39mGreatAI (v0.1.6): configured ✅\u001b[0m\n", + "\u001b[38;5;39m 🔩 tracing_database: ParallelTinyDbDriver\u001b[0m\n", + "\u001b[38;5;39m 🔩 large_file_implementation: LargeFileLocal\u001b[0m\n", + "\u001b[38;5;39m 🔩 is_production: False\u001b[0m\n", + "\u001b[38;5;39m 🔩 should_log_exception_stack: True\u001b[0m\n", + "\u001b[38;5;39m 🔩 prediction_cache_size: 512\u001b[0m\n", + "\u001b[38;5;39m 🔩 dashboard_table_size: 50\u001b[0m\n", + "\u001b[38;5;226mYou still need to check whether you follow all best practices before trusting your deployment.\u001b[0m\n", + "\u001b[38;5;226m> Find out more at https://se-ml.github.io/practices\u001b[0m\n" + ] + } + ], "source": [ "from great_ai import add_ground_truth\n", "\n", diff --git a/examples/simple/data/index.html b/examples/simple/data/index.html index 0187aa9..26deb18 100644 --- a/examples/simple/data/index.html +++ b/examples/simple/data/index.html @@ -2083,10 +2083,11 @@ f"""Processing {len(chunks)} out of the { unchunk, ) + def preprocess_chunk(chunk_key: str) -> List[Tuple[str, List[str]]]: response = urllib.request.urlopen( f"https://s3-us-west-2.amazonaws.com/ai2-s2-research-public/" - "open-corpus/2022-02-01/{chunk_key}" + f"open-corpus/2022-02-01/{chunk_key}" ) # a gzipped JSON Lines file decompressed = gzip.decompress(response.read()) @@ -2123,10 +2124,11 @@ from great_ai.utilities import ( unchunk, ) + def preprocess_chunk(chunk_key: str) -> List[Tuple[str, List[str]]]: response = urllib.request.urlopen( f"https://s3-us-west-2.amazonaws.com/ai2-s2-research-public/" - "open-corpus/2022-02-01/{chunk_key}" + f"open-corpus/2022-02-01/{chunk_key}" ) # a gzipped JSON Lines file decompressed = gzip.decompress(response.read()) @@ -2172,7 +2174,7 @@ preprocessed_data = unchunk(
-
100%|██████████| 4/4 [04:42<00:00, 70.62s/it] 
+
100%|██████████| 4/4 [04:22<00:00, 65.51s/it] 
 
@@ -2233,13 +2235,13 @@ preprocessed_data = unchunk( -
- -