File size: 32,326 Bytes
2b62dc4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "3773101f-4a16-4a7f-aef7-f0bff19ec326",
   "metadata": {},
   "outputs": [],
   "source": [
    "from datasets import load_dataset\n",
    "from models.unigram_trainer import UnigramTrainer\n",
    "from transformers import PreTrainedTokenizerFast\n",
    "from phonemizer import phonemize\n",
    "from phonemizer.separator import Separator"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7579cb9d-993b-441d-b026-5e449fa4f92a",
   "metadata": {},
   "source": [
    "### Loading the training dataset\n",
    "\n",
    "- `combined_hibn_corpus`: Bilingual (hi + bn) Corpus\n",
    "- `combined_hibn_phonemized_corpus`: Bilingual (hi + bn) Phonemized Corpus\n",
    "\n",
    "Both the corpus have word-to-word correspondences between the native and phonemized text. One thing to note is that phonemized version doesn't have any punctuation (TODO: Resolve later).\n",
    "\n",
    "This notebook has sample usage for combined corpus. \n",
    "\n",
    "To separate the corpus into individual languages into different folders (required in case of training a monolingual tokenizer), use the following -\n",
    "- `combined_hibn_corpus` has both Hindi and Bengali text files in the form `sample_XXX.txt` and `bn_sample_XXX.txt` respectively.\n",
    "- `combined_hibn_phonemized_corpus` has both Hindi and Bengali text files in the form `phn_sample_XXX.txt` and `bn_phn_sample_XXX.txt` respectively."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "f046073d-be7f-4af9-83e7-e91ab9141eb0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 152 ms, sys: 242 ms, total: 394 ms\n",
      "Wall time: 3.43 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "# Native language corpus\n",
    "\n",
    "ds = load_dataset(\"parquet\", data_files={'train': 'data/combined_hibn_corpus.parquet'})\n",
    "ds = ds['train'] # Select the train split (All data in the directory is loaded as train split if not otherwise specified)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f189f6a6-01cc-42dc-b376-33b1dfd702b2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 66.4 ms, sys: 81.8 ms, total: 148 ms\n",
      "Wall time: 2.21 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "# Phonemized language corpus\n",
    "\n",
    "phon_ds = load_dataset(\"parquet\", data_files={'train': 'data/combined_hibn_phonemized_corpus.parquet'})\n",
    "phon_ds = phon_ds['train']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c0720ca4-3047-4ce6-85b7-bac28de3926b",
   "metadata": {},
   "source": [
    "### Trainer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "dd932096-bc5d-47d0-873c-7415c677b54a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "CPU times: user 1h 16min 23s, sys: 3min 36s, total: 1h 20min\n",
      "Wall time: 6min 14s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "# Train a native lang tokenizer, change dataset = ds and save it to an output directory\n",
    "UnigramTrainer(dataset=ds, vocab_size=8000, batch_size=10000, output_dir=\"hibn_unigramtokenizer_8k\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "b4139763-fefe-4ddf-96f1-d42628b22124",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "CPU times: user 40min 2s, sys: 39.5 s, total: 40min 41s\n",
      "Wall time: 3min 1s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "# Train a phonemized lang tokenizer, change dataset = phon_ds\n",
    "UnigramTrainer(dataset=phon_ds, vocab_size=8000, batch_size=10000, output_dir=\"hibn_phn_unigramtokenizer_8k\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "38363765-6eef-4d69-ab40-91b17bd9668e",
   "metadata": {},
   "source": [
    "### Load the trained tokenizers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "2f1fcbd1-e56c-49ec-a0f1-e17b4198f488",
   "metadata": {},
   "outputs": [],
   "source": [
    "baseline_tokenizer = PreTrainedTokenizerFast.from_pretrained(\"hibn_unigramtokenizer_8k\") # input directory for the saved tokenizer\n",
    "phoneme_tokenizer = PreTrainedTokenizerFast.from_pretrained(\"hibn_phn_unigramtokenizer_8k\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6541d07b-66bc-4fa9-b015-171dab7ffac6",
   "metadata": {},
   "source": [
    "### Testing the tokenizers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "86f819b4-d3ac-456a-8b69-1dc8143dc195",
   "metadata": {},
   "outputs": [],
   "source": [
    "test_string_hi = 'बहुत ही पुरानी बात है,ये कहानी है सुन्दर फूलों की दुनिया की है जहा बहुत से सुन्दर सुन्दर  फूल है जो आपस में बाते करते है खेलते है और बहुत खुश रहते है  एक सुंदर जगह जहां हर किसी फूल का दिल खुश था। जो एक अनोखी दुनिया है जो फूलों से महकती है। उसी सुन्दर जगह में बहुत सुन्दर गुलाब नाम का फूल रहता था। गुलाब, जैसा कि उसका नाम है, फूलों के के बीच रहने रहने वाला बहुत प्यार फूल था। उसका सपना था कि वह सभी फूलों की दुनिया में घूमे और और उन्हें देखे वे कितने सुन्दर है जो उसके ही जैसे है वह उनसे बातें करे।'\n",
    "test_string_bn = 'এখনই তো খাবার বয়স, অথচ পকেটমানি জোটে না। ওদিকে হিরুদা আর ধীরুদার গলায় গলায় বন্ধুত্ব। কেন ওদের জুটি অটুট তাও জানে বিল্টু-মিল্টু। ওরা ভোজনা বাড়িতে বিনা নিমন্ত্রণে, বিনামূল্যে গান্ডে পিন্ডে গিলে আসে। অনুষ্ঠানের হলের আশেপাশে ঘাপটি মেরে অপেক্ষা করে, যেই কনেযাত্রী বা বরযাত্রীর দল ঢোকে, ওদের সঙ্গে মিশে যায়। কোন তরফের অতিথি কেউ বুঝতে পারেনা।ভোলাদার চায়ের দোকানের ঠেকে ব্যঙ্গ করে হীরুদা বলে, মজার খবর বোম্বাইের এক রেস্টুরেন্টে খাবারের বিল না মেটানোর জন্য কাপ-ডিশ ধুইয়ে ছেড়ে দিয়েছে। বিল্টু, মিল্টুকে বলে এইরকম একটা রেস্টুরেন্ট যদি এখানে থাকত বেশি বেশি করে ডিশ ধুয়ে দিতাম। হিরুদা খবর পরিবেশন করল, অনাবাসী কয়েকজন ভারতীয় ম্যাগনাম রেস্টুরেন্ট খুলেছে। সেখানে নাকি বিল মেটাতে পারেনি বলে, জামা খুলে জমা রেখেছে। বিল মিটিয়ে জামা ফেরত নিতে হবে।ওরা রেস্টুরেন্টটা খুঁজে পেল। দেখতে পেল একধারে পুরনো জামা কাপড় সুন্দর করে ঝোলানো আছে। তাহলে খবরটি মিথ্যে নয়। বেশি খাবারের অর্ডার দিল না প্রথম দিন রয়ে সয়ে খাওয়া ভাল। ম্যাগনাম আমাদের মাগনায় দেবে। কাউন্টারে দাম দেওয়ার সময় বলল, “আমাদের মানিব্যাগটা মনে হয় কোথাও পড়ে গেছে। দাম দিতে পারছি না, পরে দিয়ে যাব।” ম্যানেজার বলল, “ঠিক আছে ভাই তোমাদের জামাটা খুলে রেখে যাও পয়সা দিয়ে নিয়ে যেও।” বাইরে এসে বিল্টু বলে, “কেন তোকে বলেছিলাম রঙিন গেঞ্জি পড়ে আসতে এখন বুঝলি?” মিল্টু বলে, “রাস্তার লোকরা জানতে পারবেনা আমরা জামা রেস্টুরেন্টে বন্ধক রেখেছি।” খুব খুশি। এত দিনে মনের মতো একটা রেস্টুরেন্ট হয়েছে। যুগ যুগ জিও। কিছুদিনের মধ্যেই ওরা আবার হাজির। দেখলো ওদের জামাগুলো টাঙানো আছে। ভারিক্কি গলায় ভাল ভাল খাবারের অর্ডার দিল। বেয়ারা একগ্লাস শরবত ধরিয়ে দিয়ে বলে, “ম্যনেজার সাহেব বলেছেন খাবার তৈরি করতে একটু সময় লাগবে। আপনারা ততক্ষণ বিনি পয়সার শরবত খান।”শরবত অর্ধেক শেষ হয়েছে। পেট মোচড় দিয়ে উঠল। আর থাকতে পারছে না দুজনেই ছুটল বাথরুমে। ম্যনেজার বাথরুমে তালা লাগিয়ে বলে, “আমাদের ফটো আইডেন্টি মেশিনে ধরা পড়েছে, বিল মেটাওনি। পুলিশে খবর দেওয়া হয়েছে। ওরাই ব্যবস্থা নেবে।'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "dfc81392-1576-4071-9dff-b4abd5403b99",
   "metadata": {},
   "outputs": [],
   "source": [
    "# phonemize both the test strings\n",
    "# phonemize func takes input as a list of strings instead of a single string, input is [test_string_hi]\n",
    "# The output is also a list, to access the phonemized string, use phonemized_hi[0]\n",
    "\n",
    "phonemized_hi = phonemize(\n",
    "            [test_string_hi],\n",
    "            language = 'hi',\n",
    "            backend = 'espeak',\n",
    "            separator = Separator(phone = None, word = ' ', syllable = None),\n",
    "            strip = True,\n",
    "            language_switch='remove-flags',\n",
    "            preserve_punctuation = True,\n",
    "            njobs = 1\n",
    "        )\n",
    "\n",
    "phonemized_bn = phonemize(\n",
    "            [test_string_bn],\n",
    "            language = 'bn',\n",
    "            backend = 'espeak',\n",
    "            separator = Separator(phone = None, word = ' ', syllable = None),\n",
    "            strip = True,\n",
    "            language_switch='remove-flags',\n",
    "            preserve_punctuation = True,\n",
    "            njobs = 1\n",
    "        )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "b6526118-9c93-481d-9e14-081be9d2300b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of Hindi words: 111\n",
      "Number of phonemized Hindi words: 111\n",
      "Number of Bengali words: 290\n",
      "Number of phonemized Bengali words: 292\n"
     ]
    }
   ],
   "source": [
    "# Hindi test\n",
    "\n",
    "hi_words = test_string_hi.split()\n",
    "hi_phn_words = phonemized_hi[0].split()\n",
    "print(\"Number of Hindi words:\",len(hi_words))\n",
    "print(\"Number of phonemized Hindi words:\",len(hi_phn_words))\n",
    "\n",
    "# Bengali test\n",
    "\n",
    "bn_words = test_string_bn.split()\n",
    "bn_phn_words = phonemized_bn[0].split()\n",
    "print(\"Number of Bengali words:\",len(bn_words))\n",
    "print(\"Number of phonemized Bengali words:\",len(bn_phn_words))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4de575f5-45e8-4a7c-b98b-1804aa29948a",
   "metadata": {},
   "source": [
    "#### Test on Hindi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "144aba82-0ae6-4fdb-b651-9398fdd8b59c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of baseline tokens: 143\n",
      "['▁बहुत', '▁ही', '▁पुरानी', '▁बात', '▁है,', 'ये', '▁कहानी', '▁है', '▁सु', 'न्द', 'र', '▁फूल', 'ों', '▁की', '▁दुनिया', '▁की', '▁है', '▁ज', 'हा', '▁बहुत', '▁से', '▁सु', 'न्द', 'र', '▁सु', 'न्द', 'र', '▁फूल', '▁है', '▁जो', '▁आप', 'स', '▁में', '▁बात', 'े', '▁करते', '▁है', '▁खेल', 'ते', '▁है', '▁और', '▁बहुत', '▁खुश', '▁रहते', '▁है', '▁एक', '▁सुंदर', '▁जगह', '▁जहां', '▁हर', '▁किसी', '▁फूल', '▁का', '▁दिल', '▁खुश', '▁था।', '▁जो', '▁एक', '▁अन', 'ो', 'ख', 'ी', '▁दुनिया', '▁है', '▁जो', '▁फूल', 'ों', '▁से', '▁मह', 'क', 'ती', '▁है।', '▁उसी', '▁सु', 'न्द', 'र', '▁जगह', '▁में', '▁बहुत', '▁सु', 'न्द', 'र', '▁गुलाब', '▁नाम', '▁का', '▁फूल', '▁रहता', '▁था।', '▁गुलाब', ',', '▁जैसा', '▁कि', '▁उसका', '▁नाम', '▁है,', '▁फूल', 'ों', '▁के', '▁के', '▁बीच', '▁रहने', '▁रहने', '▁वाला', '▁बहुत', '▁प्यार', '▁फूल', '▁था।', '▁उसका', '▁सपना', '▁था', '▁कि', '▁वह', '▁सभी', '▁फूल', 'ों', '▁की', '▁दुनिया', '▁में', '▁घूम', 'े', '▁और', '▁और', '▁उन्हें', '▁देख', 'े', '▁वे', '▁कितने', '▁सु', 'न्द', 'र', '▁है', '▁जो', '▁उसके', '▁ही', '▁जैसे', '▁है', '▁वह', '▁उनसे', '▁बातें', '▁करे', '।']\n",
      "Number of phoneme tokens: 139\n",
      "['▁bʌhʊt', '▁hi', '▁pʊɾaːni', '▁baːt', '▁hɛː', ',', 'jeː', '▁kəhaːni', '▁hɛː', '▁sʊn', 'dəɾ', '▁phuːl', 'õ', '▁ki', '▁dʊnɪjaː', '▁ki', '▁hɛː', '▁ɟʌ', 'haː', '▁bʌhʊt', '▁seː', '▁sʊn', 'dəɾ', '▁sʊn', 'dəɾ', '▁phuːl', '▁hɛː', '▁ɟoː', '▁aːp', 'əs', '▁mẽː', '▁baːt', 'eː', '▁kʌɾteː', '▁hɛː', '▁kheːl', 'teː', '▁hɛː', '▁ɔːɾ', '▁bʌhʊt', '▁khʊʃ', '▁ɾʌhəteː', '▁hɛː', '▁eːk', '▁sũdəɾ', '▁ɟʌɡəh', '▁ɟʌhã', '▁hʌɾ', '▁kɪsi', '▁phuːl', '▁kaː', '▁dɪl', '▁khʊʃ', '▁thaː', '▁ɟoː', '▁eːk', '▁ʌnoːkh', 'i', '▁dʊnɪjaː', '▁hɛː', '▁ɟoː', '▁phuːl', 'õ', '▁seː', '▁mʌhə', 'kti', '▁hɛː', '▁ʊsi', '▁sʊn', 'dəɾ', '▁ɟʌɡəh', '▁mẽː', '▁bʌhʊt', '▁sʊn', 'dəɾ', '▁ɡʊlaːb', '▁naːm', '▁kaː', '▁phuːl', '▁ɾʌhət', 'aː', '▁thaː', '▁ɡʊlaːb', ',', '▁ɟɛːsaː', '▁kɪ', '▁ʊskaː', '▁naːm', '▁hɛː', ',', '▁phuːl', 'õ', '▁keː', '▁keː', '▁biːc', '▁ɾʌhəneː', '▁ɾʌhəneː', '▁ʋaːlaː', '▁bʌhʊt', '▁pːjaːɾ', '▁phuːl', '▁thaː', '▁ʊskaː', '▁', 'sʌpnaː', '▁thaː', '▁kɪ', '▁ʋəh', '▁sʌbhi', '▁phuːl', 'õ', '▁ki', '▁dʊnɪjaː', '▁mẽː', '▁ɡhuːm', 'eː', '▁ɔːɾ', '▁ɔːɾ', '▁ʊnhẽː', '▁deːkh', 'eː', '▁ʋeː', '▁', 'kɪtneː', '▁sʊn', 'dəɾ', '▁hɛː', '▁ɟoː', '▁ʊskeː', '▁hi', '▁ɟɛːseː', '▁hɛː', '▁ʋəh', '▁', 'ʊnseː', '▁baːtẽː', '▁kʌɾeː']\n"
     ]
    }
   ],
   "source": [
    "print(\"Number of baseline tokens:\",len(baseline_tokenizer.encode(test_string_hi)))\n",
    "print(baseline_tokenizer.tokenize(test_string_hi))\n",
    "print(\"Number of phoneme tokens:\",len(phoneme_tokenizer.encode(phonemized_hi[0])))\n",
    "print(phoneme_tokenizer.tokenize(phonemized_hi[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b5a681b3-878c-43fd-be33-7ad2fcd4b038",
   "metadata": {},
   "source": [
    "#### Test on Bengali"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "3ba25cb3-81ea-46ec-99c7-df0a217cc00c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of baseline tokens: 631\n",
      "['▁এখন', 'ই', '▁তো', '▁খাবার', '▁বয়স', ',', '▁অথচ', '▁প', 'কে', 'ট', 'মান', 'ি', '▁জো', 'টে', '▁না।', '▁ও', 'দিকে', '▁হি', 'রু', 'দা', '▁আর', '▁ধ', 'ী', 'রু', 'দার', '▁গ', 'লায়', '▁গ', 'লায়', '▁বন্ধু', 'ত্ব', '।', '▁কেন', '▁ও', 'দের', '▁জু', 'টি', '▁অ', 'টু', 'ট', '▁তা', 'ও', '▁জা', 'নে', '▁বি', 'ল্ট', 'ু', '-', 'মি', 'ল্ট', 'ু', '।', '▁ও', 'রা', '▁', 'ভো', 'জ', 'না', '▁বাড়িতে', '▁বি', 'না', '▁নি', 'ম', 'ন্ত্র', 'ণ', 'ে', ',', '▁বিনামূল্যে', '▁গা', 'ন্ড', 'ে', '▁পি', 'ন্ড', 'ে', '▁', 'গি', 'লে', '▁আসে', '।', '▁অনুষ্ঠানে', 'র', '▁হলে', 'র', '▁আ', 'শে', 'পা', 'শে', '▁ঘ', 'া', 'প', 'টি', '▁মে', 'রে', '▁অপেক্ষা', '▁করে', ',', '▁যে', 'ই', '▁কন', 'ে', 'যা', 'ত্রী', '▁বা', '▁বর', 'যা', 'ত্রী', 'র', '▁দল', '▁ঢে', 'া', 'কে', ',', '▁ও', 'দের', '▁সঙ্গে', '▁মি', 'শে', '▁যায়।', '▁কোন', '▁তর', 'ফ', 'ের', '▁অতিথি', '▁কেউ', '▁বুঝতে', '▁পারেন', 'া।', 'ভো', 'লা', 'দার', '▁চায়', 'ের', '▁দোকান', 'ের', '▁', 'ঠ', 'ে', 'কে', '▁', 'ব্য', 'ঙ্গ', '▁করে', '▁হ', 'ী', 'রু', 'দা', '▁বলে', ',', '▁ম', 'জার', '▁খবর', '▁বো', 'ম্ব', 'াই', 'ের', '▁এক', '▁রে', 'স্ট', 'ুর', 'েন্ট', 'ে', '▁খাবার', 'ের', '▁বিল', '▁না', '▁মে', 'ট', 'ানোর', '▁জন্য', '▁কা', 'প', '-', 'ডি', 'শ', '▁', 'ধু', 'ই', 'য়ে', '▁ছেড়ে', '▁দিয়েছে', '।', '▁বি', 'ল্ট', 'ু', ',', '▁মি', 'ল্ট', 'ু', 'কে', '▁বলে', '▁এই', 'রকম', '▁একটা', '▁রে', 'স্ট', 'ুর', 'েন্ট', '▁যদি', '▁এখানে', '▁থাক', 'ত', '▁বেশি', '▁বেশি', '▁করে', '▁ডি', 'শ', '▁', 'ধু', 'য়ে', '▁দি', 'তা', 'ম', '।', '▁হি', 'রু', 'দা', '▁খবর', '▁পরিবেশ', 'ন', '▁কর', 'ল,', '▁অ', 'না', 'বাসী', '▁কয়েকজন', '▁ভারতীয়', '▁ম্যা', 'গ', 'না', 'ম', '▁রে', 'স্ট', 'ুর', 'েন্ট', '▁খুলে', 'ছে।', '▁সেখানে', '▁নাকি', '▁বিল', '▁মে', 'টা', 'তে', '▁পারেন', 'ি', '▁বলে', ',', '▁জা', 'মা', '▁খুলে', '▁জমা', '▁রেখে', 'ছে।', '▁বিল', '▁মি', 'টি', 'য়ে', '▁জা', 'মা', '▁ফের', 'ত', '▁নিতে', '▁হবে।', 'ও', 'রা', '▁রে', 'স্ট', 'ুর', 'েন্ট', 'টা', '▁খুঁজে', '▁পে', 'ল', '।', '▁দেখতে', '▁পে', 'ল', '▁এক', 'ধার', 'ে', '▁', 'পুর', 'নো', '▁জা', 'মা', '▁কাপড়', '▁সুন্দর', '▁করে', '▁ঝ', 'ে', 'াল', 'ানো', '▁আছে।', '▁তাহলে', '▁খবর', 'টি', '▁মি', 'থ', '্য', 'ে', '▁নয়।', '▁বেশি', '▁খাবার', 'ের', '▁অ', 'র্', 'ডার', '▁দিল', '▁না', '▁প্রথম', '▁দিন', '▁', 'র', 'য়ে', '▁স', 'য়ে', '▁খাওয়া', '▁ভাল', '।', '▁ম্যা', 'গ', 'না', 'ম', '▁আমাদের', '▁মা', 'গ', 'নায়', '▁দেবে', '।', '▁', 'কাউন্ট', 'ার', 'ে', '▁দাম', '▁দেওয়ার', '▁সময়', '▁বল', 'ল,', '▁', '“', 'আ', 'মা', 'দের', '▁মা', 'নি', 'ব', '্যা', 'গ', 'টা', '▁মনে', '▁হয়', '▁কোথাও', '▁পড়ে', '▁গেছে।', '▁দাম', '▁দিতে', '▁পার', 'ছি', '▁না,', '▁পরে', '▁দিয়ে', '▁যা', 'ব', '।', '”', '▁ম্যানেজার', '▁বল', 'ল,', '▁', '“', 'ঠ', 'িক', '▁আছে', '▁ভাই', '▁তোমাদের', '▁জা', 'মা', 'টা', '▁খুলে', '▁রেখে', '▁যা', 'ও', '▁প', 'য়', 'সা', '▁দিয়ে', '▁নিয়ে', '▁যে', 'ও', '।', '”', '▁বাইরে', '▁এসে', '▁বি', 'ল্ট', 'ু', '▁বলে', ',', '▁', '“', 'কে', 'ন', '▁তো', 'কে', '▁বলে', 'ছিলাম', '▁রঙ', 'িন', '▁গে', 'ঞ্জ', 'ি', '▁পড়ে', '▁আসতে', '▁এখন', '▁বুঝ', 'লি', '?', '”', '▁মি', 'ল্ট', 'ু', '▁বলে', ',', '▁', '“', 'রা', 'স্তা', 'র', '▁লোক', 'রা', '▁জানতে', '▁পারবেন', 'া', '▁আমরা', '▁জা', 'মা', '▁রে', 'স্ট', 'ুর', 'েন্ট', 'ে', '▁বন্ধ', 'ক', '▁রেখে', 'ছি।', '”', '▁খুব', '▁খুশি', '।', '▁এত', '▁দিন', 'ে', '▁মনে', 'র', '▁মতো', '▁একটা', '▁রে', 'স্ট', 'ুর', 'েন্ট', '▁হয়েছে।', '▁যুগ', '▁যুগ', '▁জি', 'ও', '।', '▁কিছু', 'দিন', 'ের', '▁মধ্যে', 'ই', '▁ও', 'রা', '▁আবার', '▁হা', 'জি', 'র', '।', '▁দেখলে', 'া', '▁ও', 'দের', '▁জা', 'মা', 'গুলো', '▁', 'টা', 'ঙ', 'ানো', '▁আছে।', '▁', 'ভার', 'িক', '্', 'কি', '▁গ', 'লায়', '▁ভাল', '▁ভাল', '▁খাবার', 'ের', '▁অ', 'র্', 'ডার', '▁দিল', '।', '▁বে', 'য়া', 'রা', '▁এক', 'গ্ল', 'াস', '▁শ', 'র', 'ব', 'ত', '▁ধর', 'িয়ে', '▁দিয়ে', '▁বলে', ',', '▁', '“', 'ম', '্য', 'নে', 'জার', '▁সাহেব', '▁বলেছেন', '▁খাবার', '▁তৈরি', '▁করতে', '▁একটু', '▁সময়', '▁লাগবে', '।', '▁আপনার', 'া', '▁তত', 'ক্ষণ', '▁বি', 'নি', '▁প', 'য়', 'সার', '▁শ', 'র', 'ব', 'ত', '▁খান', '।', '”', 'শ', 'র', 'ব', 'ত', '▁অ', 'র্ধ', 'ে', 'ক', '▁শেষ', '▁হয়েছে।', '▁পে', 'ট', '▁মো', 'চ', 'ড়', '▁দিয়ে', '▁উঠল', '।', '▁আর', '▁থাকতে', '▁পার', 'ছে', '▁না', '▁দুজন', 'েই', '▁', 'ছু', 'ট', 'ল', '▁বা', 'থ', 'রু', 'মে', '।', '▁ম', '্য', 'নে', 'জার', '▁বা', 'থ', 'রু', 'মে', '▁তা', 'লা', '▁লাগিয়ে', '▁বলে', ',', '▁', '“', 'আ', 'মা', 'দের', '▁ফ', 'টো', '▁আই', 'ডে', 'ন্টি', '▁মেশিন', 'ে', '▁ধরা', '▁পড়েছে', ',', '▁বিল', '▁মে', 'টা', 'ও', 'নি।', '▁পুলিশ', 'ে', '▁খবর', '▁দেওয়া', '▁হয়েছে।', '▁ও', 'রা', 'ই', '▁ব্যবস্থা', '▁নেবে', '।']\n",
      "Number of phoneme tokens: 604\n",
      "['▁', 'ekhɔnɔi', '▁to', '▁khabaɾ', '▁bɔjɔʃ', ',', '▁', 'ɔːthoco', '▁p', 'ɔke', 'ʈ', 'ɔman', 'i', '▁ɟo', 'ʈ', 'e', '▁na', '▁oː', 'di', 'ke', '▁hi', 'ɾ', 'u', 'da', '▁aɾ', '▁', 'dhi', 'ɾ', 'u', 'daɾ', '▁ɡɔla', 'j', 'o', '▁ɡɔla', 'j', 'o', '▁bondhu', 'tbɔ', '▁ken', '▁oː', 'deɾ', '▁ɟu', 'ʈi', '▁', 'o', 'ʈ', 'uʈ', '▁ta', 'oː', '▁ɟane', '▁bil', 'ʈu', 'mil', 'ʈu', '▁oːɾ', 'a', '▁bho', 'ɟɔn', 'a', '▁bar.', 'ite', '▁bi', 'na', '▁ni', 'mɔn', 'tɾɔ', 'n', 'e', ',', '▁binamulle', '▁ɡa', 'nɖe', '▁pi', 'nɖe', '▁ɡ', 'ile', '▁aʃe', '▁onuʃʈhane', 'ɾ', '▁hɔle', 'ɾ', '▁aʃe', 'paʃ', 'e', '▁ɡh', 'a', 'p', 'ɔʈi', '▁meɾ', 'e', '▁ɔpekhkha', '▁kɔɾe', ',', '▁dʒe', 'i', '▁kɔn', 'e', 'dʒa', 'tɾi', '▁ba', '▁bɔɾ', 'ɔ', 'dʒa', 'tɾi', 'ɾ', '▁dɔl', '▁ɖh', 'o', 'ke', ',', '▁oː', 'deɾ', '▁ʃɔŋɡe', '▁miʃ', 'e', '▁dʒaj', 'o', '▁kon', '▁tɔɾɔf', 'eɾ', '▁otithi', '▁kew', '▁buɟhɔte', '▁paɾen', 'a', '▁bho', 'la', 'daɾ', '▁tʃa', 'eɾ', '▁dokan', 'eɾ', '▁', 'ʈhe', 'ke', '▁bæ', 'ŋɡɔ', '▁kɔɾe', '▁hi', 'ɾ', 'u', 'da', '▁bɔle', ',', '▁mɔɟa', 'ɾ', '▁khɔbɔɾ', '▁bo', 'm', 'ba', 'i', 'ɾ', '▁ek', '▁ɾeʃʈuɾenʈe', '▁khabaɾ', 'eɾ', '▁bil', '▁na', '▁me', 'ʈ', 'anoɾ', '▁ɟɔnnɔ', '▁ka', 'pɔ', 'ɖi', 'ʃ', '▁', 'dhu', 'i', '▁tʃher.', '▁ditʃhe', '▁bil', 'ʈu', ',', '▁mil', 'ʈu', 'ke', '▁bɔle', '▁ei', 'ɾɔkɔm', '▁ækʈaː', '▁', 'ɾeʃ', 'ʈ', 'uɾ', 'enʈɔ', '▁dʒodi', '▁ekhane', '▁thak', 'ɔto', '▁beʃi', '▁beʃi', '▁kɔɾe', '▁ɖi', 'ʃ', '▁', 'dhu', 'e', '▁di', 'ta', 'm', '▁hi', 'ɾ', 'u', 'da', '▁khɔbɔɾ', '▁poɾibeʃ', 'ɔn', '▁kɔɾɔl', ',', '▁', 'ɔna', 'baʃi', '▁kɔkɔɟɔn', '▁bhaɾɔtij', '▁mæ', 'ɡɔn', 'am', '▁', 'ɾeʃ', 'ʈ', 'uɾ', 'enʈɔ', '▁khule', 'tʃhe', '▁ʃekhane', '▁naki', '▁bil', '▁me', 'ʈa', 'te', '▁paɾen', 'i', '▁bɔle', ',', '▁ɟama', '▁khule', '▁ɟɔma', '▁ɾekhetʃhe', '▁bil', '▁mi', 'ʈi', 'e', '▁ɟama', '▁', 'feɾɔto', '▁nite', '▁hɔbe', '▁oːɾ', 'a', '▁', 'ɾeʃ', 'ʈ', 'uɾ', 'enʈɔ', 'ʈa', '▁khũɟe', '▁pe', 'l', '▁dekhɔte', '▁pe', 'l', '▁ekɔ', 'dha', 'ɾ', 'e', '▁puɾɔn', 'o', '▁ɟama', '▁kapɔr.', '▁ʃundɔɾ', '▁kɔɾe', '▁ɟh', 'o', 'l', 'ano', '▁atʃhe', '▁tahɔle', '▁khɔbɔɾ', 'ɔʈi', '▁mi', 'th', 'ː', 'e', '▁nɔj', 'o', '▁beʃi', '▁khabaɾ', 'eɾ', '▁', 'ɔɾɖ', 'aɾ', '▁di', 'l', '▁na', '▁pɾothɔm', '▁din', '▁ɾo', 'e', '▁ʃɔ', 'e', '▁khaoː', 'a', '▁bhal', '▁mæ', 'ɡɔn', 'am', '▁amadeɾ', '▁ma', 'ɡɔn', 'aj', 'o', '▁debe', '▁ka', 'un', 'ʈaɾ', 'e', '▁dam', '▁deoːɾ', '▁ʃɔmɔj', '▁bɔlɔl', ',', '▁', '“', 'a', 'ma', 'deɾ', '▁man', 'i', 'bæ', 'ɡ', 'ɔʈa', '▁mɔne', '▁hɔj', '▁kothaoː', '▁pɔr.', '▁ɡetʃhe', '▁dam', '▁dite', '▁paɾɔtʃhi', '▁na', ',', '▁pɔɾe', '▁di', '▁dʒa', 'b', '”', '▁mæneɟaɾ', '▁bɔlɔl', ',', '▁', '“', 'ʈhi', 'k', '▁atʃhe', '▁bhai', '▁tomadeɾ', '▁ɟama', 'ʈa', '▁khule', '▁ɾekhe', '▁dʒaoː', '▁pɔ', 'j', 'ɔʃa', '▁di', 'e', '▁ni', 'e', '▁dʒe', 'oː', '”', '▁baiɾe', '▁eʃe', '▁bil', 'ʈu', '▁bɔle', ',', '▁', '“', 'ke', 'n', '▁to', 'ke', '▁bɔle', 'tʃhilam', '▁ɾo', 'ŋ', 'i', 'n', '▁ɡ', 'e', 'n', 'ɟi', '▁pɔr.', '▁aʃɔte', '▁ekhɔn', '▁buɟh', 'ɔl', 'i', '?”', '▁mil', 'ʈu', '▁bɔle', ',', '▁', '“', 'ɾ', 'a', 'sta', 'ɾ', '▁lok', 'ɔɾa', '▁ɟanɔte', '▁paɾɔben', 'a', '▁amɔɾa', '▁ɟama', '▁ɾeʃʈuɾenʈe', '▁bɔndhɔ', 'k', '▁ɾekhe', 'tʃhi', '”', '▁khub', '▁khuʃi', '▁', 'æto', '▁dine', '▁mɔne', 'ɾ', '▁mɔto', '▁ækʈaː', '▁', 'ɾeʃ', 'ʈ', 'uɾ', 'enʈɔ', '▁hɔ', 'e', 'tʃhe', '▁dʒuɡ', '▁dʒuɡ', '▁ɟi', 'oː', '▁kitʃhudin', 'eɾ', '▁', 'mɔdhdʒei', '▁oːɾ', 'a', '▁abaɾ', '▁ha', 'ɟi', 'ɾ', '▁dekh', 'ɔlo', '▁oː', 'deɾ', '▁ɟama', 'ɡulo', '▁ʈa', 'ŋ', 'ano', '▁atʃhe', '▁', 'bhaɾ', 'i', 'k', 'ki', '▁ɡɔla', 'j', 'o', '▁bhal', '▁bhal', '▁khabaɾ', 'eɾ', '▁', 'ɔɾɖ', 'aɾ', '▁di', 'l', '▁be', 'aɾ', 'a', '▁ekɔ', 'ɡ', 'laʃ', '▁ʃɔɾɔ', 'b', 'ɔto', '▁dho', 'ɾ', 'i', 'e', '▁di', 'e', '▁bɔle', ',', '▁', '“', 'm', 'æn', 'e', 'ɟaɾ', '▁ʃaheb', '▁bɔletʃhen', '▁khabaɾ', '▁tojɾi', '▁kɔɾɔte', '▁ekɔʈu', '▁ʃɔmɔj', 'o', '▁laɡɔbe', '▁apɔnaɾa', '▁tɔtɔ', 'khkhɔn', '▁bin', 'i', '▁pɔ', 'jɔ', 'ʃaɾ', '▁ʃɔɾɔ', 'b', 'ɔto', '▁khan', '”', 'ʃɔɾ', 'ɔbɔ', 'to', '▁ɔɾdhek', '▁ʃeʃ', '▁hɔtʃhe', '▁pe', 'ʈ', '▁mo', 'tʃɔ', 'r.', '▁di', '▁uʈhɔl', '▁aɾ', '▁thakɔte', '▁paɾ', 'ɔtʃhe', '▁na', '▁duɟɔn', 'e', 'i', '▁', 'tʃhu', 'ʈɔl', '▁ba', 'th', 'ɔɾum', 'e', '▁mæneɟaɾ', '▁ba', 'th', 'ɔɾum', 'e', '▁ta', 'la', '▁laɡi', 'e', '▁bɔle', ',', '▁', '“', 'a', 'ma', 'deɾ', '▁fɔʈo', '▁', 'aiɖ', 'e', 'n', 'ʈi', '▁meʃin', 'e', '▁dhɔɾa', '▁pɔr.', 'e', 'tʃhe', ',', '▁bil', '▁me', 'ʈa', 'oː', 'ni', '▁puliʃ', 'e', '▁khɔbɔɾ', '▁deoː', 'a', '▁hɔ', 'e', 'tʃhe', '▁oːɾ', 'a', 'i', '▁bæbɔstha', '▁nebe']\n"
     ]
    }
   ],
   "source": [
    "print(\"Number of baseline tokens:\",len(baseline_tokenizer.encode(test_string_bn)))\n",
    "print(baseline_tokenizer.tokenize(test_string_bn))\n",
    "print(\"Number of phoneme tokens:\",len(phoneme_tokenizer.encode(phonemized_bn[0])))\n",
    "print(phoneme_tokenizer.tokenize(phonemized_bn[0]))"
   ]
  }
 ],
 "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.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}