boblaros commited on
Commit
5ef08f2
·
verified ·
1 Parent(s): 1db87eb

Upload folder using huggingface_hub

Browse files
.DS_Store ADDED
Binary file (10.2 kB). View file
 
.ipynb_checkpoints/test_inference-checkpoint.ipynb ADDED
@@ -0,0 +1,277 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "metadata": {},
6
+ "source": [
7
+ "# Complexity Model Inference Test\n",
8
+ "\n",
9
+ "This notebook loads the saved production complexity model and its local artifacts from this folder, rebuilds the BiLSTM architecture, and runs inference on a few example sentences. It performs inference only."
10
+ ]
11
+ },
12
+ {
13
+ "cell_type": "markdown",
14
+ "metadata": {},
15
+ "source": [
16
+ "## 1. Load the local artifacts\n",
17
+ "\n",
18
+ "The code below loads the checkpoint, model config, vocabulary, and label classes directly from the current folder."
19
+ ]
20
+ },
21
+ {
22
+ "cell_type": "code",
23
+ "execution_count": null,
24
+ "metadata": {},
25
+ "outputs": [],
26
+ "source": [
27
+ "from pathlib import Path\n",
28
+ "import json\n",
29
+ "import pickle\n",
30
+ "import re\n",
31
+ "import unicodedata\n",
32
+ "\n",
33
+ "import numpy as np\n",
34
+ "import pandas as pd\n",
35
+ "import torch\n",
36
+ "import torch.nn as nn\n",
37
+ "import yaml\n",
38
+ "\n",
39
+ "MODEL_DIR = Path(\".\").resolve()\n",
40
+ "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
41
+ "\n",
42
+ "with (MODEL_DIR / \"model-config.yaml\").open(\"r\", encoding=\"utf-8\") as handle:\n",
43
+ " model_config = yaml.safe_load(handle)\n",
44
+ "\n",
45
+ "with (MODEL_DIR / \"label_classes.json\").open(\"r\", encoding=\"utf-8\") as handle:\n",
46
+ " label_classes = json.load(handle)\n",
47
+ "\n",
48
+ "with (MODEL_DIR / \"vocab.pkl\").open(\"rb\") as handle:\n",
49
+ " vocab = pickle.load(handle)\n",
50
+ "\n",
51
+ "checkpoint = torch.load(MODEL_DIR / \"best.pt\", map_location=device)\n",
52
+ "state_dict = checkpoint[\"model_state\"] if isinstance(checkpoint, dict) and \"model_state\" in checkpoint else checkpoint\n",
53
+ "embedding_matrix = state_dict[\"embedding.weight\"].detach().cpu().numpy()\n",
54
+ "artifact_files = sorted(path.name for path in MODEL_DIR.iterdir() if path.is_file())\n",
55
+ "\n",
56
+ "print(f\"Model directory: {MODEL_DIR}\")\n",
57
+ "print(f\"Device: {device}\")\n",
58
+ "print(f\"Artifacts: {artifact_files}\")\n",
59
+ "print(f\"Checkpoint keys: {list(checkpoint.keys()) if isinstance(checkpoint, dict) else 'state_dict'}\")\n",
60
+ "print(f\"Embedding matrix shape: {embedding_matrix.shape}\")\n",
61
+ "print(f\"Vocabulary size: {len(vocab)}\")\n",
62
+ "print(f\"Labels: {label_classes}\")\n"
63
+ ]
64
+ },
65
+ {
66
+ "cell_type": "markdown",
67
+ "metadata": {},
68
+ "source": [
69
+ "## 2. Recreate the model and preprocessing pipeline\n",
70
+ "\n",
71
+ "The notebook rebuilds the saved BiLSTM + additive-attention classifier and applies the lightweight text normalization used for inference."
72
+ ]
73
+ },
74
+ {
75
+ "cell_type": "code",
76
+ "execution_count": null,
77
+ "metadata": {},
78
+ "outputs": [],
79
+ "source": [
80
+ "class AdditiveAttention(nn.Module):\n",
81
+ " def __init__(self, hidden_dim: int):\n",
82
+ " super().__init__()\n",
83
+ " self.attn = nn.Linear(hidden_dim, 1, bias=False)\n",
84
+ "\n",
85
+ " def forward(self, hidden_states, mask=None):\n",
86
+ " scores = self.attn(hidden_states).squeeze(-1)\n",
87
+ " if mask is not None:\n",
88
+ " scores = scores.masked_fill(~mask, -1e9)\n",
89
+ " weights = torch.softmax(scores, dim=1)\n",
90
+ " context = (weights.unsqueeze(-1) * hidden_states).sum(dim=1)\n",
91
+ " return context, weights\n",
92
+ "\n",
93
+ "\n",
94
+ "class BiLSTMAttention(nn.Module):\n",
95
+ " def __init__(\n",
96
+ " self,\n",
97
+ " embedding_matrix: np.ndarray,\n",
98
+ " num_classes: int,\n",
99
+ " hidden_dim: int = 128,\n",
100
+ " num_layers: int = 2,\n",
101
+ " dropout: float = 0.3,\n",
102
+ " ):\n",
103
+ " super().__init__()\n",
104
+ " _, embedding_dim = embedding_matrix.shape\n",
105
+ " self.embedding = nn.Embedding.from_pretrained(\n",
106
+ " torch.tensor(embedding_matrix, dtype=torch.float32),\n",
107
+ " freeze=False,\n",
108
+ " padding_idx=0,\n",
109
+ " )\n",
110
+ " self.lstm = nn.LSTM(\n",
111
+ " input_size=embedding_dim,\n",
112
+ " hidden_size=hidden_dim,\n",
113
+ " num_layers=num_layers,\n",
114
+ " batch_first=True,\n",
115
+ " bidirectional=True,\n",
116
+ " dropout=dropout if num_layers > 1 else 0.0,\n",
117
+ " )\n",
118
+ " self.attention = AdditiveAttention(hidden_dim * 2)\n",
119
+ " self.dropout = nn.Dropout(dropout)\n",
120
+ " self.fc = nn.Linear(hidden_dim * 2, num_classes)\n",
121
+ "\n",
122
+ " def forward(self, token_ids):\n",
123
+ " mask = token_ids != 0\n",
124
+ " embeddings = self.dropout(self.embedding(token_ids))\n",
125
+ " hidden_states, _ = self.lstm(embeddings)\n",
126
+ " context, _ = self.attention(hidden_states, mask)\n",
127
+ " return self.fc(self.dropout(context))\n",
128
+ "\n",
129
+ "\n",
130
+ "DEFAULT_STOPWORDS = {\n",
131
+ " \"a\", \"an\", \"and\", \"are\", \"as\", \"at\", \"be\", \"by\", \"for\", \"from\",\n",
132
+ " \"has\", \"he\", \"in\", \"is\", \"it\", \"its\", \"of\", \"on\", \"that\", \"the\",\n",
133
+ " \"to\", \"was\", \"were\", \"will\", \"with\"\n",
134
+ "}\n",
135
+ "\n",
136
+ "try:\n",
137
+ " from nltk.corpus import stopwords\n",
138
+ " STOPWORDS = set(stopwords.words(\"english\"))\n",
139
+ "except Exception:\n",
140
+ " STOPWORDS = DEFAULT_STOPWORDS\n",
141
+ "\n",
142
+ "try:\n",
143
+ " from nltk.stem import WordNetLemmatizer\n",
144
+ " LEMMATIZER = WordNetLemmatizer()\n",
145
+ "except Exception:\n",
146
+ " LEMMATIZER = None\n",
147
+ "\n",
148
+ "\n",
149
+ "def maybe_lemmatize(token: str) -> str:\n",
150
+ " if LEMMATIZER is None:\n",
151
+ " return token\n",
152
+ " try:\n",
153
+ " return LEMMATIZER.lemmatize(token)\n",
154
+ " except Exception:\n",
155
+ " return token\n",
156
+ "\n",
157
+ "\n",
158
+ "def normalize_text(text: str) -> str:\n",
159
+ " text = str(text).lower()\n",
160
+ " text = unicodedata.normalize(\"NFKD\", text)\n",
161
+ " text = re.sub(r\"http\\S+|www\\S+\", \" \", text)\n",
162
+ " text = re.sub(r\"@\\w+|#\\w+\", \" \", text)\n",
163
+ " text = re.sub(r\"[^a-zA-Z0-9\\s!?.,'\\\"]\", \" \", text)\n",
164
+ " text = re.sub(r\"\\s+\", \" \", text).strip()\n",
165
+ " return text\n",
166
+ "\n",
167
+ "\n",
168
+ "def preprocess_from_normalized(text: str) -> str:\n",
169
+ " tokens = [token for token in text.split() if token not in STOPWORDS]\n",
170
+ " return \" \".join(maybe_lemmatize(token) for token in tokens)\n",
171
+ "\n",
172
+ "\n",
173
+ "def texts_to_sequences(texts, vocab_map, max_len, unk_token=\"<UNK>\"):\n",
174
+ " unk_idx = vocab_map.get(unk_token, 1)\n",
175
+ " sequences = np.zeros((len(texts), max_len), dtype=np.int64)\n",
176
+ " for row_idx, text in enumerate(texts):\n",
177
+ " for col_idx, token in enumerate(str(text).split()[:max_len]):\n",
178
+ " sequences[row_idx, col_idx] = vocab_map.get(token, unk_idx)\n",
179
+ " return sequences\n"
180
+ ]
181
+ },
182
+ {
183
+ "cell_type": "markdown",
184
+ "metadata": {},
185
+ "source": [
186
+ "## 3. Restore the checkpoint and run example inference\n",
187
+ "\n",
188
+ "This cell rebuilds the model, restores the saved weights, preprocesses example sentences, and displays the predicted complexity label with probabilities."
189
+ ]
190
+ },
191
+ {
192
+ "cell_type": "code",
193
+ "execution_count": null,
194
+ "metadata": {},
195
+ "outputs": [],
196
+ "source": [
197
+ "runtime_config = model_config.get(\"runtime\", {})\n",
198
+ "network_config = model_config.get(\"model\", {})\n",
199
+ "\n",
200
+ "model = BiLSTMAttention(\n",
201
+ " embedding_matrix=embedding_matrix,\n",
202
+ " num_classes=len(label_classes),\n",
203
+ " hidden_dim=network_config.get(\"hidden_dim\", 128),\n",
204
+ " num_layers=network_config.get(\"num_layers\", 2),\n",
205
+ " dropout=network_config.get(\"dropout\", 0.3),\n",
206
+ ")\n",
207
+ "model.load_state_dict(state_dict)\n",
208
+ "model.to(device)\n",
209
+ "model.eval()\n",
210
+ "\n",
211
+ "MAX_LEN = runtime_config.get(\"max_sequence_length\", 256)\n",
212
+ "\n",
213
+ "\n",
214
+ "@torch.inference_mode()\n",
215
+ "def predict_texts(texts):\n",
216
+ " normalized = [normalize_text(text) for text in texts]\n",
217
+ " preprocessed = [preprocess_from_normalized(text) for text in normalized]\n",
218
+ " sequences = texts_to_sequences(preprocessed, vocab, MAX_LEN)\n",
219
+ " inputs = torch.tensor(sequences, dtype=torch.long, device=device)\n",
220
+ " logits = model(inputs)\n",
221
+ " probabilities = torch.softmax(logits, dim=-1).cpu().numpy()\n",
222
+ "\n",
223
+ " rows = []\n",
224
+ " for raw_text, normalized_text, preprocessed_text, probs in zip(texts, normalized, preprocessed, probabilities):\n",
225
+ " pred_idx = int(probs.argmax())\n",
226
+ " rows.append(\n",
227
+ " {\n",
228
+ " \"text\": raw_text,\n",
229
+ " \"normalized_text\": normalized_text,\n",
230
+ " \"preprocessed_text\": preprocessed_text,\n",
231
+ " \"predicted_label\": label_classes[pred_idx],\n",
232
+ " \"confidence\": round(float(probs[pred_idx]), 4),\n",
233
+ " \"probabilities\": {\n",
234
+ " label: round(float(score), 4)\n",
235
+ " for label, score in zip(label_classes, probs)\n",
236
+ " },\n",
237
+ " }\n",
238
+ " )\n",
239
+ "\n",
240
+ " return pd.DataFrame(rows)\n",
241
+ "\n",
242
+ "\n",
243
+ "example_sentences = [\n",
244
+ " \"The cat sat on the mat.\",\n",
245
+ " \"Students should explain the main idea in clear sentences.\",\n",
246
+ " \"Although the study is limited, it still offers a useful interpretation of the data.\",\n",
247
+ " \"Notwithstanding several methodological caveats, the argument articulates a nuanced account of institutional change.\",\n",
248
+ "]\n",
249
+ "\n",
250
+ "pd.set_option(\"display.max_colwidth\", 120)\n",
251
+ "results = predict_texts(example_sentences)\n",
252
+ "results\n"
253
+ ]
254
+ }
255
+ ],
256
+ "metadata": {
257
+ "kernelspec": {
258
+ "display_name": "nlp-project",
259
+ "language": "python",
260
+ "name": "python3"
261
+ },
262
+ "language_info": {
263
+ "codemirror_mode": {
264
+ "name": "ipython",
265
+ "version": 3
266
+ },
267
+ "file_extension": ".py",
268
+ "mimetype": "text/x-python",
269
+ "name": "python",
270
+ "nbconvert_exporter": "python",
271
+ "pygments_lexer": "ipython3",
272
+ "version": "3.11.14"
273
+ }
274
+ },
275
+ "nbformat": 4,
276
+ "nbformat_minor": 5
277
+ }
best.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bf01e442856c2587c087c4a9cca1ccb9549bd757a4755a72e2d75038aa998d8a
3
+ size 190059249
dashboard/.DS_Store ADDED
Binary file (10.2 kB). View file
 
