File size: 70,821 Bytes
5783f3e 527ed01 5783f3e 527ed01 5783f3e 527ed01 5783f3e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 |
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Sentence Processing for NLP\n",
"\n",
"In this notebook, we will see the importance of sentence processing and the techniques that we used to train the models.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will use a corpus of `10_000` sentences to demonstrate the difference between the different techniques.\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[nltk_data] Downloading package punkt_tab to /Users/az-r-\n",
"[nltk_data] ow/nltk_data...\n",
"[nltk_data] Package punkt_tab is already up-to-date!\n"
]
}
],
"source": [
"from app.travel_resolver.libs.nlp.data_processing import from_bio_file_to_examples\n",
"\n",
"\n",
"sentences, labels, vocab, unique_labels = from_bio_file_to_examples(\n",
" \"data/bio/fr.bio/10k_samples.bio\"\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On the same corpus, we will be comparing :\n",
"\n",
"- No changes\n",
"- Stopwords removal + lowercasing\n",
"- Stopwords removal + lowercasing + stemming\n",
"\n",
"To avoid confusion, variables in relation with the sentences that hasn't been altered with will be prefixed with `o` for original, `sl` for stopwords + lowercasing and `sls` for stopwords + lowercasing + stemming.\n",
"\n",
"> If you're not familiar with stemming, it's basically an attempt of taking the word to it's root by removing what supposedly is a prefix or a suffix (eg: _chocolates_ $\\to$ _chocolate_, _retrieval_ $\\to$ _retrieve_)\n"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"import nltk\n",
"from app.travel_resolver.libs.nlp.data_processing import process_sentence\n",
"\n",
"o_sentences = [nltk.tokenize.word_tokenize(sentence) for sentence in sentences]\n",
"sl_sentences = []\n",
"sl_labels = []\n",
"sls_sentences = []\n",
"sls_labels = []\n",
"\n",
"for sentence, label in zip(sentences, labels):\n",
" sl_sentence, sl_label = process_sentence(\n",
" sentence, return_tokens=True, labels_to_adapt=label\n",
" )\n",
" sls_sentence, sls_label = process_sentence(\n",
" sentence, stemming=True, return_tokens=True, labels_to_adapt=label\n",
" )\n",
"\n",
" # print(len(sl_sentence))\n",
" # print(len(sl_label))\n",
" # break\n",
" sl_sentences.append(sl_sentence)\n",
" sl_labels.append(sl_label)\n",
" sls_sentences.append(sls_sentence)\n",
" sls_labels.append(sls_label)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"from collections import Counter\n",
"\n",
"o_word_count = Counter([word for sentence in o_sentences for word in sentence])\n",
"sl_word_count = Counter([word for sentence in sl_sentences for word in sentence])\n",
"sls_word_count = Counter([word for sentence in sls_sentences for word in sentence])"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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bPXp00d79+7VxIkTFRMTo/fff19jxoxRamqqJk2apIsvvlhvvPGGpkyZokaNGrkucYuIiChync2aNVNUVJTWrl3rmrZp0ybl5eWpR48e6tGjh9atW+daz3fffSfpf+Hrl19+0eWXX67g4GA98MAD8vb21ssvv6w+ffrom2++Ubdu3dy2N2HCBEVERGjmzJnKzMyUJL322mu666671KNHD02ePFm//fabhg4dqrCwMEVHRxf7efxZfn6+Tp486TbN39/fdbapqGPJ6XRq6NChWrt2re68805dfPHF+vnnnzV//nzt3r1bS5cuda1r/PjxevPNN3XLLbeoR48eWrlypQYPHlyi2orzxBNP6NFHH9Xw4cM1fvx4JSUl6YUXXtAVV1yhH374QaGhoa62p06d0lVXXaXrr79ew4cP1wcffKAHH3xQ7dq1c51BdDgcuuaaa5SQkKCbbrpJkyZNUnp6ur766itt375dsbGxuvXWWzV37lylpKQoLCzMtf7//ve/SktLs3Q278/uvfde1alTR7NmzdKBAwe0YMECTZw4Ue+++26xy2RlZSkhIUFXXHGFGjdufN5tWP05W7lypd577z1NnDhRdevWdQs+//73v5Wenq64uDjl5OToueeeU79+/fTzzz+f93vmbF999ZVuvvlm9e/fX0899ZQkaefOnVq3bp0mTZpkaV0AyokBgAqwaNEiI8ls2rSp2DYhISHmkksucb2fNWuW+fPX1Pz5840kk5SUVOw6Nm3aZCSZRYsWFZrXu3dvI8ksXLiwyHm9e/d2vV+1apWRZBo2bGjS0tJc09977z0jyTz33HOuaU2aNDGjR48+7zrPVdvo0aNNkyZNXO+XLl1qJJnZs2e7tfvrX/9qbDab2bt3r2uaJOPj4+M27ccffzSSzAsvvFBoW3+2YMECI8m8+eabrml5eXmme/fuJjAw0G3fmzRpYgYPHnzO9Z1x4403Gj8/P5OXl2eMMWbOnDkmJibGGGPMiy++aOrVq+dqe//99xtJ5siRI8YYY4YNG2Z8fHzMvn37XG2OHj1qgoKCzBVXXOGaduaY6tWrlykoKHCrv169eqZjx44mNzfXNf2VV14xktz6pDhNmjQxkgq9Zs2aZYwp/lh64403jIeHh/n222/dpi9cuNBIMuvWrTPGGLNt2zYjyUyYMMGt3S233OK2HWMKHxtnnP3zceDAAePp6WmeeOIJt3Y///yz8fLycpt+pv5///vfrmm5ubkmMjLS3HDDDa5pr7/+upFk5s2bV2j7TqfTGGPMrl27jCTz0ksvuc0fOnSoadq0qatdcc7++TnTrwMGDHBbdsqUKcbT09OkpqYWu64zx/2kSZPOuc0zrP6ceXh4mF9++cWt7f79+40k4+fnZ37//XfX9A0bNhhJZsqUKa5pZ38nnHF2H0+aNMkEBwe7HdcAqhYu5wNQZQQGBp5zlL4zf0X/5JNPSj0Ig91u19ixY0vcftSoUW6XBP31r39VgwYN9MUXX5Rq+yX1xRdfyNPTU/fdd5/b9GnTpskYo2XLlrlNHzBggGJjY13v27dvr+DgYP3222/n3U5kZKRuvvlm1zRvb2/dd999ysjI0DfffFOq+nv16qXs7Gxt2bJF0h+X9p0569azZ08lJiZqz549rnkxMTGKioqSw+HQl19+qWHDhqlZs2au9TVo0EC33HKL1q5dq7S0NLdt3XHHHfL09HS937x5sxITE3X33Xe73es2ZswYt4Euzqdbt2766quv3F6jRo1yzS/qWHr//fd18cUX66KLLtLJkyddr379+kmSVq1aJUmu4+fs/r2QYeM/+ugjOZ1ODR8+3G3bkZGRatGihWvbZwQGBrqdJfLx8VHXrl3djpkPP/xQdevW1b333ltoe2cuJWzZsqW6deumt956yzUvJSVFy5Yt08iRI0v9mII777zTbdnLL79cDodDBw8eLHaZM8dGSe+ts/pz1rt372LvCxw2bJgaNmzoet+1a1d169atVN8VoaGhyszM1FdffWV5WQAVgxAFoMrIyMg45y8/I0aMUM+ePTV+/HjVr19fN910k9577z1Lgaphw4aWBpFo0aKF23ubzabmzZsXez9QWTl48KCioqIKfR4XX3yxa/6fFXXpUp06dXTq1KnzbqdFixaFRkcrbjsl9ef7oowx+u6779SzZ09JUtu2bRUcHKx169YpJydHW7ZscbVPSkpSVlaWWrVqVWidF198sZxOZ6H7e2JiYgrtk1S477y9vd2C2fnUrVtXAwYMcHv9efmijqU9e/bol19+UUREhNurZcuWkv64/+xMjR4eHm7BV1KR+11Se/bskTFGLVq0KLT9nTt3urZ9RqNGjQoFnLOPmX379qlVq1bnHeBl1KhRWrduneuzf//995Wfn1/sMPglcfYxXadOHUk65zEdHBwsSSV+ZILVn7Ozj7U/O/t4k/4ImKX5rpgwYYJatmypQYMGqVGjRrr99ttLfI8jgIrBPVEAqoTff/9dp0+fVvPmzYtt4+fnpzVr1mjVqlX6/PPPtXz5cr377rvq16+fvvzyS7ezEedaR1kr7i/tDoejRDWVheK2Y866Ob6idOjQQUFBQVq7dq2uvvpqpaSkuM5EeXh4qFu3blq7dq1iY2OVl5fnNqiEVeXRp6XdrtPpVLt27TRv3rwilynp/Vh/dq7j6+xt22w2LVu2rMjjITAw0O19WR4zN910k6ZMmaK33npLDz/8sN5880117tz5gkJhaepr3ry5vLy89PPPP5d6u+dyoceazWYrsv6z+7JevXratm2bVqxYoWXLlmnZsmVatGiRRo0a5TboC4DKQ4gCUCW88cYbkqSBAwees52Hh4f69++v/v37a968efrHP/6hRx55RKtWrdKAAQNKfelQcc5ccnaGMUZ79+51e55VnTp1lJqaWmjZgwcPup25sFJbkyZN9PXXXys9Pd3tr+S//vqra35ZaNKkiX766Sc5nU63s1EXuh1PT09ddtllWrdundauXesaXeyMHj166N1333WF5jMhKiIiQv7+/tq1a1ehdf7666/y8PA4bxA5U/OePXtcl9FJfwwUsX///iIfBFxWYmNj9eOPP6p///7n7O8mTZrI6XS6zvScUdR+n+v4OnvbxhjFxMS4znxdqNjYWG3YsKHQc73OFhYWpsGDB+utt97SyJEjtW7dOi1YsKBMarDC399f/fr108qVK3X48OESHStl9XN29neFJO3evdtt8Ik6deoUeYltUWd8fXx8NGTIEA0ZMkROp1MTJkzQyy+/rEcfffScf2wCUDG4nA9ApVu5cqX+3//7f4qJidHIkSOLbZeSklJo2pmH1p4ZPvrMM4KK+qWzNM6MuHXGBx98oGPHjrk9/yg2Nlbff/+98vLyXNM+++yzQpedWant6quvlsPh0D//+U+36fPnz5fNZnPb/oW4+uqrdfz4cbcRzwoKCvTCCy8oMDBQvXv3LvW6e/XqpaSkJC1atEjdunVzC2k9evTQrl279Mknnyg8PNx1+ZSnp6f+8pe/6JNPPnG7DOrEiRN6++231atXL9clW8Xp3LmzIiIitHDhQrc+Wbx4cZkdF8UZPny4jhw5oldffbXQvOzsbNfogWf67/nnn3drU1TwiI2N1enTp/XTTz+5ph07dkwff/yxW7vrr79enp6eevzxxwud7TDGKDk52fL+3HDDDTp58mSh4/DMOv/stttu044dOzR9+nR5enrqpptusry9sjBr1iwZY3TbbbcpIyOj0PwtW7a4zuaU5c/Z0qVLdeTIEdf7jRs3asOGDYW+K3799Ve3odp//PFHtyH/JRXqKw8PD9cfbs4eKh9A5eBMFIAKtWzZMv36668qKCjQiRMntHLlSn311Vdq0qSJPv3003M+uPLvf/+71qxZo8GDB6tJkyZKTEzUiy++qEaNGrnOZMTGxio0NFQLFy5UUFCQAgIC1K1bt3Pey3AuYWFh6tWrl8aOHasTJ05owYIFat68udsw7OPHj9cHH3ygq666SsOHD9e+ffv05ptvFrrfxUptQ4YMUd++ffXII4/owIED6tChg7788kt98sknmjx5cqF1l9add96pl19+WWPGjNGWLVvUtGlTffDBB64zCRfy8NszfbJ+/Xq35x5J0mWXXSabzabvv/9eQ4YMcTtrM3v2bNfzwCZMmCAvLy+9/PLLys3NLfI5Rmfz9vbW7Nmzddddd6lfv34aMWKE9u/fr0WLFlm6J6o0brvtNr333nu6++67tWrVKvXs2VMOh0O//vqr3nvvPa1YsUKdO3dWx44ddfPNN+vFF1/U6dOn1aNHDyUkJGjv3r2F1nnTTTfpwQcf1HXXXaf77rtPWVlZeumll9SyZUtt3brV1S42NlazZ8/WjBkzdODAAQ0bNkxBQUHav3+/Pv74Y9155526//77Le3PqFGj9O9//1tTp07Vxo0bdfnllyszM1Nff/21JkyY4PZ8qMGDBys8PFzvv/++Bg0apHr16pX+g7wAPXr0UHx8vCZMmKCLLrpIt912m1q0aKH09HStXr1an376qWbPni2pbH/Omjdvrl69eumee+5Rbm6uFixYoPDwcD3wwAOuNrfffrvmzZungQMHaty4cUpMTNTChQvVpk0btwFTxo8fr5SUFPXr10+NGjXSwYMH9cILL6hjx46uPzgAqGSVMSQggNrnzLDFZ14+Pj4mMjLSXHnllea5555zG0r7jLOHcE5ISDDXXnutiYqKMj4+PiYqKsrcfPPNZvfu3W7LffLJJ6Z169bGy8vLbUjx3r17mzZt2hRZX3FDnP/n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9u2rvn37Fgo7FaFXr15yOp0lbm+328v8jBkAAACA2qPEIapPnz7q06ePJCknJ0ffffedK1QtWbJE+fn5uuiii/TLL7+UWXF169aVp6enTpw44Tb9xIkTioyMLLPtAAAAAEBJWR6dT5J8fX3Vr18//e1vf9Pjjz+u++67T4GBgfr111/LtDgfHx916tRJCQkJrmlOp1MJCQnq3r17mW4LAAAAAErC0uh8eXl5+v7777Vq1SqtXr1aGzZsUHR0tK644gr985//VO/evS0XkJGRob1797re79+/X9u2bVNYWJgaN26sqVOnavTo0ercubO6du2qBQsWKDMz0zVaHwAAAABUpBKHqH79+mnDhg2KiYlR7969ddddd+ntt99WgwYNLqiAzZs3q2/fvq73U6dOlSSNHj1aixcv1ogRI5SUlKSZM2fq+PHj6tixo5YvX37B91/Fx8crPj5eDofjgtYDAAAAoHYpcYj69ttv1aBBA/Xr1099+vRR7969FR4efsEF9OnTR8aYc7aZOHGiJk6ceMHb+rO4uDjFxcUpLS1NISEhZbpuAAAAADVXie+JSk1N1SuvvCJ/f3899dRTioqKUrt27TRx4kR98MEHSkpKKs86AQAAAKBKKPGZqICAAF111VW66qqrJEnp6elau3atVq1apblz52rkyJFq0aKFtm/fXm7FAgAAAEBlK9XofNIfoSosLExhYWGqU6eOvLy8tHPnzrKsDQAAAACqnBKfiXI6ndq8ebNWr16tVatWad26dcrMzFTDhg3Vt29fxcfHuw0QAQAAAAA1UYlDVGhoqDIzMxUZGam+fftq/vz56tOnj2JjY8uzvnLD6HwAAAAASqPEIerpp59W37591bJly/Ksp8IwOh8AAACA0ihxiLrrrrvKsw4AAAAAqBZKPbAEAAAAANRGhCgAAAAAsIAQBQAAAAAWlChEXXrppTp16pQk6e9//7uysrLKtSgAAAAAqKpKFKJ27typzMxMSdLjjz+ujIyMci2qIsTHx6t169bq0qVLZZcCAAAAoBop0eh8HTt21NixY9WrVy8ZY/TMM88oMDCwyLYzZ84s0wLLC0OcAwAAACiNEoWoxYsXa9asWfrss89ks9m0bNkyeXkVXtRms1WbEAUAAAAApVGiENWqVSu98847kiQPDw8lJCSoXr165VoYAAAAAFRFJX7Y7hlOp7M8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appz9WlqaqoZMGCAeffdd82vv/5q1q9fb7p27Wo6derkto6a3KeEqCqga9euJi4uzvXe4XCYqKgoM2fOnEqsCmdLTEw0ksw333xjjPnjC8Tb29u8//77rjY7d+40ksz69euNMX98AXl4eJjjx4+72rz00ksmODjY5ObmGmOMeeCBB0ybNm3ctjVixAgzcODA8t6lWik9Pd20aNHCfPXVV6Z3796uEEV/Vj8PPvig6dWrV7HznU6niYyMNE8//bRrWmpqqrHb7eY///mPMcaYHTt2GElm06ZNrjbLli0zNpvNHDlyxBhjzIsvvmjq1Knj6uMz227VqlVZ71KtNnjwYHP77be7Tbv++uvNyJEjjTH0Z3Vy9i/cFdl3w4cPN4MHD3arp1u3buauu+4q032sbYoKxmfbuHGjkWQOHjxojKn5fcrlfJUsLy9PW7Zs0YABA1zTPDw8NGDAAK1fv74SK8PZTp8+LUkKCwuTJG3ZskX5+flufXfRRRepcePGrr5bv3692rVrp/r167vaDBw4UGlpafrll19cbf68jjNt6P/yERcXp8GDBxf6zOnP6ufTTz9V586ddeONN6pevXq65JJL9Oqrr7rm79+/X8ePH3frj5CQEHXr1s2tT0NDQ9W5c2dXmwEDBsjDw0MbNmxwtbniiivk4+PjajNw4EDt2rVLp06dKu/drDV69OihhIQE7d69W5L0448/au3atRo0aJAk+rM6q8i+4zu48pw+fVo2m02hoaGSan6fEqIq2cmTJ+VwONx+KZOk+vXr6/jx45VUFc7mdDo1efJk9ezZU23btpUkHT9+XD4+Pq4vizP+3HfHjx8vsm/PzDtXm7S0NGVnZ5fH7tRa77zzjrZu3ao5c+YUmkd/Vj+//fabXnrpJbVo0UIrVqzQPffco/vuu09LliyR9L8+Odf36/Hjx1WvXj23+V5eXgoLC7PU77hwDz30kG666SZddNFF8vb21iWXXKLJkydr5MiRkujP6qwi+664NvRt+crJydGDDz6om2++WcHBwZJqfp96VerWgWoiLi5O27dv19q1ayu7FJTS4cOHNWnSJH311Vfy9fWt7HJQBpxOpzp37qx//OMfkqRLLrlE27dv18KFCzV69OhKrg5Wvffee3rrrbf09ttvq02bNtq2bZsmT56sqKgo+hOowvLz8zV8+HAZY/TSSy9VdjkV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OHGi1q9fr3feeUc//fSTbrzxRl111VXas2ePq01WVpaeeeYZvfHGG1qzZo0OHTqk+++/3zX/pZdeUlxcnO688079/PPP+vTTT9W8eXNJ0vjx47V8+XK30PXZZ58pKytLI0aMKM3HBQAojgEAoIReffVVExAQYPLz801aWprx8vIyiYmJ5u233zZXXHGFMcaYhIQEI8kcPHjQZGRkGG9vb/PWW2+51pGXl2eioqLM3LlzjTHGrFq1ykgyS5cudbVJT083Pj4+5r333nNNS05ONn5+fmbSpEnF1rdo0SIjyQQEBLhe9evXN8YYM2vWLOPt7W0SExNd7b/99lsTHBxscnJy3NYTGxtrXn75ZWOMMd27dzcTJkxwm9+tWzfToUMH1/vevXsXquvaa681o0ePNsYYc/DgQePp6WmOHDni1qZ///5mxowZbrXv3bvXNT8+Pt5VvzHGREVFmUceeaTY/W/durV56qmnXO+HDBlixowZU2x7AEDpcE8UAKDE+vTpo8zMTG3atEmnTp1Sy5YtFRERod69e2vs2LHKycnR6tWr1axZMzVu3Fg//fST8vPz1bNnT9c6vL291bVrV+3cudNt3Z07d3b9e9++fcrLy1O3bt1c08LCwtSqVavz1hgUFOR2xsrD438XXTRp0kQRERGu9z/++KMyMjIUHh7uto7s7GzXoBg7d+7U3Xff7Ta/e/fubmfkzufnn3+Ww+FQy5Yt3abn5ua6bdvf39/tPrIGDRooMTFRkpSYmKijR4+qf//+xW5n/PjxeuWVV/TAAw/oxIkTWrZsmVauXFniOgEAJUOIAgCUWPPmzdWoUSOtWrVKp06dUu/evSVJUVFRio6O1nfffadVq1apX79+ltcdEBBQJjV6eHi4LnE73zYyMjIK3ed1RmhoqKVtGmPcpuXn57ttx9PTU1u2bJGnp6dbu8DAQNe/vb293ebZbDbXev38/M5bx6hRo/TQQw9p/fr1+u677xQTE6PLL7+8xPsBACgZ7okCAFjSt29frV69WqtXr3Yb2vyKK67QsmXLtHHjRtf9ULGxsfLx8dG6detc7fLz87Vp0ya1bt262G3ExsbK29tbGzZscE07deqUdu/eXab7cumll+r48ePy8vJS8+bN3V5169aVJF188cVudUhyG0RDkiIiItzuRXI4HNq+fbvr/SWXXCKHw6HExMRC24mMjCxRrUFBQWratKkSEhKKbRMeHq5hw4Zp0aJFWrx4scaOHVuidQMArOFMFADAkr59+youLk75+fmuM1GS1Lt3b02cOFF5eXmuEBUQEKB77rlH06dPV1hYmBo3bqy5c+cqKytL48aNK3YbgYGBGjdunKZPn67w8HDVq1dPjzzyiNuleWVhwIAB6t69u4YNG6a5c+eqZcuWOnr0qD7//HNdd9116ty5syZNmqQxY8aoc+fO6tmzp9566y398ssvatasmWs9/fr109SpU/X5558rNjZW8+bNU2pqqmt+y5YtNXLkSI0aNUrPPvusLrnkEiUlJSkhIUHt27fX4MGDS1TvY489prvvvlv16tXToEGDlJ6ernXr1unee+91tRk/fryuueYaORwOjR49usw+KwDA/xCiAACW9O3bV9nZ2broootUv3591/TevXsrPT3dNRT6GU8++aScTqduu+02paenq3PnzlqxYoXq1Klzzu08/fTTysjI0JAhQxQUFKRp06bp9OnTZbovNptNX3zxhR555BGNHTtWSUlJioyM1BVXXOHatxEjRmjfvn164IEHlJOToxtuuEH33HOPVqxY4VrP7bffrh9//FGjRo2Sl5eXpkyZ4gqSZyxatEizZ8/WtGnTdOTIEdWtW1eXXXZZoWHJz2X06NHKycnR/Pnzdf/996tu3br661//6tZmwIABatCggdq0aaOoqKgL+HQAAMWxmbMv4gYAAOf02GOPaenSpa5h0quSjIwMNWzYUIsWLdL1119f2eUAQI3EmSgAAGoAp9OpkydP6tlnn1VoaKiGDh1a2SUBQI1FiAIAoAY4dOiQYmJi1KhRIy1evFheXvwXDwDlhcv5AAAAAMAChjgHAAAAAAsIUQAAAABgASEKAAAAACwgRAEAAACABYQoAAAAALCAEAUAAAAAFhCiAAAAAMACQhQAAAAAWPD/AZL+5K4m9xzEAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"o_word_count_values = list(o_word_count.values())\n",
"sl_word_count_values = list(sl_word_count.values())\n",
"sls_word_count_values = list(sls_word_count.values())\n",
"\n",
"# Plot the distribution\n",
"plt.figure(figsize=(10, 6))\n",
"plt.hist(\n",
" o_word_count_values,\n",
" bins=50,\n",
" color=\"blue\",\n",
" edgecolor=\"black\",\n",
" alpha=0.7,\n",
" label=\"Original\",\n",
")\n",
"plt.hist(\n",
" sl_word_count_values, bins=50, color=\"red\", edgecolor=\"black\", alpha=0.6, label=\"SL\"\n",
")\n",
"plt.hist(\n",
" sls_word_count_values,\n",
" bins=50,\n",
" color=\"yellow\",\n",
" edgecolor=\"black\",\n",
" alpha=0.4,\n",
" label=\"SLS\",\n",
")\n",
"plt.yscale(\"log\") # Optional: use log scale for y-axis if the distribution is skewed\n",
"plt.xlabel(\"Word Frequency\")\n",
"plt.ylabel(\"Number of Words\")\n",
"plt.title(\"Distribution of Word Frequency in Corpus\")\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"ββββββββββββ€ββββββββ€ββββββββββ€ββββββββββ€ββββββββββββ€ββββββββββββββββββββββββ\n",
"β β max β mean β std β n_words β avg_tokens/sentence β\n",
"ββββββββββββͺββββββββͺββββββββββͺββββββββββͺββββββββββββͺββββββββββββββββββββββββ‘\n",
"β Original β 12127 β 41.3419 β 367.982 β 3270 β 13.61 β\n",
"ββββββββββββΌββββββββΌββββββββββΌββββββββββΌββββββββββββΌββββββββββββββββββββββββ€\n",
"β SL β 7825 β 27.8919 β 224.392 β 3248 β 9.12041 β\n",
"ββββββββββββΌββββββββΌββββββββββΌββββββββββΌββββββββββββΌββββββββββββββββββββββββ€\n",
"β SLS β 7825 β 28.2397 β 229.139 β 3208 β 9.12041 β\n",
"ββββββββββββ§ββββββββ§ββββββββββ§ββββββββββ§ββββββββββββ§ββββββββββββββββββββββββ\n"
]
}
],
"source": [
"import numpy as np\n",
"from tabulate import tabulate\n",
"\n",
"word_distributions = np.array(\n",
" [\n",
" [\"\", \"max\", \"mean\", \"std\", \"n_words\", \"avg_tokens/sentence\"],\n",
" [\n",
" \"Original\",\n",
" np.max(o_word_count_values),\n",
" np.mean(o_word_count_values),\n",
" np.std(o_word_count_values),\n",
" len(o_word_count),\n",
" np.mean([len(sentence) for sentence in o_sentences]),\n",
" ],\n",
" [\n",
" \"SL\",\n",
" np.max(sl_word_count_values),\n",
" np.mean(sl_word_count_values),\n",
" np.std(sl_word_count_values),\n",
" len(sl_word_count),\n",
" np.mean([len(sentence) for sentence in sl_sentences]),\n",
" ],\n",
" [\n",
" \"SLS\",\n",
" np.max(sls_word_count_values),\n",
" np.mean(sls_word_count_values),\n",
" np.std(sls_word_count_values),\n",
" len(sls_word_count),\n",
" np.mean([len(sentence) for sentence in sls_sentences]),\n",
" ],\n",
" ]\n",
")\n",
"\n",
"print(tabulate(word_distributions, headers=\"firstrow\", tablefmt=\"fancy_grid\"))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With the processing techniques, we were able to reduce :\n",
"\n",
"- Mean\n",
"- Standard Deviation (`std`)\n",
"- Number of words (`n_words`)\n",
"- Average Tokens per sentence (`avg_tokens/sentence`)\n"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
"o_label_count = Counter(sum(labels, []))\n",
"sl_label_count = Counter(sum(sl_labels, []))\n",
"sls_label_count = Counter(sum(sls_labels, []))"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(Counter({0: 113556, 1: 10836, 2: 10796}),\n",
" Counter({0: 68961, 1: 10836, 2: 10796}),\n",
" Counter({0: 68961, 1: 10836, 2: 10796}))"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"o_label_count, sl_label_count, sls_label_count"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Both **SL** and **SLS** have the same ratio for each of the labels therefore we will be comparing either one of them with the **O** corpus.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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tDT5+flp+vTplfb/4YcfdNVVV+nuu+9WWFiYrr/+eg0dOvSsV6sAAAAA2OvQoYMsFos2b95c6fubN29W06ZN1bJlS0lSo0aNaqWOBg0a2L22WCx2X8m75ZZbVFBQoA8//FCrV6/W6tWrJZ2atKKuuSw8lZWVKSsrS9HR0f8rxsND0dHRyszMrHTMlVdeqaysLFtY2rVrlxYvXqybbrqpyu2UlpaqqKjIbgEAAADqu+bNm+u6667Te++9pz/++MPuvdzcXH3yySeKjY2VxeRDpDp16qS1a9fatf300081qvHIkSPaunWrXnzxRQ0YMMD2VUJXcVl4Onz4sMrLyxUUFGTXHhQUpNzc3ErH3H333ZowYYL69OmjBg0aqH379urfv/8Zv7aXnJysgIAA2xIaGurU/QAAAADOVVOnTlVpaaliYmL07bffat++fVqyZImuu+46hYSE6NVXXzW9rocfflhbtmzR888/r23btmnu3LlKT0+XJNMB7O+aNm2q5s2b65///Kd27NihFStWKCEhwaF1OYPLJ4yojlWrVum1117Te++9p3Xr1mnBggX66quvNHHixCrHJCYmqrCw0Lbs27evDisGAABAfWUYdbs4omPHjlq7dq3atWunu+66S+3bt9dDDz2ka665RpmZmWrWrJnpdV100UWaP3++FixYoG7duun999+3zbbn4+PjUH0eHh769NNPlZWVpS5duujpp5/WpEmTHFqXM1gMs3eIOVlZWZn8/Pw0f/58DRo0yNY+bNgwHT16VF988UWFMX379tUVV1xh9wObPXu2HnroIR07dkweHmfPgkVFRQoICFBhYaH8/f2dsi815WAQRy1xzRkBAADOVX/++ad2796tiy66SL6+vq4ux628+uqrSktLc+kFjDMdn+pmA5ddefL29lbPnj3tpiG0Wq22pxlX5vjx4xUCkqenpyTzs4QAAAAAqB3vvfeefvrpJ+3atUuzZs3SpEmTNGzYMFeX5TRertx4QkKChg0bpoiICEVGRio1NVUlJSWKj4+XJMXFxSkkJETJycmSTs20kZKSoh49eigqKko7duzQSy+9pFtuucUWogAAAAC4xvbt2/XKK6+ooKBAF154oUaPHq3ExERXl+U0Lg1PsbGxys/P17hx45Sbm6vw8HAtWbLENolEdna23ZWmF198URaLRS+++KIOHDigli1b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",
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"o_label_ratio = [c / sum(o_label_count.values()) for c in o_label_count.values()]\n",
"sl_label_ratio = [c / sum(sl_label_count.values()) for c in sl_label_count.values()]\n",
"\n",
"x = np.arange(len(unique_labels))\n",
"bar_width = 0.4\n",
"\n",
"o_label_x = [i - (bar_width / 2) for i in o_label_count.keys()]\n",
"sl_label_x = [i + (bar_width / 2) for i in sl_label_count.keys()]\n",
"\n",
"fig = plt.figure(figsize=(10, 6))\n",
"\n",
"# Creating a bar plot\n",
"plt.bar(sl_label_x, sl_label_ratio, color=\"red\", width=0.4, label=\"SL\")\n",
"plt.bar(o_label_x, o_label_ratio, color=\"blue\", width=0.4, label=\"Original\")\n",
"plt.xlabel(\"Labels\")\n",
"plt.ylabel(\"Frequency\")\n",
"plt.title(\"Label Distribution\")\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Processing the sentences helped used increase the amount of classes representation as well as decrease the ratio of \"Outside\" words whilst keeping the \"Normal\" representation.\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "venv",
"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.12.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
|