Spaces:
Sleeping
Sleeping
Upload Name_classification.ipynb
Browse files- Name_classification.ipynb +799 -0
Name_classification.ipynb
ADDED
|
@@ -0,0 +1,799 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "markdown",
|
| 5 |
+
"metadata": {
|
| 6 |
+
"id": "v7EvaRVtQakR"
|
| 7 |
+
},
|
| 8 |
+
"source": [
|
| 9 |
+
"## Description:\n",
|
| 10 |
+
"- This dataset, sourced from PyTorch's official tutorial, comprises popular names across 18 distinct languages, namely Arabic, Chinese, Czech, Dutch, English, French, German, Greek, Irish, Italian, Japanese, Korean, Polish, Portuguese, Russian, Scottish, Spanish, and Vietnamese. Each language's names are contained in separate text files for easy extraction and categorization.\n",
|
| 11 |
+
"\n",
|
| 12 |
+
"## App link\n",
|
| 13 |
+
"- https://huggingface.co/spaces/kanneboinakumar/Name_Classification\n",
|
| 14 |
+
"\n",
|
| 15 |
+
"## Data link\n",
|
| 16 |
+
"- https://www.kaggle.com/datasets/shubhampatel231/name-classification"
|
| 17 |
+
]
|
| 18 |
+
},
|
| 19 |
+
{
|
| 20 |
+
"cell_type": "markdown",
|
| 21 |
+
"metadata": {
|
| 22 |
+
"id": "sfW4vLsbyJDJ"
|
| 23 |
+
},
|
| 24 |
+
"source": [
|
| 25 |
+
"# 1.Packages"
|
| 26 |
+
]
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"cell_type": "code",
|
| 30 |
+
"execution_count": 2,
|
| 31 |
+
"metadata": {
|
| 32 |
+
"id": "LKVYNknXyJDM"
|
| 33 |
+
},
|
| 34 |
+
"outputs": [],
|
| 35 |
+
"source": [
|
| 36 |
+
"import pandas as pd\n",
|
| 37 |
+
"import numpy as np\n",
|
| 38 |
+
"import seaborn as sns\n",
|
| 39 |
+
"import matplotlib.pyplot as plt\n",
|
| 40 |
+
"import os\n",
|
| 41 |
+
"import glob\n",
|
| 42 |
+
"import unicodedata\n",
|
| 43 |
+
"from sklearn.preprocessing import LabelEncoder\n",
|
| 44 |
+
"from sklearn.model_selection import train_test_split\n",
|
| 45 |
+
"from joblib import load, dump\n",
|
| 46 |
+
"import torch\n",
|
| 47 |
+
"import torch.nn as nn\n",
|
| 48 |
+
"from torch.nn.utils.rnn import pad_sequence\n",
|
| 49 |
+
"from torch.utils.data import TensorDataset, DataLoader"
|
| 50 |
+
]
|
| 51 |
+
},
|
| 52 |
+
{
|
| 53 |
+
"cell_type": "markdown",
|
| 54 |
+
"metadata": {
|
| 55 |
+
"id": "DBgB-_BHyJDO"
|
| 56 |
+
},
|
| 57 |
+
"source": [
|
| 58 |
+
"# 2.Load text files and Create a Dataframe"
|
| 59 |
+
]
|
| 60 |
+
},
|
| 61 |
+
{
|
| 62 |
+
"cell_type": "code",
|
| 63 |
+
"execution_count": 3,
|
| 64 |
+
"metadata": {
|
| 65 |
+
"colab": {
|
| 66 |
+
"base_uri": "https://localhost:8080/"
|
| 67 |
+
},
|
| 68 |
+
"id": "GTlEm1u2yUG5",
|
| 69 |
+
"outputId": "ecb38c05-f7de-43e8-e7fe-089c2e27226e"
|
| 70 |
+
},
|
| 71 |
+
"outputs": [],
|
| 72 |
+
"source": [
|
| 73 |
+
"# from google.colab import drive\n",
|
| 74 |
+
"# drive.mount('/content/drive')"
|
| 75 |
+
]
|
| 76 |
+
},
|
| 77 |
+
{
|
| 78 |
+
"cell_type": "code",
|
| 79 |
+
"execution_count": 6,
|
| 80 |
+
"metadata": {
|
| 81 |
+
"colab": {
|
| 82 |
+
"base_uri": "https://localhost:8080/",
|
| 83 |
+
"height": 206
|
| 84 |
+
},
|
| 85 |
+
"id": "XJjsYuw8yJDP",
|
| 86 |
+
"outputId": "fc4e4937-435d-473e-dfbf-9658247e5e8d"
|
| 87 |
+
},
|
| 88 |
+
"outputs": [
|
| 89 |
+
{
|
| 90 |
+
"data": {
|
| 91 |
+
"text/html": [
|
| 92 |
+
"<div>\n",
|
| 93 |
+
"<style scoped>\n",
|
| 94 |
+
" .dataframe tbody tr th:only-of-type {\n",
|
| 95 |
+
" vertical-align: middle;\n",
|
| 96 |
+
" }\n",
|
| 97 |
+
"\n",
|
| 98 |
+
" .dataframe tbody tr th {\n",
|
| 99 |
+
" vertical-align: top;\n",
|
| 100 |
+
" }\n",
|
| 101 |
+
"\n",
|
| 102 |
+
" .dataframe thead th {\n",
|
| 103 |
+
" text-align: right;\n",
|
| 104 |
+
" }\n",
|
| 105 |
+
"</style>\n",
|
| 106 |
+
"<table border=\"1\" class=\"dataframe\">\n",
|
| 107 |
+
" <thead>\n",
|
| 108 |
+
" <tr style=\"text-align: right;\">\n",
|
| 109 |
+
" <th></th>\n",
|
| 110 |
+
" <th>Name</th>\n",
|
| 111 |
+
" <th>Country</th>\n",
|
| 112 |
+
" </tr>\n",
|
| 113 |
+
" </thead>\n",
|
| 114 |
+
" <tbody>\n",
|
| 115 |
+
" <tr>\n",
|
| 116 |
+
" <th>0</th>\n",
|
| 117 |
+
" <td>Khoury</td>\n",
|
| 118 |
+
" <td>Arabic</td>\n",
|
| 119 |
+
" </tr>\n",
|
| 120 |
+
" <tr>\n",
|
| 121 |
+
" <th>1</th>\n",
|
| 122 |
+
" <td>Nahas</td>\n",
|
| 123 |
+
" <td>Arabic</td>\n",
|
| 124 |
+
" </tr>\n",
|
| 125 |
+
" <tr>\n",
|
| 126 |
+
" <th>2</th>\n",
|
| 127 |
+
" <td>Daher</td>\n",
|
| 128 |
+
" <td>Arabic</td>\n",
|
| 129 |
+
" </tr>\n",
|
| 130 |
+
" <tr>\n",
|
| 131 |
+
" <th>3</th>\n",
|
| 132 |
+
" <td>Gerges</td>\n",
|
| 133 |
+
" <td>Arabic</td>\n",
|
| 134 |
+
" </tr>\n",
|
| 135 |
+
" <tr>\n",
|
| 136 |
+
" <th>4</th>\n",
|
| 137 |
+
" <td>Nazari</td>\n",
|
| 138 |
+
" <td>Arabic</td>\n",
|
| 139 |
+
" </tr>\n",
|
| 140 |
+
" </tbody>\n",
|
| 141 |
+
"</table>\n",
|
| 142 |
+
"</div>"
|
| 143 |
+
],
|
| 144 |
+
"text/plain": [
|
| 145 |
+
" Name Country\n",
|
| 146 |
+
"0 Khoury Arabic\n",
|
| 147 |
+
"1 Nahas Arabic\n",
|
| 148 |
+
"2 Daher Arabic\n",
|
| 149 |
+
"3 Gerges Arabic\n",
|
| 150 |
+
"4 Nazari Arabic"
|
| 151 |
+
]
|
| 152 |
+
},
|
| 153 |
+
"execution_count": 6,
|
| 154 |
+
"metadata": {},
|
| 155 |
+
"output_type": "execute_result"
|
| 156 |
+
}
|
| 157 |
+
],
|
| 158 |
+
"source": [
|
| 159 |
+
"\n",
|
| 160 |
+
"txt_files = glob.glob(os.path.join(\"./data/*.txt\"))\n",
|
| 161 |
+
"all_txt_dict = {}\n",
|
| 162 |
+
"for txt in txt_files:\n",
|
| 163 |
+
" with open(txt, \"r\", encoding=\"utf-8\") as file:\n",
|
| 164 |
+
" content = file.read().split(\"\\n\")\n",
|
| 165 |
+
" all_txt_dict[os.path.basename(txt).rstrip(\".txt\")] = content\n",
|
| 166 |
+
"name_country = [(name,contry) for contry in all_txt_dict for name in all_txt_dict[contry]]\n",
|
| 167 |
+
"name_df = pd.DataFrame(name_country,columns=[\"Name\",\"Country\"])\n",
|
| 168 |
+
"name_df.head()"
|
| 169 |
+
]
|
| 170 |
+
},
|
| 171 |
+
{
|
| 172 |
+
"cell_type": "markdown",
|
| 173 |
+
"metadata": {
|
| 174 |
+
"id": "mxcNJaU8yJDQ"
|
| 175 |
+
},
|
| 176 |
+
"source": [
|
| 177 |
+
"# 3.EDA"
|
| 178 |
+
]
|
| 179 |
+
},
|
| 180 |
+
{
|
| 181 |
+
"cell_type": "markdown",
|
| 182 |
+
"metadata": {
|
| 183 |
+
"id": "AUei-B37FGhY"
|
| 184 |
+
},
|
| 185 |
+
"source": [
|
| 186 |
+
"## 3.1.drop duplicated values"
|
| 187 |
+
]
|
| 188 |
+
},
|
| 189 |
+
{
|
| 190 |
+
"cell_type": "code",
|
| 191 |
+
"execution_count": 329,
|
| 192 |
+
"metadata": {
|
| 193 |
+
"colab": {
|
| 194 |
+
"base_uri": "https://localhost:8080/"
|
| 195 |
+
},
|
| 196 |
+
"id": "Uj_blWz0FEby",
|
| 197 |
+
"outputId": "87794ac8-e028-4337-a5fd-ef0331f9e3d3"
|
| 198 |
+
},
|
| 199 |
+
"outputs": [
|
| 200 |
+
{
|
| 201 |
+
"name": "stdout",
|
| 202 |
+
"output_type": "stream",
|
| 203 |
+
"text": [
|
| 204 |
+
"shape before removing duplicates :(20092, 2)\n",
|
| 205 |
+
"shape after removing duplicates :(18033, 2)\n"
|
| 206 |
+
]
|
| 207 |
+
}
|
| 208 |
+
],
|
| 209 |
+
"source": [
|
| 210 |
+
"print(f\"shape before removing duplicates :{name_df.shape}\")\n",
|
| 211 |
+
"name_df = name_df.drop_duplicates()\n",
|
| 212 |
+
"print(f\"shape after removing duplicates :{name_df.shape}\")"
|
| 213 |
+
]
|
| 214 |
+
},
|
| 215 |
+
{
|
| 216 |
+
"cell_type": "markdown",
|
| 217 |
+
"metadata": {
|
| 218 |
+
"id": "xdo5Tcx3HOfJ"
|
| 219 |
+
},
|
| 220 |
+
"source": [
|
| 221 |
+
"## 3.2.Reset the index of the DataFrame"
|
| 222 |
+
]
|
| 223 |
+
},
|
| 224 |
+
{
|
| 225 |
+
"cell_type": "code",
|
| 226 |
+
"execution_count": 330,
|
| 227 |
+
"metadata": {
|
| 228 |
+
"colab": {
|
| 229 |
+
"base_uri": "https://localhost:8080/"
|
| 230 |
+
},
|
| 231 |
+
"id": "Q11oMxtaG7rC",
|
| 232 |
+
"outputId": "9e1b6dd4-a46f-4726-dfeb-5049f600ff8a"
|
| 233 |
+
},
|
| 234 |
+
"outputs": [
|
| 235 |
+
{
|
| 236 |
+
"name": "stdout",
|
| 237 |
+
"output_type": "stream",
|
| 238 |
+
"text": [
|
| 239 |
+
" Name Country\n",
|
| 240 |
+
"0 Abel French\n",
|
| 241 |
+
"1 Abraham French\n",
|
| 242 |
+
"2 Adam French\n",
|
| 243 |
+
"3 Albert French\n",
|
| 244 |
+
"4 Allard French\n"
|
| 245 |
+
]
|
| 246 |
+
}
|
| 247 |
+
],
|
| 248 |
+
"source": [
|
| 249 |
+
"name_df = name_df.reset_index(drop=True)\n",
|
| 250 |
+
"print(name_df.head())\n"
|
| 251 |
+
]
|
| 252 |
+
},
|
| 253 |
+
{
|
| 254 |
+
"cell_type": "code",
|
| 255 |
+
"execution_count": 331,
|
| 256 |
+
"metadata": {
|
| 257 |
+
"colab": {
|
| 258 |
+
"base_uri": "https://localhost:8080/",
|
| 259 |
+
"height": 540
|
| 260 |
+
},
|
| 261 |
+
"id": "_hWATI-kyJDQ",
|
| 262 |
+
"outputId": "ec803568-8ac7-445e-c178-8e9d7233a180"
|
| 263 |
+
},
|
| 264 |
+
"outputs": [
|
| 265 |
+
{
|
| 266 |
+
"data": {
|
| 267 |
+
"image/png": "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f//9BycnJyxYsAC//fYb4uLiYGRkBAAYNmwYtm3bhqtXr360ncnJybC2tkZSUhKsrKxkfx5ch4XIWl7sJD9ZyyMiIvoSfc7nd66eIapWrRrCwsJw/fp1AEBkZCSOHDmCRo0aAQBiYmIQFxcHHx8f6Xesra3x7bffIiIiAgAQEREBGxsbKQwBgI+PD/T09HDixAnpmJo1a0phCAB8fX1x7do1PHnyJEu7Xr58ieTkZLUbERERfb0McrPyYcOGITk5GSVLloS+vj7S0tIwfvx4dOjQAQAQFxcHALC3t1f7PXt7e2lfXFwcChYsqLbfwMAAdnZ2ase4ubllKSNjn62trdq+iRMnYuzYsTI9SiIiIsrrcvUM0caNG7F27Vr8+eefOHv2LFauXIlp06Zh5cqVudksDB8+HElJSdLtzp07udoeIiIi0q5cPUM0ePBgDBs2DO3atQMAlClTBrdu3cLEiRPRpUsXODg4AADi4+Ph6Ogo/V58fDzKly8PAHBwcMCDBw/Uyn3z5g0SEhKk33dwcEB8fLzaMRn3M47JzNjYGMbGxvI8SCIiIsrzcvUM0bNnz6Cnp94EfX19pKenAwDc3Nzg4OCAsLAwaX9ycjJOnDgBb29vAIC3tzcSExNx5swZ6ZgDBw4gPT0d3377rXTMoUOH8Pr1a+mYffv2oUSJElkulxEREZHy5GogatKkCcaPH4+QkBDExsbir7/+wowZM9CiRQsAgEqlQr9+/TBu3Djs2LEDFy5cQOfOneHk5ITmzZsDADw8PNCwYUP07NkTJ0+exNGjR9G7d2+0a9cOTk5OAID27dvDyMgI/v7+uHTpEjZs2IDZs2djwIABufXQiYiIKA/J1Utmc+fOxciRI/Hrr7/iwYMHcHJywk8//YRRo0ZJxwwZMgSpqano1asXEhMTUaNGDYSGhsLExEQ6Zu3atejduzfq1asHPT09tGrVCnPmzJH2W1tbY+/evQgICEClSpWQP39+jBo1Sm2uIiIiIlKuXJ2H6EvBeYiIiIi+PF/MPEREREREeQEDERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKV6uB6K7d++iY8eOyJcvH0xNTVGmTBmcPn1a2i+EwKhRo+Do6AhTU1P4+PggKipKrYyEhAR06NABVlZWsLGxgb+/P1JSUtSOOX/+PL777juYmJjA2dkZU6ZM0cnjIyIiorwvVwPRkydPUL16dRgaGuLvv//G5cuXMX36dNja2krHTJkyBXPmzMHChQtx4sQJmJubw9fXFy9evJCO6dChAy5duoR9+/Zh165dOHToEHr16iXtT05ORoMGDeDi4oIzZ85g6tSpGDNmDBYvXqzTx0tERER5k0oIIXKr8mHDhuHo0aM4fPhwtvuFEHBycsLAgQMxaNAgAEBSUhLs7e0RHByMdu3a4cqVK/D09MSpU6fg5eUFAAgNDUXjxo3x33//wcnJCQsWLMBvv/2GuLg4GBkZSXVv27YNV69e/Wg7k5OTYW1tjaSkJFhZWcn06P+P67AQWcuLneQna3lERERfos/5/M7VM0Q7duyAl5cX2rRpg4IFC6JChQpYsmSJtD8mJgZxcXHw8fGRtllbW+Pbb79FREQEACAiIgI2NjZSGAIAHx8f6Onp4cSJE9IxNWvWlMIQAPj6+uLatWt48uSJth8mERER5XG5Gohu3ryJBQsWoFixYtizZw9++eUXBAYGYuXKlQCAuLg4AIC9vb3a79nb20v74uLiULBgQbX9BgYGsLOzUzsmuzIy15HZy5cvkZycrHYjIiKir5dBblaenp4OLy8vTJgwAQBQoUIFXLx4EQsXLkSXLl1yrV0TJ07E2LFjc61+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",
|
| 268 |
+
"text/plain": [
|
| 269 |
+
"<Figure size 640x480 with 1 Axes>"
|
| 270 |
+
]
|
| 271 |
+
},
|
| 272 |
+
"metadata": {},
|
| 273 |
+
"output_type": "display_data"
|
| 274 |
+
}
|
| 275 |
+
],
|
| 276 |
+
"source": [
|
| 277 |
+
"country_counts = name_df[\"Country\"].value_counts()\n",
|
| 278 |
+
"plt.bar(country_counts.index, country_counts.values)\n",
|
| 279 |
+
"plt.xlabel('Country')\n",
|
| 280 |
+
"plt.ylabel('Count')\n",
|
| 281 |
+
"plt.title('Number of Names per Country')\n",
|
| 282 |
+
"plt.xticks(rotation=90)\n",
|
| 283 |
+
"plt.show()"
|
| 284 |
+
]
|
| 285 |
+
},
|
| 286 |
+
{
|
| 287 |
+
"cell_type": "code",
|
| 288 |
+
"execution_count": 332,
|
| 289 |
+
"metadata": {
|
| 290 |
+
"colab": {
|
| 291 |
+
"base_uri": "https://localhost:8080/"
|
| 292 |
+
},
|
| 293 |
+
"id": "ckqUYK6DyJDR",
|
| 294 |
+
"outputId": "6ffe1a5b-cfa9-4bd4-eca8-0c88abd515cd"
|
| 295 |
+
},
|
| 296 |
+
"outputs": [
|
| 297 |
+
{
|
| 298 |
+
"name": "stdout",
|
| 299 |
+
"output_type": "stream",
|
| 300 |
+
"text": [
|
| 301 |
+
"Shape : (18015, 3)\n",
|
| 302 |
+
"Number of Countrys : 18\n",
|
| 303 |
+
"maximun len of name : 20\n",
|
| 304 |
+
"maximun len of name : 2\n",
|
| 305 |
+
"percentile_95 of name len : 11.0\n"
|
| 306 |
+
]
|
| 307 |
+
}
|
| 308 |
+
],
|
| 309 |
+
"source": [
|
| 310 |
+
"name_df[\"Name_len\"] = [len(name) for name in name_df.Name]\n",
|
| 311 |
+
"name_df = name_df[name_df[\"Name_len\"] != 0]\n",
|
| 312 |
+
"num_of_countrys = name_df.Country.nunique()\n",
|
| 313 |
+
"print(f\"Shape : {name_df.shape}\")\n",
|
| 314 |
+
"print(f\"Number of Countrys : {num_of_countrys}\")\n",
|
| 315 |
+
"print(f\"maximun len of name : {name_df.Name_len.max()}\")\n",
|
| 316 |
+
"print(f\"maximun len of name : {name_df.Name_len.min()}\")\n",
|
| 317 |
+
"print(f\"percentile_95 of name len : {name_df.Name_len.quantile(0.95)}\")"
|
| 318 |
+
]
|
| 319 |
+
},
|
| 320 |
+
{
|
| 321 |
+
"cell_type": "markdown",
|
| 322 |
+
"metadata": {
|
| 323 |
+
"id": "HpVWgj8MyJDR"
|
| 324 |
+
},
|
| 325 |
+
"source": [
|
| 326 |
+
"## 3.3.Remove spectial keys in name"
|
| 327 |
+
]
|
| 328 |
+
},
|
| 329 |
+
{
|
| 330 |
+
"cell_type": "code",
|
| 331 |
+
"execution_count": 333,
|
| 332 |
+
"metadata": {
|
| 333 |
+
"id": "6uYYJ5QxyJDR"
|
| 334 |
+
},
|
| 335 |
+
"outputs": [],
|
| 336 |
+
"source": [
|
| 337 |
+
"def unicode_to_ascii(s):\n",
|
| 338 |
+
" s=s.casefold()\n",
|
| 339 |
+
" return ''.join(\n",
|
| 340 |
+
" c for c in unicodedata.normalize('NFD', s)\n",
|
| 341 |
+
" if unicodedata.category(c) != 'Mn'\n",
|
| 342 |
+
" )\n",
|
| 343 |
+
"name_df[\"Name\"] = [unicode_to_ascii(name) for name in name_df.Name]"
|
| 344 |
+
]
|
| 345 |
+
},
|
| 346 |
+
{
|
| 347 |
+
"cell_type": "code",
|
| 348 |
+
"execution_count": 334,
|
| 349 |
+
"metadata": {
|
| 350 |
+
"id": "Me7pZPaZyJDS"
|
| 351 |
+
},
|
| 352 |
+
"outputs": [],
|
| 353 |
+
"source": [
|
| 354 |
+
"name_df[\"name_ascii\"] = [[ord(letter) for letter in name] for name in name_df.Name]"
|
| 355 |
+
]
|
| 356 |
+
},
|
| 357 |
+
{
|
| 358 |
+
"cell_type": "markdown",
|
| 359 |
+
"metadata": {
|
| 360 |
+
"id": "8wC9SGoIyJDS"
|
| 361 |
+
},
|
| 362 |
+
"source": [
|
| 363 |
+
"## 3.4.Encoding Country"
|
| 364 |
+
]
|
| 365 |
+
},
|
| 366 |
+
{
|
| 367 |
+
"cell_type": "code",
|
| 368 |
+
"execution_count": 335,
|
| 369 |
+
"metadata": {
|
| 370 |
+
"colab": {
|
| 371 |
+
"base_uri": "https://localhost:8080/"
|
| 372 |
+
},
|
| 373 |
+
"id": "K90bMZVWyJDT",
|
| 374 |
+
"outputId": "a9ab32e9-04eb-4702-862d-9ac038f85ab9"
|
| 375 |
+
},
|
| 376 |
+
"outputs": [
|
| 377 |
+
{
|
| 378 |
+
"data": {
|
| 379 |
+
"text/plain": [
|
| 380 |
+
"['Country_Encoder']"
|
| 381 |
+
]
|
| 382 |
+
},
|
| 383 |
+
"execution_count": 335,
|
| 384 |
+
"metadata": {},
|
| 385 |
+
"output_type": "execute_result"
|
| 386 |
+
}
|
| 387 |
+
],
|
| 388 |
+
"source": [
|
| 389 |
+
"Encoder = LabelEncoder()\n",
|
| 390 |
+
"name_df[\"Country\"] = Encoder.fit_transform(name_df.Country)\n",
|
| 391 |
+
"dump(Encoder,\"Country_Encoder\") # save encoder"
|
| 392 |
+
]
|
| 393 |
+
},
|
| 394 |
+
{
|
| 395 |
+
"cell_type": "code",
|
| 396 |
+
"execution_count": 336,
|
| 397 |
+
"metadata": {
|
| 398 |
+
"colab": {
|
| 399 |
+
"base_uri": "https://localhost:8080/"
|
| 400 |
+
},
|
| 401 |
+
"id": "jy-cmO-ryJDT",
|
| 402 |
+
"outputId": "145de0a2-3efd-457c-d3b9-ce4b9cfc27b0"
|
| 403 |
+
},
|
| 404 |
+
"outputs": [
|
| 405 |
+
{
|
| 406 |
+
"data": {
|
| 407 |
+
"text/plain": [
|
| 408 |
+
"array(['Arabic', 'Chinese', 'Czech', 'Dutch', 'English', 'French',\n",
|
| 409 |
+
" 'German', 'Greek', 'Irish', 'Italian', 'Japanese', 'Korean',\n",
|
| 410 |
+
" 'Polish', 'Portuguese', 'Russian', 'Scottish', 'Spanish',\n",
|
| 411 |
+
" 'Vietnamese'], dtype=object)"
|
| 412 |
+
]
|
| 413 |
+
},
|
| 414 |
+
"execution_count": 336,
|
| 415 |
+
"metadata": {},
|
| 416 |
+
"output_type": "execute_result"
|
| 417 |
+
}
|
| 418 |
+
],
|
| 419 |
+
"source": [
|
| 420 |
+
"Encoder.classes_"
|
| 421 |
+
]
|
| 422 |
+
},
|
| 423 |
+
{
|
| 424 |
+
"cell_type": "markdown",
|
| 425 |
+
"metadata": {
|
| 426 |
+
"id": "Cc-04c2SyJDU"
|
| 427 |
+
},
|
| 428 |
+
"source": [
|
| 429 |
+
"## 3.5.Pad sequences to the length of the longest sequence"
|
| 430 |
+
]
|
| 431 |
+
},
|
| 432 |
+
{
|
| 433 |
+
"cell_type": "code",
|
| 434 |
+
"execution_count": 337,
|
| 435 |
+
"metadata": {
|
| 436 |
+
"colab": {
|
| 437 |
+
"base_uri": "https://localhost:8080/"
|
| 438 |
+
},
|
| 439 |
+
"id": "7EMaOsNUyJDU",
|
| 440 |
+
"outputId": "a64a6816-ebd8-435e-e782-1278fe8732e2"
|
| 441 |
+
},
|
| 442 |
+
"outputs": [
|
| 443 |
+
{
|
| 444 |
+
"name": "stdout",
|
| 445 |
+
"output_type": "stream",
|
| 446 |
+
"text": [
|
| 447 |
+
"torch.Size([18015, 20, 1])\n",
|
| 448 |
+
"torch.Size([18015])\n"
|
| 449 |
+
]
|
| 450 |
+
}
|
| 451 |
+
],
|
| 452 |
+
"source": [
|
| 453 |
+
"sequences = [torch.tensor(ascii_list) for ascii_list in name_df.name_ascii]\n",
|
| 454 |
+
"padded_sequences = pad_sequence(sequences, batch_first=True, padding_value=0)\n",
|
| 455 |
+
"X = padded_sequences\n",
|
| 456 |
+
"X = X.view(X.shape[0], X.shape[1],1).float()\n",
|
| 457 |
+
"y = torch.tensor([torch.tensor(label) for label in name_df.Country],dtype=int)\n",
|
| 458 |
+
"print(X.shape)\n",
|
| 459 |
+
"print(y.shape)"
|
| 460 |
+
]
|
| 461 |
+
},
|
| 462 |
+
{
|
| 463 |
+
"cell_type": "markdown",
|
| 464 |
+
"metadata": {
|
| 465 |
+
"id": "rXsa6fR1yJDU"
|
| 466 |
+
},
|
| 467 |
+
"source": [
|
| 468 |
+
"## 3.6.Train Test split"
|
| 469 |
+
]
|
| 470 |
+
},
|
| 471 |
+
{
|
| 472 |
+
"cell_type": "code",
|
| 473 |
+
"execution_count": 338,
|
| 474 |
+
"metadata": {
|
| 475 |
+
"id": "i9piJa512_dO"
|
| 476 |
+
},
|
| 477 |
+
"outputs": [],
|
| 478 |
+
"source": [
|
| 479 |
+
"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
|
| 480 |
+
"X = X.to(device)\n",
|
| 481 |
+
"y = y.to(device)"
|
| 482 |
+
]
|
| 483 |
+
},
|
| 484 |
+
{
|
| 485 |
+
"cell_type": "code",
|
| 486 |
+
"execution_count": 339,
|
| 487 |
+
"metadata": {
|
| 488 |
+
"colab": {
|
| 489 |
+
"base_uri": "https://localhost:8080/"
|
| 490 |
+
},
|
| 491 |
+
"id": "gtVCWxyAyJDV",
|
| 492 |
+
"outputId": "265a5715-4648-47a2-aa7a-818cf28f4c0e"
|
| 493 |
+
},
|
| 494 |
+
"outputs": [
|
| 495 |
+
{
|
| 496 |
+
"name": "stdout",
|
| 497 |
+
"output_type": "stream",
|
| 498 |
+
"text": [
|
| 499 |
+
"torch.Size([14412, 20, 1])\n",
|
| 500 |
+
"torch.Size([14412])\n",
|
| 501 |
+
"torch.Size([3603, 20, 1])\n",
|
| 502 |
+
"torch.Size([3603])\n"
|
| 503 |
+
]
|
| 504 |
+
}
|
| 505 |
+
],
|
| 506 |
+
"source": [
|
| 507 |
+
"X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=42,test_size=0.2)\n",
|
| 508 |
+
"print(X_train.shape)\n",
|
| 509 |
+
"print(y_train.shape)\n",
|
| 510 |
+
"print(X_test.shape)\n",
|
| 511 |
+
"print(y_test.shape)"
|
| 512 |
+
]
|
| 513 |
+
},
|
| 514 |
+
{
|
| 515 |
+
"cell_type": "markdown",
|
| 516 |
+
"metadata": {
|
| 517 |
+
"id": "Dx_uNHzhyJDV"
|
| 518 |
+
},
|
| 519 |
+
"source": [
|
| 520 |
+
"# 4.RNN model"
|
| 521 |
+
]
|
| 522 |
+
},
|
| 523 |
+
{
|
| 524 |
+
"cell_type": "markdown",
|
| 525 |
+
"metadata": {
|
| 526 |
+
"id": "zjwh_34uyJDW"
|
| 527 |
+
},
|
| 528 |
+
"source": [
|
| 529 |
+
"### 4.1.Defining the RNN Model"
|
| 530 |
+
]
|
| 531 |
+
},
|
| 532 |
+
{
|
| 533 |
+
"cell_type": "code",
|
| 534 |
+
"execution_count": 340,
|
| 535 |
+
"metadata": {
|
| 536 |
+
"id": "zW-YmE7ZyJDW"
|
| 537 |
+
},
|
| 538 |
+
"outputs": [],
|
| 539 |
+
"source": [
|
| 540 |
+
"class SimpleRNN(nn.Module):\n",
|
| 541 |
+
" def __init__(self, input_size, hidden_size, output_size, num_layers):\n",
|
| 542 |
+
" super(SimpleRNN, self).__init__()\n",
|
| 543 |
+
" self.rnn = nn.RNN(input_size, hidden_size, num_layers, batch_first=True)\n",
|
| 544 |
+
" self.dropout = nn.Dropout(0.3)\n",
|
| 545 |
+
" self.fc = nn.Linear(hidden_size, output_size)\n",
|
| 546 |
+
"\n",
|
| 547 |
+
" def forward(self, x):\n",
|
| 548 |
+
" out, _ = self.rnn(x)\n",
|
| 549 |
+
" out = self.dropout(out[:, -1, :])\n",
|
| 550 |
+
" out = self.fc(out)\n",
|
| 551 |
+
" return out"
|
| 552 |
+
]
|
| 553 |
+
},
|
| 554 |
+
{
|
| 555 |
+
"cell_type": "markdown",
|
| 556 |
+
"metadata": {
|
| 557 |
+
"id": "g9__xCD8yJDW"
|
| 558 |
+
},
|
| 559 |
+
"source": [
|
| 560 |
+
"### 4.2.Initializing the Model, Loss Function, and Optimizer"
|
| 561 |
+
]
|
| 562 |
+
},
|
| 563 |
+
{
|
| 564 |
+
"cell_type": "code",
|
| 565 |
+
"execution_count": 341,
|
| 566 |
+
"metadata": {
|
| 567 |
+
"id": "gmPe8OMQyJDX"
|
| 568 |
+
},
|
| 569 |
+
"outputs": [],
|
| 570 |
+
"source": [
|
| 571 |
+
"input_size = X.shape[2]\n",
|
| 572 |
+
"hidden_size = 256 # Hidden layer size\n",
|
| 573 |
+
"output_size = num_of_countrys # Number of classes\n",
|
| 574 |
+
"num_layers = 1 # Single RNN layer\n",
|
| 575 |
+
"\n",
|
| 576 |
+
"model = SimpleRNN(input_size, hidden_size, output_size, num_layers).to(device)\n",
|
| 577 |
+
"criterion = nn.CrossEntropyLoss() # CrossEntropyLoss for classification\n",
|
| 578 |
+
"optimizer = torch.optim.Adam(model.parameters(), lr=0.0001)"
|
| 579 |
+
]
|
| 580 |
+
},
|
| 581 |
+
{
|
| 582 |
+
"cell_type": "code",
|
| 583 |
+
"execution_count": 347,
|
| 584 |
+
"metadata": {
|
| 585 |
+
"colab": {
|
| 586 |
+
"base_uri": "https://localhost:8080/"
|
| 587 |
+
},
|
| 588 |
+
"id": "gpHNKl6HPgPX",
|
| 589 |
+
"outputId": "6661eafb-0408-4918-8112-71aa169001d3"
|
| 590 |
+
},
|
| 591 |
+
"outputs": [
|
| 592 |
+
{
|
| 593 |
+
"data": {
|
| 594 |
+
"text/plain": [
|
| 595 |
+
"torch.Size([1, 20, 1])"
|
| 596 |
+
]
|
| 597 |
+
},
|
| 598 |
+
"execution_count": 347,
|
| 599 |
+
"metadata": {},
|
| 600 |
+
"output_type": "execute_result"
|
| 601 |
+
}
|
| 602 |
+
],
|
| 603 |
+
"source": [
|
| 604 |
+
"X.shape"
|
| 605 |
+
]
|
| 606 |
+
},
|
| 607 |
+
{
|
| 608 |
+
"cell_type": "markdown",
|
| 609 |
+
"metadata": {
|
| 610 |
+
"id": "1SZ37L7tyJDX"
|
| 611 |
+
},
|
| 612 |
+
"source": [
|
| 613 |
+
"### 4.3.Training the Model"
|
| 614 |
+
]
|
| 615 |
+
},
|
| 616 |
+
{
|
| 617 |
+
"cell_type": "code",
|
| 618 |
+
"execution_count": 342,
|
| 619 |
+
"metadata": {
|
| 620 |
+
"colab": {
|
| 621 |
+
"base_uri": "https://localhost:8080/"
|
| 622 |
+
},
|
| 623 |
+
"id": "UYN0D2j-yJDX",
|
| 624 |
+
"outputId": "414bd6fc-a256-4ef9-e7bb-0cd076149cf3"
|
| 625 |
+
},
|
| 626 |
+
"outputs": [
|
| 627 |
+
{
|
| 628 |
+
"name": "stdout",
|
| 629 |
+
"output_type": "stream",
|
| 630 |
+
"text": [
|
| 631 |
+
"Epoch [10/50], Loss: 2.8346\n",
|
| 632 |
+
"Epoch [20/50], Loss: 2.7222\n",
|
| 633 |
+
"Epoch [30/50], Loss: 2.5080\n",
|
| 634 |
+
"Epoch [40/50], Loss: 2.0311\n",
|
| 635 |
+
"Epoch [50/50], Loss: 1.9161\n",
|
| 636 |
+
"Training Complete!\n"
|
| 637 |
+
]
|
| 638 |
+
}
|
| 639 |
+
],
|
| 640 |
+
"source": [
|
| 641 |
+
"num_epochs = 50\n",
|
| 642 |
+
"all_loss = []\n",
|
| 643 |
+
"for epoch in range(num_epochs):\n",
|
| 644 |
+
" outputs = model(X)\n",
|
| 645 |
+
" loss = criterion(outputs,y)\n",
|
| 646 |
+
" loss.backward()\n",
|
| 647 |
+
" optimizer.step()\n",
|
| 648 |
+
" all_loss.append(loss.item())\n",
|
| 649 |
+
" if (epoch+1) % 10 == 0:\n",
|
| 650 |
+
" print(f\"Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}\")\n",
|
| 651 |
+
"print(\"Training Complete!\")"
|
| 652 |
+
]
|
| 653 |
+
},
|
| 654 |
+
{
|
| 655 |
+
"cell_type": "code",
|
| 656 |
+
"execution_count": 343,
|
| 657 |
+
"metadata": {
|
| 658 |
+
"colab": {
|
| 659 |
+
"base_uri": "https://localhost:8080/",
|
| 660 |
+
"height": 472
|
| 661 |
+
},
|
| 662 |
+
"id": "9GemB-4ByJDY",
|
| 663 |
+
"outputId": "8e318c9d-9f1c-46d7-d786-67182ebf2437"
|
| 664 |
+
},
|
| 665 |
+
"outputs": [
|
| 666 |
+
{
|
| 667 |
+
"data": {
|
| 668 |
+
"image/png": "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aPjzzZs3kZKSgnbt2gEA2rVrh3379hm97759+xAQEAC5XI727dtDr9cbreGpi4CAAEyZMgXbtm3DU089hWXLlj3Q+xFR41BIHYCImha1Wo233noLU6ZMgV6vR8+ePaHVarFv3z44ODigVatWAIAPPvgALVq0gJubG9577z24uLhg2LBhAIA333wT4eHh+PDDDzFq1CgcOHAAX3zxBb788ksAgK+vL8aNG4cJEyZgwYIFCAsLw5UrV5CTk4ORI0feM2NpaSmmTZuGESNGwM/PD1evXsWRI0cwfPjwBhsXIqpHUi/6IaKmR6/Xi88++0wEBgYKa2tr4erqKgYOHCgSEhIMi31//vlnERISIpRKpejatas4deqU0XusXbtWBAcHC2tra9GyZUsxZ84co+dLS0vFlClThIeHh1AqlcLf318sXbpUCPHHguKbN28a9j9x4oQAINLS0kR5ebkYPXq08PHxEUqlUnh6eoqYmBjDYmMiMm0yIYSQuF8RERnEx8ejb9++uHnzJpycnKSOQ0RmiGtuiIiIyKKw3BAREZFF4WEpIiIisiicuSEiIiKLwnJDREREFoXlhoiIiCwKyw0RERFZFJYbIiIisigsN0RERGRRWG6IiIjIorDcEBERkUVhuSEiIiKL8v/jH7K224wUDQAAAABJRU5ErkJggg==",
|
| 669 |
+
"text/plain": [
|
| 670 |
+
"<Figure size 640x480 with 1 Axes>"
|
| 671 |
+
]
|
| 672 |
+
},
|
| 673 |
+
"metadata": {},
|
| 674 |
+
"output_type": "display_data"
|
| 675 |
+
}
|
| 676 |
+
],
|
| 677 |
+
"source": [
|
| 678 |
+
"plt.plot(all_loss)\n",
|
| 679 |
+
"plt.title(\"loss v/s epochs\")\n",
|
| 680 |
+
"plt.xlabel(\"epochs\")\n",
|
| 681 |
+
"plt.ylabel(\"loss\")\n",
|
| 682 |
+
"plt.show()"
|
| 683 |
+
]
|
| 684 |
+
},
|
| 685 |
+
{
|
| 686 |
+
"cell_type": "markdown",
|
| 687 |
+
"metadata": {
|
| 688 |
+
"id": "0oXe5ldTyJDY"
|
| 689 |
+
},
|
| 690 |
+
"source": [
|
| 691 |
+
"### 4.4.Predictions"
|
| 692 |
+
]
|
| 693 |
+
},
|
| 694 |
+
{
|
| 695 |
+
"cell_type": "code",
|
| 696 |
+
"execution_count": 344,
|
| 697 |
+
"metadata": {
|
| 698 |
+
"colab": {
|
| 699 |
+
"base_uri": "https://localhost:8080/",
|
| 700 |
+
"height": 36
|
| 701 |
+
},
|
| 702 |
+
"id": "S2BcZFJUyJDZ",
|
| 703 |
+
"outputId": "0215a8fa-4470-452b-e778-53b7e650864a"
|
| 704 |
+
},
|
| 705 |
+
"outputs": [
|
| 706 |
+
{
|
| 707 |
+
"data": {
|
| 708 |
+
"application/vnd.google.colaboratory.intrinsic+json": {
|
| 709 |
+
"type": "string"
|
| 710 |
+
},
|
| 711 |
+
"text/plain": [
|
| 712 |
+
"'Russian'"
|
| 713 |
+
]
|
| 714 |
+
},
|
| 715 |
+
"execution_count": 344,
|
| 716 |
+
"metadata": {},
|
| 717 |
+
"output_type": "execute_result"
|
| 718 |
+
}
|
| 719 |
+
],
|
| 720 |
+
"source": [
|
| 721 |
+
"model.eval()\n",
|
| 722 |
+
"name = \"jerebyatiev\"\n",
|
| 723 |
+
"name = unicode_to_ascii(name)\n",
|
| 724 |
+
"name_ascii = [ord(letter) for letter in name]\n",
|
| 725 |
+
"\n",
|
| 726 |
+
"name_ascii = name_ascii[:20] + [0] * (20 - len(name_ascii))\n",
|
| 727 |
+
"\n",
|
| 728 |
+
"# Convert to Tensor (reshape for RNN input)\n",
|
| 729 |
+
"X = torch.tensor(name_ascii, dtype=torch.float32).view(1, 20, 1) # Shape: (batch, sequence, input)\n",
|
| 730 |
+
"\n",
|
| 731 |
+
"with torch.no_grad():\n",
|
| 732 |
+
" pred = model(X.to(device))\n",
|
| 733 |
+
"\n",
|
| 734 |
+
"# Get Predicted Class\n",
|
| 735 |
+
"idx = torch.argmax(pred).item()\n",
|
| 736 |
+
"class_ = Encoder.classes_[idx]\n",
|
| 737 |
+
"class_"
|
| 738 |
+
]
|
| 739 |
+
},
|
| 740 |
+
{
|
| 741 |
+
"cell_type": "markdown",
|
| 742 |
+
"metadata": {
|
| 743 |
+
"id": "_Uluci8WyJDZ"
|
| 744 |
+
},
|
| 745 |
+
"source": [
|
| 746 |
+
"### 4.5.Save Model"
|
| 747 |
+
]
|
| 748 |
+
},
|
| 749 |
+
{
|
| 750 |
+
"cell_type": "code",
|
| 751 |
+
"execution_count": 345,
|
| 752 |
+
"metadata": {
|
| 753 |
+
"colab": {
|
| 754 |
+
"base_uri": "https://localhost:8080/"
|
| 755 |
+
},
|
| 756 |
+
"id": "LCOwmZH7yJDZ",
|
| 757 |
+
"outputId": "0e22f5c6-2f26-4381-f5c1-59708fb162ea"
|
| 758 |
+
},
|
| 759 |
+
"outputs": [
|
| 760 |
+
{
|
| 761 |
+
"name": "stdout",
|
| 762 |
+
"output_type": "stream",
|
| 763 |
+
"text": [
|
| 764 |
+
"Model saved successfully!\n"
|
| 765 |
+
]
|
| 766 |
+
}
|
| 767 |
+
],
|
| 768 |
+
"source": [
|
| 769 |
+
"torch.save(model.state_dict(), \"rnn_model.pth\")\n",
|
| 770 |
+
"print(\"Model saved successfully!\")"
|
| 771 |
+
]
|
| 772 |
+
}
|
| 773 |
+
],
|
| 774 |
+
"metadata": {
|
| 775 |
+
"accelerator": "GPU",
|
| 776 |
+
"colab": {
|
| 777 |
+
"gpuType": "T4",
|
| 778 |
+
"provenance": []
|
| 779 |
+
},
|
| 780 |
+
"kernelspec": {
|
| 781 |
+
"display_name": "Python 3",
|
| 782 |
+
"name": "python3"
|
| 783 |
+
},
|
| 784 |
+
"language_info": {
|
| 785 |
+
"codemirror_mode": {
|
| 786 |
+
"name": "ipython",
|
| 787 |
+
"version": 3
|
| 788 |
+
},
|
| 789 |
+
"file_extension": ".py",
|
| 790 |
+
"mimetype": "text/x-python",
|
| 791 |
+
"name": "python",
|
| 792 |
+
"nbconvert_exporter": "python",
|
| 793 |
+
"pygments_lexer": "ipython3",
|
| 794 |
+
"version": "3.10.7"
|
| 795 |
+
}
|
| 796 |
+
},
|
| 797 |
+
"nbformat": 4,
|
| 798 |
+
"nbformat_minor": 0
|
| 799 |
+
}
|