dashboard/confusion/cm-glove-bilstm-train-pool.png ADDED
dashboard/confusion/internal-test-confusion-matrix.png ADDED
dashboard/curves/training-history.json ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source_file": "complexity/logs/complexity-classification_GloVe_BiLSTM_[train_pool].log",
3
+ "x_axis": "epoch",
4
+ "points": [
5
+ {
6
+ "epoch": 1,
7
+ "total_epochs": 20,
8
+ "train_loss": 0.8229,
9
+ "val_loss": 0.7119,
10
+ "val_f1_macro": 0.6324,
11
+ "epoch_seconds": 79.1
12
+ },
13
+ {
14
+ "epoch": 2,
15
+ "total_epochs": 20,
16
+ "train_loss": 0.488,
17
+ "val_loss": 0.6723,
18
+ "val_f1_macro": 0.655,
19
+ "epoch_seconds": 83.1
20
+ },
21
+ {
22
+ "epoch": 3,
23
+ "total_epochs": 20,
24
+ "train_loss": 0.2493,
25
+ "val_loss": 0.8044,
26
+ "val_f1_macro": 0.6605,
27
+ "epoch_seconds": 83.2
28
+ },
29
+ {
30
+ "epoch": 4,
31
+ "total_epochs": 20,
32
+ "train_loss": 0.116,
33
+ "val_loss": 1.2446,
34
+ "val_f1_macro": 0.6473,
35
+ "epoch_seconds": 82.7
36
+ },
37
+ {
38
+ "epoch": 5,
39
+ "total_epochs": 20,
40
+ "train_loss": 0.0496,
41
+ "val_loss": 1.5788,
42
+ "val_f1_macro": 0.6302,
43
+ "epoch_seconds": 80.7
44
+ },
45
+ {
46
+ "epoch": 6,
47
+ "total_epochs": 20,
48
+ "train_loss": 0.0151,
49
+ "val_loss": 1.9807,
50
+ "val_f1_macro": 0.6283,
51
+ "epoch_seconds": 79.6
52
+ }
53
+ ],
54
+ "best_eval_event": {
55
+ "epoch": 3,
56
+ "total_epochs": 20,
57
+ "train_loss": 0.2493,
58
+ "val_loss": 0.8044,
59
+ "val_f1_macro": 0.6605,
60
+ "epoch_seconds": 83.2
61
+ },
62
+ "notes": [
63
+ "Early stopping triggered at epoch 6.",
64
+ "Restored best checkpoint | val_f1=0.6605 | path=models/glove_bilstm_complexity_train_pool_20260307_163358/best_model/best.pt"
65
+ ]
66
+ }
dashboard/dashboard-manifest.json ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": "1.0.0",
3
+ "generated_at": "2026-03-12T17:02:22+00:00",
4
+ "bundle_builder": "generic-v1",
5
+ "dashboard_root": "app/app-models/prod-model-complexity/dashboard",
6
+ "model": {
7
+ "model_id": "complexity-bilstm-final-v1",
8
+ "display_name": "Complexity BiLSTM Final v1",
9
+ "domain": "complexity",
10
+ "description": "Final BiLSTM with additive attention for CEFR-based text complexity classification."
11
+ },
12
+ "entrypoints": {
13
+ "overview": "app/app-models/prod-model-complexity/dashboard/summary/overview.json",
14
+ "source_audit": "app/app-models/prod-model-complexity/dashboard/summary/source-audit.json"
15
+ },
16
+ "sections": [
17
+ {
18
+ "id": "metadata",
19
+ "title": "Model Metadata",
20
+ "status": "available",
21
+ "description": "Model identity, runtime settings, and optional experiment configuration.",
22
+ "files": [
23
+ "app/app-models/prod-model-complexity/dashboard/metadata/model.json",
24
+ "app/app-models/prod-model-complexity/dashboard/metadata/experiment-config.json"
25
+ ]
26
+ },
27
+ {
28
+ "id": "summary",
29
+ "title": "Summary",
30
+ "status": "available",
31
+ "description": "Dashboard status overview and source audit for the generated bundle.",
32
+ "files": [
33
+ "app/app-models/prod-model-complexity/dashboard/summary/overview.json",
34
+ "app/app-models/prod-model-complexity/dashboard/summary/source-audit.json"
35
+ ]
36
+ },
37
+ {
38
+ "id": "evaluation",
39
+ "title": "Primary Evaluation",
40
+ "status": "available",
41
+ "description": "Primary validation and test metrics for the production model.",
42
+ "files": [
43
+ "app/app-models/prod-model-complexity/dashboard/metrics/primary-evaluation.json"
44
+ ]
45
+ },
46
+ {
47
+ "id": "benchmark",
48
+ "title": "Benchmark",
49
+ "status": "available",
50
+ "description": "Comparison rows that place the production model in the wider benchmark context.",
51
+ "files": [
52
+ "app/app-models/prod-model-complexity/dashboard/metrics/benchmark-test.json",
53
+ "app/app-models/prod-model-complexity/dashboard/figures/benchmark-test-f1.plotly.json"
54
+ ],
55
+ "charts": [
56
+ "benchmark-test-f1"
57
+ ]
58
+ },
59
+ {
60
+ "id": "training_curves",
61
+ "title": "Training Curves",
62
+ "status": "available",
63
+ "description": "Training history exported from the model training run.",
64
+ "files": [
65
+ "app/app-models/prod-model-complexity/dashboard/curves/training-history.json",
66
+ "app/app-models/prod-model-complexity/dashboard/figures/training-loss.plotly.json",
67
+ "app/app-models/prod-model-complexity/dashboard/figures/eval-metrics.plotly.json"
68
+ ],
69
+ "charts": [
70
+ "training-loss",
71
+ "eval-metrics"
72
+ ]
73
+ },
74
+ {
75
+ "id": "learning_curves",
76
+ "title": "Learning Curves",
77
+ "status": "not_applicable",
78
+ "description": "Sample-size or checkpoint learning-curve artifacts for the domain.",
79
+ "files": [],
80
+ "reason": "The complexity benchmark is built around a fixed train_pool dataset rather than multiple prod-relevant train sizes."
81
+ },
82
+ {
83
+ "id": "cross_dataset",
84
+ "title": "Cross Dataset Evaluation",
85
+ "status": "available",
86
+ "description": "Evaluation rows produced on datasets outside the primary split.",
87
+ "files": [
88
+ "app/app-models/prod-model-complexity/dashboard/metrics/cross-dataset.json",
89
+ "app/app-models/prod-model-complexity/dashboard/figures/cross-dataset-f1.plotly.json"
90
+ ],
91
+ "charts": [
92
+ "cross-dataset-f1"
93
+ ]
94
+ },
95
+ {
96
+ "id": "confusion_matrix",
97
+ "title": "Confusion Matrix",
98
+ "status": "image_only",
99
+ "description": "Static confusion-matrix image assets copied into the dashboard bundle.",
100
+ "files": [
101
+ "app/app-models/prod-model-complexity/dashboard/confusion/cm-glove-bilstm-train-pool.png"
102
+ ]
103
+ },
104
+ {
105
+ "id": "class_distribution",
106
+ "title": "Class Distribution",
107
+ "status": "missing",
108
+ "description": "Class and optional source-dataset distributions derived from explicit split inputs.",
109
+ "files": [],
110
+ "reason": "No class_distribution source was configured."
111
+ },
112
+ {
113
+ "id": "samples",
114
+ "title": "Prediction Samples",
115
+ "status": "available",
116
+ "description": "Prediction examples for qualitative inspection.",
117
+ "files": [
118
+ "app/app-models/prod-model-complexity/dashboard/samples/prediction-samples.json"
119
+ ]
120
+ }
121
+ ],
122
+ "selected_sources": [
123
+ {
124
+ "category": "metadata",
125
+ "path": "app/app-models/prod-model-complexity/model-config.yaml",
126
+ "reason": "Production model identity, runtime settings, and label mapping."
127
+ },
128
+ {
129
+ "category": "experiment_config",
130
+ "path": "complexity/outputs/metrics/cfg_20260310_2125.json",
131
+ "reason": "Experiment or evaluation config attached for traceability."
132
+ },
133
+ {
134
+ "category": "primary_evaluation",
135
+ "path": "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_latest.json",
136
+ "reason": "Primary validation/test metrics for the production model."
137
+ },
138
+ {
139
+ "category": "benchmark",
140
+ "path": "complexity/outputs/metrics/results_complexity-classification.csv",
141
+ "reason": "Benchmark rows used to compare the production model against peers."
142
+ },
143
+ {
144
+ "category": "training_history",
145
+ "path": "complexity/logs/complexity-classification_GloVe_BiLSTM_[train_pool].log",
146
+ "reason": "Training-history artifact used to build learning and loss curves."
147
+ },
148
+ {
149
+ "category": "cross_dataset",
150
+ "path": "complexity/outputs/cross_dataset_eval/summary_latest.csv",
151
+ "reason": "Cross-dataset evaluation summary rows."
152
+ },
153
+ {
154
+ "category": "class_distribution",
155
+ "path": "complexity/data/train_pool_train.parquet",
156
+ "reason": "Explicit split artifacts used to derive class distributions."
157
+ },
158
+ {
159
+ "category": "class_distribution",
160
+ "path": "complexity/data/train_pool_val.parquet",
161
+ "reason": "Explicit split artifacts used to derive class distributions."
162
+ },
163
+ {
164
+ "category": "class_distribution",
165
+ "path": "complexity/data/train_pool_test.parquet",
166
+ "reason": "Explicit split artifacts used to derive class distributions."
167
+ },
168
+ {
169
+ "category": "prediction_samples",
170
+ "path": "complexity/outputs/metrics/manual_example_predictions.csv",
171
+ "reason": "Prediction samples used for qualitative dashboard review."
172
+ },
173
+ {
174
+ "category": "confusion_matrix",
175
+ "path": "complexity/outputs/plots/confusion_matrices/cm_glove_bilstm_train_pool.png",
176
+ "reason": "Confusion-matrix image copied into the dashboard bundle."
177
+ }
178
+ ],
179
+ "notes": [
180
+ "Primary evaluation uses the production GloVe BiLSTM metrics_latest.json referenced by prod-model-complexity/model-config.yaml.",
181
+ "Complexity is the richest dashboard domain in the repo: internal benchmark data, external evaluation summaries, split parquets, manual sample predictions, and prod-model training logs are all present.",
182
+ "Confusion matrices exist only as saved images for the production model; no numeric matrix artifact was found.",
183
+ "class_distribution parsing failed for complexity/data/train_pool_train.parquet: Parquet dashboard sources require the optional pandas dependency.",
184
+ "class_distribution parsing failed for complexity/data/train_pool_val.parquet: Parquet dashboard sources require the optional pandas dependency.",
185
+ "class_distribution parsing failed for complexity/data/train_pool_test.parquet: Parquet dashboard sources require the optional pandas dependency."
186
+ ]
187
+ }
dashboard/distributions/class-distribution.json ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "overall": [
3
+ {
4
+ "split": "overall",
5
+ "label": "A1-A2",
6
+ "count": 13598,
7
+ "share": 0.304049
8
+ },
9
+ {
10
+ "split": "overall",
11
+ "label": "B1-B2",
12
+ "count": 24366,
13
+ "share": 0.54482
14
+ },
15
+ {
16
+ "split": "overall",
17
+ "label": "C1-C2",
18
+ "count": 6759,
19
+ "share": 0.15113
20
+ }
21
+ ],
22
+ "splits": [
23
+ {
24
+ "split": "train",
25
+ "label": "A1-A2",
26
+ "count": 9518,
27
+ "share": 0.304041
28
+ },
29
+ {
30
+ "split": "train",
31
+ "label": "B1-B2",
32
+ "count": 17056,
33
+ "share": 0.544833
34
+ },
35
+ {
36
+ "split": "train",
37
+ "label": "C1-C2",
38
+ "count": 4731,
39
+ "share": 0.151126
40
+ },
41
+ {
42
+ "split": "val",
43
+ "label": "A1-A2",
44
+ "count": 2040,
45
+ "share": 0.304069
46
+ },
47
+ {
48
+ "split": "val",
49
+ "label": "B1-B2",
50
+ "count": 3655,
51
+ "share": 0.544791
52
+ },
53
+ {
54
+ "split": "val",
55
+ "label": "C1-C2",
56
+ "count": 1014,
57
+ "share": 0.15114
58
+ },
59
+ {
60
+ "split": "test",
61
+ "label": "A1-A2",
62
+ "count": 2040,
63
+ "share": 0.304069
64
+ },
65
+ {
66
+ "split": "test",
67
+ "label": "B1-B2",
68
+ "count": 3655,
69
+ "share": 0.544791
70
+ },
71
+ {
72
+ "split": "test",
73
+ "label": "C1-C2",
74
+ "count": 1014,
75
+ "share": 0.15114
76
+ }
77
+ ]
78
+ }
dashboard/distributions/source-dataset-distribution.json ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "overall": [
3
+ {
4
+ "split": "overall",
5
+ "source_dataset": "asap-2-0",
6
+ "count": 24728,
7
+ "share": 0.552915
8
+ },
9
+ {
10
+ "split": "overall",
11
+ "source_dataset": "uk-key-stage-readability-for-english-texts",
12
+ "count": 19995,
13
+ "share": 0.447085
14
+ }
15
+ ],
16
+ "splits": [
17
+ {
18
+ "split": "train",
19
+ "source_dataset": "asap-2-0",
20
+ "count": 17363,
21
+ "share": 0.55464
22
+ },
23
+ {
24
+ "split": "train",
25
+ "source_dataset": "uk-key-stage-readability-for-english-texts",
26
+ "count": 13942,
27
+ "share": 0.44536
28
+ },
29
+ {
30
+ "split": "val",
31
+ "source_dataset": "asap-2-0",
32
+ "count": 3684,
33
+ "share": 0.549113
34
+ },
35
+ {
36
+ "split": "val",
37
+ "source_dataset": "uk-key-stage-readability-for-english-texts",
38
+ "count": 3025,
39
+ "share": 0.450887
40
+ },
41
+ {
42
+ "split": "test",
43
+ "source_dataset": "asap-2-0",
44
+ "count": 3681,
45
+ "share": 0.548666
46
+ },
47
+ {
48
+ "split": "test",
49
+ "source_dataset": "uk-key-stage-readability-for-english-texts",
50
+ "count": 3028,
51
+ "share": 0.451334
52
+ }
53
+ ]
54
+ }
dashboard/figures/benchmark-test-f1.plotly.json ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "data": [
3
+ {
4
+ "type": "bar",
5
+ "orientation": "v",
6
+ "x": [
7
+ "DeBERTaV3 train pool",
8
+ "DistilBERT train pool",
9
+ "RoBERTa train pool",
10
+ "TF-IDF + SVC [train pool]",
11
+ "TF-IDF + LogReg [train pool]",
12
+ "GloVe BiLSTM [train pool]",
13
+ "GloVe CNN [train pool]",
14
+ "GloVe MLP [train pool]",
15
+ "TF-IDF + XGBoost [train pool]",
16
+ "Majority Class [train pool]"
17
+ ],
18
+ "y": [
19
+ 0.7510812492382728,
20
+ 0.7430667400906253,
21
+ 0.7297663021875974,
22
+ 0.6686789738725382,
23
+ 0.6607874127954448,
24
+ 0.6551661294897166,
25
+ 0.6388266463257223,
26
+ 0.5964460940300637,
27
+ 0.534220517963146,
28
+ 0.2351087096359192
29
+ ],
30
+ "marker": {
31
+ "color": "#0f766e"
32
+ },
33
+ "text": [
34
+ "0.751",
35
+ "0.743",
36
+ "0.730",
37
+ "0.669",
38
+ "0.661",
39
+ "0.655",
40
+ "0.639",
41
+ "0.596",
42
+ "0.534",
43
+ "0.235"
44
+ ],
45
+ "textposition": "auto"
46
+ }
47
+ ],
48
+ "layout": {
49
+ "title": {
50
+ "text": "Benchmark Comparison"
51
+ },
52
+ "paper_bgcolor": "white",
53
+ "plot_bgcolor": "white",
54
+ "font": {
55
+ "family": "Arial, sans-serif",
56
+ "size": 12
57
+ },
58
+ "margin": {
59
+ "l": 60,
60
+ "r": 20,
61
+ "t": 60,
62
+ "b": 60
63
+ },
64
+ "xaxis": {
65
+ "title": {
66
+ "text": "Model"
67
+ },
68
+ "automargin": true
69
+ },
70
+ "yaxis": {
71
+ "title": {
72
+ "text": "F1 Macro"
73
+ },
74
+ "automargin": true
75
+ }
76
+ }
77
+ }
dashboard/figures/class-distribution.plotly.json ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "data": [
3
+ {
4
+ "type": "bar",
5
+ "orientation": "v",
6
+ "x": [
7
+ "A1-A2",
8
+ "B1-B2",
9
+ "C1-C2"
10
+ ],
11
+ "y": [
12
+ 13598,
13
+ 24366,
14
+ 6759
15
+ ],
16
+ "marker": {
17
+ "color": "#1d4ed8"
18
+ },
19
+ "text": [
20
+ "13598",
21
+ "24366",
22
+ "6759"
23
+ ],
24
+ "textposition": "auto"
25
+ }
26
+ ],
27
+ "layout": {
28
+ "title": {
29
+ "text": "Complexity Overall Class Distribution"
30
+ },
31
+ "paper_bgcolor": "white",
32
+ "plot_bgcolor": "white",
33
+ "font": {
34
+ "family": "Arial, sans-serif",
35
+ "size": 12
36
+ },
37
+ "margin": {
38
+ "l": 60,
39
+ "r": 20,
40
+ "t": 60,
41
+ "b": 60
42
+ },
43
+ "xaxis": {
44
+ "title": {
45
+ "text": "Class"
46
+ },
47
+ "automargin": true
48
+ },
49
+ "yaxis": {
50
+ "title": {
51
+ "text": "Count"
52
+ },
53
+ "automargin": true
54
+ }
55
+ }
56
+ }
dashboard/figures/cross-dataset-f1.plotly.json ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "data": [
3
+ {
4
+ "type": "bar",
5
+ "orientation": "v",
6
+ "x": [
7
+ "asap_aes",
8
+ "cambridge",
9
+ "cerf",
10
+ "commonlit",
11
+ "one_stop"
12
+ ],
13
+ "y": [
14
+ 0.355652614304878,
15
+ 0.5316323731138546,
16
+ 0.6026179931249024,
17
+ 0.33112328650236905,
18
+ 0.26832434123074517
19
+ ],
20
+ "marker": {
21
+ "color": "#b45309"
22
+ },
23
+ "text": [
24
+ "0.356",
25
+ "0.532",
26
+ "0.603",
27
+ "0.331",
28
+ "0.268"
29
+ ],
30
+ "textposition": "auto"
31
+ }
32
+ ],
33
+ "layout": {
34
+ "title": {
35
+ "text": "Cross Dataset Evaluation"
36
+ },
37
+ "paper_bgcolor": "white",
38
+ "plot_bgcolor": "white",
39
+ "font": {
40
+ "family": "Arial, sans-serif",
41
+ "size": 12
42
+ },
43
+ "margin": {
44
+ "l": 60,
45
+ "r": 20,
46
+ "t": 60,
47
+ "b": 60
48
+ },
49
+ "xaxis": {
50
+ "title": {
51
+ "text": "Dataset"
52
+ },
53
+ "automargin": true
54
+ },
55
+ "yaxis": {
56
+ "title": {
57
+ "text": "F1 Macro"
58
+ },
59
+ "automargin": true
60
+ }
61
+ }
62
+ }
dashboard/figures/eval-metrics.plotly.json ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "data": [
3
+ {
4
+ "type": "scatter",
5
+ "mode": "lines+markers",
6
+ "name": "Validation F1 Macro",
7
+ "x": [
8
+ 1,
9
+ 2,
10
+ 3,
11
+ 4,
12
+ 5,
13
+ 6
14
+ ],
15
+ "y": [
16
+ 0.6324,
17
+ 0.655,
18
+ 0.6605,
19
+ 0.6473,
20
+ 0.6302,
21
+ 0.6283
22
+ ],
23
+ "line": {
24
+ "color": "#0f766e",
25
+ "width": 2
26
+ },
27
+ "marker": {
28
+ "size": 6
29
+ }
30
+ }
31
+ ],
32
+ "layout": {
33
+ "title": {
34
+ "text": "Evaluation Metrics"
35
+ },
36
+ "paper_bgcolor": "white",
37
+ "plot_bgcolor": "white",
38
+ "font": {
39
+ "family": "Arial, sans-serif",
40
+ "size": 12
41
+ },
42
+ "margin": {
43
+ "l": 60,
44
+ "r": 20,
45
+ "t": 60,
46
+ "b": 60
47
+ },
48
+ "xaxis": {
49
+ "title": {
50
+ "text": "Epoch"
51
+ },
52
+ "automargin": true
53
+ },
54
+ "yaxis": {
55
+ "title": {
56
+ "text": "Score"
57
+ },
58
+ "automargin": true
59
+ },
60
+ "legend": {
61
+ "orientation": "h",
62
+ "y": 1.12
63
+ }
64
+ }
65
+ }
dashboard/figures/source-dataset-distribution.plotly.json ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "data": [
3
+ {
4
+ "type": "bar",
5
+ "orientation": "v",
6
+ "x": [
7
+ "asap-2-0",
8
+ "uk-key-stage-readability-for-english-texts"
9
+ ],
10
+ "y": [
11
+ 24728,
12
+ 19995
13
+ ],
14
+ "marker": {
15
+ "color": "#475569"
16
+ },
17
+ "text": [
18
+ "24728",
19
+ "19995"
20
+ ],
21
+ "textposition": "auto"
22
+ }
23
+ ],
24
+ "layout": {
25
+ "title": {
26
+ "text": "Complexity Overall Source Dataset Distribution"
27
+ },
28
+ "paper_bgcolor": "white",
29
+ "plot_bgcolor": "white",
30
+ "font": {
31
+ "family": "Arial, sans-serif",
32
+ "size": 12
33
+ },
34
+ "margin": {
35
+ "l": 60,
36
+ "r": 20,
37
+ "t": 60,
38
+ "b": 60
39
+ },
40
+ "xaxis": {
41
+ "title": {
42
+ "text": "Source Dataset"
43
+ },
44
+ "automargin": true
45
+ },
46
+ "yaxis": {
47
+ "title": {
48
+ "text": "Count"
49
+ },
50
+ "automargin": true
51
+ }
52
+ }
53
+ }
dashboard/figures/training-loss.plotly.json ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "data": [
3
+ {
4
+ "type": "scatter",
5
+ "mode": "lines+markers",
6
+ "name": "Train Loss",
7
+ "x": [
8
+ 1,
9
+ 2,
10
+ 3,
11
+ 4,
12
+ 5,
13
+ 6
14
+ ],
15
+ "y": [
16
+ 0.8229,
17
+ 0.488,
18
+ 0.2493,
19
+ 0.116,
20
+ 0.0496,
21
+ 0.0151
22
+ ],
23
+ "line": {
24
+ "color": "#0f766e",
25
+ "width": 2
26
+ },
27
+ "marker": {
28
+ "size": 6
29
+ }
30
+ },
31
+ {
32
+ "type": "scatter",
33
+ "mode": "lines+markers",
34
+ "name": "Validation Loss",
35
+ "x": [
36
+ 1,
37
+ 2,
38
+ 3,
39
+ 4,
40
+ 5,
41
+ 6
42
+ ],
43
+ "y": [
44
+ 0.7119,
45
+ 0.6723,
46
+ 0.8044,
47
+ 1.2446,
48
+ 1.5788,
49
+ 1.9807
50
+ ],
51
+ "line": {
52
+ "color": "#b45309",
53
+ "width": 2
54
+ },
55
+ "marker": {
56
+ "size": 6
57
+ }
58
+ }
59
+ ],
60
+ "layout": {
61
+ "title": {
62
+ "text": "Training Loss"
63
+ },
64
+ "paper_bgcolor": "white",
65
+ "plot_bgcolor": "white",
66
+ "font": {
67
+ "family": "Arial, sans-serif",
68
+ "size": 12
69
+ },
70
+ "margin": {
71
+ "l": 60,
72
+ "r": 20,
73
+ "t": 60,
74
+ "b": 60
75
+ },
76
+ "xaxis": {
77
+ "title": {
78
+ "text": "Epoch"
79
+ },
80
+ "automargin": true
81
+ },
82
+ "yaxis": {
83
+ "title": {
84
+ "text": "Loss"
85
+ },
86
+ "automargin": true
87
+ },
88
+ "legend": {
89
+ "orientation": "h",
90
+ "y": 1.12
91
+ }
92
+ }
93
+ }
dashboard/metadata/experiment-config.json ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "seed": 42,
3
+ "data_dir": "data",
4
+ "output_dir": "outputs",
5
+ "model_dir": "models",
6
+ "log_dir": "logs",
7
+ "task": "complexity-classification",
8
+ "text_col": "text",
9
+ "label_col": "label",
10
+ "num_labels": 3,
11
+ "encoded_label_col": "label_enc",
12
+ "train_pool_key": "train_pool",
13
+ "train_pool_datasets": [
14
+ "uk_key_stage",
15
+ "asap2"
16
+ ],
17
+ "external_eval_dataset_keys": [
18
+ "one_stop",
19
+ "commonlit",
20
+ "cerf",
21
+ "cambridge",
22
+ "asap_aes"
23
+ ],
24
+ "split_artifact_path": "data/complexity_splits.pkl",
25
+ "experiment_dataset_slug": "complexity",
26
+ "run_data_prep": false,
27
+ "run_transformer_eval": false,
28
+ "deberta_execution_mode": "legacy_eval",
29
+ "dl_train_mode": false,
30
+ "prefer_cached_internal_metrics": true,
31
+ "test_size": 0.15,
32
+ "val_size": 0.15,
33
+ "use_cv": true,
34
+ "cv_folds": 5,
35
+ "tfidf_word_ngrams": [
36
+ 1,
37
+ 2
38
+ ],
39
+ "use_char_ngrams": true,
40
+ "class_weight": "balanced",
41
+ "embedding_model": "fasttext-wiki-news-subwords-300",
42
+ "embedding_dim": 300,
43
+ "vocab_size": 50000,
44
+ "max_seq_len": 256,
45
+ "pad_token": "<PAD>",
46
+ "unk_token": "<UNK>",
47
+ "dl_batch_size": 64,
48
+ "dl_epochs": 20,
49
+ "dl_lr": 0.001,
50
+ "dl_patience": 3,
51
+ "dropout": 0.3,
52
+ "cnn_num_filters": 128,
53
+ "cnn_kernel_sizes": [
54
+ 2,
55
+ 3,
56
+ 4
57
+ ],
58
+ "lstm_hidden_dim": 128,
59
+ "lstm_num_layers": 2,
60
+ "trf_model": "distilbert-base-uncased",
61
+ "max_len": 256,
62
+ "batch_size": 8,
63
+ "epochs": 3,
64
+ "lr": 2e-05,
65
+ "device": "mps",
66
+ "output_paths": {
67
+ "eda": "outputs/eda",
68
+ "metrics": "outputs/metrics",
69
+ "runs": "outputs/runs",
70
+ "plots_confusion": "outputs/plots/confusion_matrices",
71
+ "plots_comparison": "outputs/plots/comparisons",
72
+ "plots_learning": "outputs/plots/learning_curves",
73
+ "plots_history": "outputs/plots/histories"
74
+ }
75
+ }
dashboard/metadata/model.json ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model_id": "complexity-bilstm-final-v1",
3
+ "domain": "complexity",
4
+ "display_name": "Complexity BiLSTM Final v1",
5
+ "description": "Final BiLSTM with additive attention for CEFR-based text complexity classification.",
6
+ "is_active": true,
7
+ "priority": 5,
8
+ "framework": {
9
+ "type": "pytorch",
10
+ "task": "sequence-classification",
11
+ "library": "torch",
12
+ "architecture": "bilstm-attention",
13
+ "embeddings": "fasttext-wiki-news-subwords-300"
14
+ },
15
+ "artifacts": {
16
+ "weights": [
17
+ "models/glove_bilstm_complexity_train_pool_20260307_163358/best_model/best.pt"
18
+ ],
19
+ "tokenizer": [],
20
+ "config": [
21
+ "outputs/metrics/cfg_20260310_2125.json",
22
+ "models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_latest.json"
23
+ ],
24
+ "vocabulary": [
25
+ "models/shared/vocab.pkl"
26
+ ],
27
+ "label_map_file": "models/shared/class2id.json",
28
+ "label_classes_file": "models/shared/label_classes.json",
29
+ "label_encoder_file": "models/shared/label_encoder.pkl"
30
+ },
31
+ "model": {
32
+ "embedding_dim": 300,
33
+ "hidden_dim": 128,
34
+ "num_layers": 2,
35
+ "dropout": 0.3,
36
+ "bidirectional": true,
37
+ "attention": "additive",
38
+ "vocab_size": 50000,
39
+ "pad_token": "<PAD>",
40
+ "unk_token": "<UNK>"
41
+ },
42
+ "runtime": {
43
+ "max_sequence_length": 256,
44
+ "truncation": true,
45
+ "padding": true,
46
+ "batch_size": 1,
47
+ "device": "cpu",
48
+ "preprocessing": "normalize_text + preprocess_from_normalized + texts_to_sequences"
49
+ },
50
+ "inference": {
51
+ "return_probabilities": true,
52
+ "confidence_method": "softmax_max"
53
+ },
54
+ "ui": {
55
+ "domain_display_name": "Text Complexity",
56
+ "color_token": "complexity",
57
+ "group": "complexity-core"
58
+ },
59
+ "labels": {
60
+ "type": "single-label-classification",
61
+ "classes": [
62
+ {
63
+ "id": 0,
64
+ "name": "A1-A2",
65
+ "display_name": "A1-A2"
66
+ },
67
+ {
68
+ "id": 1,
69
+ "name": "B1-B2",
70
+ "display_name": "B1-B2"
71
+ },
72
+ {
73
+ "id": 2,
74
+ "name": "C1-C2",
75
+ "display_name": "C1-C2"
76
+ }
77
+ ]
78
+ },
79
+ "prod_model_dir": "app/app-models/prod-model-complexity",
80
+ "artifacts_present": [
81
+ "app/app-models/prod-model-complexity/.DS_Store",
82
+ "app/app-models/prod-model-complexity/best.pt",
83
+ "app/app-models/prod-model-complexity/label_classes.json",
84
+ "app/app-models/prod-model-complexity/model-config.yaml",
85
+ "app/app-models/prod-model-complexity/test_inference.ipynb",
86
+ "app/app-models/prod-model-complexity/vocab.pkl"
87
+ ]
88
+ }
dashboard/metrics/benchmark-test.json ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "model": "DeBERTaV3_train_pool",
4
+ "display_name": "DeBERTaV3 train pool",
5
+ "family": "transformer",
6
+ "split": "test",
7
+ "accuracy": 0.7791026978685348,
8
+ "f1_macro": 0.7510812492382728,
9
+ "f1_weighted": 0.7760556709086348,
10
+ "loss": 0.5336738107592773,
11
+ "source_file": "complexity/outputs/metrics/results_complexity-classification.csv",
12
+ "is_production": false
13
+ },
14
+ {
15
+ "model": "DistilBERT_train_pool",
16
+ "display_name": "DistilBERT train pool",
17
+ "family": "transformer",
18
+ "split": "test",
19
+ "accuracy": 0.7746310925622298,
20
+ "f1_macro": 0.7430667400906253,
21
+ "f1_weighted": 0.7720896637566615,
22
+ "loss": null,
23
+ "source_file": "complexity/outputs/metrics/results_complexity-classification.csv",
24
+ "is_production": false
25
+ },
26
+ {
27
+ "model": "RoBERTa_train_pool",
28
+ "display_name": "RoBERTa train pool",
29
+ "family": "transformer",
30
+ "split": "test",
31
+ "accuracy": 0.7676255775823521,
32
+ "f1_macro": 0.7297663021875974,
33
+ "f1_weighted": 0.7644717465447768,
34
+ "loss": null,
35
+ "source_file": "complexity/outputs/metrics/results_complexity-classification.csv",
36
+ "is_production": false
37
+ },
38
+ {
39
+ "model": "TF-IDF + SVC [train_pool]",
40
+ "display_name": "TF-IDF + SVC [train pool]",
41
+ "family": "classical",
42
+ "split": "test",
43
+ "accuracy": 0.7002533909673573,
44
+ "f1_macro": 0.6686789738725382,
45
+ "f1_weighted": 0.699786931830328,
46
+ "loss": null,
47
+ "source_file": "complexity/outputs/metrics/results_complexity-classification.csv",
48
+ "is_production": false
49
+ },
50
+ {
51
+ "model": "TF-IDF + LogReg [train_pool]",
52
+ "display_name": "TF-IDF + LogReg [train pool]",
53
+ "family": "classical",
54
+ "split": "test",
55
+ "accuracy": 0.6835593978238188,
56
+ "f1_macro": 0.6607874127954448,
57
+ "f1_weighted": 0.6863970572448843,
58
+ "loss": null,
59
+ "source_file": "complexity/outputs/metrics/results_complexity-classification.csv",
60
+ "is_production": false
61
+ },
62
+ {
63
+ "model": "GloVe BiLSTM [train_pool]",
64
+ "display_name": "GloVe BiLSTM [train pool]",
65
+ "family": "deep",
66
+ "split": "test",
67
+ "accuracy": 0.6926516619466389,
68
+ "f1_macro": 0.6551661294897166,
69
+ "f1_weighted": 0.6923209903034657,
70
+ "loss": null,
71
+ "source_file": "complexity/outputs/metrics/results_complexity-classification.csv",
72
+ "is_production": true
73
+ },
74
+ {
75
+ "model": "GloVe CNN [train_pool]",
76
+ "display_name": "GloVe CNN [train pool]",
77
+ "family": "deep",
78
+ "split": "test",
79
+ "accuracy": 0.6795349530481443,
80
+ "f1_macro": 0.6388266463257223,
81
+ "f1_weighted": 0.6766999349479854,
82
+ "loss": null,
83
+ "source_file": "complexity/outputs/metrics/results_complexity-classification.csv",
84
+ "is_production": false
85
+ },
86
+ {
87
+ "model": "GloVe MLP [train_pool]",
88
+ "display_name": "GloVe MLP [train pool]",
89
+ "family": "deep",
90
+ "split": "test",
91
+ "accuracy": 0.6527053212103145,
92
+ "f1_macro": 0.5964460940300637,
93
+ "f1_weighted": 0.6426749637907794,
94
+ "loss": null,
95
+ "source_file": "complexity/outputs/metrics/results_complexity-classification.csv",
96
+ "is_production": false
97
+ },
98
+ {
99
+ "model": "TF-IDF + XGBoost [train_pool]",
100
+ "display_name": "TF-IDF + XGBoost [train pool]",
101
+ "family": "classical",
102
+ "split": "test",
103
+ "accuracy": 0.673870919660158,
104
+ "f1_macro": 0.534220517963146,
105
+ "f1_weighted": 0.6343891751219696,
106
+ "loss": null,
107
+ "source_file": "complexity/outputs/metrics/results_complexity-classification.csv",
108
+ "is_production": false
109
+ },
110
+ {
111
+ "model": "Majority Class [train_pool]",
112
+ "display_name": "Majority Class [train pool]",
113
+ "family": "classical",
114
+ "split": "test",
115
+ "accuracy": 0.5447905798181547,
116
+ "f1_macro": 0.2351087096359192,
117
+ "f1_weighted": 0.3842550307285518,
118
+ "loss": null,
119
+ "source_file": "complexity/outputs/metrics/results_complexity-classification.csv",
120
+ "is_production": false
121
+ }
122
+ ]
dashboard/metrics/cross-dataset.json ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "family": "deep",
4
+ "dataset": "asap_aes",
5
+ "model": "GloVe BiLSTM",
6
+ "accuracy": 0.414122725871107,
7
+ "f1_macro": 0.355652614304878,
8
+ "f1_weighted": 0.37092120365396425,
9
+ "source_file": "complexity/outputs/cross_dataset_eval/summary_latest.csv"
10
+ },
11
+ {
12
+ "family": "deep",
13
+ "dataset": "cambridge",
14
+ "model": "GloVe BiLSTM",
15
+ "accuracy": 0.5437956204379562,
16
+ "f1_macro": 0.5316323731138546,
17
+ "f1_weighted": 0.5240329218106996,
18
+ "source_file": "complexity/outputs/cross_dataset_eval/summary_latest.csv"
19
+ },
20
+ {
21
+ "family": "deep",
22
+ "dataset": "cerf",
23
+ "model": "GloVe BiLSTM",
24
+ "accuracy": 0.5934360348292029,
25
+ "f1_macro": 0.6026179931249024,
26
+ "f1_weighted": 0.6005301829938762,
27
+ "source_file": "complexity/outputs/cross_dataset_eval/summary_latest.csv"
28
+ },
29
+ {
30
+ "family": "deep",
31
+ "dataset": "commonlit",
32
+ "model": "GloVe BiLSTM",
33
+ "accuracy": 0.4262121532923989,
34
+ "f1_macro": 0.33112328650236905,
35
+ "f1_weighted": 0.3841412546822796,
36
+ "source_file": "complexity/outputs/cross_dataset_eval/summary_latest.csv"
37
+ },
38
+ {
39
+ "family": "deep",
40
+ "dataset": "one_stop",
41
+ "model": "GloVe BiLSTM",
42
+ "accuracy": 0.34714003944773175,
43
+ "f1_macro": 0.26832434123074517,
44
+ "f1_weighted": 0.26092763705495803,
45
+ "source_file": "complexity/outputs/cross_dataset_eval/summary_latest.csv"
46
+ }
47
+ ]
dashboard/metrics/primary-evaluation.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model": "GloVe BiLSTM [train_pool]",
3
+ "source_files": [
4
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_latest.json"
5
+ ],
6
+ "splits": {
7
+ "val": {
8
+ "accuracy": 0.682963183782978,
9
+ "f1_macro": 0.6450992102932628,
10
+ "f1_weighted": 0.6830474215229027
11
+ },
12
+ "test": {
13
+ "accuracy": 0.6926516619466389,
14
+ "f1_macro": 0.6551661294897166,
15
+ "f1_weighted": 0.6923209903034657
16
+ }
17
+ },
18
+ "artifact_paths": {
19
+ "experiment_dir": "models/glove_bilstm_complexity_train_pool_20260307_163358",
20
+ "best_checkpoint": "models/glove_bilstm_complexity_train_pool_20260307_163358/best_model/best.pt"
21
+ }
22
+ }
dashboard/samples/prediction-samples.json ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "example_id": "1",
4
+ "text": "The boy has a small dog. The dog is brown and friendly.",
5
+ "production_prediction": {
6
+ "model": "GloVe BiLSTM",
7
+ "label": "B1-B2",
8
+ "confidence": 0.9545841813087463
9
+ },
10
+ "reference_prediction": {
11
+ "model": "DeBERTaV3",
12
+ "label": "B1-B2",
13
+ "confidence": 0.5645282864570618
14
+ }
15
+ },
16
+ {
17
+ "example_id": "2",
18
+ "text": "My sister goes to school by bus and comes home in the afternoon.",
19
+ "production_prediction": {
20
+ "model": "GloVe BiLSTM",
21
+ "label": "A1-A2",
22
+ "confidence": 0.6837078332901001
23
+ },
24
+ "reference_prediction": {
25
+ "model": "DeBERTaV3",
26
+ "label": "B1-B2",
27
+ "confidence": 0.5060160160064697
28
+ }
29
+ },
30
+ {
31
+ "example_id": "3",
32
+ "text": "The museum opened a new room where visitors can learn about life in ancient cities.",
33
+ "production_prediction": {
34
+ "model": "GloVe BiLSTM",
35
+ "label": "B1-B2",
36
+ "confidence": 0.521766185760498
37
+ },
38
+ "reference_prediction": {
39
+ "model": "DeBERTaV3",
40
+ "label": "B1-B2",
41
+ "confidence": 0.5297347903251648
42
+ }
43
+ },
44
+ {
45
+ "example_id": "4",
46
+ "text": "Although the weather forecast predicted heavy rain, the match continued because the pitch remained playable.",
47
+ "production_prediction": {
48
+ "model": "GloVe BiLSTM",
49
+ "label": "B1-B2",
50
+ "confidence": 0.6220280528068542
51
+ },
52
+ "reference_prediction": {
53
+ "model": "DeBERTaV3",
54
+ "label": "B1-B2",
55
+ "confidence": 0.4810847342014313
56
+ }
57
+ },
58
+ {
59
+ "example_id": "5",
60
+ "text": "Researchers compared the two groups carefully in order to determine whether the intervention had any measurable effect.",
61
+ "production_prediction": {
62
+ "model": "GloVe BiLSTM",
63
+ "label": "B1-B2",
64
+ "confidence": 0.39631497859954834
65
+ },
66
+ "reference_prediction": {
67
+ "model": "DeBERTaV3",
68
+ "label": "B1-B2",
69
+ "confidence": 0.4548090994358063
70
+ }
71
+ },
72
+ {
73
+ "example_id": "6",
74
+ "text": "Notwithstanding the apparent simplicity of the proposal, its implementation would require a sequence of interdependent regulatory revisions.",
75
+ "production_prediction": {
76
+ "model": "GloVe BiLSTM",
77
+ "label": "C1-C2",
78
+ "confidence": 0.9676215052604675
79
+ },
80
+ "reference_prediction": {
81
+ "model": "DeBERTaV3",
82
+ "label": "B1-B2",
83
+ "confidence": 0.4681660234928131
84
+ }
85
+ },
86
+ {
87
+ "example_id": "7",
88
+ "text": "The committee acknowledged that, in the absence of reliable longitudinal evidence, any definitive conclusion would remain provisional.",
89
+ "production_prediction": {
90
+ "model": "GloVe BiLSTM",
91
+ "label": "A1-A2",
92
+ "confidence": 0.4590006172657013
93
+ },
94
+ "reference_prediction": {
95
+ "model": "DeBERTaV3",
96
+ "label": "C1-C2",
97
+ "confidence": 0.4668876528739929
98
+ }
99
+ },
100
+ {
101
+ "example_id": "8",
102
+ "text": "By foregrounding the tension between economic efficiency and social equity, the report complicates any straightforward interpretation of the policy debate.",
103
+ "production_prediction": {
104
+ "model": "GloVe BiLSTM",
105
+ "label": "B1-B2",
106
+ "confidence": 0.3824934661388397
107
+ },
108
+ "reference_prediction": {
109
+ "model": "DeBERTaV3",
110
+ "label": "B1-B2",
111
+ "confidence": 0.4470742642879486
112
+ }
113
+ }
114
+ ]
dashboard/summary/overview.json ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "generated_at": "2026-03-12T17:02:22+00:00",
3
+ "model": {
4
+ "model_id": "complexity-bilstm-final-v1",
5
+ "display_name": "Complexity BiLSTM Final v1",
6
+ "domain": "complexity",
7
+ "framework_type": "pytorch",
8
+ "framework_architecture": "bilstm-attention"
9
+ },
10
+ "evaluation_highlights": {
11
+ "validation": {
12
+ "accuracy": 0.682963183782978,
13
+ "f1_macro": 0.6450992102932628,
14
+ "f1_weighted": 0.6830474215229027
15
+ },
16
+ "test": {
17
+ "accuracy": 0.6926516619466389,
18
+ "f1_macro": 0.6551661294897166,
19
+ "f1_weighted": 0.6923209903034657
20
+ },
21
+ "benchmark_rank": {
22
+ "rank": 6,
23
+ "out_of": 10,
24
+ "metric": "f1_macro",
25
+ "score": 0.6551661294897166
26
+ }
27
+ },
28
+ "cross_dataset_highlights": {
29
+ "datasets": 5,
30
+ "mean_accuracy": 0.464941,
31
+ "mean_f1_macro": 0.41787,
32
+ "mean_f1_weighted": 0.428111
33
+ },
34
+ "artifact_status": {
35
+ "metadata": "available",
36
+ "evaluation": "available",
37
+ "benchmark": "available",
38
+ "training_curves": "available",
39
+ "learning_curves": "not_applicable",
40
+ "cross_dataset": "available",
41
+ "confusion_matrix": "image_only",
42
+ "class_distribution": "missing",
43
+ "samples": "available"
44
+ },
45
+ "notes": [
46
+ "Primary evaluation uses the production GloVe BiLSTM metrics_latest.json referenced by prod-model-complexity/model-config.yaml.",
47
+ "Complexity is the richest dashboard domain in the repo: internal benchmark data, external evaluation summaries, split parquets, manual sample predictions, and prod-model training logs are all present.",
48
+ "Confusion matrices exist only as saved images for the production model; no numeric matrix artifact was found.",
49
+ "class_distribution parsing failed for complexity/data/train_pool_train.parquet: Parquet dashboard sources require the optional pandas dependency.",
50
+ "class_distribution parsing failed for complexity/data/train_pool_val.parquet: Parquet dashboard sources require the optional pandas dependency.",
51
+ "class_distribution parsing failed for complexity/data/train_pool_test.parquet: Parquet dashboard sources require the optional pandas dependency."
52
+ ]
53
+ }
dashboard/summary/source-audit.json ADDED
@@ -0,0 +1,1218 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "generated_at": "2026-03-12T17:02:22+00:00",
3
+ "scanned_roots": [
4
+ "app/app-models/prod-model-complexity",
5
+ "complexity/data",
6
+ "complexity/logs",
7
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs",
8
+ "complexity/outputs/cross_dataset_eval",
9
+ "complexity/outputs/metrics",
10
+ "complexity/outputs/plots/confusion_matrices"
11
+ ],
12
+ "artifact_counts": {
13
+ "logs": 815,
14
+ "metrics_and_configs": 146,
15
+ "other_structured_files": 40,
16
+ "plot_images": 24,
17
+ "structured_data": 11,
18
+ "tabular_data": 82
19
+ },
20
+ "candidate_artifacts_by_category": {
21
+ "logs": [
22
+ "complexity/data/archive/asap-2-0/source.txt",
23
+ "complexity/data/archive/asap-aes/source.txt",
24
+ "complexity/data/archive/cambridge-english-readability/CAE/1.txt",
25
+ "complexity/data/archive/cambridge-english-readability/CAE/10.txt",
26
+ "complexity/data/archive/cambridge-english-readability/CAE/11.txt",
27
+ "complexity/data/archive/cambridge-english-readability/CAE/12.txt",
28
+ "complexity/data/archive/cambridge-english-readability/CAE/13.txt",
29
+ "complexity/data/archive/cambridge-english-readability/CAE/14.txt",
30
+ "complexity/data/archive/cambridge-english-readability/CAE/15.txt",
31
+ "complexity/data/archive/cambridge-english-readability/CAE/16.txt",
32
+ "complexity/data/archive/cambridge-english-readability/CAE/17.txt",
33
+ "complexity/data/archive/cambridge-english-readability/CAE/18.txt",
34
+ "complexity/data/archive/cambridge-english-readability/CAE/19.txt",
35
+ "complexity/data/archive/cambridge-english-readability/CAE/2.txt",
36
+ "complexity/data/archive/cambridge-english-readability/CAE/20.txt",
37
+ "complexity/data/archive/cambridge-english-readability/CAE/21.txt",
38
+ "complexity/data/archive/cambridge-english-readability/CAE/22.txt",
39
+ "complexity/data/archive/cambridge-english-readability/CAE/23.txt",
40
+ "complexity/data/archive/cambridge-english-readability/CAE/24.txt",
41
+ "complexity/data/archive/cambridge-english-readability/CAE/25.txt",
42
+ "complexity/data/archive/cambridge-english-readability/CAE/26.txt",
43
+ "complexity/data/archive/cambridge-english-readability/CAE/27.txt",
44
+ "complexity/data/archive/cambridge-english-readability/CAE/28.txt",
45
+ "complexity/data/archive/cambridge-english-readability/CAE/29.txt",
46
+ "complexity/data/archive/cambridge-english-readability/CAE/3.txt",
47
+ "complexity/data/archive/cambridge-english-readability/CAE/30.txt",
48
+ "complexity/data/archive/cambridge-english-readability/CAE/31.txt",
49
+ "complexity/data/archive/cambridge-english-readability/CAE/32.txt",
50
+ "complexity/data/archive/cambridge-english-readability/CAE/33.txt",
51
+ "complexity/data/archive/cambridge-english-readability/CAE/34.txt",
52
+ "complexity/data/archive/cambridge-english-readability/CAE/35.txt",
53
+ "complexity/data/archive/cambridge-english-readability/CAE/36.txt",
54
+ "complexity/data/archive/cambridge-english-readability/CAE/37.txt",
55
+ "complexity/data/archive/cambridge-english-readability/CAE/38.txt",
56
+ "complexity/data/archive/cambridge-english-readability/CAE/39.txt",
57
+ "complexity/data/archive/cambridge-english-readability/CAE/4.txt",
58
+ "complexity/data/archive/cambridge-english-readability/CAE/40.txt",
59
+ "complexity/data/archive/cambridge-english-readability/CAE/41.txt",
60
+ "complexity/data/archive/cambridge-english-readability/CAE/42.txt",
61
+ "complexity/data/archive/cambridge-english-readability/CAE/43.txt",
62
+ "complexity/data/archive/cambridge-english-readability/CAE/44.txt",
63
+ "complexity/data/archive/cambridge-english-readability/CAE/45.txt",
64
+ "complexity/data/archive/cambridge-english-readability/CAE/46.txt",
65
+ "complexity/data/archive/cambridge-english-readability/CAE/47.txt",
66
+ "complexity/data/archive/cambridge-english-readability/CAE/48.txt",
67
+ "complexity/data/archive/cambridge-english-readability/CAE/49.txt",
68
+ "complexity/data/archive/cambridge-english-readability/CAE/5.txt",
69
+ "complexity/data/archive/cambridge-english-readability/CAE/50.txt",
70
+ "complexity/data/archive/cambridge-english-readability/CAE/51.txt",
71
+ "complexity/data/archive/cambridge-english-readability/CAE/52.txt",
72
+ "complexity/data/archive/cambridge-english-readability/CAE/53.txt",
73
+ "complexity/data/archive/cambridge-english-readability/CAE/54.txt",
74
+ "complexity/data/archive/cambridge-english-readability/CAE/55.txt",
75
+ "complexity/data/archive/cambridge-english-readability/CAE/6.txt",
76
+ "complexity/data/archive/cambridge-english-readability/CAE/7.txt",
77
+ "complexity/data/archive/cambridge-english-readability/CAE/8.txt",
78
+ "complexity/data/archive/cambridge-english-readability/CAE/9.txt",
79
+ "complexity/data/archive/cambridge-english-readability/CAE.txt",
80
+ "complexity/data/archive/cambridge-english-readability/CAE_raw.txt",
81
+ "complexity/data/archive/cambridge-english-readability/CPE/1.txt",
82
+ "complexity/data/archive/cambridge-english-readability/CPE/10.txt",
83
+ "complexity/data/archive/cambridge-english-readability/CPE/11.txt",
84
+ "complexity/data/archive/cambridge-english-readability/CPE/12.txt",
85
+ "complexity/data/archive/cambridge-english-readability/CPE/13.txt",
86
+ "complexity/data/archive/cambridge-english-readability/CPE/14.txt",
87
+ "complexity/data/archive/cambridge-english-readability/CPE/15.txt",
88
+ "complexity/data/archive/cambridge-english-readability/CPE/16.txt",
89
+ "complexity/data/archive/cambridge-english-readability/CPE/17.txt",
90
+ "complexity/data/archive/cambridge-english-readability/CPE/18.txt",
91
+ "complexity/data/archive/cambridge-english-readability/CPE/19.txt",
92
+ "complexity/data/archive/cambridge-english-readability/CPE/2.txt",
93
+ "complexity/data/archive/cambridge-english-readability/CPE/20.txt",
94
+ "complexity/data/archive/cambridge-english-readability/CPE/21.txt",
95
+ "complexity/data/archive/cambridge-english-readability/CPE/22.txt",
96
+ "complexity/data/archive/cambridge-english-readability/CPE/23.txt",
97
+ "complexity/data/archive/cambridge-english-readability/CPE/24.txt",
98
+ "complexity/data/archive/cambridge-english-readability/CPE/25.txt",
99
+ "complexity/data/archive/cambridge-english-readability/CPE/26.txt",
100
+ "complexity/data/archive/cambridge-english-readability/CPE/27.txt",
101
+ "complexity/data/archive/cambridge-english-readability/CPE/28.txt",
102
+ "complexity/data/archive/cambridge-english-readability/CPE/29.txt",
103
+ "complexity/data/archive/cambridge-english-readability/CPE/3.txt",
104
+ "complexity/data/archive/cambridge-english-readability/CPE/30.txt",
105
+ "complexity/data/archive/cambridge-english-readability/CPE/31.txt",
106
+ "complexity/data/archive/cambridge-english-readability/CPE/32.txt",
107
+ "complexity/data/archive/cambridge-english-readability/CPE/33.txt",
108
+ "complexity/data/archive/cambridge-english-readability/CPE/34.txt",
109
+ "complexity/data/archive/cambridge-english-readability/CPE/35.txt",
110
+ "complexity/data/archive/cambridge-english-readability/CPE/36.txt",
111
+ "complexity/data/archive/cambridge-english-readability/CPE/37.txt",
112
+ "complexity/data/archive/cambridge-english-readability/CPE/38.txt",
113
+ "complexity/data/archive/cambridge-english-readability/CPE/39.txt",
114
+ "complexity/data/archive/cambridge-english-readability/CPE/4.txt",
115
+ "complexity/data/archive/cambridge-english-readability/CPE/40.txt",
116
+ "complexity/data/archive/cambridge-english-readability/CPE/41.txt",
117
+ "complexity/data/archive/cambridge-english-readability/CPE/42.txt",
118
+ "complexity/data/archive/cambridge-english-readability/CPE/43.txt",
119
+ "complexity/data/archive/cambridge-english-readability/CPE/44.txt",
120
+ "complexity/data/archive/cambridge-english-readability/CPE/5.txt",
121
+ "complexity/data/archive/cambridge-english-readability/CPE/6.txt",
122
+ "complexity/data/archive/cambridge-english-readability/CPE/7.txt",
123
+ "complexity/data/archive/cambridge-english-readability/CPE/8.txt",
124
+ "complexity/data/archive/cambridge-english-readability/CPE/9.txt",
125
+ "complexity/data/archive/cambridge-english-readability/CPE.txt",
126
+ "complexity/data/archive/cambridge-english-readability/CPE_raw.txt",
127
+ "complexity/data/archive/cambridge-english-readability/FCE/1.txt",
128
+ "complexity/data/archive/cambridge-english-readability/FCE/10.txt",
129
+ "complexity/data/archive/cambridge-english-readability/FCE/11.txt",
130
+ "complexity/data/archive/cambridge-english-readability/FCE/12.txt",
131
+ "complexity/data/archive/cambridge-english-readability/FCE/13.txt",
132
+ "complexity/data/archive/cambridge-english-readability/FCE/14.txt",
133
+ "complexity/data/archive/cambridge-english-readability/FCE/15.txt",
134
+ "complexity/data/archive/cambridge-english-readability/FCE/16.txt",
135
+ "complexity/data/archive/cambridge-english-readability/FCE/17.txt",
136
+ "complexity/data/archive/cambridge-english-readability/FCE/18.txt",
137
+ "complexity/data/archive/cambridge-english-readability/FCE/19.txt",
138
+ "complexity/data/archive/cambridge-english-readability/FCE/2.txt",
139
+ "complexity/data/archive/cambridge-english-readability/FCE/20.txt",
140
+ "complexity/data/archive/cambridge-english-readability/FCE/21.txt",
141
+ "complexity/data/archive/cambridge-english-readability/FCE/22.txt",
142
+ "complexity/data/archive/cambridge-english-readability/FCE/23.txt",
143
+ "complexity/data/archive/cambridge-english-readability/FCE/24.txt",
144
+ "complexity/data/archive/cambridge-english-readability/FCE/25.txt",
145
+ "complexity/data/archive/cambridge-english-readability/FCE/26.txt",
146
+ "complexity/data/archive/cambridge-english-readability/FCE/27.txt",
147
+ "complexity/data/archive/cambridge-english-readability/FCE/28.txt",
148
+ "complexity/data/archive/cambridge-english-readability/FCE/29.txt",
149
+ "complexity/data/archive/cambridge-english-readability/FCE/3.txt",
150
+ "complexity/data/archive/cambridge-english-readability/FCE/30.txt",
151
+ "complexity/data/archive/cambridge-english-readability/FCE/31.txt",
152
+ "complexity/data/archive/cambridge-english-readability/FCE/32.txt",
153
+ "complexity/data/archive/cambridge-english-readability/FCE/33.txt",
154
+ "complexity/data/archive/cambridge-english-readability/FCE/34.txt",
155
+ "complexity/data/archive/cambridge-english-readability/FCE/35.txt",
156
+ "complexity/data/archive/cambridge-english-readability/FCE/36.txt",
157
+ "complexity/data/archive/cambridge-english-readability/FCE/37.txt",
158
+ "complexity/data/archive/cambridge-english-readability/FCE/38.txt",
159
+ "complexity/data/archive/cambridge-english-readability/FCE/39.txt",
160
+ "complexity/data/archive/cambridge-english-readability/FCE/4.txt",
161
+ "complexity/data/archive/cambridge-english-readability/FCE/40.txt",
162
+ "complexity/data/archive/cambridge-english-readability/FCE/41.txt",
163
+ "complexity/data/archive/cambridge-english-readability/FCE/42.txt",
164
+ "complexity/data/archive/cambridge-english-readability/FCE/43.txt",
165
+ "complexity/data/archive/cambridge-english-readability/FCE/44.txt",
166
+ "complexity/data/archive/cambridge-english-readability/FCE/45.txt",
167
+ "complexity/data/archive/cambridge-english-readability/FCE/46.txt",
168
+ "complexity/data/archive/cambridge-english-readability/FCE/47.txt",
169
+ "complexity/data/archive/cambridge-english-readability/FCE/48.txt",
170
+ "complexity/data/archive/cambridge-english-readability/FCE/49.txt",
171
+ "complexity/data/archive/cambridge-english-readability/FCE/5.txt",
172
+ "complexity/data/archive/cambridge-english-readability/FCE/50.txt",
173
+ "complexity/data/archive/cambridge-english-readability/FCE/51.txt",
174
+ "complexity/data/archive/cambridge-english-readability/FCE/52.txt",
175
+ "complexity/data/archive/cambridge-english-readability/FCE/53.txt",
176
+ "complexity/data/archive/cambridge-english-readability/FCE/54.txt",
177
+ "complexity/data/archive/cambridge-english-readability/FCE/55.txt",
178
+ "complexity/data/archive/cambridge-english-readability/FCE/56.txt",
179
+ "complexity/data/archive/cambridge-english-readability/FCE/57.txt",
180
+ "complexity/data/archive/cambridge-english-readability/FCE/58.txt",
181
+ "complexity/data/archive/cambridge-english-readability/FCE/59.txt",
182
+ "complexity/data/archive/cambridge-english-readability/FCE/6.txt",
183
+ "complexity/data/archive/cambridge-english-readability/FCE/60.txt",
184
+ "complexity/data/archive/cambridge-english-readability/FCE/61.txt",
185
+ "complexity/data/archive/cambridge-english-readability/FCE/62.txt",
186
+ "complexity/data/archive/cambridge-english-readability/FCE/63.txt",
187
+ "complexity/data/archive/cambridge-english-readability/FCE/64.txt",
188
+ "complexity/data/archive/cambridge-english-readability/FCE/65.txt",
189
+ "complexity/data/archive/cambridge-english-readability/FCE/66.txt",
190
+ "complexity/data/archive/cambridge-english-readability/FCE/67.txt",
191
+ "complexity/data/archive/cambridge-english-readability/FCE/7.txt",
192
+ "complexity/data/archive/cambridge-english-readability/FCE/8.txt",
193
+ "complexity/data/archive/cambridge-english-readability/FCE/9.txt",
194
+ "complexity/data/archive/cambridge-english-readability/FCE.txt",
195
+ "complexity/data/archive/cambridge-english-readability/FCE_raw.txt",
196
+ "complexity/data/archive/cambridge-english-readability/KET/1.txt",
197
+ "complexity/data/archive/cambridge-english-readability/KET/10.txt",
198
+ "complexity/data/archive/cambridge-english-readability/KET/11.txt",
199
+ "complexity/data/archive/cambridge-english-readability/KET/12.txt",
200
+ "complexity/data/archive/cambridge-english-readability/KET/13.txt",
201
+ "complexity/data/archive/cambridge-english-readability/KET/14.txt",
202
+ "complexity/data/archive/cambridge-english-readability/KET/15.txt",
203
+ "complexity/data/archive/cambridge-english-readability/KET/16.txt",
204
+ "complexity/data/archive/cambridge-english-readability/KET/17.txt",
205
+ "complexity/data/archive/cambridge-english-readability/KET/18.txt",
206
+ "complexity/data/archive/cambridge-english-readability/KET/19.txt",
207
+ "complexity/data/archive/cambridge-english-readability/KET/2.txt",
208
+ "complexity/data/archive/cambridge-english-readability/KET/20.txt",
209
+ "complexity/data/archive/cambridge-english-readability/KET/21.txt",
210
+ "complexity/data/archive/cambridge-english-readability/KET/22.txt",
211
+ "complexity/data/archive/cambridge-english-readability/KET/23.txt",
212
+ "complexity/data/archive/cambridge-english-readability/KET/24.txt",
213
+ "complexity/data/archive/cambridge-english-readability/KET/25.txt",
214
+ "complexity/data/archive/cambridge-english-readability/KET/26.txt",
215
+ "complexity/data/archive/cambridge-english-readability/KET/27.txt",
216
+ "complexity/data/archive/cambridge-english-readability/KET/28.txt",
217
+ "complexity/data/archive/cambridge-english-readability/KET/29.txt",
218
+ "complexity/data/archive/cambridge-english-readability/KET/3.txt",
219
+ "complexity/data/archive/cambridge-english-readability/KET/30.txt",
220
+ "complexity/data/archive/cambridge-english-readability/KET/31.txt",
221
+ "complexity/data/archive/cambridge-english-readability/KET/32.txt",
222
+ "complexity/data/archive/cambridge-english-readability/KET/33.txt",
223
+ "complexity/data/archive/cambridge-english-readability/KET/34.txt",
224
+ "complexity/data/archive/cambridge-english-readability/KET/35.txt",
225
+ "complexity/data/archive/cambridge-english-readability/KET/36.txt",
226
+ "complexity/data/archive/cambridge-english-readability/KET/37.txt",
227
+ "complexity/data/archive/cambridge-english-readability/KET/38.txt",
228
+ "complexity/data/archive/cambridge-english-readability/KET/39.txt",
229
+ "complexity/data/archive/cambridge-english-readability/KET/4.txt",
230
+ "complexity/data/archive/cambridge-english-readability/KET/40.txt",
231
+ "complexity/data/archive/cambridge-english-readability/KET/41.txt",
232
+ "complexity/data/archive/cambridge-english-readability/KET/42.txt",
233
+ "complexity/data/archive/cambridge-english-readability/KET/43.txt",
234
+ "complexity/data/archive/cambridge-english-readability/KET/44.txt",
235
+ "complexity/data/archive/cambridge-english-readability/KET/45.txt",
236
+ "complexity/data/archive/cambridge-english-readability/KET/46.txt",
237
+ "complexity/data/archive/cambridge-english-readability/KET/47.txt",
238
+ "complexity/data/archive/cambridge-english-readability/KET/48.txt",
239
+ "complexity/data/archive/cambridge-english-readability/KET/49.txt",
240
+ "complexity/data/archive/cambridge-english-readability/KET/5.txt",
241
+ "complexity/data/archive/cambridge-english-readability/KET/50.txt",
242
+ "complexity/data/archive/cambridge-english-readability/KET/51.txt",
243
+ "complexity/data/archive/cambridge-english-readability/KET/52.txt",
244
+ "complexity/data/archive/cambridge-english-readability/KET/53.txt",
245
+ "complexity/data/archive/cambridge-english-readability/KET/54.txt",
246
+ "complexity/data/archive/cambridge-english-readability/KET/55.txt",
247
+ "complexity/data/archive/cambridge-english-readability/KET/56.txt",
248
+ "complexity/data/archive/cambridge-english-readability/KET/57.txt",
249
+ "complexity/data/archive/cambridge-english-readability/KET/58.txt",
250
+ "complexity/data/archive/cambridge-english-readability/KET/59.txt",
251
+ "complexity/data/archive/cambridge-english-readability/KET/6.txt",
252
+ "complexity/data/archive/cambridge-english-readability/KET/60.txt",
253
+ "complexity/data/archive/cambridge-english-readability/KET/61.txt",
254
+ "complexity/data/archive/cambridge-english-readability/KET/7.txt",
255
+ "complexity/data/archive/cambridge-english-readability/KET/8.txt",
256
+ "complexity/data/archive/cambridge-english-readability/KET/9.txt",
257
+ "complexity/data/archive/cambridge-english-readability/KET.txt",
258
+ "complexity/data/archive/cambridge-english-readability/KET_raw.txt",
259
+ "complexity/data/archive/cambridge-english-readability/PET/1.txt",
260
+ "complexity/data/archive/cambridge-english-readability/PET/10.txt",
261
+ "complexity/data/archive/cambridge-english-readability/PET/11.txt",
262
+ "complexity/data/archive/cambridge-english-readability/PET/12.txt",
263
+ "complexity/data/archive/cambridge-english-readability/PET/13.txt",
264
+ "complexity/data/archive/cambridge-english-readability/PET/14.txt",
265
+ "complexity/data/archive/cambridge-english-readability/PET/15.txt",
266
+ "complexity/data/archive/cambridge-english-readability/PET/16.txt",
267
+ "complexity/data/archive/cambridge-english-readability/PET/17.txt",
268
+ "complexity/data/archive/cambridge-english-readability/PET/18.txt",
269
+ "complexity/data/archive/cambridge-english-readability/PET/19.txt",
270
+ "complexity/data/archive/cambridge-english-readability/PET/2.txt",
271
+ "complexity/data/archive/cambridge-english-readability/PET/20.txt",
272
+ "complexity/data/archive/cambridge-english-readability/PET/21.txt",
273
+ "complexity/data/archive/cambridge-english-readability/PET/22.txt",
274
+ "complexity/data/archive/cambridge-english-readability/PET/23.txt",
275
+ "complexity/data/archive/cambridge-english-readability/PET/24.txt",
276
+ "complexity/data/archive/cambridge-english-readability/PET/25.txt",
277
+ "complexity/data/archive/cambridge-english-readability/PET/26.txt",
278
+ "complexity/data/archive/cambridge-english-readability/PET/27.txt",
279
+ "complexity/data/archive/cambridge-english-readability/PET/28.txt",
280
+ "complexity/data/archive/cambridge-english-readability/PET/29.txt",
281
+ "complexity/data/archive/cambridge-english-readability/PET/3.txt",
282
+ "complexity/data/archive/cambridge-english-readability/PET/30.txt",
283
+ "complexity/data/archive/cambridge-english-readability/PET/31.txt",
284
+ "complexity/data/archive/cambridge-english-readability/PET/32.txt",
285
+ "complexity/data/archive/cambridge-english-readability/PET/33.txt",
286
+ "complexity/data/archive/cambridge-english-readability/PET/34.txt",
287
+ "complexity/data/archive/cambridge-english-readability/PET/35.txt",
288
+ "complexity/data/archive/cambridge-english-readability/PET/36.txt",
289
+ "complexity/data/archive/cambridge-english-readability/PET/37.txt",
290
+ "complexity/data/archive/cambridge-english-readability/PET/38.txt",
291
+ "complexity/data/archive/cambridge-english-readability/PET/39.txt",
292
+ "complexity/data/archive/cambridge-english-readability/PET/4.txt",
293
+ "complexity/data/archive/cambridge-english-readability/PET/40.txt",
294
+ "complexity/data/archive/cambridge-english-readability/PET/41.txt",
295
+ "complexity/data/archive/cambridge-english-readability/PET/42.txt",
296
+ "complexity/data/archive/cambridge-english-readability/PET/43.txt",
297
+ "complexity/data/archive/cambridge-english-readability/PET/44.txt",
298
+ "complexity/data/archive/cambridge-english-readability/PET/45.txt",
299
+ "complexity/data/archive/cambridge-english-readability/PET/46.txt",
300
+ "complexity/data/archive/cambridge-english-readability/PET/47.txt",
301
+ "complexity/data/archive/cambridge-english-readability/PET/48.txt",
302
+ "complexity/data/archive/cambridge-english-readability/PET/49.txt",
303
+ "complexity/data/archive/cambridge-english-readability/PET/5.txt",
304
+ "complexity/data/archive/cambridge-english-readability/PET/50.txt",
305
+ "complexity/data/archive/cambridge-english-readability/PET/51.txt",
306
+ "complexity/data/archive/cambridge-english-readability/PET/52.txt",
307
+ "complexity/data/archive/cambridge-english-readability/PET/53.txt",
308
+ "complexity/data/archive/cambridge-english-readability/PET/54.txt",
309
+ "complexity/data/archive/cambridge-english-readability/PET/55.txt",
310
+ "complexity/data/archive/cambridge-english-readability/PET/6.txt",
311
+ "complexity/data/archive/cambridge-english-readability/PET/7.txt",
312
+ "complexity/data/archive/cambridge-english-readability/PET/8.txt",
313
+ "complexity/data/archive/cambridge-english-readability/PET/9.txt",
314
+ "complexity/data/archive/cambridge-english-readability/PET.txt",
315
+ "complexity/data/archive/cambridge-english-readability/PET_raw.txt",
316
+ "complexity/data/archive/cambridge-english-readability/source.txt",
317
+ "complexity/data/archive/one-stop-corpus-english/Adv/1.txt",
318
+ "complexity/data/archive/one-stop-corpus-english/Adv/10.txt",
319
+ "complexity/data/archive/one-stop-corpus-english/Adv/100.txt",
320
+ "complexity/data/archive/one-stop-corpus-english/Adv/101.txt",
321
+ "complexity/data/archive/one-stop-corpus-english/Adv/102.txt",
322
+ "complexity/data/archive/one-stop-corpus-english/Adv/103.txt",
323
+ "complexity/data/archive/one-stop-corpus-english/Adv/104.txt",
324
+ "complexity/data/archive/one-stop-corpus-english/Adv/105.txt",
325
+ "complexity/data/archive/one-stop-corpus-english/Adv/106.txt",
326
+ "complexity/data/archive/one-stop-corpus-english/Adv/107.txt",
327
+ "complexity/data/archive/one-stop-corpus-english/Adv/108.txt",
328
+ "complexity/data/archive/one-stop-corpus-english/Adv/109.txt",
329
+ "complexity/data/archive/one-stop-corpus-english/Adv/11.txt",
330
+ "complexity/data/archive/one-stop-corpus-english/Adv/110.txt",
331
+ "complexity/data/archive/one-stop-corpus-english/Adv/111.txt",
332
+ "complexity/data/archive/one-stop-corpus-english/Adv/112.txt",
333
+ "complexity/data/archive/one-stop-corpus-english/Adv/113.txt",
334
+ "complexity/data/archive/one-stop-corpus-english/Adv/114.txt",
335
+ "complexity/data/archive/one-stop-corpus-english/Adv/115.txt",
336
+ "complexity/data/archive/one-stop-corpus-english/Adv/116.txt",
337
+ "complexity/data/archive/one-stop-corpus-english/Adv/117.txt",
338
+ "complexity/data/archive/one-stop-corpus-english/Adv/118.txt",
339
+ "complexity/data/archive/one-stop-corpus-english/Adv/119.txt",
340
+ "complexity/data/archive/one-stop-corpus-english/Adv/12.txt",
341
+ "complexity/data/archive/one-stop-corpus-english/Adv/120.txt",
342
+ "complexity/data/archive/one-stop-corpus-english/Adv/121.txt",
343
+ "complexity/data/archive/one-stop-corpus-english/Adv/122.txt",
344
+ "complexity/data/archive/one-stop-corpus-english/Adv/123.txt",
345
+ "complexity/data/archive/one-stop-corpus-english/Adv/124.txt",
346
+ "complexity/data/archive/one-stop-corpus-english/Adv/125.txt",
347
+ "complexity/data/archive/one-stop-corpus-english/Adv/126.txt",
348
+ "complexity/data/archive/one-stop-corpus-english/Adv/127.txt",
349
+ "complexity/data/archive/one-stop-corpus-english/Adv/128.txt",
350
+ "complexity/data/archive/one-stop-corpus-english/Adv/129.txt",
351
+ "complexity/data/archive/one-stop-corpus-english/Adv/13.txt",
352
+ "complexity/data/archive/one-stop-corpus-english/Adv/130.txt",
353
+ "complexity/data/archive/one-stop-corpus-english/Adv/131.txt",
354
+ "complexity/data/archive/one-stop-corpus-english/Adv/132.txt",
355
+ "complexity/data/archive/one-stop-corpus-english/Adv/133.txt",
356
+ "complexity/data/archive/one-stop-corpus-english/Adv/134.txt",
357
+ "complexity/data/archive/one-stop-corpus-english/Adv/135.txt",
358
+ "complexity/data/archive/one-stop-corpus-english/Adv/136.txt",
359
+ "complexity/data/archive/one-stop-corpus-english/Adv/137.txt",
360
+ "complexity/data/archive/one-stop-corpus-english/Adv/138.txt",
361
+ "complexity/data/archive/one-stop-corpus-english/Adv/139.txt",
362
+ "complexity/data/archive/one-stop-corpus-english/Adv/14.txt",
363
+ "complexity/data/archive/one-stop-corpus-english/Adv/140.txt",
364
+ "complexity/data/archive/one-stop-corpus-english/Adv/141.txt",
365
+ "complexity/data/archive/one-stop-corpus-english/Adv/142.txt",
366
+ "complexity/data/archive/one-stop-corpus-english/Adv/143.txt",
367
+ "complexity/data/archive/one-stop-corpus-english/Adv/144.txt",
368
+ "complexity/data/archive/one-stop-corpus-english/Adv/145.txt",
369
+ "complexity/data/archive/one-stop-corpus-english/Adv/146.txt",
370
+ "complexity/data/archive/one-stop-corpus-english/Adv/147.txt",
371
+ "complexity/data/archive/one-stop-corpus-english/Adv/148.txt",
372
+ "complexity/data/archive/one-stop-corpus-english/Adv/149.txt",
373
+ "complexity/data/archive/one-stop-corpus-english/Adv/15.txt",
374
+ "complexity/data/archive/one-stop-corpus-english/Adv/150.txt",
375
+ "complexity/data/archive/one-stop-corpus-english/Adv/151.txt",
376
+ "complexity/data/archive/one-stop-corpus-english/Adv/152.txt",
377
+ "complexity/data/archive/one-stop-corpus-english/Adv/153.txt",
378
+ "complexity/data/archive/one-stop-corpus-english/Adv/154.txt",
379
+ "complexity/data/archive/one-stop-corpus-english/Adv/155.txt",
380
+ "complexity/data/archive/one-stop-corpus-english/Adv/156.txt",
381
+ "complexity/data/archive/one-stop-corpus-english/Adv/157.txt",
382
+ "complexity/data/archive/one-stop-corpus-english/Adv/158.txt",
383
+ "complexity/data/archive/one-stop-corpus-english/Adv/159.txt",
384
+ "complexity/data/archive/one-stop-corpus-english/Adv/16.txt",
385
+ "complexity/data/archive/one-stop-corpus-english/Adv/160.txt",
386
+ "complexity/data/archive/one-stop-corpus-english/Adv/161.txt",
387
+ "complexity/data/archive/one-stop-corpus-english/Adv/17.txt",
388
+ "complexity/data/archive/one-stop-corpus-english/Adv/18.txt",
389
+ "complexity/data/archive/one-stop-corpus-english/Adv/19.txt",
390
+ "complexity/data/archive/one-stop-corpus-english/Adv/2.txt",
391
+ "complexity/data/archive/one-stop-corpus-english/Adv/20.txt",
392
+ "complexity/data/archive/one-stop-corpus-english/Adv/21.txt",
393
+ "complexity/data/archive/one-stop-corpus-english/Adv/22.txt",
394
+ "complexity/data/archive/one-stop-corpus-english/Adv/23.txt",
395
+ "complexity/data/archive/one-stop-corpus-english/Adv/24.txt",
396
+ "complexity/data/archive/one-stop-corpus-english/Adv/25.txt",
397
+ "complexity/data/archive/one-stop-corpus-english/Adv/26.txt",
398
+ "complexity/data/archive/one-stop-corpus-english/Adv/27.txt",
399
+ "complexity/data/archive/one-stop-corpus-english/Adv/28.txt",
400
+ "complexity/data/archive/one-stop-corpus-english/Adv/29.txt",
401
+ "complexity/data/archive/one-stop-corpus-english/Adv/3.txt",
402
+ "complexity/data/archive/one-stop-corpus-english/Adv/30.txt",
403
+ "complexity/data/archive/one-stop-corpus-english/Adv/31.txt",
404
+ "complexity/data/archive/one-stop-corpus-english/Adv/32.txt",
405
+ "complexity/data/archive/one-stop-corpus-english/Adv/33.txt",
406
+ "complexity/data/archive/one-stop-corpus-english/Adv/34.txt",
407
+ "complexity/data/archive/one-stop-corpus-english/Adv/35.txt",
408
+ "complexity/data/archive/one-stop-corpus-english/Adv/36.txt",
409
+ "complexity/data/archive/one-stop-corpus-english/Adv/37.txt",
410
+ "complexity/data/archive/one-stop-corpus-english/Adv/38.txt",
411
+ "complexity/data/archive/one-stop-corpus-english/Adv/39.txt",
412
+ "complexity/data/archive/one-stop-corpus-english/Adv/4.txt",
413
+ "complexity/data/archive/one-stop-corpus-english/Adv/40.txt",
414
+ "complexity/data/archive/one-stop-corpus-english/Adv/41.txt",
415
+ "complexity/data/archive/one-stop-corpus-english/Adv/42.txt",
416
+ "complexity/data/archive/one-stop-corpus-english/Adv/43.txt",
417
+ "complexity/data/archive/one-stop-corpus-english/Adv/44.txt",
418
+ "complexity/data/archive/one-stop-corpus-english/Adv/45.txt",
419
+ "complexity/data/archive/one-stop-corpus-english/Adv/46.txt",
420
+ "complexity/data/archive/one-stop-corpus-english/Adv/47.txt",
421
+ "complexity/data/archive/one-stop-corpus-english/Adv/48.txt",
422
+ "complexity/data/archive/one-stop-corpus-english/Adv/49.txt",
423
+ "complexity/data/archive/one-stop-corpus-english/Adv/5.txt",
424
+ "complexity/data/archive/one-stop-corpus-english/Adv/50.txt",
425
+ "complexity/data/archive/one-stop-corpus-english/Adv/51.txt",
426
+ "complexity/data/archive/one-stop-corpus-english/Adv/52.txt",
427
+ "complexity/data/archive/one-stop-corpus-english/Adv/53.txt",
428
+ "complexity/data/archive/one-stop-corpus-english/Adv/54.txt",
429
+ "complexity/data/archive/one-stop-corpus-english/Adv/55.txt",
430
+ "complexity/data/archive/one-stop-corpus-english/Adv/56.txt",
431
+ "complexity/data/archive/one-stop-corpus-english/Adv/57.txt",
432
+ "complexity/data/archive/one-stop-corpus-english/Adv/58.txt",
433
+ "complexity/data/archive/one-stop-corpus-english/Adv/59.txt",
434
+ "complexity/data/archive/one-stop-corpus-english/Adv/6.txt",
435
+ "complexity/data/archive/one-stop-corpus-english/Adv/60.txt",
436
+ "complexity/data/archive/one-stop-corpus-english/Adv/61.txt",
437
+ "complexity/data/archive/one-stop-corpus-english/Adv/62.txt",
438
+ "complexity/data/archive/one-stop-corpus-english/Adv/63.txt",
439
+ "complexity/data/archive/one-stop-corpus-english/Adv/64.txt",
440
+ "complexity/data/archive/one-stop-corpus-english/Adv/65.txt",
441
+ "complexity/data/archive/one-stop-corpus-english/Adv/66.txt",
442
+ "complexity/data/archive/one-stop-corpus-english/Adv/67.txt",
443
+ "complexity/data/archive/one-stop-corpus-english/Adv/68.txt",
444
+ "complexity/data/archive/one-stop-corpus-english/Adv/69.txt",
445
+ "complexity/data/archive/one-stop-corpus-english/Adv/7.txt",
446
+ "complexity/data/archive/one-stop-corpus-english/Adv/70.txt",
447
+ "complexity/data/archive/one-stop-corpus-english/Adv/71.txt",
448
+ "complexity/data/archive/one-stop-corpus-english/Adv/72.txt",
449
+ "complexity/data/archive/one-stop-corpus-english/Adv/73.txt",
450
+ "complexity/data/archive/one-stop-corpus-english/Adv/74.txt",
451
+ "complexity/data/archive/one-stop-corpus-english/Adv/75.txt",
452
+ "complexity/data/archive/one-stop-corpus-english/Adv/76.txt",
453
+ "complexity/data/archive/one-stop-corpus-english/Adv/77.txt",
454
+ "complexity/data/archive/one-stop-corpus-english/Adv/78.txt",
455
+ "complexity/data/archive/one-stop-corpus-english/Adv/79.txt",
456
+ "complexity/data/archive/one-stop-corpus-english/Adv/8.txt",
457
+ "complexity/data/archive/one-stop-corpus-english/Adv/80.txt",
458
+ "complexity/data/archive/one-stop-corpus-english/Adv/81.txt",
459
+ "complexity/data/archive/one-stop-corpus-english/Adv/82.txt",
460
+ "complexity/data/archive/one-stop-corpus-english/Adv/83.txt",
461
+ "complexity/data/archive/one-stop-corpus-english/Adv/84.txt",
462
+ "complexity/data/archive/one-stop-corpus-english/Adv/85.txt",
463
+ "complexity/data/archive/one-stop-corpus-english/Adv/86.txt",
464
+ "complexity/data/archive/one-stop-corpus-english/Adv/87.txt",
465
+ "complexity/data/archive/one-stop-corpus-english/Adv/88.txt",
466
+ "complexity/data/archive/one-stop-corpus-english/Adv/89.txt",
467
+ "complexity/data/archive/one-stop-corpus-english/Adv/9.txt",
468
+ "complexity/data/archive/one-stop-corpus-english/Adv/90.txt",
469
+ "complexity/data/archive/one-stop-corpus-english/Adv/91.txt",
470
+ "complexity/data/archive/one-stop-corpus-english/Adv/92.txt",
471
+ "complexity/data/archive/one-stop-corpus-english/Adv/93.txt",
472
+ "complexity/data/archive/one-stop-corpus-english/Adv/94.txt",
473
+ "complexity/data/archive/one-stop-corpus-english/Adv/95.txt",
474
+ "complexity/data/archive/one-stop-corpus-english/Adv/96.txt",
475
+ "complexity/data/archive/one-stop-corpus-english/Adv/97.txt",
476
+ "complexity/data/archive/one-stop-corpus-english/Adv/98.txt",
477
+ "complexity/data/archive/one-stop-corpus-english/Adv/99.txt",
478
+ "complexity/data/archive/one-stop-corpus-english/Adv.txt",
479
+ "complexity/data/archive/one-stop-corpus-english/Adv_raw.txt",
480
+ "complexity/data/archive/one-stop-corpus-english/Ele/1.txt",
481
+ "complexity/data/archive/one-stop-corpus-english/Ele/10.txt",
482
+ "complexity/data/archive/one-stop-corpus-english/Ele/100.txt",
483
+ "complexity/data/archive/one-stop-corpus-english/Ele/101.txt",
484
+ "complexity/data/archive/one-stop-corpus-english/Ele/102.txt",
485
+ "complexity/data/archive/one-stop-corpus-english/Ele/103.txt",
486
+ "complexity/data/archive/one-stop-corpus-english/Ele/104.txt",
487
+ "complexity/data/archive/one-stop-corpus-english/Ele/105.txt",
488
+ "complexity/data/archive/one-stop-corpus-english/Ele/106.txt",
489
+ "complexity/data/archive/one-stop-corpus-english/Ele/107.txt",
490
+ "complexity/data/archive/one-stop-corpus-english/Ele/108.txt",
491
+ "complexity/data/archive/one-stop-corpus-english/Ele/109.txt",
492
+ "complexity/data/archive/one-stop-corpus-english/Ele/11.txt",
493
+ "complexity/data/archive/one-stop-corpus-english/Ele/110.txt",
494
+ "complexity/data/archive/one-stop-corpus-english/Ele/111.txt",
495
+ "complexity/data/archive/one-stop-corpus-english/Ele/112.txt",
496
+ "complexity/data/archive/one-stop-corpus-english/Ele/113.txt",
497
+ "complexity/data/archive/one-stop-corpus-english/Ele/114.txt",
498
+ "complexity/data/archive/one-stop-corpus-english/Ele/115.txt",
499
+ "complexity/data/archive/one-stop-corpus-english/Ele/116.txt",
500
+ "complexity/data/archive/one-stop-corpus-english/Ele/117.txt",
501
+ "complexity/data/archive/one-stop-corpus-english/Ele/118.txt",
502
+ "complexity/data/archive/one-stop-corpus-english/Ele/119.txt",
503
+ "complexity/data/archive/one-stop-corpus-english/Ele/12.txt",
504
+ "complexity/data/archive/one-stop-corpus-english/Ele/120.txt",
505
+ "complexity/data/archive/one-stop-corpus-english/Ele/121.txt",
506
+ "complexity/data/archive/one-stop-corpus-english/Ele/122.txt",
507
+ "complexity/data/archive/one-stop-corpus-english/Ele/123.txt",
508
+ "complexity/data/archive/one-stop-corpus-english/Ele/124.txt",
509
+ "complexity/data/archive/one-stop-corpus-english/Ele/125.txt",
510
+ "complexity/data/archive/one-stop-corpus-english/Ele/126.txt",
511
+ "complexity/data/archive/one-stop-corpus-english/Ele/127.txt",
512
+ "complexity/data/archive/one-stop-corpus-english/Ele/128.txt",
513
+ "complexity/data/archive/one-stop-corpus-english/Ele/129.txt",
514
+ "complexity/data/archive/one-stop-corpus-english/Ele/13.txt",
515
+ "complexity/data/archive/one-stop-corpus-english/Ele/130.txt",
516
+ "complexity/data/archive/one-stop-corpus-english/Ele/131.txt",
517
+ "complexity/data/archive/one-stop-corpus-english/Ele/132.txt",
518
+ "complexity/data/archive/one-stop-corpus-english/Ele/133.txt",
519
+ "complexity/data/archive/one-stop-corpus-english/Ele/134.txt",
520
+ "complexity/data/archive/one-stop-corpus-english/Ele/135.txt",
521
+ "complexity/data/archive/one-stop-corpus-english/Ele/136.txt",
522
+ "complexity/data/archive/one-stop-corpus-english/Ele/137.txt",
523
+ "complexity/data/archive/one-stop-corpus-english/Ele/138.txt",
524
+ "complexity/data/archive/one-stop-corpus-english/Ele/139.txt",
525
+ "complexity/data/archive/one-stop-corpus-english/Ele/14.txt",
526
+ "complexity/data/archive/one-stop-corpus-english/Ele/140.txt",
527
+ "complexity/data/archive/one-stop-corpus-english/Ele/141.txt",
528
+ "complexity/data/archive/one-stop-corpus-english/Ele/142.txt",
529
+ "complexity/data/archive/one-stop-corpus-english/Ele/143.txt",
530
+ "complexity/data/archive/one-stop-corpus-english/Ele/144.txt",
531
+ "complexity/data/archive/one-stop-corpus-english/Ele/145.txt",
532
+ "complexity/data/archive/one-stop-corpus-english/Ele/146.txt",
533
+ "complexity/data/archive/one-stop-corpus-english/Ele/147.txt",
534
+ "complexity/data/archive/one-stop-corpus-english/Ele/148.txt",
535
+ "complexity/data/archive/one-stop-corpus-english/Ele/149.txt",
536
+ "complexity/data/archive/one-stop-corpus-english/Ele/15.txt",
537
+ "complexity/data/archive/one-stop-corpus-english/Ele/150.txt",
538
+ "complexity/data/archive/one-stop-corpus-english/Ele/151.txt",
539
+ "complexity/data/archive/one-stop-corpus-english/Ele/152.txt",
540
+ "complexity/data/archive/one-stop-corpus-english/Ele/153.txt",
541
+ "complexity/data/archive/one-stop-corpus-english/Ele/154.txt",
542
+ "complexity/data/archive/one-stop-corpus-english/Ele/155.txt",
543
+ "complexity/data/archive/one-stop-corpus-english/Ele/156.txt",
544
+ "complexity/data/archive/one-stop-corpus-english/Ele/157.txt",
545
+ "complexity/data/archive/one-stop-corpus-english/Ele/158.txt",
546
+ "complexity/data/archive/one-stop-corpus-english/Ele/159.txt",
547
+ "complexity/data/archive/one-stop-corpus-english/Ele/16.txt",
548
+ "complexity/data/archive/one-stop-corpus-english/Ele/160.txt",
549
+ "complexity/data/archive/one-stop-corpus-english/Ele/161.txt",
550
+ "complexity/data/archive/one-stop-corpus-english/Ele/162.txt",
551
+ "complexity/data/archive/one-stop-corpus-english/Ele/163.txt",
552
+ "complexity/data/archive/one-stop-corpus-english/Ele/164.txt",
553
+ "complexity/data/archive/one-stop-corpus-english/Ele/165.txt",
554
+ "complexity/data/archive/one-stop-corpus-english/Ele/166.txt",
555
+ "complexity/data/archive/one-stop-corpus-english/Ele/167.txt",
556
+ "complexity/data/archive/one-stop-corpus-english/Ele/168.txt",
557
+ "complexity/data/archive/one-stop-corpus-english/Ele/169.txt",
558
+ "complexity/data/archive/one-stop-corpus-english/Ele/17.txt",
559
+ "complexity/data/archive/one-stop-corpus-english/Ele/170.txt",
560
+ "complexity/data/archive/one-stop-corpus-english/Ele/171.txt",
561
+ "complexity/data/archive/one-stop-corpus-english/Ele/172.txt",
562
+ "complexity/data/archive/one-stop-corpus-english/Ele/173.txt",
563
+ "complexity/data/archive/one-stop-corpus-english/Ele/174.txt",
564
+ "complexity/data/archive/one-stop-corpus-english/Ele/175.txt",
565
+ "complexity/data/archive/one-stop-corpus-english/Ele/176.txt",
566
+ "complexity/data/archive/one-stop-corpus-english/Ele/177.txt",
567
+ "complexity/data/archive/one-stop-corpus-english/Ele/178.txt",
568
+ "complexity/data/archive/one-stop-corpus-english/Ele/18.txt",
569
+ "complexity/data/archive/one-stop-corpus-english/Ele/19.txt",
570
+ "complexity/data/archive/one-stop-corpus-english/Ele/2.txt",
571
+ "complexity/data/archive/one-stop-corpus-english/Ele/20.txt",
572
+ "complexity/data/archive/one-stop-corpus-english/Ele/21.txt",
573
+ "complexity/data/archive/one-stop-corpus-english/Ele/22.txt",
574
+ "complexity/data/archive/one-stop-corpus-english/Ele/23.txt",
575
+ "complexity/data/archive/one-stop-corpus-english/Ele/24.txt",
576
+ "complexity/data/archive/one-stop-corpus-english/Ele/25.txt",
577
+ "complexity/data/archive/one-stop-corpus-english/Ele/26.txt",
578
+ "complexity/data/archive/one-stop-corpus-english/Ele/27.txt",
579
+ "complexity/data/archive/one-stop-corpus-english/Ele/28.txt",
580
+ "complexity/data/archive/one-stop-corpus-english/Ele/29.txt",
581
+ "complexity/data/archive/one-stop-corpus-english/Ele/3.txt",
582
+ "complexity/data/archive/one-stop-corpus-english/Ele/30.txt",
583
+ "complexity/data/archive/one-stop-corpus-english/Ele/31.txt",
584
+ "complexity/data/archive/one-stop-corpus-english/Ele/32.txt",
585
+ "complexity/data/archive/one-stop-corpus-english/Ele/33.txt",
586
+ "complexity/data/archive/one-stop-corpus-english/Ele/34.txt",
587
+ "complexity/data/archive/one-stop-corpus-english/Ele/35.txt",
588
+ "complexity/data/archive/one-stop-corpus-english/Ele/36.txt",
589
+ "complexity/data/archive/one-stop-corpus-english/Ele/37.txt",
590
+ "complexity/data/archive/one-stop-corpus-english/Ele/38.txt",
591
+ "complexity/data/archive/one-stop-corpus-english/Ele/39.txt",
592
+ "complexity/data/archive/one-stop-corpus-english/Ele/4.txt",
593
+ "complexity/data/archive/one-stop-corpus-english/Ele/40.txt",
594
+ "complexity/data/archive/one-stop-corpus-english/Ele/41.txt",
595
+ "complexity/data/archive/one-stop-corpus-english/Ele/42.txt",
596
+ "complexity/data/archive/one-stop-corpus-english/Ele/43.txt",
597
+ "complexity/data/archive/one-stop-corpus-english/Ele/44.txt",
598
+ "complexity/data/archive/one-stop-corpus-english/Ele/45.txt",
599
+ "complexity/data/archive/one-stop-corpus-english/Ele/46.txt",
600
+ "complexity/data/archive/one-stop-corpus-english/Ele/47.txt",
601
+ "complexity/data/archive/one-stop-corpus-english/Ele/48.txt",
602
+ "complexity/data/archive/one-stop-corpus-english/Ele/49.txt",
603
+ "complexity/data/archive/one-stop-corpus-english/Ele/5.txt",
604
+ "complexity/data/archive/one-stop-corpus-english/Ele/50.txt",
605
+ "complexity/data/archive/one-stop-corpus-english/Ele/51.txt",
606
+ "complexity/data/archive/one-stop-corpus-english/Ele/52.txt",
607
+ "complexity/data/archive/one-stop-corpus-english/Ele/53.txt",
608
+ "complexity/data/archive/one-stop-corpus-english/Ele/54.txt",
609
+ "complexity/data/archive/one-stop-corpus-english/Ele/55.txt",
610
+ "complexity/data/archive/one-stop-corpus-english/Ele/56.txt",
611
+ "complexity/data/archive/one-stop-corpus-english/Ele/57.txt",
612
+ "complexity/data/archive/one-stop-corpus-english/Ele/58.txt",
613
+ "complexity/data/archive/one-stop-corpus-english/Ele/59.txt",
614
+ "complexity/data/archive/one-stop-corpus-english/Ele/6.txt",
615
+ "complexity/data/archive/one-stop-corpus-english/Ele/60.txt",
616
+ "complexity/data/archive/one-stop-corpus-english/Ele/61.txt",
617
+ "complexity/data/archive/one-stop-corpus-english/Ele/62.txt",
618
+ "complexity/data/archive/one-stop-corpus-english/Ele/63.txt",
619
+ "complexity/data/archive/one-stop-corpus-english/Ele/64.txt",
620
+ "complexity/data/archive/one-stop-corpus-english/Ele/65.txt",
621
+ "complexity/data/archive/one-stop-corpus-english/Ele/66.txt",
622
+ "complexity/data/archive/one-stop-corpus-english/Ele/67.txt",
623
+ "complexity/data/archive/one-stop-corpus-english/Ele/68.txt",
624
+ "complexity/data/archive/one-stop-corpus-english/Ele/69.txt",
625
+ "complexity/data/archive/one-stop-corpus-english/Ele/7.txt",
626
+ "complexity/data/archive/one-stop-corpus-english/Ele/70.txt",
627
+ "complexity/data/archive/one-stop-corpus-english/Ele/71.txt",
628
+ "complexity/data/archive/one-stop-corpus-english/Ele/72.txt",
629
+ "complexity/data/archive/one-stop-corpus-english/Ele/73.txt",
630
+ "complexity/data/archive/one-stop-corpus-english/Ele/74.txt",
631
+ "complexity/data/archive/one-stop-corpus-english/Ele/75.txt",
632
+ "complexity/data/archive/one-stop-corpus-english/Ele/76.txt",
633
+ "complexity/data/archive/one-stop-corpus-english/Ele/77.txt",
634
+ "complexity/data/archive/one-stop-corpus-english/Ele/78.txt",
635
+ "complexity/data/archive/one-stop-corpus-english/Ele/79.txt",
636
+ "complexity/data/archive/one-stop-corpus-english/Ele/8.txt",
637
+ "complexity/data/archive/one-stop-corpus-english/Ele/80.txt",
638
+ "complexity/data/archive/one-stop-corpus-english/Ele/81.txt",
639
+ "complexity/data/archive/one-stop-corpus-english/Ele/82.txt",
640
+ "complexity/data/archive/one-stop-corpus-english/Ele/83.txt",
641
+ "complexity/data/archive/one-stop-corpus-english/Ele/84.txt",
642
+ "complexity/data/archive/one-stop-corpus-english/Ele/85.txt",
643
+ "complexity/data/archive/one-stop-corpus-english/Ele/86.txt",
644
+ "complexity/data/archive/one-stop-corpus-english/Ele/87.txt",
645
+ "complexity/data/archive/one-stop-corpus-english/Ele/88.txt",
646
+ "complexity/data/archive/one-stop-corpus-english/Ele/89.txt",
647
+ "complexity/data/archive/one-stop-corpus-english/Ele/9.txt",
648
+ "complexity/data/archive/one-stop-corpus-english/Ele/90.txt",
649
+ "complexity/data/archive/one-stop-corpus-english/Ele/91.txt",
650
+ "complexity/data/archive/one-stop-corpus-english/Ele/92.txt",
651
+ "complexity/data/archive/one-stop-corpus-english/Ele/93.txt",
652
+ "complexity/data/archive/one-stop-corpus-english/Ele/94.txt",
653
+ "complexity/data/archive/one-stop-corpus-english/Ele/95.txt",
654
+ "complexity/data/archive/one-stop-corpus-english/Ele/96.txt",
655
+ "complexity/data/archive/one-stop-corpus-english/Ele/97.txt",
656
+ "complexity/data/archive/one-stop-corpus-english/Ele/98.txt",
657
+ "complexity/data/archive/one-stop-corpus-english/Ele/99.txt",
658
+ "complexity/data/archive/one-stop-corpus-english/Ele.txt",
659
+ "complexity/data/archive/one-stop-corpus-english/Ele_raw.txt",
660
+ "complexity/data/archive/one-stop-corpus-english/Int/1.txt",
661
+ "complexity/data/archive/one-stop-corpus-english/Int/10.txt",
662
+ "complexity/data/archive/one-stop-corpus-english/Int/100.txt",
663
+ "complexity/data/archive/one-stop-corpus-english/Int/101.txt",
664
+ "complexity/data/archive/one-stop-corpus-english/Int/102.txt",
665
+ "complexity/data/archive/one-stop-corpus-english/Int/103.txt",
666
+ "complexity/data/archive/one-stop-corpus-english/Int/104.txt",
667
+ "complexity/data/archive/one-stop-corpus-english/Int/105.txt",
668
+ "complexity/data/archive/one-stop-corpus-english/Int/106.txt",
669
+ "complexity/data/archive/one-stop-corpus-english/Int/107.txt",
670
+ "complexity/data/archive/one-stop-corpus-english/Int/108.txt",
671
+ "complexity/data/archive/one-stop-corpus-english/Int/109.txt",
672
+ "complexity/data/archive/one-stop-corpus-english/Int/11.txt",
673
+ "complexity/data/archive/one-stop-corpus-english/Int/110.txt",
674
+ "complexity/data/archive/one-stop-corpus-english/Int/111.txt",
675
+ "complexity/data/archive/one-stop-corpus-english/Int/112.txt",
676
+ "complexity/data/archive/one-stop-corpus-english/Int/113.txt",
677
+ "complexity/data/archive/one-stop-corpus-english/Int/114.txt",
678
+ "complexity/data/archive/one-stop-corpus-english/Int/115.txt",
679
+ "complexity/data/archive/one-stop-corpus-english/Int/116.txt",
680
+ "complexity/data/archive/one-stop-corpus-english/Int/117.txt",
681
+ "complexity/data/archive/one-stop-corpus-english/Int/118.txt",
682
+ "complexity/data/archive/one-stop-corpus-english/Int/119.txt",
683
+ "complexity/data/archive/one-stop-corpus-english/Int/12.txt",
684
+ "complexity/data/archive/one-stop-corpus-english/Int/120.txt",
685
+ "complexity/data/archive/one-stop-corpus-english/Int/121.txt",
686
+ "complexity/data/archive/one-stop-corpus-english/Int/122.txt",
687
+ "complexity/data/archive/one-stop-corpus-english/Int/123.txt",
688
+ "complexity/data/archive/one-stop-corpus-english/Int/124.txt",
689
+ "complexity/data/archive/one-stop-corpus-english/Int/125.txt",
690
+ "complexity/data/archive/one-stop-corpus-english/Int/126.txt",
691
+ "complexity/data/archive/one-stop-corpus-english/Int/127.txt",
692
+ "complexity/data/archive/one-stop-corpus-english/Int/128.txt",
693
+ "complexity/data/archive/one-stop-corpus-english/Int/129.txt",
694
+ "complexity/data/archive/one-stop-corpus-english/Int/13.txt",
695
+ "complexity/data/archive/one-stop-corpus-english/Int/130.txt",
696
+ "complexity/data/archive/one-stop-corpus-english/Int/131.txt",
697
+ "complexity/data/archive/one-stop-corpus-english/Int/132.txt",
698
+ "complexity/data/archive/one-stop-corpus-english/Int/133.txt",
699
+ "complexity/data/archive/one-stop-corpus-english/Int/134.txt",
700
+ "complexity/data/archive/one-stop-corpus-english/Int/135.txt",
701
+ "complexity/data/archive/one-stop-corpus-english/Int/136.txt",
702
+ "complexity/data/archive/one-stop-corpus-english/Int/137.txt",
703
+ "complexity/data/archive/one-stop-corpus-english/Int/138.txt",
704
+ "complexity/data/archive/one-stop-corpus-english/Int/139.txt",
705
+ "complexity/data/archive/one-stop-corpus-english/Int/14.txt",
706
+ "complexity/data/archive/one-stop-corpus-english/Int/140.txt",
707
+ "complexity/data/archive/one-stop-corpus-english/Int/141.txt",
708
+ "complexity/data/archive/one-stop-corpus-english/Int/142.txt",
709
+ "complexity/data/archive/one-stop-corpus-english/Int/143.txt",
710
+ "complexity/data/archive/one-stop-corpus-english/Int/144.txt",
711
+ "complexity/data/archive/one-stop-corpus-english/Int/145.txt",
712
+ "complexity/data/archive/one-stop-corpus-english/Int/146.txt",
713
+ "complexity/data/archive/one-stop-corpus-english/Int/147.txt",
714
+ "complexity/data/archive/one-stop-corpus-english/Int/148.txt",
715
+ "complexity/data/archive/one-stop-corpus-english/Int/149.txt",
716
+ "complexity/data/archive/one-stop-corpus-english/Int/15.txt",
717
+ "complexity/data/archive/one-stop-corpus-english/Int/150.txt",
718
+ "complexity/data/archive/one-stop-corpus-english/Int/151.txt",
719
+ "complexity/data/archive/one-stop-corpus-english/Int/152.txt",
720
+ "complexity/data/archive/one-stop-corpus-english/Int/153.txt",
721
+ "complexity/data/archive/one-stop-corpus-english/Int/154.txt",
722
+ "complexity/data/archive/one-stop-corpus-english/Int/155.txt",
723
+ "complexity/data/archive/one-stop-corpus-english/Int/156.txt",
724
+ "complexity/data/archive/one-stop-corpus-english/Int/157.txt",
725
+ "complexity/data/archive/one-stop-corpus-english/Int/158.txt",
726
+ "complexity/data/archive/one-stop-corpus-english/Int/159.txt",
727
+ "complexity/data/archive/one-stop-corpus-english/Int/16.txt",
728
+ "complexity/data/archive/one-stop-corpus-english/Int/160.txt",
729
+ "complexity/data/archive/one-stop-corpus-english/Int/161.txt",
730
+ "complexity/data/archive/one-stop-corpus-english/Int/162.txt",
731
+ "complexity/data/archive/one-stop-corpus-english/Int/163.txt",
732
+ "complexity/data/archive/one-stop-corpus-english/Int/164.txt",
733
+ "complexity/data/archive/one-stop-corpus-english/Int/165.txt",
734
+ "complexity/data/archive/one-stop-corpus-english/Int/166.txt",
735
+ "complexity/data/archive/one-stop-corpus-english/Int/167.txt",
736
+ "complexity/data/archive/one-stop-corpus-english/Int/168.txt",
737
+ "complexity/data/archive/one-stop-corpus-english/Int/169.txt",
738
+ "complexity/data/archive/one-stop-corpus-english/Int/17.txt",
739
+ "complexity/data/archive/one-stop-corpus-english/Int/170.txt",
740
+ "complexity/data/archive/one-stop-corpus-english/Int/18.txt",
741
+ "complexity/data/archive/one-stop-corpus-english/Int/19.txt",
742
+ "complexity/data/archive/one-stop-corpus-english/Int/2.txt",
743
+ "complexity/data/archive/one-stop-corpus-english/Int/20.txt",
744
+ "complexity/data/archive/one-stop-corpus-english/Int/21.txt",
745
+ "complexity/data/archive/one-stop-corpus-english/Int/22.txt",
746
+ "complexity/data/archive/one-stop-corpus-english/Int/23.txt",
747
+ "complexity/data/archive/one-stop-corpus-english/Int/24.txt",
748
+ "complexity/data/archive/one-stop-corpus-english/Int/25.txt",
749
+ "complexity/data/archive/one-stop-corpus-english/Int/26.txt",
750
+ "complexity/data/archive/one-stop-corpus-english/Int/27.txt",
751
+ "complexity/data/archive/one-stop-corpus-english/Int/28.txt",
752
+ "complexity/data/archive/one-stop-corpus-english/Int/29.txt",
753
+ "complexity/data/archive/one-stop-corpus-english/Int/3.txt",
754
+ "complexity/data/archive/one-stop-corpus-english/Int/30.txt",
755
+ "complexity/data/archive/one-stop-corpus-english/Int/31.txt",
756
+ "complexity/data/archive/one-stop-corpus-english/Int/32.txt",
757
+ "complexity/data/archive/one-stop-corpus-english/Int/33.txt",
758
+ "complexity/data/archive/one-stop-corpus-english/Int/34.txt",
759
+ "complexity/data/archive/one-stop-corpus-english/Int/35.txt",
760
+ "complexity/data/archive/one-stop-corpus-english/Int/36.txt",
761
+ "complexity/data/archive/one-stop-corpus-english/Int/37.txt",
762
+ "complexity/data/archive/one-stop-corpus-english/Int/38.txt",
763
+ "complexity/data/archive/one-stop-corpus-english/Int/39.txt",
764
+ "complexity/data/archive/one-stop-corpus-english/Int/4.txt",
765
+ "complexity/data/archive/one-stop-corpus-english/Int/40.txt",
766
+ "complexity/data/archive/one-stop-corpus-english/Int/41.txt",
767
+ "complexity/data/archive/one-stop-corpus-english/Int/42.txt",
768
+ "complexity/data/archive/one-stop-corpus-english/Int/43.txt",
769
+ "complexity/data/archive/one-stop-corpus-english/Int/44.txt",
770
+ "complexity/data/archive/one-stop-corpus-english/Int/45.txt",
771
+ "complexity/data/archive/one-stop-corpus-english/Int/46.txt",
772
+ "complexity/data/archive/one-stop-corpus-english/Int/47.txt",
773
+ "complexity/data/archive/one-stop-corpus-english/Int/48.txt",
774
+ "complexity/data/archive/one-stop-corpus-english/Int/49.txt",
775
+ "complexity/data/archive/one-stop-corpus-english/Int/5.txt",
776
+ "complexity/data/archive/one-stop-corpus-english/Int/50.txt",
777
+ "complexity/data/archive/one-stop-corpus-english/Int/51.txt",
778
+ "complexity/data/archive/one-stop-corpus-english/Int/52.txt",
779
+ "complexity/data/archive/one-stop-corpus-english/Int/53.txt",
780
+ "complexity/data/archive/one-stop-corpus-english/Int/54.txt",
781
+ "complexity/data/archive/one-stop-corpus-english/Int/55.txt",
782
+ "complexity/data/archive/one-stop-corpus-english/Int/56.txt",
783
+ "complexity/data/archive/one-stop-corpus-english/Int/57.txt",
784
+ "complexity/data/archive/one-stop-corpus-english/Int/58.txt",
785
+ "complexity/data/archive/one-stop-corpus-english/Int/59.txt",
786
+ "complexity/data/archive/one-stop-corpus-english/Int/6.txt",
787
+ "complexity/data/archive/one-stop-corpus-english/Int/60.txt",
788
+ "complexity/data/archive/one-stop-corpus-english/Int/61.txt",
789
+ "complexity/data/archive/one-stop-corpus-english/Int/62.txt",
790
+ "complexity/data/archive/one-stop-corpus-english/Int/63.txt",
791
+ "complexity/data/archive/one-stop-corpus-english/Int/64.txt",
792
+ "complexity/data/archive/one-stop-corpus-english/Int/65.txt",
793
+ "complexity/data/archive/one-stop-corpus-english/Int/66.txt",
794
+ "complexity/data/archive/one-stop-corpus-english/Int/67.txt",
795
+ "complexity/data/archive/one-stop-corpus-english/Int/68.txt",
796
+ "complexity/data/archive/one-stop-corpus-english/Int/69.txt",
797
+ "complexity/data/archive/one-stop-corpus-english/Int/7.txt",
798
+ "complexity/data/archive/one-stop-corpus-english/Int/70.txt",
799
+ "complexity/data/archive/one-stop-corpus-english/Int/71.txt",
800
+ "complexity/data/archive/one-stop-corpus-english/Int/72.txt",
801
+ "complexity/data/archive/one-stop-corpus-english/Int/73.txt",
802
+ "complexity/data/archive/one-stop-corpus-english/Int/74.txt",
803
+ "complexity/data/archive/one-stop-corpus-english/Int/75.txt",
804
+ "complexity/data/archive/one-stop-corpus-english/Int/76.txt",
805
+ "complexity/data/archive/one-stop-corpus-english/Int/77.txt",
806
+ "complexity/data/archive/one-stop-corpus-english/Int/78.txt",
807
+ "complexity/data/archive/one-stop-corpus-english/Int/79.txt",
808
+ "complexity/data/archive/one-stop-corpus-english/Int/8.txt",
809
+ "complexity/data/archive/one-stop-corpus-english/Int/80.txt",
810
+ "complexity/data/archive/one-stop-corpus-english/Int/81.txt",
811
+ "complexity/data/archive/one-stop-corpus-english/Int/82.txt",
812
+ "complexity/data/archive/one-stop-corpus-english/Int/83.txt",
813
+ "complexity/data/archive/one-stop-corpus-english/Int/84.txt",
814
+ "complexity/data/archive/one-stop-corpus-english/Int/85.txt",
815
+ "complexity/data/archive/one-stop-corpus-english/Int/86.txt",
816
+ "complexity/data/archive/one-stop-corpus-english/Int/87.txt",
817
+ "complexity/data/archive/one-stop-corpus-english/Int/88.txt",
818
+ "complexity/data/archive/one-stop-corpus-english/Int/89.txt",
819
+ "complexity/data/archive/one-stop-corpus-english/Int/9.txt",
820
+ "complexity/data/archive/one-stop-corpus-english/Int/90.txt",
821
+ "complexity/data/archive/one-stop-corpus-english/Int/91.txt",
822
+ "complexity/data/archive/one-stop-corpus-english/Int/92.txt",
823
+ "complexity/data/archive/one-stop-corpus-english/Int/93.txt",
824
+ "complexity/data/archive/one-stop-corpus-english/Int/94.txt",
825
+ "complexity/data/archive/one-stop-corpus-english/Int/95.txt",
826
+ "complexity/data/archive/one-stop-corpus-english/Int/96.txt",
827
+ "complexity/data/archive/one-stop-corpus-english/Int/97.txt",
828
+ "complexity/data/archive/one-stop-corpus-english/Int/98.txt",
829
+ "complexity/data/archive/one-stop-corpus-english/Int/99.txt",
830
+ "complexity/data/archive/one-stop-corpus-english/Int.txt",
831
+ "complexity/data/archive/one-stop-corpus-english/Int_raw.txt",
832
+ "complexity/data/archive/uk-key-stage-readability-for-english-texts/source.txt",
833
+ "complexity/data/archive/\u0441ommonlit-readability-prize/source.txt",
834
+ "complexity/logs/complexity-classification_GloVe_BiLSTM_[train_pool].log",
835
+ "complexity/logs/complexity-classification_GloVe_CNN_[train_pool].log",
836
+ "complexity/logs/complexity-classification_GloVe_MLP_[train_pool].log"
837
+ ],
838
+ "metrics_and_configs": [
839
+ "app/app-models/prod-model-complexity/dashboard/figures/eval-metrics.plotly.json",
840
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_20260307_164217.json",
841
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_20260307_202849.json",
842
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_20260308_105127.json",
843
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_20260308_133743.json",
844
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_20260308_140555.json",
845
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_20260309_151810.json",
846
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_20260310_122220.json",
847
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_20260310_122755.json",
848
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_20260310_133023.json",
849
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_20260310_135252.json",
850
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_20260310_180434.json",
851
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_20260310_182313.json",
852
+ "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_latest.json",
853
+ "complexity/outputs/cross_dataset_eval/classical/asap_aes/majority_class/metrics_20260307_204030.json",
854
+ "complexity/outputs/cross_dataset_eval/classical/asap_aes/majority_class/metrics_latest.json",
855
+ "complexity/outputs/cross_dataset_eval/classical/asap_aes/tf_idf_logreg/metrics_20260307_204016.json",
856
+ "complexity/outputs/cross_dataset_eval/classical/asap_aes/tf_idf_logreg/metrics_latest.json",
857
+ "complexity/outputs/cross_dataset_eval/classical/asap_aes/tf_idf_svc/metrics_20260307_204010.json",
858
+ "complexity/outputs/cross_dataset_eval/classical/asap_aes/tf_idf_svc/metrics_latest.json",
859
+ "complexity/outputs/cross_dataset_eval/classical/asap_aes/tf_idf_xgboost/metrics_20260307_204024.json",
860
+ "complexity/outputs/cross_dataset_eval/classical/asap_aes/tf_idf_xgboost/metrics_latest.json",
861
+ "complexity/outputs/cross_dataset_eval/classical/cambridge/majority_class/metrics_20260307_204004.json",
862
+ "complexity/outputs/cross_dataset_eval/classical/cambridge/majority_class/metrics_latest.json",
863
+ "complexity/outputs/cross_dataset_eval/classical/cambridge/tf_idf_logreg/metrics_20260307_204003.json",
864
+ "complexity/outputs/cross_dataset_eval/classical/cambridge/tf_idf_logreg/metrics_latest.json",
865
+ "complexity/outputs/cross_dataset_eval/classical/cambridge/tf_idf_svc/metrics_20260307_204003.json",
866
+ "complexity/outputs/cross_dataset_eval/classical/cambridge/tf_idf_svc/metrics_latest.json",
867
+ "complexity/outputs/cross_dataset_eval/classical/cambridge/tf_idf_xgboost/metrics_20260307_204003.json",
868
+ "complexity/outputs/cross_dataset_eval/classical/cambridge/tf_idf_xgboost/metrics_latest.json",
869
+ "complexity/outputs/cross_dataset_eval/classical/cerf/majority_class/metrics_20260307_204002.json",
870
+ "complexity/outputs/cross_dataset_eval/classical/cerf/majority_class/metrics_latest.json",
871
+ "complexity/outputs/cross_dataset_eval/classical/cerf/tf_idf_logreg/metrics_20260307_203959.json",
872
+ "complexity/outputs/cross_dataset_eval/classical/cerf/tf_idf_logreg/metrics_latest.json",
873
+ "complexity/outputs/cross_dataset_eval/classical/cerf/tf_idf_svc/metrics_20260307_203958.json",
874
+ "complexity/outputs/cross_dataset_eval/classical/cerf/tf_idf_svc/metrics_latest.json",
875
+ "complexity/outputs/cross_dataset_eval/classical/cerf/tf_idf_xgboost/metrics_20260307_204001.json",
876
+ "complexity/outputs/cross_dataset_eval/classical/cerf/tf_idf_xgboost/metrics_latest.json",
877
+ "complexity/outputs/cross_dataset_eval/classical/commonlit/majority_class/metrics_20260307_203957.json",
878
+ "complexity/outputs/cross_dataset_eval/classical/commonlit/majority_class/metrics_latest.json",
879
+ "complexity/outputs/cross_dataset_eval/classical/commonlit/tf_idf_logreg/metrics_20260307_203953.json",
880
+ "complexity/outputs/cross_dataset_eval/classical/commonlit/tf_idf_logreg/metrics_latest.json",
881
+ "complexity/outputs/cross_dataset_eval/classical/commonlit/tf_idf_svc/metrics_20260307_203951.json",
882
+ "complexity/outputs/cross_dataset_eval/classical/commonlit/tf_idf_svc/metrics_latest.json",
883
+ "complexity/outputs/cross_dataset_eval/classical/commonlit/tf_idf_xgboost/metrics_20260307_203955.json",
884
+ "complexity/outputs/cross_dataset_eval/classical/commonlit/tf_idf_xgboost/metrics_latest.json",
885
+ "complexity/outputs/cross_dataset_eval/classical/one_stop/majority_class/metrics_20260307_203949.json",
886
+ "complexity/outputs/cross_dataset_eval/classical/one_stop/majority_class/metrics_latest.json",
887
+ "complexity/outputs/cross_dataset_eval/classical/one_stop/tf_idf_logreg/metrics_20260307_203947.json",
888
+ "complexity/outputs/cross_dataset_eval/classical/one_stop/tf_idf_logreg/metrics_latest.json",
889
+ "complexity/outputs/cross_dataset_eval/classical/one_stop/tf_idf_svc/metrics_20260307_203946.json",
890
+ "complexity/outputs/cross_dataset_eval/classical/one_stop/tf_idf_svc/metrics_latest.json",
891
+ "complexity/outputs/cross_dataset_eval/classical/one_stop/tf_idf_xgboost/metrics_20260307_203948.json",
892
+ "complexity/outputs/cross_dataset_eval/classical/one_stop/tf_idf_xgboost/metrics_latest.json",
893
+ "complexity/outputs/cross_dataset_eval/deep/asap_aes/glove_bilstm/metrics_20260307_204056.json",
894
+ "complexity/outputs/cross_dataset_eval/deep/asap_aes/glove_bilstm/metrics_latest.json",
895
+ "complexity/outputs/cross_dataset_eval/deep/asap_aes/glove_cnn/metrics_20260307_204048.json",
896
+ "complexity/outputs/cross_dataset_eval/deep/asap_aes/glove_cnn/metrics_latest.json",
897
+ "complexity/outputs/cross_dataset_eval/deep/asap_aes/glove_mlp/metrics_20260307_204046.json",
898
+ "complexity/outputs/cross_dataset_eval/deep/asap_aes/glove_mlp/metrics_latest.json",
899
+ "complexity/outputs/cross_dataset_eval/deep/cambridge/glove_bilstm/metrics_20260307_204040.json",
900
+ "complexity/outputs/cross_dataset_eval/deep/cambridge/glove_bilstm/metrics_latest.json",
901
+ "complexity/outputs/cross_dataset_eval/deep/cambridge/glove_cnn/metrics_20260307_204040.json",
902
+ "complexity/outputs/cross_dataset_eval/deep/cambridge/glove_cnn/metrics_latest.json",
903
+ "complexity/outputs/cross_dataset_eval/deep/cambridge/glove_mlp/metrics_20260307_204039.json",
904
+ "complexity/outputs/cross_dataset_eval/deep/cambridge/glove_mlp/metrics_latest.json",
905
+ "complexity/outputs/cross_dataset_eval/deep/cerf/glove_bilstm/metrics_20260307_204039.json",
906
+ "complexity/outputs/cross_dataset_eval/deep/cerf/glove_bilstm/metrics_latest.json",
907
+ "complexity/outputs/cross_dataset_eval/deep/cerf/glove_cnn/metrics_20260307_204038.json",
908
+ "complexity/outputs/cross_dataset_eval/deep/cerf/glove_cnn/metrics_latest.json",
909
+ "complexity/outputs/cross_dataset_eval/deep/cerf/glove_mlp/metrics_20260307_204038.json",
910
+ "complexity/outputs/cross_dataset_eval/deep/cerf/glove_mlp/metrics_latest.json",
911
+ "complexity/outputs/cross_dataset_eval/deep/commonlit/glove_bilstm/metrics_20260307_204036.json",
912
+ "complexity/outputs/cross_dataset_eval/deep/commonlit/glove_bilstm/metrics_latest.json",
913
+ "complexity/outputs/cross_dataset_eval/deep/commonlit/glove_cnn/metrics_20260307_204034.json",
914
+ "complexity/outputs/cross_dataset_eval/deep/commonlit/glove_cnn/metrics_latest.json",
915
+ "complexity/outputs/cross_dataset_eval/deep/commonlit/glove_mlp/metrics_20260307_204033.json",
916
+ "complexity/outputs/cross_dataset_eval/deep/commonlit/glove_mlp/metrics_latest.json",
917
+ "complexity/outputs/cross_dataset_eval/deep/one_stop/glove_bilstm/metrics_20260307_204031.json",
918
+ "complexity/outputs/cross_dataset_eval/deep/one_stop/glove_bilstm/metrics_latest.json",
919
+ "complexity/outputs/cross_dataset_eval/deep/one_stop/glove_cnn/metrics_20260307_204031.json",
920
+ "complexity/outputs/cross_dataset_eval/deep/one_stop/glove_cnn/metrics_latest.json",
921
+ "complexity/outputs/cross_dataset_eval/deep/one_stop/glove_mlp/metrics_20260307_204031.json",
922
+ "complexity/outputs/cross_dataset_eval/deep/one_stop/glove_mlp/metrics_latest.json",
923
+ "complexity/outputs/cross_dataset_eval/transformer/asap_aes/metrics_20260307_205123.json",
924
+ "complexity/outputs/cross_dataset_eval/transformer/asap_aes/metrics_20260308_115229.json",
925
+ "complexity/outputs/cross_dataset_eval/transformer/asap_aes/metrics_latest.json",
926
+ "complexity/outputs/cross_dataset_eval/transformer/cambridge/metrics_20260307_204929.json",
927
+ "complexity/outputs/cross_dataset_eval/transformer/cambridge/metrics_20260308_114603.json",
928
+ "complexity/outputs/cross_dataset_eval/transformer/cambridge/metrics_latest.json",
929
+ "complexity/outputs/cross_dataset_eval/transformer/cerf/metrics_20260307_204925.json",
930
+ "complexity/outputs/cross_dataset_eval/transformer/cerf/metrics_20260308_114553.json",
931
+ "complexity/outputs/cross_dataset_eval/transformer/cerf/metrics_latest.json",
932
+ "complexity/outputs/cross_dataset_eval/transformer/commonlit/metrics_20260307_204911.json",
933
+ "complexity/outputs/cross_dataset_eval/transformer/commonlit/metrics_20260308_114507.json",
934
+ "complexity/outputs/cross_dataset_eval/transformer/commonlit/metrics_latest.json",
935
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/asap_aes/metrics_20260308_122313.json",
936
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/asap_aes/metrics_latest.json",
937
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/cambridge/metrics_20260308_121646.json",
938
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/cambridge/metrics_latest.json",
939
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/cerf/metrics_20260308_121637.json",
940
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/cerf/metrics_latest.json",
941
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/commonlit/metrics_20260308_121550.json",
942
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/commonlit/metrics_latest.json",
943
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/one_stop/metrics_20260308_121328.json",
944
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/one_stop/metrics_latest.json",
945
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/asap_aes/metrics_20260308_122612.json",
946
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/asap_aes/metrics_latest.json",
947
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/cambridge/metrics_20260308_122418.json",
948
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/cambridge/metrics_latest.json",
949
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/cerf/metrics_20260308_122415.json",
950
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/cerf/metrics_latest.json",
951
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/commonlit/metrics_20260308_122401.json",
952
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/commonlit/metrics_latest.json",
953
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/one_stop/metrics_20260308_122318.json",
954
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/one_stop/metrics_latest.json",
955
+ "complexity/outputs/cross_dataset_eval/transformer/one_stop/metrics_20260307_204829.json",
956
+ "complexity/outputs/cross_dataset_eval/transformer/one_stop/metrics_20260308_114246.json",
957
+ "complexity/outputs/cross_dataset_eval/transformer/one_stop/metrics_latest.json",
958
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/asap_aes/metrics_20260308_123146.json",
959
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/asap_aes/metrics_latest.json",
960
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/cambridge/metrics_20260308_122812.json",
961
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/cambridge/metrics_latest.json",
962
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/cerf/metrics_20260308_122806.json",
963
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/cerf/metrics_latest.json",
964
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/commonlit/metrics_20260308_122740.json",
965
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/commonlit/metrics_latest.json",
966
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/one_stop/metrics_20260308_122621.json",
967
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/one_stop/metrics_latest.json",
968
+ "complexity/outputs/metrics/results_20260308_1242.json",
969
+ "complexity/outputs/metrics/results_20260308_1406.json",
970
+ "complexity/outputs/metrics/results_20260310_1225.json",
971
+ "complexity/outputs/metrics/results_20260310_1228.json",
972
+ "complexity/outputs/metrics/results_20260310_1331.json",
973
+ "complexity/outputs/metrics/results_20260310_1353.json",
974
+ "complexity/outputs/metrics/results_20260310_1805.json",
975
+ "complexity/outputs/metrics/results_20260310_1824.json",
976
+ "complexity/outputs/metrics/results_20260310_2039.json",
977
+ "complexity/outputs/metrics/results_20260310_2112.json",
978
+ "complexity/outputs/metrics/results_20260310_2125.json",
979
+ "complexity/outputs/metrics/results_20260310_2213.json",
980
+ "complexity/outputs/metrics/results_20260310_2229.json",
981
+ "complexity/outputs/metrics/results_20260311_1746.json",
982
+ "complexity/outputs/metrics/results_20260311_1802.json",
983
+ "complexity/outputs/metrics/results_20260311_1816.json",
984
+ "complexity/outputs/metrics/results_20260311_1836.json"
985
+ ],
986
+ "other_structured_files": [
987
+ "app/app-models/prod-model-complexity/dashboard/curves/training-history.json",
988
+ "app/app-models/prod-model-complexity/dashboard/dashboard-manifest.json",
989
+ "app/app-models/prod-model-complexity/dashboard/distributions/class-distribution.json",
990
+ "app/app-models/prod-model-complexity/dashboard/distributions/source-dataset-distribution.json",
991
+ "app/app-models/prod-model-complexity/dashboard/figures/benchmark-test-f1.plotly.json",
992
+ "app/app-models/prod-model-complexity/dashboard/figures/class-distribution.plotly.json",
993
+ "app/app-models/prod-model-complexity/dashboard/figures/cross-dataset-f1.plotly.json",
994
+ "app/app-models/prod-model-complexity/dashboard/figures/source-dataset-distribution.plotly.json",
995
+ "app/app-models/prod-model-complexity/dashboard/figures/training-loss.plotly.json",
996
+ "app/app-models/prod-model-complexity/dashboard/metadata/experiment-config.json",
997
+ "app/app-models/prod-model-complexity/dashboard/metadata/model.json",
998
+ "app/app-models/prod-model-complexity/dashboard/metrics/benchmark-test.json",
999
+ "app/app-models/prod-model-complexity/dashboard/metrics/cross-dataset.json",
1000
+ "app/app-models/prod-model-complexity/dashboard/metrics/primary-evaluation.json",
1001
+ "app/app-models/prod-model-complexity/dashboard/samples/prediction-samples.json",
1002
+ "app/app-models/prod-model-complexity/dashboard/summary/overview.json",
1003
+ "app/app-models/prod-model-complexity/dashboard/summary/source-audit.json",
1004
+ "app/app-models/prod-model-complexity/label_classes.json",
1005
+ "app/app-models/prod-model-complexity/model-config.yaml",
1006
+ "complexity/outputs/metrics/baseline_model_registry.json",
1007
+ "complexity/outputs/metrics/cfg_20260308_1242.json",
1008
+ "complexity/outputs/metrics/cfg_20260308_1406.json",
1009
+ "complexity/outputs/metrics/cfg_20260310_1225.json",
1010
+ "complexity/outputs/metrics/cfg_20260310_1228.json",
1011
+ "complexity/outputs/metrics/cfg_20260310_1331.json",
1012
+ "complexity/outputs/metrics/cfg_20260310_1353.json",
1013
+ "complexity/outputs/metrics/cfg_20260310_1805.json",
1014
+ "complexity/outputs/metrics/cfg_20260310_1824.json",
1015
+ "complexity/outputs/metrics/cfg_20260310_2039.json",
1016
+ "complexity/outputs/metrics/cfg_20260310_2112.json",
1017
+ "complexity/outputs/metrics/cfg_20260310_2125.json",
1018
+ "complexity/outputs/metrics/cfg_20260310_2213.json",
1019
+ "complexity/outputs/metrics/cfg_20260310_2229.json",
1020
+ "complexity/outputs/metrics/cfg_20260311_1746.json",
1021
+ "complexity/outputs/metrics/cfg_20260311_1802.json",
1022
+ "complexity/outputs/metrics/cfg_20260311_1816.json",
1023
+ "complexity/outputs/metrics/cfg_20260311_1836.json",
1024
+ "complexity/outputs/metrics/transformers/deberta_v3_base_train_pool_latest.json",
1025
+ "complexity/outputs/metrics/transformers/distilbert_train_pool_latest.json",
1026
+ "complexity/outputs/metrics/transformers/roberta_train_pool_latest.json"
1027
+ ],
1028
+ "plot_images": [
1029
+ "app/app-models/prod-model-complexity/dashboard/confusion/cm-glove-bilstm-train-pool.png",
1030
+ "app/app-models/prod-model-complexity/dashboard/confusion/internal-test-confusion-matrix.png",
1031
+ "complexity/outputs/cross_dataset_eval/plots/cross_dataset_overview_f1_macro.png",
1032
+ "complexity/outputs/plots/confusion_matrices/cm_debertav3_train_pool.png",
1033
+ "complexity/outputs/plots/confusion_matrices/cm_debertav3_train_pool_asap_aes.png",
1034
+ "complexity/outputs/plots/confusion_matrices/cm_debertav3_train_pool_cambridge.png",
1035
+ "complexity/outputs/plots/confusion_matrices/cm_debertav3_train_pool_cerf.png",
1036
+ "complexity/outputs/plots/confusion_matrices/cm_debertav3_train_pool_commonlit.png",
1037
+ "complexity/outputs/plots/confusion_matrices/cm_debertav3_train_pool_one_stop.png",
1038
+ "complexity/outputs/plots/confusion_matrices/cm_distilbert_train_pool.png",
1039
+ "complexity/outputs/plots/confusion_matrices/cm_distilbert_train_pool_asap_aes.png",
1040
+ "complexity/outputs/plots/confusion_matrices/cm_distilbert_train_pool_cambridge.png",
1041
+ "complexity/outputs/plots/confusion_matrices/cm_distilbert_train_pool_cerf.png",
1042
+ "complexity/outputs/plots/confusion_matrices/cm_distilbert_train_pool_commonlit.png",
1043
+ "complexity/outputs/plots/confusion_matrices/cm_distilbert_train_pool_one_stop.png",
1044
+ "complexity/outputs/plots/confusion_matrices/cm_glove_bilstm_train_pool.png",
1045
+ "complexity/outputs/plots/confusion_matrices/cm_glove_cnn_train_pool.png",
1046
+ "complexity/outputs/plots/confusion_matrices/cm_glove_mlp_train_pool.png",
1047
+ "complexity/outputs/plots/confusion_matrices/cm_roberta_train_pool.png",
1048
+ "complexity/outputs/plots/confusion_matrices/cm_roberta_train_pool_asap_aes.png",
1049
+ "complexity/outputs/plots/confusion_matrices/cm_roberta_train_pool_cambridge.png",
1050
+ "complexity/outputs/plots/confusion_matrices/cm_roberta_train_pool_cerf.png",
1051
+ "complexity/outputs/plots/confusion_matrices/cm_roberta_train_pool_commonlit.png",
1052
+ "complexity/outputs/plots/confusion_matrices/cm_roberta_train_pool_one_stop.png"
1053
+ ],
1054
+ "structured_data": [
1055
+ "complexity/data/all-datasets-unified.parquet",
1056
+ "complexity/data/asap-2-0.parquet",
1057
+ "complexity/data/asap-aes.parquet",
1058
+ "complexity/data/cambridge-english-readability.parquet",
1059
+ "complexity/data/cerf-levelled-english-texts.parquet",
1060
+ "complexity/data/commonlit-readability-prize.parquet",
1061
+ "complexity/data/one-stop-corpus-english.parquet",
1062
+ "complexity/data/train_pool_test.parquet",
1063
+ "complexity/data/train_pool_train.parquet",
1064
+ "complexity/data/train_pool_val.parquet",
1065
+ "complexity/data/uk-key-stage-readability-for-english-texts.parquet"
1066
+ ],
1067
+ "tabular_data": [
1068
+ "complexity/data/archive/asap-2-0/ASAP2_train_sourcetexts.csv",
1069
+ "complexity/data/archive/cerf-levelled-english-texts/cefr_leveled_texts.csv",
1070
+ "complexity/data/archive/uk-key-stage-readability-for-english-texts/TEST_balanced.csv",
1071
+ "complexity/data/archive/uk-key-stage-readability-for-english-texts/TRAIN_balanced.csv",
1072
+ "complexity/outputs/cross_dataset_eval/classical/asap_aes/majority_class/summary_latest.csv",
1073
+ "complexity/outputs/cross_dataset_eval/classical/asap_aes/tf_idf_logreg/summary_latest.csv",
1074
+ "complexity/outputs/cross_dataset_eval/classical/asap_aes/tf_idf_svc/summary_latest.csv",
1075
+ "complexity/outputs/cross_dataset_eval/classical/asap_aes/tf_idf_xgboost/summary_latest.csv",
1076
+ "complexity/outputs/cross_dataset_eval/classical/cambridge/majority_class/summary_latest.csv",
1077
+ "complexity/outputs/cross_dataset_eval/classical/cambridge/tf_idf_logreg/summary_latest.csv",
1078
+ "complexity/outputs/cross_dataset_eval/classical/cambridge/tf_idf_svc/summary_latest.csv",
1079
+ "complexity/outputs/cross_dataset_eval/classical/cambridge/tf_idf_xgboost/summary_latest.csv",
1080
+ "complexity/outputs/cross_dataset_eval/classical/cerf/majority_class/summary_latest.csv",
1081
+ "complexity/outputs/cross_dataset_eval/classical/cerf/tf_idf_logreg/summary_latest.csv",
1082
+ "complexity/outputs/cross_dataset_eval/classical/cerf/tf_idf_svc/summary_latest.csv",
1083
+ "complexity/outputs/cross_dataset_eval/classical/cerf/tf_idf_xgboost/summary_latest.csv",
1084
+ "complexity/outputs/cross_dataset_eval/classical/commonlit/majority_class/summary_latest.csv",
1085
+ "complexity/outputs/cross_dataset_eval/classical/commonlit/tf_idf_logreg/summary_latest.csv",
1086
+ "complexity/outputs/cross_dataset_eval/classical/commonlit/tf_idf_svc/summary_latest.csv",
1087
+ "complexity/outputs/cross_dataset_eval/classical/commonlit/tf_idf_xgboost/summary_latest.csv",
1088
+ "complexity/outputs/cross_dataset_eval/classical/one_stop/majority_class/summary_latest.csv",
1089
+ "complexity/outputs/cross_dataset_eval/classical/one_stop/tf_idf_logreg/summary_latest.csv",
1090
+ "complexity/outputs/cross_dataset_eval/classical/one_stop/tf_idf_svc/summary_latest.csv",
1091
+ "complexity/outputs/cross_dataset_eval/classical/one_stop/tf_idf_xgboost/summary_latest.csv",
1092
+ "complexity/outputs/cross_dataset_eval/deep/asap_aes/glove_bilstm/summary_latest.csv",
1093
+ "complexity/outputs/cross_dataset_eval/deep/asap_aes/glove_cnn/summary_latest.csv",
1094
+ "complexity/outputs/cross_dataset_eval/deep/asap_aes/glove_mlp/summary_latest.csv",
1095
+ "complexity/outputs/cross_dataset_eval/deep/cambridge/glove_bilstm/summary_latest.csv",
1096
+ "complexity/outputs/cross_dataset_eval/deep/cambridge/glove_cnn/summary_latest.csv",
1097
+ "complexity/outputs/cross_dataset_eval/deep/cambridge/glove_mlp/summary_latest.csv",
1098
+ "complexity/outputs/cross_dataset_eval/deep/cerf/glove_bilstm/summary_latest.csv",
1099
+ "complexity/outputs/cross_dataset_eval/deep/cerf/glove_cnn/summary_latest.csv",
1100
+ "complexity/outputs/cross_dataset_eval/deep/cerf/glove_mlp/summary_latest.csv",
1101
+ "complexity/outputs/cross_dataset_eval/deep/commonlit/glove_bilstm/summary_latest.csv",
1102
+ "complexity/outputs/cross_dataset_eval/deep/commonlit/glove_cnn/summary_latest.csv",
1103
+ "complexity/outputs/cross_dataset_eval/deep/commonlit/glove_mlp/summary_latest.csv",
1104
+ "complexity/outputs/cross_dataset_eval/deep/one_stop/glove_bilstm/summary_latest.csv",
1105
+ "complexity/outputs/cross_dataset_eval/deep/one_stop/glove_cnn/summary_latest.csv",
1106
+ "complexity/outputs/cross_dataset_eval/deep/one_stop/glove_mlp/summary_latest.csv",
1107
+ "complexity/outputs/cross_dataset_eval/family_summary_latest.csv",
1108
+ "complexity/outputs/cross_dataset_eval/model_external_mean_latest.csv",
1109
+ "complexity/outputs/cross_dataset_eval/plots/cross_dataset_matrix_f1_macro.csv",
1110
+ "complexity/outputs/cross_dataset_eval/summary_latest.csv",
1111
+ "complexity/outputs/cross_dataset_eval/transformer/asap_aes/summary_latest.csv",
1112
+ "complexity/outputs/cross_dataset_eval/transformer/cambridge/summary_latest.csv",
1113
+ "complexity/outputs/cross_dataset_eval/transformer/cerf/summary_latest.csv",
1114
+ "complexity/outputs/cross_dataset_eval/transformer/commonlit/summary_latest.csv",
1115
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/asap_aes/summary_latest.csv",
1116
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/cambridge/summary_latest.csv",
1117
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/cerf/summary_latest.csv",
1118
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/commonlit/summary_latest.csv",
1119
+ "complexity/outputs/cross_dataset_eval/transformer/debertav3_train_pool/one_stop/summary_latest.csv",
1120
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/asap_aes/summary_latest.csv",
1121
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/cambridge/summary_latest.csv",
1122
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/cerf/summary_latest.csv",
1123
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/commonlit/summary_latest.csv",
1124
+ "complexity/outputs/cross_dataset_eval/transformer/distilbert_train_pool/one_stop/summary_latest.csv",
1125
+ "complexity/outputs/cross_dataset_eval/transformer/one_stop/summary_latest.csv",
1126
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/asap_aes/summary_latest.csv",
1127
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/cambridge/summary_latest.csv",
1128
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/cerf/summary_latest.csv",
1129
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/commonlit/summary_latest.csv",
1130
+ "complexity/outputs/cross_dataset_eval/transformer/roberta_train_pool/one_stop/summary_latest.csv",
1131
+ "complexity/outputs/metrics/baseline_curve_metrics.csv",
1132
+ "complexity/outputs/metrics/baseline_eval_metrics.csv",
1133
+ "complexity/outputs/metrics/classical_lc_metrics.csv",
1134
+ "complexity/outputs/metrics/combined_curve_metrics.csv",
1135
+ "complexity/outputs/metrics/deep_curve_metrics.csv",
1136
+ "complexity/outputs/metrics/deep_eval_metrics_internal.csv",
1137
+ "complexity/outputs/metrics/deep_eval_metrics_test.csv",
1138
+ "complexity/outputs/metrics/deep_eval_metrics_val.csv",
1139
+ "complexity/outputs/metrics/family_internal_summary.csv",
1140
+ "complexity/outputs/metrics/final_transformer_error_analysis.csv",
1141
+ "complexity/outputs/metrics/internal_family_summary_metrics.csv",
1142
+ "complexity/outputs/metrics/internal_model_summary_metrics.csv",
1143
+ "complexity/outputs/metrics/internal_test_leaderboard.csv",
1144
+ "complexity/outputs/metrics/manual_example_predictions.csv",
1145
+ "complexity/outputs/metrics/results_complexity-classification.csv",
1146
+ "complexity/outputs/metrics/top10_test_accuracy.csv",
1147
+ "complexity/outputs/metrics/top10_test_f1_macro.csv",
1148
+ "complexity/outputs/metrics/top10_val_f1_macro.csv",
1149
+ "complexity/outputs/metrics/transformer_summary_metrics.csv"
1150
+ ]
1151
+ },
1152
+ "selected_dashboard_sources": [
1153
+ {
1154
+ "category": "metadata",
1155
+ "path": "app/app-models/prod-model-complexity/model-config.yaml",
1156
+ "reason": "Production model identity, runtime settings, and label mapping."
1157
+ },
1158
+ {
1159
+ "category": "experiment_config",
1160
+ "path": "complexity/outputs/metrics/cfg_20260310_2125.json",
1161
+ "reason": "Experiment or evaluation config attached for traceability."
1162
+ },
1163
+ {
1164
+ "category": "primary_evaluation",
1165
+ "path": "complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_latest.json",
1166
+ "reason": "Primary validation/test metrics for the production model."
1167
+ },
1168
+ {
1169
+ "category": "benchmark",
1170
+ "path": "complexity/outputs/metrics/results_complexity-classification.csv",
1171
+ "reason": "Benchmark rows used to compare the production model against peers."
1172
+ },
1173
+ {
1174
+ "category": "training_history",
1175
+ "path": "complexity/logs/complexity-classification_GloVe_BiLSTM_[train_pool].log",
1176
+ "reason": "Training-history artifact used to build learning and loss curves."
1177
+ },
1178
+ {
1179
+ "category": "cross_dataset",
1180
+ "path": "complexity/outputs/cross_dataset_eval/summary_latest.csv",
1181
+ "reason": "Cross-dataset evaluation summary rows."
1182
+ },
1183
+ {
1184
+ "category": "class_distribution",
1185
+ "path": "complexity/data/train_pool_train.parquet",
1186
+ "reason": "Explicit split artifacts used to derive class distributions."
1187
+ },
1188
+ {
1189
+ "category": "class_distribution",
1190
+ "path": "complexity/data/train_pool_val.parquet",
1191
+ "reason": "Explicit split artifacts used to derive class distributions."
1192
+ },
1193
+ {
1194
+ "category": "class_distribution",
1195
+ "path": "complexity/data/train_pool_test.parquet",
1196
+ "reason": "Explicit split artifacts used to derive class distributions."
1197
+ },
1198
+ {
1199
+ "category": "prediction_samples",
1200
+ "path": "complexity/outputs/metrics/manual_example_predictions.csv",
1201
+ "reason": "Prediction samples used for qualitative dashboard review."
1202
+ },
1203
+ {
1204
+ "category": "confusion_matrix",
1205
+ "path": "complexity/outputs/plots/confusion_matrices/cm_glove_bilstm_train_pool.png",
1206
+ "reason": "Confusion-matrix image copied into the dashboard bundle."
1207
+ }
1208
+ ],
1209
+ "missing_dashboard_sources": [],
1210
+ "notes": [
1211
+ "Primary evaluation uses the production GloVe BiLSTM metrics_latest.json referenced by prod-model-complexity/model-config.yaml.",
1212
+ "Complexity is the richest dashboard domain in the repo: internal benchmark data, external evaluation summaries, split parquets, manual sample predictions, and prod-model training logs are all present.",
1213
+ "Confusion matrices exist only as saved images for the production model; no numeric matrix artifact was found.",
1214
+ "class_distribution parsing failed for complexity/data/train_pool_train.parquet: Parquet dashboard sources require the optional pandas dependency.",
1215
+ "class_distribution parsing failed for complexity/data/train_pool_val.parquet: Parquet dashboard sources require the optional pandas dependency.",
1216
+ "class_distribution parsing failed for complexity/data/train_pool_test.parquet: Parquet dashboard sources require the optional pandas dependency."
1217
+ ]
1218
+ }
label_classes.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ [
2
+ "A1-A2",
3
+ "B1-B2",
4
+ "C1-C2"
5
+ ]
model-config.yaml ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ model_id: complexity-bilstm-final-v1
2
+ domain: complexity
3
+ display_name: BiLSTM Final v1
4
+ description: Final BiLSTM with additive attention for CEFR-based text complexity classification.
5
+ is_active: true
6
+ priority: 3
7
+ framework:
8
+ type: pytorch
9
+ task: sequence-classification
10
+ library: torch
11
+ architecture: bilstm-attention
12
+ embeddings: fasttext-wiki-news-subwords-300
13
+ artifacts:
14
+ weights:
15
+ - models/glove_bilstm_complexity_train_pool_20260307_163358/best_model/best.pt
16
+ tokenizer: []
17
+ config:
18
+ - outputs/metrics/cfg_20260310_2125.json
19
+ - models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_latest.json
20
+ vocabulary:
21
+ - models/shared/vocab.pkl
22
+ label_map_file: models/shared/class2id.json
23
+ label_classes_file: models/shared/label_classes.json
24
+ label_encoder_file: models/shared/label_encoder.pkl
25
+ model:
26
+ embedding_dim: 300
27
+ hidden_dim: 128
28
+ num_layers: 2
29
+ dropout: 0.3
30
+ bidirectional: true
31
+ attention: additive
32
+ vocab_size: 50000
33
+ pad_token: <PAD>
34
+ unk_token: <UNK>
35
+ runtime:
36
+ max_sequence_length: 256
37
+ truncation: true
38
+ padding: true
39
+ batch_size: 1
40
+ device: cpu
41
+ preprocessing: normalize_text + preprocess_from_normalized + texts_to_sequences
42
+ dashboard:
43
+ builder: generic-v1
44
+ notes:
45
+ - Primary evaluation uses the production GloVe BiLSTM metrics_latest.json referenced
46
+ by prod-model-complexity/model-config.yaml.
47
+ - 'Complexity is the richest dashboard domain in the repo: internal benchmark data,
48
+ external evaluation summaries, split parquets, manual sample predictions, and
49
+ prod-model training logs are all present.'
50
+ - Confusion matrices exist only as saved images for the production model; no numeric
51
+ matrix artifact was found.
52
+ sources:
53
+ experiment_config: complexity/outputs/metrics/cfg_20260310_2125.json
54
+ primary_evaluation:
55
+ path: complexity/models/glove_bilstm_complexity_train_pool_20260307_163358/runs/metrics_latest.json
56
+ model_name: GloVe BiLSTM [train_pool]
57
+ benchmark:
58
+ path: complexity/outputs/metrics/results_complexity-classification.csv
59
+ model_name: GloVe BiLSTM [train_pool]
60
+ training_history: complexity/logs/complexity-classification_GloVe_BiLSTM_[train_pool].log
61
+ learning_curve:
62
+ status: not_applicable
63
+ reason: The complexity benchmark is built around a fixed train_pool dataset
64
+ rather than multiple prod-relevant train sizes.
65
+ cross_dataset:
66
+ path: complexity/outputs/cross_dataset_eval/summary_latest.csv
67
+ model_name: GloVe BiLSTM
68
+ class_distribution:
69
+ train: complexity/data/train_pool_train.parquet
70
+ val: complexity/data/train_pool_val.parquet
71
+ test: complexity/data/train_pool_test.parquet
72
+ label_field: label
73
+ dataset_field: source_dataset
74
+ prediction_samples:
75
+ path: complexity/outputs/metrics/manual_example_predictions.csv
76
+ production_prediction:
77
+ model: GloVe BiLSTM
78
+ label_field: GloVe_BiLSTM_label
79
+ confidence_field: GloVe_BiLSTM_conf
80
+ reference_prediction:
81
+ model: DeBERTaV3
82
+ label_field: DeBERTaV3_label
83
+ confidence_field: DeBERTaV3_conf
84
+ confusion_matrix: complexity/outputs/plots/confusion_matrices/cm_glove_bilstm_train_pool.png
85
+ inference:
86
+ return_probabilities: true
87
+ confidence_method: softmax_max
88
+ ui:
89
+ domain_display_name: Text Complexity
90
+ color_token: complexity
91
+ group: complexity-core
92
+ labels:
93
+ type: single-label-classification
94
+ classes:
95
+ - id: 0
96
+ name: A1-A2
97
+ display_name: A1-A2
98
+ - id: 1
99
+ name: B1-B2
100
+ display_name: B1-B2
101
+ - id: 2
102
+ name: C1-C2
103
+ display_name: C1-C2
test_inference.ipynb ADDED
@@ -0,0 +1,456 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "af313b4f",
6
+ "metadata": {},
7
+ "source": [
8
+ "# Complexity Model Inference Test\n",
9
+ "\n",
10
+ "This notebook loads the saved production complexity model and its local artifacts from this folder, rebuilds the BiLSTM architecture, and runs inference on a few example sentences. It performs inference only."
11
+ ]
12
+ },
13
+ {
14
+ "cell_type": "markdown",
15
+ "id": "9976ef3c",
16
+ "metadata": {},
17
+ "source": [
18
+ "## 1. Load the local artifacts\n",
19
+ "\n",
20
+ "The code below loads the checkpoint, model config, vocabulary, and label classes directly from the current folder."
21
+ ]
22
+ },
23
+ {
24
+ "cell_type": "code",
25
+ "execution_count": 1,
26
+ "id": "635fe6e7",
27
+ "metadata": {},
28
+ "outputs": [
29
+ {
30
+ "name": "stdout",
31
+ "output_type": "stream",
32
+ "text": [
33
+ "Model directory: /Users/georgijkutivadze/projects/mago-text-scoring/app/app-models/prod-model-complexity\n",
34
+ "Device: cpu\n",
35
+ "Artifacts: ['best.pt', 'label_classes.json', 'model-config.yaml', 'test_inference.ipynb', 'vocab.pkl']\n",
36
+ "Checkpoint keys: ['epoch', 'model_state', 'optimizer_state', 'scheduler_state', 'best_f1', 'history', 'model_name', 'task']\n",
37
+ "Embedding matrix shape: (50000, 300)\n",
38
+ "Vocabulary size: 50000\n",
39
+ "Labels: ['A1-A2', 'B1-B2', 'C1-C2']\n"
40
+ ]
41
+ }
42
+ ],
43
+ "source": [
44
+ "from pathlib import Path\n",
45
+ "import json\n",
46
+ "import pickle\n",
47
+ "import re\n",
48
+ "import unicodedata\n",
49
+ "\n",
50
+ "import numpy as np\n",
51
+ "import pandas as pd\n",
52
+ "import torch\n",
53
+ "import torch.nn as nn\n",
54
+ "import yaml\n",
55
+ "\n",
56
+ "MODEL_DIR = Path(\".\").resolve()\n",
57
+ "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
58
+ "\n",
59
+ "with (MODEL_DIR / \"model-config.yaml\").open(\"r\", encoding=\"utf-8\") as handle:\n",
60
+ " model_config = yaml.safe_load(handle)\n",
61
+ "\n",
62
+ "with (MODEL_DIR / \"label_classes.json\").open(\"r\", encoding=\"utf-8\") as handle:\n",
63
+ " label_classes = json.load(handle)\n",
64
+ "\n",
65
+ "with (MODEL_DIR / \"vocab.pkl\").open(\"rb\") as handle:\n",
66
+ " vocab = pickle.load(handle)\n",
67
+ "\n",
68
+ "checkpoint = torch.load(MODEL_DIR / \"best.pt\", map_location=device)\n",
69
+ "state_dict = checkpoint[\"model_state\"] if isinstance(checkpoint, dict) and \"model_state\" in checkpoint else checkpoint\n",
70
+ "embedding_matrix = state_dict[\"embedding.weight\"].detach().cpu().numpy()\n",
71
+ "artifact_files = sorted(path.name for path in MODEL_DIR.iterdir() if path.is_file())\n",
72
+ "\n",
73
+ "print(f\"Model directory: {MODEL_DIR}\")\n",
74
+ "print(f\"Device: {device}\")\n",
75
+ "print(f\"Artifacts: {artifact_files}\")\n",
76
+ "print(f\"Checkpoint keys: {list(checkpoint.keys()) if isinstance(checkpoint, dict) else 'state_dict'}\")\n",
77
+ "print(f\"Embedding matrix shape: {embedding_matrix.shape}\")\n",
78
+ "print(f\"Vocabulary size: {len(vocab)}\")\n",
79
+ "print(f\"Labels: {label_classes}\")\n"
80
+ ]
81
+ },
82
+ {
83
+ "cell_type": "markdown",
84
+ "id": "abe5a2e3",
85
+ "metadata": {},
86
+ "source": [
87
+ "## 2. Recreate the model and preprocessing pipeline\n",
88
+ "\n",
89
+ "The notebook rebuilds the saved BiLSTM + additive-attention classifier and applies the lightweight text normalization used for inference."
90
+ ]
91
+ },
92
+ {
93
+ "cell_type": "code",
94
+ "execution_count": 2,
95
+ "id": "f86fa8a2",
96
+ "metadata": {},
97
+ "outputs": [],
98
+ "source": [
99
+ "class AdditiveAttention(nn.Module):\n",
100
+ " def __init__(self, hidden_dim: int):\n",
101
+ " super().__init__()\n",
102
+ " self.attn = nn.Linear(hidden_dim, 1, bias=False)\n",
103
+ "\n",
104
+ " def forward(self, hidden_states, mask=None):\n",
105
+ " scores = self.attn(hidden_states).squeeze(-1)\n",
106
+ " if mask is not None:\n",
107
+ " scores = scores.masked_fill(~mask, -1e9)\n",
108
+ " weights = torch.softmax(scores, dim=1)\n",
109
+ " context = (weights.unsqueeze(-1) * hidden_states).sum(dim=1)\n",
110
+ " return context, weights\n",
111
+ "\n",
112
+ "\n",
113
+ "class BiLSTMAttention(nn.Module):\n",
114
+ " def __init__(\n",
115
+ " self,\n",
116
+ " embedding_matrix: np.ndarray,\n",
117
+ " num_classes: int,\n",
118
+ " hidden_dim: int = 128,\n",
119
+ " num_layers: int = 2,\n",
120
+ " dropout: float = 0.3,\n",
121
+ " ):\n",
122
+ " super().__init__()\n",
123
+ " _, embedding_dim = embedding_matrix.shape\n",
124
+ " self.embedding = nn.Embedding.from_pretrained(\n",
125
+ " torch.tensor(embedding_matrix, dtype=torch.float32),\n",
126
+ " freeze=False,\n",
127
+ " padding_idx=0,\n",
128
+ " )\n",
129
+ " self.lstm = nn.LSTM(\n",
130
+ " input_size=embedding_dim,\n",
131
+ " hidden_size=hidden_dim,\n",
132
+ " num_layers=num_layers,\n",
133
+ " batch_first=True,\n",
134
+ " bidirectional=True,\n",
135
+ " dropout=dropout if num_layers > 1 else 0.0,\n",
136
+ " )\n",
137
+ " self.attention = AdditiveAttention(hidden_dim * 2)\n",
138
+ " self.dropout = nn.Dropout(dropout)\n",
139
+ " self.fc = nn.Linear(hidden_dim * 2, num_classes)\n",
140
+ "\n",
141
+ " def forward(self, token_ids):\n",
142
+ " mask = token_ids != 0\n",
143
+ " embeddings = self.dropout(self.embedding(token_ids))\n",
144
+ " hidden_states, _ = self.lstm(embeddings)\n",
145
+ " context, _ = self.attention(hidden_states, mask)\n",
146
+ " return self.fc(self.dropout(context))\n",
147
+ "\n",
148
+ "\n",
149
+ "DEFAULT_STOPWORDS = {\n",
150
+ " \"a\", \"an\", \"and\", \"are\", \"as\", \"at\", \"be\", \"by\", \"for\", \"from\",\n",
151
+ " \"has\", \"he\", \"in\", \"is\", \"it\", \"its\", \"of\", \"on\", \"that\", \"the\",\n",
152
+ " \"to\", \"was\", \"were\", \"will\", \"with\"\n",
153
+ "}\n",
154
+ "\n",
155
+ "try:\n",
156
+ " from nltk.corpus import stopwords\n",
157
+ " STOPWORDS = set(stopwords.words(\"english\"))\n",
158
+ "except Exception:\n",
159
+ " STOPWORDS = DEFAULT_STOPWORDS\n",
160
+ "\n",
161
+ "try:\n",
162
+ " from nltk.stem import WordNetLemmatizer\n",
163
+ " LEMMATIZER = WordNetLemmatizer()\n",
164
+ "except Exception:\n",
165
+ " LEMMATIZER = None\n",
166
+ "\n",
167
+ "\n",
168
+ "def maybe_lemmatize(token: str) -> str:\n",
169
+ " if LEMMATIZER is None:\n",
170
+ " return token\n",
171
+ " try:\n",
172
+ " return LEMMATIZER.lemmatize(token)\n",
173
+ " except Exception:\n",
174
+ " return token\n",
175
+ "\n",
176
+ "\n",
177
+ "def normalize_text(text: str) -> str:\n",
178
+ " text = str(text).lower()\n",
179
+ " text = unicodedata.normalize(\"NFKD\", text)\n",
180
+ " text = re.sub(r\"http\\S+|www\\S+\", \" \", text)\n",
181
+ " text = re.sub(r\"@\\w+|#\\w+\", \" \", text)\n",
182
+ " text = re.sub(r\"[^a-zA-Z0-9\\s!?.,'\\\"]\", \" \", text)\n",
183
+ " text = re.sub(r\"\\s+\", \" \", text).strip()\n",
184
+ " return text\n",
185
+ "\n",
186
+ "\n",
187
+ "def preprocess_from_normalized(text: str) -> str:\n",
188
+ " tokens = [token for token in text.split() if token not in STOPWORDS]\n",
189
+ " return \" \".join(maybe_lemmatize(token) for token in tokens)\n",
190
+ "\n",
191
+ "\n",
192
+ "def texts_to_sequences(texts, vocab_map, max_len, unk_token=\"<UNK>\"):\n",
193
+ " unk_idx = vocab_map.get(unk_token, 1)\n",
194
+ " sequences = np.zeros((len(texts), max_len), dtype=np.int64)\n",
195
+ " for row_idx, text in enumerate(texts):\n",
196
+ " for col_idx, token in enumerate(str(text).split()[:max_len]):\n",
197
+ " sequences[row_idx, col_idx] = vocab_map.get(token, unk_idx)\n",
198
+ " return sequences\n"
199
+ ]
200
+ },
201
+ {
202
+ "cell_type": "markdown",
203
+ "id": "0c36b0e4",
204
+ "metadata": {},
205
+ "source": [
206
+ "## 3. Restore the checkpoint and run example inference\n",
207
+ "\n",
208
+ "This cell rebuilds the model, restores the saved weights, preprocesses example sentences, and displays the predicted complexity label with probabilities."
209
+ ]
210
+ },
211
+ {
212
+ "cell_type": "code",
213
+ "execution_count": 5,
214
+ "id": "229ce4ed",
215
+ "metadata": {},
216
+ "outputs": [],
217
+ "source": [
218
+ "runtime_config = model_config.get(\"runtime\", {})\n",
219
+ "network_config = model_config.get(\"model\", {})\n",
220
+ "\n",
221
+ "model = BiLSTMAttention(\n",
222
+ " embedding_matrix=embedding_matrix,\n",
223
+ " num_classes=len(label_classes),\n",
224
+ " hidden_dim=network_config.get(\"hidden_dim\", 128),\n",
225
+ " num_layers=network_config.get(\"num_layers\", 2),\n",
226
+ " dropout=network_config.get(\"dropout\", 0.3),\n",
227
+ ")\n",
228
+ "model.load_state_dict(state_dict)\n",
229
+ "model.to(device)\n",
230
+ "model.eval()\n",
231
+ "\n",
232
+ "MAX_LEN = runtime_config.get(\"max_sequence_length\", 256)\n",
233
+ "\n",
234
+ "\n",
235
+ "@torch.inference_mode()\n",
236
+ "def predict_texts(texts):\n",
237
+ " normalized = [normalize_text(text) for text in texts]\n",
238
+ " preprocessed = [preprocess_from_normalized(text) for text in normalized]\n",
239
+ " sequences = texts_to_sequences(preprocessed, vocab, MAX_LEN)\n",
240
+ " inputs = torch.tensor(sequences, dtype=torch.long, device=device)\n",
241
+ " logits = model(inputs)\n",
242
+ " probabilities = torch.softmax(logits, dim=-1).cpu().numpy()\n",
243
+ "\n",
244
+ " rows = []\n",
245
+ " for raw_text, normalized_text, preprocessed_text, probs in zip(texts, normalized, preprocessed, probabilities):\n",
246
+ " pred_idx = int(probs.argmax())\n",
247
+ " rows.append(\n",
248
+ " {\n",
249
+ " \"text\": raw_text,\n",
250
+ " \"normalized_text\": normalized_text,\n",
251
+ " \"preprocessed_text\": preprocessed_text,\n",
252
+ " \"predicted_label\": label_classes[pred_idx],\n",
253
+ " \"confidence\": round(float(probs[pred_idx]), 4),\n",
254
+ " \"probabilities\": {\n",
255
+ " label: round(float(score), 4)\n",
256
+ " for label, score in zip(label_classes, probs)\n",
257
+ " },\n",
258
+ " }\n",
259
+ " )\n",
260
+ "\n",
261
+ " return pd.DataFrame(rows)"
262
+ ]
263
+ },
264
+ {
265
+ "cell_type": "code",
266
+ "execution_count": 7,
267
+ "id": "62c8eeb8-3663-40f7-9b75-20ba0e6017db",
268
+ "metadata": {},
269
+ "outputs": [
270
+ {
271
+ "data": {
272
+ "text/html": [
273
+ "<div>\n",
274
+ "<style scoped>\n",
275
+ " .dataframe tbody tr th:only-of-type {\n",
276
+ " vertical-align: middle;\n",
277
+ " }\n",
278
+ "\n",
279
+ " .dataframe tbody tr th {\n",
280
+ " vertical-align: top;\n",
281
+ " }\n",
282
+ "\n",
283
+ " .dataframe thead th {\n",
284
+ " text-align: right;\n",
285
+ " }\n",
286
+ "</style>\n",
287
+ "<table border=\"1\" class=\"dataframe\">\n",
288
+ " <thead>\n",
289
+ " <tr style=\"text-align: right;\">\n",
290
+ " <th></th>\n",
291
+ " <th>text</th>\n",
292
+ " <th>normalized_text</th>\n",
293
+ " <th>preprocessed_text</th>\n",
294
+ " <th>predicted_label</th>\n",
295
+ " <th>confidence</th>\n",
296
+ " <th>probabilities</th>\n",
297
+ " </tr>\n",
298
+ " </thead>\n",
299
+ " <tbody>\n",
300
+ " <tr>\n",
301
+ " <th>0</th>\n",
302
+ " <td>I have a dog. It is small and very cute. We play in the park every day.</td>\n",
303
+ " <td>i have a dog. it is small and very cute. we play in the park every day.</td>\n",
304
+ " <td>dog. small cute. play park every day.</td>\n",
305
+ " <td>A1-A2</td>\n",
306
+ " <td>0.6027</td>\n",
307
+ " <td>{'A1-A2': 0.6027, 'B1-B2': 0.3619, 'C1-C2': 0.0354}</td>\n",
308
+ " </tr>\n",
309
+ " <tr>\n",
310
+ " <th>1</th>\n",
311
+ " <td>My name is Anna. I am a student. I live with my family in a big city.</td>\n",
312
+ " <td>my name is anna. i am a student. i live with my family in a big city.</td>\n",
313
+ " <td>name anna. student. live family big city.</td>\n",
314
+ " <td>C1-C2</td>\n",
315
+ " <td>0.7338</td>\n",
316
+ " <td>{'A1-A2': 0.1452, 'B1-B2': 0.121, 'C1-C2': 0.7338}</td>\n",
317
+ " </tr>\n",
318
+ " <tr>\n",
319
+ " <th>2</th>\n",
320
+ " <td>Many people enjoy traveling by train because it is comfortable, affordable, and less stressful than flying.</td>\n",
321
+ " <td>many people enjoy traveling by train because it is comfortable, affordable, and less stressful than flying.</td>\n",
322
+ " <td>many people enjoy traveling train comfortable, affordable, less stressful flying.</td>\n",
323
+ " <td>C1-C2</td>\n",
324
+ " <td>0.8663</td>\n",
325
+ " <td>{'A1-A2': 0.0018, 'B1-B2': 0.1319, 'C1-C2': 0.8663}</td>\n",
326
+ " </tr>\n",
327
+ " <tr>\n",
328
+ " <th>3</th>\n",
329
+ " <td>If students manage their time well, they can improve their grades and still have enough time for rest and hobbies.</td>\n",
330
+ " <td>if students manage their time well, they can improve their grades and still have enough time for rest and hobbies.</td>\n",
331
+ " <td>student manage time well, improve grade still enough time rest hobbies.</td>\n",
332
+ " <td>B1-B2</td>\n",
333
+ " <td>0.9152</td>\n",
334
+ " <td>{'A1-A2': 0.0168, 'B1-B2': 0.9152, 'C1-C2': 0.068}</td>\n",
335
+ " </tr>\n",
336
+ " <tr>\n",
337
+ " <th>4</th>\n",
338
+ " <td>The committee’s recommendation, while ostensibly pragmatic, ultimately fails to address the structural asymmetries t...</td>\n",
339
+ " <td>the committee s recommendation, while ostensibly pragmatic, ultimately fails to address the structural asymmetries t...</td>\n",
340
+ " <td>committee recommendation, ostensibly pragmatic, ultimately fails address structural asymmetry perpetuate institution...</td>\n",
341
+ " <td>C1-C2</td>\n",
342
+ " <td>0.9565</td>\n",
343
+ " <td>{'A1-A2': 0.0023, 'B1-B2': 0.0412, 'C1-C2': 0.9565}</td>\n",
344
+ " </tr>\n",
345
+ " <tr>\n",
346
+ " <th>5</th>\n",
347
+ " <td>Her argument is particularly compelling because it synthesizes historical evidence, theoretical precision, and a sop...</td>\n",
348
+ " <td>her argument is particularly compelling because it synthesizes historical evidence, theoretical precision, and a sop...</td>\n",
349
+ " <td>argument particularly compelling synthesizes historical evidence, theoretical precision, sophisticated awareness cul...</td>\n",
350
+ " <td>B1-B2</td>\n",
351
+ " <td>0.6361</td>\n",
352
+ " <td>{'A1-A2': 0.2443, 'B1-B2': 0.6361, 'C1-C2': 0.1197}</td>\n",
353
+ " </tr>\n",
354
+ " </tbody>\n",
355
+ "</table>\n",
356
+ "</div>"
357
+ ],
358
+ "text/plain": [
359
+ " text \\\n",
360
+ "0 I have a dog. It is small and very cute. We play in the park every day. \n",
361
+ "1 My name is Anna. I am a student. I live with my family in a big city. \n",
362
+ "2 Many people enjoy traveling by train because it is comfortable, affordable, and less stressful than flying. \n",
363
+ "3 If students manage their time well, they can improve their grades and still have enough time for rest and hobbies. \n",
364
+ "4 The committee’s recommendation, while ostensibly pragmatic, ultimately fails to address the structural asymmetries t... \n",
365
+ "5 Her argument is particularly compelling because it synthesizes historical evidence, theoretical precision, and a sop... \n",
366
+ "\n",
367
+ " normalized_text \\\n",
368
+ "0 i have a dog. it is small and very cute. we play in the park every day. \n",
369
+ "1 my name is anna. i am a student. i live with my family in a big city. \n",
370
+ "2 many people enjoy traveling by train because it is comfortable, affordable, and less stressful than flying. \n",
371
+ "3 if students manage their time well, they can improve their grades and still have enough time for rest and hobbies. \n",
372
+ "4 the committee s recommendation, while ostensibly pragmatic, ultimately fails to address the structural asymmetries t... \n",
373
+ "5 her argument is particularly compelling because it synthesizes historical evidence, theoretical precision, and a sop... \n",
374
+ "\n",
375
+ " preprocessed_text \\\n",
376
+ "0 dog. small cute. play park every day. \n",
377
+ "1 name anna. student. live family big city. \n",
378
+ "2 many people enjoy traveling train comfortable, affordable, less stressful flying. \n",
379
+ "3 student manage time well, improve grade still enough time rest hobbies. \n",
380
+ "4 committee recommendation, ostensibly pragmatic, ultimately fails address structural asymmetry perpetuate institution... \n",
381
+ "5 argument particularly compelling synthesizes historical evidence, theoretical precision, sophisticated awareness cul... \n",
382
+ "\n",
383
+ " predicted_label confidence \\\n",
384
+ "0 A1-A2 0.6027 \n",
385
+ "1 C1-C2 0.7338 \n",
386
+ "2 C1-C2 0.8663 \n",
387
+ "3 B1-B2 0.9152 \n",
388
+ "4 C1-C2 0.9565 \n",
389
+ "5 B1-B2 0.6361 \n",
390
+ "\n",
391
+ " probabilities \n",
392
+ "0 {'A1-A2': 0.6027, 'B1-B2': 0.3619, 'C1-C2': 0.0354} \n",
393
+ "1 {'A1-A2': 0.1452, 'B1-B2': 0.121, 'C1-C2': 0.7338} \n",
394
+ "2 {'A1-A2': 0.0018, 'B1-B2': 0.1319, 'C1-C2': 0.8663} \n",
395
+ "3 {'A1-A2': 0.0168, 'B1-B2': 0.9152, 'C1-C2': 0.068} \n",
396
+ "4 {'A1-A2': 0.0023, 'B1-B2': 0.0412, 'C1-C2': 0.9565} \n",
397
+ "5 {'A1-A2': 0.2443, 'B1-B2': 0.6361, 'C1-C2': 0.1197} "
398
+ ]
399
+ },
400
+ "execution_count": 7,
401
+ "metadata": {},
402
+ "output_type": "execute_result"
403
+ }
404
+ ],
405
+ "source": [
406
+ "pd.set_option(\"display.max_colwidth\", 120)\n",
407
+ "\n",
408
+ "example_sentences = [\n",
409
+ " # A1-A2\n",
410
+ " \"I have a dog. It is small and very cute. We play in the park every day.\",\n",
411
+ " \"My name is Anna. I am a student. I live with my family in a big city.\",\n",
412
+ "\n",
413
+ " # B1-B2\n",
414
+ " \"Many people enjoy traveling by train because it is comfortable, affordable, and less stressful than flying.\",\n",
415
+ " \"If students manage their time well, they can improve their grades and still have enough time for rest and hobbies.\",\n",
416
+ "\n",
417
+ " # C1-C2\n",
418
+ " \"The committee’s recommendation, while ostensibly pragmatic, ultimately fails to address the structural asymmetries that perpetuate institutional inefficiency.\",\n",
419
+ " \"Her argument is particularly compelling because it synthesizes historical evidence, theoretical precision, and a sophisticated awareness of cultural nuance.\"\n",
420
+ "]\n",
421
+ "\n",
422
+ "results = predict_texts(example_sentences)\n",
423
+ "results"
424
+ ]
425
+ },
426
+ {
427
+ "cell_type": "code",
428
+ "execution_count": null,
429
+ "id": "31f6fc98-7438-4e16-a8aa-87e63c61ee6e",
430
+ "metadata": {},
431
+ "outputs": [],
432
+ "source": []
433
+ }
434
+ ],
435
+ "metadata": {
436
+ "kernelspec": {
437
+ "display_name": "Python 3 (ipykernel)",
438
+ "language": "python",
439
+ "name": "python3"
440
+ },
441
+ "language_info": {
442
+ "codemirror_mode": {
443
+ "name": "ipython",
444
+ "version": 3
445
+ },
446
+ "file_extension": ".py",
447
+ "mimetype": "text/x-python",
448
+ "name": "python",
449
+ "nbconvert_exporter": "python",
450
+ "pygments_lexer": "ipython3",
451
+ "version": "3.11.11"
452
+ }
453
+ },
454
+ "nbformat": 4,
455
+ "nbformat_minor": 5
456
+ }
vocab.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cbce8dfb87bf30450435d0e38f437b9b34c97b3a7d6faa485ce3e605c5a90278
3
+ size 675803