419 lines
70 KiB
Plaintext
419 lines
70 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a353e94a-5fbe-4771-90ef-520ee626685d",
|
||
"metadata": {},
|
||
"source": [
|
||
"Повторим шаги из exd1.ipynb, но с ипользованием датасета News_Category_Dataset_v3 с сайта Kaggle.com"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "774e50b7-8c35-430b-b5e3-acfd2bfc9a18",
|
||
"metadata": {},
|
||
"source": [
|
||
"1) Подготовка данных"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"id": "fb9195ff-69c3-4194-9f84-8d1698444e09",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"84381 документов - 5 категории\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import json\n",
|
||
"import numpy as np\n",
|
||
"import pandas as pd\n",
|
||
"from collections import defaultdict\n",
|
||
"from time import time\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"\n",
|
||
"from sklearn.feature_extraction.text import TfidfVectorizer, HashingVectorizer, TfidfTransformer\n",
|
||
"from sklearn.decomposition import TruncatedSVD\n",
|
||
"from sklearn.pipeline import make_pipeline\n",
|
||
"from sklearn.preprocessing import Normalizer\n",
|
||
"from sklearn.cluster import KMeans, MiniBatchKMeans\n",
|
||
"from sklearn import metrics\n",
|
||
"\n",
|
||
"# Загрузка пользовательского датасета\n",
|
||
"with open(\"News_Category_Dataset_v3.json\", encoding=\"utf-8\") as f:\n",
|
||
" data = [json.loads(line) for line in f]\n",
|
||
"\n",
|
||
"df = pd.DataFrame(data)\n",
|
||
"\n",
|
||
"# Фильтрация только нужных столбцов\n",
|
||
"df = df[[\"category\", \"short_description\"]]\n",
|
||
"df = df[df[\"short_description\"].str.strip() != \"\"] # удалим пустые описания\n",
|
||
"\n",
|
||
"# Для примера ограничим количество категорий\n",
|
||
"top_categories = df[\"category\"].value_counts().nlargest(5).index.tolist()\n",
|
||
"df = df[df[\"category\"].isin(top_categories)]\n",
|
||
"\n",
|
||
"texts = df[\"short_description\"].tolist()\n",
|
||
"labels, label_names = pd.factorize(df[\"category\"])\n",
|
||
"true_k = len(label_names)\n",
|
||
"unique_labels, category_sizes = np.unique(labels, return_counts=True)\n",
|
||
"\n",
|
||
"print(f\"{len(texts)} документов - {true_k} категории\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "69934cda-68b2-42b3-a2fb-c6cc8473537c",
|
||
"metadata": {},
|
||
"source": [
|
||
"Создаём функцию fit_and_evaluate, которая обучает модель кластеризации несколько раз с разными random_state и вычисляет метрики"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"id": "72107cf7-917b-42da-8ad1-a4e715903961",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"evaluations = []\n",
|
||
"evaluations_std = []\n",
|
||
"\n",
|
||
"def fit_and_evaluate(km, X, name=None, n_runs=5):\n",
|
||
" name = km.__class__.__name__ if name is None else name\n",
|
||
"\n",
|
||
" train_times = []\n",
|
||
" scores = defaultdict(list)\n",
|
||
" for seed in range(n_runs):\n",
|
||
" km.set_params(random_state=seed)\n",
|
||
" t0 = time()\n",
|
||
" km.fit(X)\n",
|
||
" train_times.append(time() - t0)\n",
|
||
" scores[\"Homogeneity\"].append(metrics.homogeneity_score(labels, km.labels_))\n",
|
||
" scores[\"Completeness\"].append(metrics.completeness_score(labels, km.labels_))\n",
|
||
" scores[\"V-measure\"].append(metrics.v_measure_score(labels, km.labels_))\n",
|
||
" scores[\"Adjusted Rand-Index\"].append(metrics.adjusted_rand_score(labels, km.labels_))\n",
|
||
" scores[\"Silhouette Coefficient\"].append(metrics.silhouette_score(X, km.labels_, sample_size=2000))\n",
|
||
"\n",
|
||
" train_times = np.asarray(train_times)\n",
|
||
"\n",
|
||
" print(f\"clustering done in {train_times.mean():.2f} ± {train_times.std():.2f} s \")\n",
|
||
" evaluation = {\"estimator\": name, \"train_time\": train_times.mean()}\n",
|
||
" evaluation_std = {\"estimator\": name, \"train_time\": train_times.std()}\n",
|
||
" for score_name, score_values in scores.items():\n",
|
||
" mean_score, std_score = np.mean(score_values), np.std(score_values)\n",
|
||
" print(f\"{score_name}: {mean_score:.3f} ± {std_score:.3f}\")\n",
|
||
" evaluation[score_name] = mean_score\n",
|
||
" evaluation_std[score_name] = std_score\n",
|
||
"\n",
|
||
" evaluations.append(evaluation)\n",
|
||
" evaluations_std.append(evaluation_std)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c7cc318e-3f37-46e8-a33d-4588de702ffa",
|
||
"metadata": {},
|
||
"source": [
|
||
"Преобразуем текстовые данные в векторное представление"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"id": "32c54c82-755f-4749-82fc-a03294872f48",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"vectorization done in 0.745 s\n",
|
||
"n_samples: 84381, n_features: 17006\n",
|
||
"0.001\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"vectorizer = TfidfVectorizer(max_df=0.5, min_df=5, stop_words=\"english\")\n",
|
||
"\n",
|
||
"t0 = time()\n",
|
||
"X_tfidf = vectorizer.fit_transform(texts)\n",
|
||
"\n",
|
||
"print(f\"vectorization done in {time() - t0:.3f} s\")\n",
|
||
"print(f\"n_samples: {X_tfidf.shape[0]}, n_features: {X_tfidf.shape[1]}\")\n",
|
||
"print(f\"{X_tfidf.nnz / np.prod(X_tfidf.shape):.3f}\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f37313d7-671f-4a5c-b021-f308a680343f",
|
||
"metadata": {},
|
||
"source": [
|
||
"Применяем KMeans для кластеризации текстов на основе TF-IDF векторов"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"id": "347510a6-d160-4a55-a9dc-244f104d56cb",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Количество документов в каждом кластере: [ 3116 3626 961 2587 74091]\n",
|
||
"Количество документов в каждом кластере: [ 22 81624 1261 1170 304]\n",
|
||
"Количество документов в каждом кластере: [ 3497 73711 961 1948 4264]\n",
|
||
"Количество документов в каждом кластере: [ 3385 961 67675 6706 5654]\n",
|
||
"Количество документов в каждом кластере: [ 961 3537 73170 2227 4486]\n",
|
||
"Настоящее распределение по категориям: [14774 32441 17943 9802 9421]\n",
|
||
"clustering done in 0.38 ± 0.02 s \n",
|
||
"Homogeneity: 0.036 ± 0.018\n",
|
||
"Completeness: 0.086 ± 0.036\n",
|
||
"V-measure: 0.051 ± 0.024\n",
|
||
"Adjusted Rand-Index: 0.002 ± 0.016\n",
|
||
"Silhouette Coefficient: 0.004 ± 0.001\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"for seed in range(5):\n",
|
||
" kmeans = KMeans(n_clusters=true_k, max_iter=100, n_init=1, random_state=seed).fit(X_tfidf)\n",
|
||
" cluster_ids, cluster_sizes = np.unique(kmeans.labels_, return_counts=True)\n",
|
||
" print(f\"Количество документов в каждом кластере: {cluster_sizes}\")\n",
|
||
"print(f\"Настоящее распределение по категориям: {category_sizes}\")\n",
|
||
"\n",
|
||
"# Повтор с лучшим результатом по инерции\n",
|
||
"kmeans = KMeans(n_clusters=true_k, max_iter=100, n_init=5)\n",
|
||
"fit_and_evaluate(kmeans, X_tfidf, name=\"KMeans\\non tf-idf vectors\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f8824341-eb9d-4509-a8e1-4ce0b37a206a",
|
||
"metadata": {},
|
||
"source": [
|
||
"Применяем LSA"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"id": "adeb7956-6d2e-4efc-98d8-62e46d7ca32b",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"LSA done in 1.497 s\n",
|
||
"Explained variance: 11.1%\n",
|
||
"clustering done in 0.15 ± 0.05 s \n",
|
||
"Homogeneity: 0.050 ± 0.028\n",
|
||
"Completeness: 0.068 ± 0.027\n",
|
||
"V-measure: 0.057 ± 0.029\n",
|
||
"Adjusted Rand-Index: 0.001 ± 0.010\n",
|
||
"Silhouette Coefficient: 0.027 ± 0.009\n",
|
||
"clustering done in 0.24 ± 0.03 s \n",
|
||
"Homogeneity: 0.096 ± 0.015\n",
|
||
"Completeness: 0.112 ± 0.019\n",
|
||
"V-measure: 0.104 ± 0.016\n",
|
||
"Adjusted Rand-Index: 0.041 ± 0.026\n",
|
||
"Silhouette Coefficient: 0.029 ± 0.002\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"lsa = make_pipeline(TruncatedSVD(n_components=100), Normalizer(copy=False))\n",
|
||
"t0 = time()\n",
|
||
"X_lsa = lsa.fit_transform(X_tfidf)\n",
|
||
"explained_variance = lsa[0].explained_variance_ratio_.sum()\n",
|
||
"\n",
|
||
"print(f\"LSA done in {time() - t0:.3f} s\")\n",
|
||
"print(f\"Explained variance: {explained_variance * 100:.1f}%\")\n",
|
||
"\n",
|
||
"# Повтор кластеризации на пониженной размерности\n",
|
||
"kmeans = KMeans(n_clusters=true_k, max_iter=100, n_init=1)\n",
|
||
"fit_and_evaluate(kmeans, X_lsa, name=\"KMeans\\nwith LSA on tf-idf vectors\")\n",
|
||
"\n",
|
||
"minibatch_kmeans = MiniBatchKMeans(n_clusters=true_k, n_init=1, init_size=1000, batch_size=1000)\n",
|
||
"fit_and_evaluate(minibatch_kmeans, X_lsa, name=\"MiniBatchKMeans\\nwith LSA on tf-idf vectors\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "0fdd070b-0167-4ecc-9bec-ff038dddc61a",
|
||
"metadata": {},
|
||
"source": [
|
||
"Определяем, какие слова лучше всего характеризуют каждый кластер"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"id": "2e9617e3-f2d2-4527-9062-e6cdbaef5882",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Кластер 0: new time just like year life day world don ve \n",
|
||
"Кластер 1: people health help study national government americans public cancer sleep \n",
|
||
"Кластер 2: film video red night movie season summer singer home actor \n",
|
||
"Кластер 3: said president obama elect vice house people senator new secretary \n",
|
||
"Кластер 4: trump donald president administration campaign said house clinton republican election \n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"original_space_centroids = lsa[0].inverse_transform(kmeans.cluster_centers_)\n",
|
||
"order_centroids = original_space_centroids.argsort()[:, ::-1]\n",
|
||
"terms = vectorizer.get_feature_names_out()\n",
|
||
"\n",
|
||
"for i in range(true_k):\n",
|
||
" print(f\"Кластер {i}:\", end=\" \")\n",
|
||
" for ind in order_centroids[i, :10]:\n",
|
||
" print(f\"{terms[ind]}\", end=\" \")\n",
|
||
" print()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "9ab1a8e4-b067-4ada-a966-1b312dbcfbcf",
|
||
"metadata": {},
|
||
"source": [
|
||
"Вместо TfidfVectorizer используем HashingVectorizer + TfidfTransformer + LSA"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"id": "9be11eaf-9188-4c86-92e3-16e3e71b0d3b",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"vectorization done in 2.805 s\n",
|
||
"clustering done in 0.14 ± 0.02 s \n",
|
||
"Homogeneity: 0.075 ± 0.044\n",
|
||
"Completeness: 0.090 ± 0.041\n",
|
||
"V-measure: 0.081 ± 0.043\n",
|
||
"Adjusted Rand-Index: 0.019 ± 0.022\n",
|
||
"Silhouette Coefficient: 0.029 ± 0.004\n",
|
||
"clustering done in 0.25 ± 0.03 s \n",
|
||
"Homogeneity: 0.086 ± 0.024\n",
|
||
"Completeness: 0.102 ± 0.024\n",
|
||
"V-measure: 0.093 ± 0.024\n",
|
||
"Adjusted Rand-Index: 0.036 ± 0.016\n",
|
||
"Silhouette Coefficient: 0.028 ± 0.004\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"lsa_vectorizer = make_pipeline(\n",
|
||
" HashingVectorizer(stop_words=\"english\", n_features=50000),\n",
|
||
" TfidfTransformer(),\n",
|
||
" TruncatedSVD(n_components=100, random_state=0),\n",
|
||
" Normalizer(copy=False),\n",
|
||
")\n",
|
||
"\n",
|
||
"t0 = time()\n",
|
||
"X_hashed_lsa = lsa_vectorizer.fit_transform(texts)\n",
|
||
"print(f\"vectorization done in {time() - t0:.3f} s\")\n",
|
||
"\n",
|
||
"fit_and_evaluate(kmeans, X_hashed_lsa, name=\"KMeans\\nwith LSA on hashed vectors\")\n",
|
||
"fit_and_evaluate(minibatch_kmeans, X_hashed_lsa, name=\"MiniBatchKMeans\\nwith LSA on hashed vectors\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "9cc1b5c8-0bcc-4ad9-9d56-3a3400098451",
|
||
"metadata": {},
|
||
"source": [
|
||
"Строим таблицу и визуализацию с результатами кластеризации"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"id": "903862f5-44bf-4cfe-8b97-3ed0d3f8a40b",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABjUAAAJOCAYAAAD/KYUYAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAApKFJREFUeJzs3Qd0VVX6P+4NCkgHewF7771XLKA4imUsY8GOir13sYLth72MXcfeZ1BHx957Q8UuomNvgCBFyX+9e/433wQCJCHJzU2eZ627CLecs++5Qc/dn/Put0VZWVlZAgAAAAAAaORaFnsAAAAAAAAA1SHUAAAAAAAASoJQAwAAAAAAKAlCDQAAAAAAoCQINQAAAAAAgJIg1AAAAAAAAEqCUAMAAAAAACgJQg0AAAAAAKAkzFzsAUBTMWnSpPT111+njh07phYtWhR7OAAANEFlZWVp9OjRad55500tWzbcNWrOdQEAaCznukINqCPxJa979+7FHgYAAM3Al19+mbp169Zg+3OuCwBAYznXFWpAHYmr1gr/6Dp16lTs4QAA0ASNGjUqhwuFc8+G4lwXAIDGcq4r1IA6UijDjy95vugBAFCfGnoJKOe6AAA0lnNdjcIBAAAAAICSINQAAAAAAABKglADAAAAAAAoCXpqAABQVH/++WeaOHFisYcBjUKrVq3STDPNVOxhAABAoyXUAACgKMrKytK3336bfv3112IPBRqVLl26pLnnnrvBm4EDAEApEGoAAFAUhUBjzjnnTO3atTOBS7MXQd/YsWPT999/n/8+zzzzFHtIAADQ6Ag1AAAoypJThUBjttlmK/ZwoNFo27Zt/jOCjfj3YSkqAACoTKNwAAAaXKGHRlRoAJUV/l3oNQMAAFMSagAAUDSWnIIp+XcBAABTJ9QAAADq3FNPPZUn5zWCBwAA6pJQAwAAamCPPfZIffr0meJ+k/iVrb322umbb75JnTt3zn+/4YYbUpcuXYo9LAAAoMRpFA4AQKOy4HEPNuj+hg/q3aD7ay5at26d5p577mIPAwAAaGJUagAAQD2455570jLLLJPatGmTFlxwwXTBBRdUejzuO/PMM9Puu++eOnTokBZYYIH0z3/+M/3www9p6623zvctv/zy6bXXXqvRdqM6onfv3qlt27ZpoYUWSrfeemt+3oUXXlj+nKgm2WeffdIcc8yROnXqlHr06JHefvvt8scHDBiQVlxxxXTzzTfn10a1xU477ZRGjx5d/pxJkyalgQMH5n3EvlZYYYV09913V1m5Ej/vueeeaeTIkfm+uMU+Tj/99LTssstOcexi3yeffPIMfgIAAEBTJNQAAIA69vrrr6cddtghBwFDhw7NE/gxSR9LMFU0ePDgtM4666Q333wzBxG77bZbDjl23XXX9MYbb6RFFlkk/72srKza243nf/311zlIiADk73//e/r+++8r7fevf/1rvu/hhx/O21x55ZXTxhtvnH7++efy53z66afp/vvvT0OGDMm3p59+Og0aNKj88Qg0brrppnTllVem9957Lx1++OF53PG8qpaiilAlApQIXeJ21FFHpb322isNGzYsvfrqq+XPjWPxzjvv5BAEAABgcpafAgCAGopJ/qikqOjPP/8s//n//b//l0OCQrXB4osvnt5///103nnn5Z4cBVtssUXq169f/vmUU05JV1xxRVpttdVy6BCOPfbYtNZaa6XvvvsuL+U0ve1+8MEH6bHHHsshwaqrrpqfc80116TFFlusfJ/PPfdceuWVV3KoEdUe4fzzz88BRlRa7LfffuWVGBGWdOzYMf89ApfHH388nXXWWWn8+PHp7LPPzvuK8YWFF144b/uqq65KG2ywwRRLUUW1R1RoVFySKo5hz5490/XXX5/fd4if4/WxPQAAgMmp1AAAgBraaKON0ltvvVXpFuFBQVQfRAVGRfH3jz/+uFL4EctLFcw111z5z+WWW26K+wqVFtPb7ocffphmnnnmXHlRsOiii6auXbuW/z2Wmfrtt9/SbLPNlkOFwu3zzz/P1RkFsexUIdAI88wzT/k4PvnkkzR27Ni06aabVtpGVG5U3EZ17Lvvvum2225L48aNSxMmTMjLZUUFBwAAQFVUagAAQA21b98+hwUVffXVVzXeTqtWrcp/jiqGqd0XVRN1JQKNCChiearJdenSpcqxFcZSGEdsIzz44INpvvnmq/S8QvVHdf3lL3/Jr7nvvvtyRcfEiRPT9ttvX6NtAAAAzYdQAwAA6thSSy2Vnn/++Ur3xd9juaiZZpqp3ra7xBJLpD/++CP3pVhllVXKqyp++eWX8udHFce3336bKzqiGqM2ll566RxEjBgxYoqlpqYmAouKVSoFMY6+ffvmZafiOdEvJBqPAwAAVEWoAQAAdezII4/MPSLOOOOMtOOOO6YXX3wxXXrppenyyy+v1+0uueSSaZNNNsl9MaI/R1RbxGsiJChUfcTj0QejT58+6dxzz82BSDQWj6qLbbbZprwXx7TEslTR6Duag0f1xrrrrptGjhyZA5ZoBh4hxeQiQIkKj+jLscIKK6R27drlW9hnn31yYBMmD20AAAAq0lMDAADqWFRD3Hnnnen2229Pyy67bG4Cfvrpp1dqEl5f242+FtGLY/31188hRfSsiBBilllmyY9HuPHQQw/lx/fcc88cakR1xBdffFHew6M6IliJhuUDBw7MgUSvXr1yMLLQQgtV+fy111477b///jmMmWOOOXKgUhCNzOPxCGXWWGONGTpGAABA09airKysrNiDgKZg1KhRqXPnzvkqxbhCEQCYumgKHY2pYwK8MNlesOBxDzboWIYP6p2asuj10b179/TYY4+ljTfeODVG8ZUkgo0DDzwwHXHEEam5m9a/j2KdczrXBQCgsZxzWn4KAIBGpamHDPXtiSeeyMs8Lbfccumbb75JxxxzTF76KSozGqMffvghV55En4+oHAEAAJgWoQYAADQhEydOTCeccEL67LPP8rJTsazTLbfckvtrNEZzzjlnmn322dPf//731LVr12IPBwAAaOSEGkDJuGz/J2Z4G/2v7FEnYwGAxqpnz575Viqshltalj31kdSyzf8avAMAULdUrVePRuEAAAAAAEBJEGoAAAAAAAAlQagBAAAAAACUBD01gCZv/MTfy38eM2ZMpcfat29fhBEBAAAAALUh1ACavCOv27LCz5Uf05wUAAAAAEqH5acAAAAAAICSoFIDaPIu2GtI+c/9Lt6wqGMBgPo0fPjwtNBCC6U333wzrbjiisUeDgAAQJ1TqQE0eW1atS2/RQ+NijcAqI1vv/02HXzwwWnhhRdObdq0Sd27d09/+ctf0uOPP55KzYYbbpgOO+ywYg8DAACgWlRqAADQuAzo3MD7G1njaoh11lkndenSJZ133nlpueWWSxMnTkyPPPJI6t+/f/rggw/qbagAAADNnUoNAACogQMPPDC1aNEivfLKK2m77bZLiy++eFpmmWXSEUcckV566aX8nBEjRqStt946dejQIXXq1CntsMMO6bvvvivfxoABA/LyUNddd12af/758/Niu3/++Wc699xz09xzz53mnHPOdNZZZ1Xad+z3iiuuSJtvvnlq27ZtrhS5++67pzned999Nz8/9jHXXHOl3XbbLf3444/5sT322CM9/fTT6aKLLsrbjluENtN7XaHC45BDDknHHHNMmnXWWfOY431V9Ouvv6Z99tknzTHHHPk49OjRI7399tvlj8fPG220UerYsWN+fJVVVkmvvfZafuyLL77I1S9du3bN1ZVxjB966KEZ+OQAAICmQKUGUDJ6PNV/us9Z6oNhDTIWAJqnn3/+Of373//OYUNVyxhG9cakSZPKA40IDP74449cwbHjjjump556qvy5n376aXr44Yfz9uLn7bffPn322Wc5JInXvfDCC2mvvfZKm2yySVpjjTXKX3fyySenQYMG5SDi5ptvTjvttFMaOnRoWmqppaYYT4QKESREsDB48OD0+++/p2OPPTaHLE888UTexkcffZSWXXbZdPrpp+fXRAAxvdcV3HjjjTnMefnll9OLL76YQ5KoYtl0003z43/9619z+BLvs3Pnzumqq65KG2+8cd5nBCG77LJLWmmllXJQM9NMM6W33nortWrVKr82jtmECRPSM888k4/1+++/n48pAADQvAk1AACgmj755JNUVlaWllxyyak+J/pqRMjw+eef514b4aabbsqVBq+++mpabbXV8n0RfkSlRlQpLL300rli4cMPP8zVCC1btkxLLLFEOuecc9KTTz5ZKdSIoCDChnDGGWek//znP+mSSy5Jl19++RRjufTSS3NocPbZZ5ffF/uMcUWwEAFK69atU7t27XKlRU1eF5Zffvl06qmn5p8XW2yx/Lp4/xFqPPfcc7ma5fvvv899R8L555+f7r///lxdst9+++WKlqOPPrr8eMY2CuKxqISJ5b1CVKUAAAAINQAAoJoi0JieYcOG5cn/QqARIrSIKo54rBBqLLjggjnQKIglnqJaIQKNivdFKFDRWmutNcXfo8KhKrG8U4QiVVU4RHVIIZyo7esi1KhonnnmKR9vbOO3335Ls802W6XnRNVHbCNElUcENFFxEhUpEdgsssgi+bFY2uqAAw5Ijz76aH4sAo7J9wcAADQ/Qg1oAsaMGZOag7GTJk33Oc3lWFRHVcuiADBjopIg+k7URTPwwjJLBbHdqu6Lio7ailAh+lJExcfkIoCY0ddNa7yxjXhuxSW3CiLgCdGD429/+1t68MEH8xJVUfVx++23p2222SaHHT179syPRbAxcODAdMEFF6SDDz64hkcBAABoSoQa1ItYTznWYo7lBQpimYFdd901r0EdSzLEGsz9+vVLV155ZaXXxvrJsXxC37590w033FCE0Zce60tX4FjU6GpiAGom+kDERPtll12WKwkmD5Dj/Cd6W3z55Zf5VqjWiH4Q8VhUbMyoaEa+++67V/p7LBVVlZVXXjndc889uSpk5pmrPvWP5aeiQXlNXzc9sY1vv/02vz62MzVR9RG3ww8/PO28887p+uuvz6FGiOO3//7759vxxx+frr76aqEGAAA0c/9X2w716JprrsmNIKMJ5JFHHln+JTWuxIslCArGjRuXbr311jT//PMXcbQAAFMXgUaEAKuvvnqe+P/444/zslIXX3xxXgoqlkqKPhBx7vPGG2/kvhIRQmywwQZp1VVXneH933XXXbm/RfS2iMqG2P5BBx1U5XPjYpFobh5hQfTziGWfHnnkkbTnnnuWBxkROESj7+HDh6cff/wxV1pU53XTE8chjkefPn1ypUVsP5qfn3jiiem1117L54Ax7qjk+OKLL9Lzzz+f91VoeH7YYYflfUZvkjiOsRxWVc3QAQCA5kWlBvXu3HPPrbSUQMWr9+IL8r333pu/9If4OQKNhRZaqNI24st1LH/w97//PV/xF1fznXzyyWn77bfPj8eX62g2+cQTT+THYxsHHnhgOvTQQ6eoHll33XXz0gUTJkxIO+20U7rwwgvLl06ICpHBgwfnKys7d+6c1ltvvVxh0tjF8g7NwQcrrTzd5yz55hsNMhYAmq9oWB2T7FF9GhdrfPPNN2mOOeZIq6yySr6AI5ZgeuCBB3JFwfrrr597ZPTq1Ss3864Lp512Wj6vinOdWN7ptttum2oFyLzzzpvDgmOPPTZtttlmafz48WmBBRbI4yn07jjqqKNyhWxsI4KGCBEi6Jje66YnjkM0PY8QI8KQH374ITcjj2NS6B/y008/5cDnu+++S7PPPnvadttt8/srnN9FuPLVV1+lTp065X3HeRoAANC8tSizPgn1oBAgLLHEEjkoiGWoNt544ykejysWY53kxx57rPyKvi233DJfsRdrLReWn4pJg3/84x85gIi1rJ955pm8DEFcvRfbmDhxYjrzzDPz2s/RjDKuAoyQI5Yv2GGHHcr3ed999+V1myPs+OSTT9KOO+6Yt7nvvvvmKwbX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vPPOW6PXd+jQId9KVadOndKHH36Ye+x8/vnn6cADD0x//etf08svv1zsoQEAAE2YnhoAAFBDv/32W7rjjjvSAQcckHr37p0rFyY3aNCgXMHQsWPHtPfee6dx48ZVejyWn4rKioqVFpNXFfTp0yftscce5X+//PLL02KLLZZmmWWWvO3tt98+3x/Pefrpp9NFF12UKyfiNnz48PzYu+++mzbffPMcoMRrdtttt/Tjjz+Wb3PMmDFp9913z4/PM8886YILLqjWMYh9zD333Pk1a6+9dn6Pr7zySho1alT5c4499ti0+OKLp3bt2qWFF144nXzyyWnixIlTHIObb745V1Z07tw57bTTTmn06NEzPL6qxnvNNdekbbbZJo8njuM///nPSs956KGH8njbtm2bl50qHMOKnnvuubTeeuvl53Tv3j0dcsgheYzhpptuyuP8+OOPy58fYc+SSy6Zxo4dW6txAwAAlanUAErG8EG9iz0EAMjuvPPOPFG9xBJLpF133TWHEccff3yeOC88HhP2l112WV6iKibtL7744jyxX1uvvfZankCPbUWI8PPPP6dnn302PxZhxkcffZSWXXbZdPrpp+f75phjjvTrr7+mHj16pH322ScNHjw4/f777zlo2GGHHdITTzyRn3f00UfnQOSBBx5Ic845ZzrhhBPSG2+8USlwmZ7vv/8+3XfffWmmmWbKt4IIdCLwiSqWoUOHpn333Tffd8wxx5Q/59NPP829RYYMGZJ7V8TYIhA666yz6mx8Baeddlo699xz8zJZl1xySdpll13SF198kWadddb05Zdfpm233Tb1798/7bfffvl4H3nkkZVeH2ON5cbOPPPMdN1116UffvghHXTQQfl2/fXX5/Al3kds94UXXkiPPPJIDlJiqbIIUpqCd0/rmat0AACgWIQaAABQQ7HkVIQZISa5R44cmSfeo9oiRF+LqFyIW4hJ8Mcee2yKao2aGDFiRO79s+WWW+ZgYIEFFkgrrbRSfiwqHFq3bp0nzqN6ouDSSy/Nzzn77LPL74vJ+KgwiBAkwoZ4L//4xz/SxhtvnB+/8cYbU7du3aY7nnjPUZUQy08VqhAidKnYn+ikk04q/zkqMaKPyO23314p1Jg0aVIOPuI9hagkefzxx3OoERUxtR1fVaKiZeedd84/xzGJoCmqS+IzvOKKK9IiiyxSXgkSgVUEMeecc0756wcOHJgDi0JFTVR7xDY22GCD/PqooLnqqqvS8ssvn4/Fvffem8OtVVZZpVbjBQAApmT5KQAAqIHoIxET4YXJ8ZlnnjntuOOOefK9YNiwYWmNNdao9Lq11lprhva76aab5iAjqj1i4v+WW26Z7pJGb7/9dnryySfL+3fELSpMClUHcZswYUKlsUbVQkzoT0+EEG+99VauaIggYOWVVy6vriiIJbrWWWedHLTEviPkiHCmogg7CoFGiCWmovKjMMbpjS/CiYrvb/LtVxRhQ0GEL1FxUNhXdT6zOJ4RwFTcX8+ePXMwE31FQteuXfPvQiEkOe6446Z7LAEAgOpTqQEAADUQE9Z//PFHpcbgUa3Qpk2bXBkRVRO10bJly7ydiir2n4iJ/1h26amnnkqPPvpoOuWUU3IVwKuvvpq6dOlS5Taj0uEvf/lLpWqDiuHBJ598UquxFsa76KKL5p+XWmqpHEBEj5FYHivEkktR1RBLPsXEfxyXqNKYvCdGq1atKv09lvCKkKC69t9//7xkVcG0GrbP6L7iePbr1y9XYUxu/vnnL//5mWeeyctwffPNN7nfRsXQBgAAmDEqNQAAoJoizIhm0DExH1UKhVtcwR+T6bfddlv5JP/LL79c6bUvvfTSNLcdPTBiErzgzz//zE2+K4qqkE022ST3hXjnnXdyI+tCb4xYfipeU1FUT7z33nu5GiICiIq3qFSISoKY6K841uhrEUtT1VRUJERlRgQvIXpKRGXJiSeemFZdddW8VFP0r6iJ6owvKjcqvq84RrURn1lU4EzrM4vj+f77709xLOMWx7/wviNE+te//pUrOaLfBgAAUHeEGgAAUE2FZtbRKyOacle8bbfdduVLUB166KG5d0U0j44J+FNPPTWHC9MSDb0ffPDBfPvggw9y1UM0+q647+jfECFKhAMRrkSVQWEppgguYvI/go4ff/wxPxZNr6OheCyVFRUdUU0Rzav33HPPHIDEpHu8l2jGHeFIhCjRdyKqMGoq+nRss802uYIkRIgRS0FFdUbsN8YezcRroi7HV52Kj48//jjvK5YYu/XWW/NSUxVFk/UILSKoiM8hnh8NzAvBxejRo/PSYFHJsfnmm+clwiLoufvuu+t8vAAA0FwJNQAAoJoitIhKiaqWmIpQI/pLRAVF9Ng4+eSTc0PsaBIdIUSEFNOy1157pb59+6bdd989N56O3hkbbbRR+eOxxFQ0no7wI6oKrrzyylwZsswyy+THowl3LHm09NJL56qPCBSieuT555/PAcZmm22WlltuudzkOrZVCAbOO++8tN566+VlquK9rbvuurVubH344YfnUCYqHrbaaqv895jwX3HFFXMYEMekpupyfNMSy0fdc8896f77708rrLBCPr4VG6wXenJEQ/gIqmJM0YQ9QpzCklcRZkUFTOF1cbzj51iy6r///W+djxkAAJqjFmWTL9wL1MqoUaPyBMfIkSNz00kAYOrGjRuXGysvtNBCaZZZZknN0fHHH5+effbZ9NxzzxV7KJTQv49inXM61wUAoLGcc6rUAACABhTXFMVyTI8//nh5lQUAAADVI9QAAIAGFFcdxRJR0Vj6hBNOKPZwAAAASsrMxR4AAAA0J9HPYvz48cUeBgAAQElSqQEAAAAAAJQEoQYAAAAAAFAShBoAAAAAAEBJEGoAAAAAAAAlQagBAAAAAACUBKEGAAAAAABQEoQaAABQx1q0aJHuv//+/PPw4cPz3996663896eeeir//ddffy3yKJuWDz74IK255ppplllmSSuuuGKV903+WUzPHnvskfr06VPPIwcAAGpCqAEAADXwww8/pAMOOCDNP//8qU2bNmnuuedOPXv2TM8//3z5c7755pu0+eabp8Zuww03TIcddlil++o6dPnkk0/Snnvumbp165aP10ILLZR23nnn9Nprr6W6dOqpp6b27dunDz/8MD3++ONV3te9e/f82Sy77LLV2uZFF12Ubrjhhjod54ABA8pDFwAAoOZmrsVrAACg3ly2/xMNur/+V/ao0fO32267NGHChHTjjTemhRdeOH333Xd5wvynn34qf04EHaQcXGy88cY5RLjqqqvSkksumUaPHp0eeOCBdOSRR6ann366zvb16aefpt69e6cFFlhgmvfV5LPp3LlznY0PAACoGyo1AACgmqJ64dlnn03nnHNO2mijjfJk+eqrr56OP/74tNVWW1W5/NTUvP7662nVVVdN7dq1S2uvvXauJqjoiiuuSIssskhq3bp1WmKJJdLNN99c/lhVyyjF2OK+qLQoePfdd3PFSIcOHdJcc82Vdtttt/Tjjz+WL60UoUJUI8Tr4hbbjfcVunbtmu+L54VJkyalgQMH5kqLtm3bphVWWCHdfffdU31/ZWVl+bWLLbZYPmYRLsT7iSqFqKCIYKNg6NChqUePHnm7s802W9pvv/3Sb7/9Vml711xzTVpqqaXyUlIRjlx++eWVjnccz9NPPz3/HNUQVd1X1XF777330pZbbpk6deqUOnbsmNZbb70chlS1/NT0jkGhyiVCrqo+26j6OO2009Lbb79dfszruhIEAACaOqEGAABUU4QDcYvAYvz48TO0rRNPPDFdcMEFuZph5plnTnvttVf5Y/fdd1869NBDczVDBBP9+vXLSzg9+eST1d5+hBwRFKy00kp5H//+979zVckOO+yQH48wY6211kr77rtvXpIpbrE80z333JMfj4n4uC+eF2Iy/6abbkpXXnllDgIOP/zwtOuuu0612iKCg3hevIeWLaf82tGlS5f855gxY/LyXRGivPrqq+muu+5Kjz32WDrooIPKn3vLLbekU045JZ111llp2LBh6eyzz04nn3xyrpYJMc5lllkm7yt+Puqoo6q8b3L//e9/0/rrr5+XxXriiSdyCBKfwx9//FHle6ruMZjaZ7vjjjvm8cS4Csc87gMAAKrP8lMAAFBNMUEdV9ZHEBAT2yuvvHLaYIMN0k477ZSWX375Gm0rJujjteG4447LlQzjxo3LlQjnn39+rhI48MAD8+NHHHFEeumll/L9hUqK6bn00ktzoBEBQMF1112Xg4uPPvooLb744rkKJKoJKi7JNOuss+Y/55xzzvLgIQKc2E6EDRGEhFh667nnnsvLShXeR0Uff/xx/jOqKqbl1ltvze87woLof1EY+1/+8pdcERMVJlHZESHBtttumx+PSon3338/77tv3755/PHZROBUeC/x8+T3FapUCi677LK8xNTtt9+eWrVqle+L41KVmhyDqX22Ud1RGJclygAAoHZUagAAQA17anz99dfpn//8Z+rVq1decijCjZouI1QxBJlnnnnyn99//33+M6oR1llnnUrPj7/H/dUVSxxFZUehuiRuhYChsLxSTZp9jx07Nm266aaVthdBxNS2FctPVUe8p1jGqRBoFN5rLPUU1SJRyRH72HvvvSvt+8wzz6zx+6iqmiSWmyoEGnV1DKb12QIAADNGpQYAANRQVFPE5HbcYhmkffbZJ1cTFPpPVEfFifTorRBiIr86Css5VQwOJk6cWOk50ZOiUO0wucJEe3UV+ls8+OCDab755qv0WCzdVJVCxcMHH3yQK0Zqq7Dvq6++Oq2xxhqVHptpppnSjIjKifo4BjPy2QIAANMm1AAAgBm09NJLT7cxeE1EQ+znn38+L61UEH+P/YQ55pgj/xk9GQqBQcXm1yGqR6I/xoILLpiXO6pKLD/1559/TnFfqHh/7Dcm7keMGFHlUlNViYbg8bpYNir6RkzeVyN6fsTyVvFeo8olKjIK1RrxXuP50SA9lp+ad95502effZZ22WWXVJeioiL6ckQgNL1qjdocg+oecwAAoPosPwUAANX0008/5ebb//jHP9I777yTPv/889zY+txzz01bb711ne3n6KOPzhP9V1xxRe5N8f/+3/9L9957b3mz66gwWHPNNdOgQYPy8k3RqPqkk06qtI3+/funn3/+Oe288865AXcskfTII4/khuOFSfUIPF5++eU0fPjw3G8iqgkWWGCBXF0wZMiQ9MMPP+QKhY4dO+Z9R2PsCAFiW2+88Ua65JJLypt1Ty62cf311+f+HbHE00MPPZSDiThu0XOicLwiqIjKlwhwoil6LJl18MEHp9122y0HGuG0007LTbovvvjivL2hQ4fmbcdxmRHRjHzUqFG5J0o09Y5jffPNN+dlryZXm2NQlTjm8XsTIVQc8xltOA8AAM2NUAMAAKopeijEEkiDBw9O66+/flp22WXz8lPRODyaW9eVPn36pIsuuig3Bl9mmWVyI+qYxN9www0rNf3+448/0iqrrJIOO+yw3GOioqhuiIqHCDA222yztNxyy+XnRXVEoWoiJuljCaeoQojqj6hCiKWVIkSIBtcRKsTEfzjjjDPye41wIaorop9ILMUUTbunZvXVV89hwaKLLpqPUbxuq622Su+991668MIL83OiUXmELRHArLbaamn77bdPG2+8caXjGct7XXPNNfkYxPuISokIfaa17+qYbbbZ0hNPPJGDm9hmHMtY5mpqVRu1OQZV9WSJ10XD9zjmt9122wy9BwAAaG5alFW3gx8wTXGVX+fOndPIkSNTp06dij0cAGjUxo0bl69Wj8nguEofqN6/j2KdczrXBQCgsZxzqtQAAAAAAABKglADAAAAAAAoCUINAAAAAACgJAg1AAAAAACAkiDUAAAAAAAASoJQAwCAoikrKyv2EKDR8e8CAACmTqgBAECDa9WqVf5z7NixxR4KNDqFfxeFfycAAMD/mbnCzwAA0CBmmmmm1KVLl/T999/nv7dr1y61aNGi2MOColdoRKAR/y7i30f8OwEAACoTagAAUBRzzz13/rMQbAD/E4FG4d8HAABQmVADAICiiMqMeeaZJ80555xp4sSJxR4ONAqx5JQKDQAAmDqhBgAARRUTuCZxAQAAqA6NwgEAAAAAgJIg1AAAAAAAAEqCUAMAAAAAACgJQg0AAAAAAKAkCDUAAAAAAICSINQAAAAAAABKglADAAAAAAAoCUINAAAAAACgJAg1AAAAAACAkiDUAAAAAAAASoJQAwAAAAAAKAlCDQAAAAAAoCQINQAAAAAAgJIwc7EHAFBdl+3/RLGHQB3pf2WPYg8BAKiFZU99JLVs067YwwCmYfig3sUeAgDUK5UaAAAAAABASRBqAAAAAAAAJcHyUwBN0PiJv6fGbMyYMamxat++fbGHAAAAAMBUCDUAmqAjr9syNWZHXpcarbKysmIPAQAAAICpsPwUAAAAAABQElRqADRBF+w1JDVm/S7esNhDAAAAAKAECTUAmqA2rdqmxkzfCgAAAABqw/JTAAAAAABASRBqAAAAAAAAJcHyU0DJ6PFU//Kfl/pgWFHHAgAAAAA0PJUaAAAAAABASRBqAAAAAAAAJcHyU0CVxowZkxqbsZMmNerxTa59+/bFHgIAAAAANClCDaBKHTp0SI1aYx9fSqmsrKzYQwAAAACAJsXyU9SLPfbYI/Xp06fSfXfffXeaZZZZ0gUXXJAfb9GiRdp///2neG3//v3zY/EcAAAAAAAoUKlBg7jmmmtyWHHllVemPffcMwcW3bt3T7fffnsaPHhwatu2bX7euHHj0q233prmn3/+Yg+52fvtt99SY/PBSiuX/7zkm28UdSwAAAAAQMMTalDvzj333HTqqafmAGObbbYpv3/llVdOn376abr33nvTLrvsku+LnyPQWGihhSptY9KkSemcc85Jf//739O3336bFl988XTyySen7bffPj/+559/pv322y898cQT+fHYxoEHHpgOPfTQ8m1EkPLrr7+mddddN1eLTJgwIe20007pwgsvTK1atcrPufzyy3PI8uWXX6bOnTun9dZbL1eYNEeNsR9Eu5YtG/X4AAAAAID6JdSgXh177LE5KBgyZEjaeOONp3h8r732Stdff315qHHdddflSo6nnnqq0vMGDhyY/vGPf+RKj8UWWyw988wzadddd01zzDFH2mCDDXLo0a1bt3TXXXel2WabLb3wwgs55JhnnnnSDjvsUL6dJ598Mt8Xf37yySdpxx13TCuuuGLad99902uvvZYOOeSQdPPNN6e11147/fzzz+nZZ59tgKMEAAAAAEB1CDWoNw8//HB64IEH0uOPP5569OhR5XMimDj++OPTF198kf/+/PPP54qOiqHG+PHj09lnn50ee+yxtNZaa+X7Fl544fTcc8+lq666KocaUWlx2mmnlb8mKj1efPHFdOedd1YKNbp27ZouvfTSNNNMM6Ull1wy9e7dO48vQo0RI0bkq/+33HLL1LFjx7TAAguklVZaqR6PEAAAAAAANSHUoN4sv/zy6ccff8xLT62++uqpQ4cOUzwnKi0iWLjhhhtSWVlZ/nn22Wev9JyoqBg7dmzadNNNK90fy0dVDB0uu+yyXOkR4cTvv/+eH48qjIqWWWaZHGgURNXG0KFD88+x/QgyIjDp1atXvsVyWe3atauzYwIAAAAAQO0JNag38803X+5HsdFGG+WAICo3ogKiqiWoDjrooPJgYmoNqx988MG8zYratGmT/4zqjqOOOir3yohqjtjPeeedl15++eVKzy/0ziho0aJFXroqxGveeOONXCXy6KOPplNOOSUNGDAgvfrqq6lLly4zfDyYcTscX+E/WTcuV8yhADUwtO//wmMAAACAGfV/XXehHkTlw9NPP52bd0ewMXr06CmeE/dHVcXEiRNTz549p3h86aWXzuFFVGAsuuiilW7du3cvX7Yq+mBEc/Co3ojHogl5Tc0888xpk002yc3N33nnnTR8+PDcfBwAAAAAgOJTqUG9i+Ahqh+iYiNCi3//+9+VHo/loIYNG1b+8+SigiKqMA4//PBcVbHuuuumkSNH5iCjU6dOqW/fvrl5+E033ZQeeeSR3E8jmn1HhUX8XF3RzPyzzz5L66+/fu698dBDD+X9LbHEEnVwFAAAAAAAmFFCDRpEt27dKgUb0cuioggnpuWMM87I/TcGDhyYg4dYDmrllVdOJ5xwQn68X79+6c0330w77rhjXlJq5513zlUbseRVdcU277333rzk1Lhx43JQctttt+U+HED9mDT+f8u/0bSNGTOm2EOgnrVv377YQwCgiZg0YVyxh1DynHvNOOc2AI1bi7LozgzU2Pjx4/OtYNSoUbkqJapIphfSUDvL6aPR5Ly7x7vFHgJQB5xOQsOJc87OnTvX+znn1M51ux92Z2rZpl297Re+OGfLYg8BnNsANPJzXT01oJaiaiT+kRVuhf4eAABQ6pzrAgDQWKnUgFpSqdHwVGo0PZafah5e2eWVYg+BemaJBmg4KjVo6iw/NeOGndGr2EMoec5tABr3ua6eGlBLbdq0yTeg9lq2UTDYHPhSCFB6nOtSLC1bz1LsIZQ8514ANHVmkwAAAAAAgJLQ6EONG264IXXp0mW6z2vRokW6//77G2RMpeaDDz5Ia665ZpplllnSiiuuWKvjN3z48Pyct956q/y+559/Pi233HKpVatWqU+fPvUydgAAAAAAKJnlp3bccce0xRZblP99wIABefK94uR6bW244YZ5kv/CCy+s8vGnn346nXbaaXlf48aNS/PNN19ae+2109VXX51at25d6bn9+vVL11xzTbr99tvTX//611QMe+yxR/r111+nCCdOPfXUXH764Ycfpg4dOlT52m+++SZ17dq1Rvs74ogj8vF7+OGHp7rd+laXvw80fkM/H1HsIQC1MaBzKlkDRhZ7BAAAAEApVWq0bds2zTnnnA2+3/fffz/16tUrrbrqqumZZ55JQ4cOTZdcckkOM/78889Kzx07dmwOM4455ph03XXXpcbm008/Teuuu25aYIEF0myzzVblc+aee+4ar5kb2+3Ro0fq1q1btappGrMJEyYUewgAAAAAADS2UGPIkCF5ArwQDMQV9rGs0XHHHVf+nH322SftuuuuUyw/FT9H5cTbb7+dXxO3uK/gxx9/TNtss01q165dWmyxxdI///nPWo/z0UcfzRP95557blp22WXTIosskkOOqNKIoKWiu+66Ky299NL5PUQA8uWXX053+1EFsvrqq+cgYZ555smv/eOPPypVkRxyyCE5KJl11lnzWKIqYWrisRtvvDE98MAD5cfmqaeeyn++/vrr6fTTT88/T20bky8/9corr6SVVlopL1kVwc6bb745xVJUP/30U9prr72m+BwKTjjhhLTGGmtMcf8KK6yQx1MQFS5LLbVU3teSSy6ZLr/88krP/+qrr9LOO++cj0NUnMR4Xn755Wn+PowYMSJtvfXWuYKkU6dOaYcddkjfffddpeMVVSax74UWWijvO9x99915Sa34jCMA2mSTTdKYMWOmetwBAAAAAGjC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jrxuy+k8Pu3Xl5WV1e2AAAAAACg5lp8CAAAAAABKgkoNABrEBXsNmebj/S7esMHGAgAAAEBpEmoA0CDatGo7zcf1zAAAAABgeiw/BQAAAAAAlAShBgAAAAAAUBKEGgAAAAAAQEnQUwMoGT2e6l/sIVCPhi2ZmqSlPhhW7CEAAAAANBkqNQAAAAAAgJIg1AAAAAAAAEqC5aca2IYbbphWXHHFdOGFF1br+cOHD08LLbRQevPNN/Prim3BBRdMhx12WL4BDW/spEnFHgI1NGbMmGIPgRpq3759sYcAAAAATIVQow7sscce6cYbb0z9+vVLV155ZaXH+vfvny6//PLUt2/fdMMNN6R77703tWrVqtrb7t69e/rmm2/S7LPPXinkKIhtzT///HkMJ554YmrRokW1tx3Pve+++1KfPn2q/ZrabHfixIlp9913T88880x65JFH0rLLLls+zhdffDGtueaa5a8dP358mnfeedPPP/+cnnzyyRwCAf9n1Y8/KvYQqKkOHYo9AmqorKys2EMAAAAApsLyU3Ukwofbb789/f777+X3jRs3Lt166605dCiYddZZU8eOHau93ZlmminNPffcaeaZK+dPjz32WA47Pv7443Taaaels846K1133XWpsRk7dmzaaqut0quvvpqee+65HGhUPGbXX399pedHGNLBBCAAAAAAAFVQqVFHVl555fTpp5/mSoxddtkl3xc/R6BRsbJi8uWnYjmn/fbbL33yySfprrvuSl27dk0nnXRSvm9ay0/NNttsOewICyywQA4H3njjjbT33nvn+yJEOOGEE/LrolIiXjt48OA8zsJ+wzbbbFO+jdhX+Ne//pVOP/30NHTo0BwwrLfeejlsqBhU7LXXXlWOt6Jff/019e7dO/3222850CiMtyCqVy6++OJ8LNq2bZvvi2Am7j/jjDMqPffLL79MRx55ZHr00UdTy5Yt85guuuii8vcxvfcbojrk6quvTg8++GCuGJlvvvnSBRdckEOX8Msvv6SDDjoo7yPG3K1bt7zNPffcs8a/D1BfXlts8WIPgRpa8s03ij0EAAAAgCZDqFGHYqI/woVCqBET9DEh/tRTT03zdTGxHpP4MYF+9913pwMOOCBtsMEGaYkllqjWfl977bX0+uuv5yWeCkaPHp3DgUsuuSQvoxH72GKLLXJlR1SKRAgw55xz5vH26tUrV4SEmPCPoCOWsrrpppvShAkT0kMPPVTj8X777bf5vghFnn766dSlS5cpxr3KKqvkUOKee+5Ju+66axoxYkReouqyyy6rFGpESNGzZ8+01lprpWeffTZXrZx55pl53O+8805q3br1dN9vQVS1nHvuuem8887Lz43P6osvvsgVNCeffHJ6//3308MPP5yX+4qgqWLlDTQG7VoqsCs1+jMAAAAA1B2hRh2Kifnjjz8+T5KH559/Pi9JNb1QIybfDzzwwPzzsccemysMop/EtEKNtddeO1csROgQk/5RKVEx1OjRo0el5//973/PwUIEDFtuuWWaY4458v1xX8UKiljGaqeddsqT/wUrrLBCjcd76KGHpoUXXjj95z//Se3atZtmEBThTxy76DkS2y6MreCOO+5IkyZNStdcc015L44IY2LscWw322yz6b7fgug9svPOO+efzz777Fwp8sorr+SAJEKVlVZaKa266qr58UIVCAAAAAAAjYNLfutQTMbHcksxOR+T7vFzocH3tCy//PLlP8ekfYQM33///TRfExP9b731Vnr77bfTnXfemR544IF03HHHlT/+3XffpX333TcttthiqXPnzqlTp055SaWYuJ+W2ObGG288w+ONIOGjjz5KV1111TS3FWFGNAv/7LPP8nGLkGNy8R6jaiIqLqLyI25RWRE9S2LJr5q834pjj6un43mFsUfFSYRQsXTVMccck1544YVpjh0AAAAAgIalUqOOxaR89GUIsYxSdbRq1arS3yMoiMqEaYkm24suumj+eamllsqT+7F80oABA9Iss8ySl2L66aefct+J6JfRpk2bvHxTVHZMS6G3xYyOd7fddsu9KuJ4xHJQRxxxRJXbit4gEYBEL5AIKTbffPO8lFRFEU7EUlW33HLLFK8vVHVU9/1Oa+yx76iyieW2osIkwp3+/fun888/f7rHhIaxw/H+k0UJunG5Yo8AaESG9h1a7CEAAACUNDOEdSyWMYqJ9Jgsjz4QDSV6Yvzxxx953xFqxNJXl19+eV7OqdBo+8cff5xigv/PP/+copLh8ccfr5Pm2BE0xBJZsa0IDo466qgqnxfBR4wzlrIq9PaoKJp9R2VK9ACJyoqqVOf9VkeEJDHuuEUz8qOPPlqoAQAAAADQSAg16lhMyg8bNqz85/oSVQnRjDuCjKFDh+YKhY022qh80j+WYbr55ptzf4hRo0blyfnJqzCiZ0QEGOuss06ubOjatWs69dRTc4XCIosskntrxPajciECh9qIio0INiIkiIqNGEdVQdAPP/ww1cAimnlHY++tt946nX766albt265ouLee+/Ny0TF36vzfqfnlFNOyRUhyyyzTBo/fnwaMmRIroIBAAAAAKBxEGrUg6lNztelTTbZpDw4mWeeeXKFQjT5Lrj22mtz8/CocoilqqIp9uSVEhdccEFeFurqq69O8803Xxo+fHjacMMN01133ZXOOOOMNGjQoPxe1l9//Rkaa4QSEWxEwBEVG5MHJFHVMq3eI9Fo/Jlnnsmv23bbbfPyVDHeCF8Kx7o673d6WrdunRu9x3GIQCQqNaLHBgBQO5PGT3s5zeZozJgxxR5CoxN9zgCgOZk0YVwqZaV8PuO8A5qGFmVx+TxQY1HNEbeCqBCJQGXkyJENEmw1R8vpTQBQUt7d491iD4ES4OtIzcQ5Z+fOnev9nHNq57rdD7sztWzTrt72C9AcfHHOlsUeQrPlvAOaxrluywYdFTQhAwcOzP/ICrf4kgcAAE2Bc10AABorlRpQSyo1Gp5KDYDSYvmpKb2yyyvFHkKjYxmImlGpAVD6Sn35qWFn9EqlynkHNI1zXT01oJaiuXrcAICqtWyjKHhyvkhTKpzrAtSflq1nSaXM+QxQbL5pAgAAAAAAJaHRhxo33HBD6tKly3Sf16JFi3T//fc3yJhKzQcffJDWXHPNNMsss6QVV1yxVsdv+PDh+TlvvfVW+X3PP/98Wm655VKrVq1Snz596mXsAAAAAABQMqHGjjvumD766KPyvw8YMGCqE/M1teGGG6bDDjtsqo8//fTTqUePHmnWWWdN7dq1S4sttljq27dvmjBhwhTP7devX5ppppnSXXfdlYpljz32qDJcOPXUU3Np4Icffpgef/zxKl/7zTffpM0337xG+zviiCPyZ/H555/n8KkY6vL3AQAAAACAxq3R99Ro27ZtvjW0999/P/Xq1SsdfPDB6eKLL85j+Pjjj9M999yT/vzzz0rPHTt2bLr99tvTMccck6677rr017/+NTUmn376aerdu3daYIEFpvqcueeeu1bb3X///VO3bt1SqYugqnXr1sUeBtMx9PMRxR4CAMyYAZ1TozJgZLFHAAAA0LgrNYYMGZKXkyoEA7GcUSxrdNxxx5U/Z5999km77rrrFMtPxc+nnXZaevvtt/Nr4laxQuDHH39M22yzTXlVxT//+c9aj/PRRx/NE/3nnntuWnbZZdMiiyySQ46rr756ipAlqjOWXnrp/B6eeeaZ9OWXX053+1EFsvrqq+fme/PMM09+7R9//FGpiuSQQw7JQUlUisRYoiphauKxG2+8MT3wwAPlx+app57Kf77++uvp9NNPzz9PbRuTLz/1yiuvpJVWWikvWbXqqqumN998c4qlqH766ae01157TfE5FJxwwglpjTXWmOL+FVZYIY+n4JprrklLLbVU3teSSy6ZLr/88krP/+qrr9LOO++cj0NUnMR4Xn755Wn+PowYMSJtvfXWqUOHDqlTp05phx12SN99990UFR6x74UWWijvO9x99915Sa34jGebbba0ySabpDFjxkz1uAMAAAAA0IRDjfXWWy+NHj26fJI8Jvdnn332PAFfEPfFpH5VS1EdeeSRaZlllsnLJcUt7iuICe6YvH7nnXfSFltskXbZZZf0888/12qcESLE9iOkmJ5rr702hzCdO3fOSzhNbymm//73v3l8q622Wp6Qv+KKK/I2zjzzzErPi5AiJvFjAj/ClQgC/vOf/1S5zaOOOiq/9wheCsdm7bXXzn/G8YrjFj/H86bnt99+S1tuuWUOaiIQiQCg4uu6d++etxVhwYUXXjjF51AQxz/CkajoKHjvvffy5/O3v/0t//2WW25Jp5xySjrrrLPSsGHD0tlnn51OPvnk/N4LY9lggw3yMYuQKo5XBD2TJk2a6u9DPBaBRnz28bsUx+yzzz6bYoyffPJJrry59957c7gWr4/wJIKaGEv8Tm677baprKxsuscMAAAAAIAmuPxUTPzHFfIxYRxX3Mefhx9+eA4kYgJ75MiRebI5JrInF1fPx5X3M888c5XLJUVPiZiUDjE5HstGxaR6TPTXVCwh9cgjj+RxxL6i0fbGG2+cdt999zyZXxBLUr300kt5YjxEuBG9Jk466aRcOVCVqESIYODSSy/Nz4nqhK+//jode+yxeYK/Zcv/ZU3LL7987ocRovIknh89MTbddNMpthnHJY7P+PHjKx2b+DmOVzxe3SWmbr311hwMRNASFQwRGkS1xAEHHJAfj94hsa0Ye3yeU9tuvC6qMmJ7EVQUQoyo3lh00UXz3+P9XXDBBTk8CFE1EUt/XXXV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SRBqAAAAAAAAJUGoAQAAAAAAlAShBgAAAAAAUBKEGgAAAAAAQEkQagAAAAAAACVBqAEAAAAAAJQEoQYAAAAAAFAShBoAAAAAAEBJEGoAAAAAAAAlQagBAAAAAACUBKEGAAAAAABQEoQaAAAAAABASRBqAAAAAAAAJUGoAQAAAAAAlAShBgAAAAAAUBKEGgAAAAAAQEkQagAAAAAAACVBqAEAAAAAAJQEoQYAAAAAAFAShBoAAAAAAEBJEGoAAAAAAAAlQagBAAAAAACUBKEGAAAAAABQEmYu9gAAquuy/Z8o9hBoAP2v7FHsIQAAU7HsqY+klm3aFXsY0KQNH9S72EMAgEZNpQYAAAAAAFAShBoAAAAAAEBJEGoAAAAAAAAlQU8NAOrc+Im/1/q1Y8aMqfVr27dvX+vXAgAAAND4CTUAqHNHXrflDLy29vstKyur/YsBAAAAaPQsPwUAAAAAAJQElRoA1LkL9hpS69f2u3jDOh0LAAAAAE2HUAOAOtemVdtav1ZfDAAAAACmxvJTAAAAAABASRBqAAAAAAAAJcHyU0DJ6PFU/2IPoSQt9cGwYg8BAAAAAOqESg0AAAAAAKAkCDUAAAAAAICSYPkpoGjGjBlTo+ePnTSp3sbSlNX0OFM77du3L/YQAAAAAJo8oQb1Yo899ki//vpruv/++8vvu/vuu9Ouu+6azjrrrDR06NB04403pn79+qUrr7yy0mv79++fLr/88tS3b990ww03FGH0NJQOHToUewjNg+PcIMrKyoo9BAAAAIAmz/JTNIhrrrkm7bLLLumKK65IRx55ZL6ve/fu6fbbb0+///57+fPGjRuXbr311jT//PMXcbQAAAAAADRGKjWod+eee2469dRTc4CxzTbblN+/8sorp08//TTde++9OfAI8XMEGgsttFClbUyaNCmdc8456e9//3v69ttv0+KLL55OPvnktP322+fH//zzz7TffvulJ554Ij8e2zjwwAPToYceOkX1yLrrrpsuuOCCNGHChLTTTjulCy+8MLVq1So/JypEBg8enL788svUuXPntN566+UKE+rHb7/9VqPnf7DSyvU2lqZsyTffKPYQAAAAAKBOCDWoV8cee2wOCoYMGZI23njjKR7fa6+90vXXX18ealx33XVpzz33TE899VSl5w0cODD94x//yEtVLbbYYumZZ57JS1nN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loyKcCKWqrrlllumeH2hqqO673daY499R5XNQw89lCtMItzp379/Ov/886d7TGgYOxzvP1nUkxuXK/YIgFoa2ndosYcAAABAAzJDWMcKfR5isjz6QDSUmWaaKf3xxx953xFqxNJXl19+eV7OqdBo+8cff5xigv/PP/+copIh+mjURXPsCBpiiazYVgQHRx11VJXPi+AjxhlLWcX7mFw0+47KlDnnnDNXVlSlOu+3OiIkiXHHLZqRH3300UINAAAAAIBGQqhRx2JSPppMF36uL1GVEM24I8gYOnRorlDYaKONyif9Yxmmm2++OfeHGDVqVJ6cn7wKI3pGRICxzjrr5MqGrl27plNPPTVXKCyyyCK5t0ZsPyoXInCojajYiGAjQoKo2IhxVBUE/fDDD1MNLKKZ93nnnZe23nrrdPrpp6du3brliop77703LxMVf6/O+52eU045JVeELLPMMmn8+PFpyJAhuQoGAAAAAIDGQahRD6Y2OV+XNtlkk/LgZJ555skVCtHku+Daa6/NzcOjyiGWqoqm2JNXSlxwwQV5Wairr746zTfffGn48OFpww03THfddVc644wz0qBBg/J7WX/99WdorBFKRLARAUdUbEwekERVy7R6j0Sj8WeeeSa/btttt83LU8V4I3wpHOvqvN/pad26dW70HschApGo1IgeGwBQ0aTx014ikoY1ZsyYYg+BCqJnGQDQsCZNGJdKTamdwznHgcalRVlcPg/UWFRzxK0gKkQiUBk5cmSDBFvN0XL6HgCNwLt7vFvsIUCj5atF/Ytzzs6dO9f7OefUznW7H3ZnatmmXb3tF4Ca++KcLYs9hCbPOQ40rnPdlg00HmhyBg4cmP+RFW7xJQ8AAJoC57oAADRWKjWgllRqNDyVGkBjYPmpxuWVXV4p9hCowNIM9U+lBgBNYfmpYWf0SqXEOQ40rnNdPTWglqK5etwAaF5atlHo2pj4ggn1w7kuQOlo2XqWVGqcwwEzwrdyAAAAAACgeYcaN9xwQ+rSpct0n9eiRYt0//33p+Zsjz32SH369Km37Q8fPjwf57feeqvOt73gggumCy+8sM63CwAAAAAADbb81I477pi22GKL8r8PGDAghxd1MbG+4YYbphVXXHGqk+lPP/10Ou200/K+xo0bl+abb7609tprp6uvvjq1bt260nP79euXrrnmmnT77benv/71rzM8NhrWU089lTbaaKP0yy+/VCtEo7QN/XxEsYcAQGMzoHNqlAaMLPYIAAAAmqR6q9Ro27ZtmnPOOVNDe//991OvXr3Sqquump555pk0dOjQdMkll+Qw488//6z03LFjx+Yw45hjjknXXXddg4+VxqOsrCz98ccfxR4GAAAAAAB1EWoMGTIkXwlfCAaiCiKWNDruuOPKn7PPPvukXXfddYrlp+LnqJx4++2382viFvcV/Pjjj2mbbbZJ7dq1S4sttlj65z//mWrr0UcfTXPPPXc699xz07LLLpsWWWSRHHJElUYELRXdddddaemll87vIQKQL7/8crrbjyqQ1VdfPTfNm2eeefJrK06GRxXJIYcckoOSWWedNY8lqlSq4/zzz8/bnG222VL//v3TxIkTyx+7+eabc1DTsWPHvM2//e1v6fvvvy9/PCoVdtlllzTHHHPk9xnH8frrr6+0/c8++yxXNcRxXmGFFdKLL75Y6fHnnnsurbfeevn13bt3z+9jzJgx5Y/H/v7yl7/kxxdaaKF0yy23TPezmGWWWdKvv/5a6f5DDz009ejRo9r7HT9+fDr22GPzY3HcF1100XTttdfmZbXi/YSuXbvm36tYyqvwmthOBGsxhnXXXTe9+uqrlSo84vkPP/xwWmWVVfJ2YxzxOxrbjOPcqVOn/Nhrr71WjU8PAAAAAIBGE2rEpPPo0aPTm2++WT65P/vss+fJ4YK4Lyb1q1qK6sgjj0zLLLNM+uabb/It7iuIwGOHHXZI77zzTl6yKibnf/7551q9oZjwj+1HSDE9MTEeIUznzp3T5ptvXiloqcp///vfPL7VVlstT35fccUVeRtnnnlmpefdeOONqX379unll1/O4crpp5+e/vOf/0xz208++WT69NNP85/x+hhLxfFEwHHGGWfk/cYyXjGhX5jADyeffHKuUolJ+mHDhuWxxedT0YknnpiOOuqoHEgtvvjiaeeddy4PZGLfEf5st912+XO444478iT/QQcdVP762F8EPzHGu+++O11++eWVgpXJbbzxxjnYuueee8rvi1Asth2fcXX3u/vuu6fbbrstXXzxxfm9XXXVValDhw455Chs+8MPP8yf+0UXXZT/HqFSPBbH8o033shBSM+ePaf4vYpQatCgQXm7yy+/fB5Xt27dcgDy+uuv58dbtWo1zc8OAAAAAICG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2m677dJ3331X/vjbb7+ddt5559S9e/fUtm3btNRSS6WLLrooNUWXXXZZWnDBBdMss8yS1lhjjfTKK69M8/l33XVXWnLJJfPzl1tuufTQQw9VejxaBJ1yyilpnnnmycduk002SR9//HFqLuryeE6cODEde+yx+f727duneeedN+2+++7p66+/Ts1FXf9+VrT//vunFi1apAsvvDA1F/VxPIcNG5a22mqr1Llz5/x7utpqq6URI0ak5qCuj2f8v+uggw5K3bp1y//9XHrppdOVV16ZmouaHM/33nsv/787nj+tf8c1/Yyakro+ngMHDsz/vjt27JjmnHPO1KdPn/Thhx/W87toHpyLNa7jt8cee+R/BxVvvXr1Sk2V//Y2vmM4YMCAKX4H43e2qarJ8bv66qvTeuutl7p27Zpv8d+3yZ/vv4Ezdvz8N3Dqx+/ee+9Nq666ap53iu89K664Yrr55pub9e9ffRxDv4OvVOt1t99+ez42cU5e1N/BaBQO1E6vXr3KVlhhhbKXXnqp7Nlnny1bdNFFy3beeedpvmb//fcv6969e9njjz9e9tprr5WtueaaZWuvvXb549dee23ZIYccUvbUU0+Vffrpp2U333xzWdu2bcsuueSSsqbk9ttvL2vdunXZddddV/bee++V7bvvvmVdunQp++6776p8/vPPP18200wzlZ177rll77//ftlJJ51U1qpVq7KhQ4eWP2fQoEFlnTt3Lrv//vvL3n777bKtttqqbKGFFir7/fffy5q6uj6ev/76a9kmm2xSdscdd5R98MEHZS+++GLZ6quvXrbKKquUNQf18ftZcO+99+b/bsw777xlgwcPLmsO6uN4fvLJJ2Wzzjpr2dFHH132xhtv5L8/8MADU91mU1IfxzO2scgii5Q9+eSTZZ9//nnZVVddlV8Tx7Spq+nxfOWVV8qOOuqosttuu61s7rnnrvLfcU232ZTUx/Hs2bNn2fXXX1/27rvvlr311ltlW2yxRdn8889f9ttvvzXAO2q6nIs1vuPXt2/f/P3im2++Kb/9/PPPZU2R//Y2zmN46qmnli2zzDKVfgd/+OGHsqaopsfvb3/7W9lll11W9uabb5YNGzasbI899sj/vfvqq6/Kn+O/gTN2/Pw3cOrHL87R43tk/P8jvvdceOGF+f8p//7/2rsToJvqP47jP1lTyppQ9iUh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",
|
||
"text/plain": [
|
||
"<Figure size 1600x600 with 2 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(16, 6), sharey=True)\n",
|
||
"\n",
|
||
"df = pd.DataFrame(evaluations[::-1]).set_index(\"estimator\")\n",
|
||
"df_std = pd.DataFrame(evaluations_std[::-1]).set_index(\"estimator\")\n",
|
||
"\n",
|
||
"df.drop([\"train_time\"], axis=\"columns\").plot.barh(ax=ax0, xerr=df_std)\n",
|
||
"ax0.set_xlabel(\"Clustering scores\")\n",
|
||
"ax0.set_ylabel(\"\")\n",
|
||
"\n",
|
||
"df[\"train_time\"].plot.barh(ax=ax1, xerr=df_std[\"train_time\"])\n",
|
||
"ax1.set_xlabel(\"Clustering time (s)\")\n",
|
||
"plt.tight_layout()\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "6a88be40-ab21-4f56-8fb8-91636c05d1e7",
|
||
"metadata": {},
|
||
"source": [
|
||
"Модель успешно справилась с заданием, используя скачанный мной датасет, наиболее эффективным вновь оказался K-means с использованием LSA на хэшированных векторах, но стоит отметить что время кластеризации выросло, ввиду того что количество информации внутри скачанного датасета больше, чем в втроенном датасете fetch_20newsgroups"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "3c05ee8c-fc24-4a3c-bedd-180e53aace55",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3 (ipykernel)",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.13.3"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|