{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"## Import Libralies","metadata":{}},{"cell_type":"code","source":"import torch \nimport torch.nn as nn\nimport torchaudio\nimport torchaudio.transforms as tat\nimport numpy as np\nimport pandas as pd\nfrom datasets import load_dataset, load_metric, Audio\nimport os\n\nimport json\nfrom tqdm import tqdm\n\n\nfrom transformers import Trainer,TrainingArguments\nfrom transformers import Wav2Vec2FeatureExtractor,Wav2Vec2Processor, Wav2Vec2CTCTokenizer,Wav2Vec2ForCTC\n\nimport warnings\nwarnings.filterwarnings('ignore')","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:53:56.904036Z","iopub.execute_input":"2023-10-03T01:53:56.904498Z","iopub.status.idle":"2023-10-03T01:53:56.911620Z","shell.execute_reply.started":"2023-10-03T01:53:56.904464Z","shell.execute_reply":"2023-10-03T01:53:56.910149Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"torchaudio.set_audio_backend(\"soundfile\")\nSR = 16000 \ntorch.backends.cudnn.benchmark = True","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:53:56.913875Z","iopub.execute_input":"2023-10-03T01:53:56.914214Z","iopub.status.idle":"2023-10-03T01:53:56.930026Z","shell.execute_reply.started":"2023-10-03T01:53:56.914177Z","shell.execute_reply":"2023-10-03T01:53:56.928115Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_dir = f'/kaggle/input/hf-wav2vec2-0-train-baseline/ASR_Bengali/checkpoint-15000'","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:53:56.931531Z","iopub.execute_input":"2023-10-03T01:53:56.932628Z","iopub.status.idle":"2023-10-03T01:53:56.945691Z","shell.execute_reply.started":"2023-10-03T01:53:56.932595Z","shell.execute_reply":"2023-10-03T01:53:56.944419Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Load Dataset","metadata":{}},{"cell_type":"code","source":"df=pd.read_csv('/kaggle/input/bengaliai-speech/train.csv')","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:53:56.948007Z","iopub.execute_input":"2023-10-03T01:53:56.948570Z","iopub.status.idle":"2023-10-03T01:53:59.718280Z","shell.execute_reply.started":"2023-10-03T01:53:56.948540Z","shell.execute_reply":"2023-10-03T01:53:59.716632Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from glob import glob\ntrain_path='/kaggle/input/bengaliai-speech/train_mp3s'\ntest_path = '/kaggle/input/bengaliai-speech/test_mp3s'\npaths = glob(os.path.join(train_path,'*.mp3'))","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:53:59.720143Z","iopub.execute_input":"2023-10-03T01:53:59.720625Z","iopub.status.idle":"2023-10-03T01:54:32.648561Z","shell.execute_reply.started":"2023-10-03T01:53:59.720593Z","shell.execute_reply":"2023-10-03T01:54:32.647195Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"paths=paths[:5]","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:54:32.649608Z","iopub.execute_input":"2023-10-03T01:54:32.649909Z","iopub.status.idle":"2023-10-03T01:54:32.668978Z","shell.execute_reply.started":"2023-10-03T01:54:32.649888Z","shell.execute_reply":"2023-10-03T01:54:32.668027Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Loading the Model for Inference","metadata":{}},{"cell_type":"code","source":"tokenizer = Wav2Vec2CTCTokenizer(f\"/kaggle/input/hf-wav2vec2-0-preprocess-baseline/vocab_bengali.json\", unk_token=\"[UNK]\", pad_token=\"[PAD]\", word_delimiter_token=\"|\")\nfeature_extractor = Wav2Vec2FeatureExtractor(feature_size=1, sampling_rate=SR, padding_value=0.0, do_normalize=True, return_attention_mask=True)\nprocessor = Wav2Vec2Processor(feature_extractor=feature_extractor, tokenizer=tokenizer)","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:54:32.669812Z","iopub.execute_input":"2023-10-03T01:54:32.671023Z","iopub.status.idle":"2023-10-03T01:54:32.686972Z","shell.execute_reply.started":"2023-10-03T01:54:32.670981Z","shell.execute_reply":"2023-10-03T01:54:32.686070Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class W2v2Dataset(torch.utils.data.Dataset):\n    def __init__(self, paths):\n        self.paths = paths\n        self.resampler = tat.Resample(32000, SR)\n\n    def __getitem__(self, idx):\n        apath = self.paths[idx]\n        waveform, sample_rate = torchaudio.load(apath, format=\"mp3\")\n        waveform = self.resampler(waveform)\n        audio = processor(waveform.reshape(-1), sampling_rate=SR).input_values[0]   \n        \n        id_name = self.paths[idx].split(os.sep)[-1].replace('.mp3','')\n        \n        return audio, id_name\n\n    def __len__(self):\n        return len(self.paths)\n\ntest_dataset = W2v2Dataset(paths)","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:54:32.687913Z","iopub.execute_input":"2023-10-03T01:54:32.688096Z","iopub.status.idle":"2023-10-03T01:54:32.701561Z","shell.execute_reply.started":"2023-10-03T01:54:32.688080Z","shell.execute_reply":"2023-10-03T01:54:32.700575Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%capture\nmodel = Wav2Vec2ForCTC.from_pretrained(model_dir)\ndevice = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')\nmodel= model.to(device)","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:54:32.702463Z","iopub.execute_input":"2023-10-03T01:54:32.703033Z","iopub.status.idle":"2023-10-03T01:54:45.505019Z","shell.execute_reply.started":"2023-10-03T01:54:32.703013Z","shell.execute_reply":"2023-10-03T01:54:45.503998Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torch.utils.data import DataLoader\ntest_loader = DataLoader(test_dataset,\n                             batch_size=1,\n                             shuffle=False)","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:54:45.507558Z","iopub.execute_input":"2023-10-03T01:54:45.507811Z","iopub.status.idle":"2023-10-03T01:54:45.512838Z","shell.execute_reply.started":"2023-10-03T01:54:45.507791Z","shell.execute_reply":"2023-10-03T01:54:45.511819Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Inference","metadata":{}},{"cell_type":"code","source":"ids = []\nsentences = []","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:54:45.513936Z","iopub.execute_input":"2023-10-03T01:54:45.514185Z","iopub.status.idle":"2023-10-03T01:54:45.529952Z","shell.execute_reply.started":"2023-10-03T01:54:45.514164Z","shell.execute_reply":"2023-10-03T01:54:45.528889Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i, (aud, id_n) in enumerate(tqdm(test_loader)):\n    aud = aud.to(device)\n    logits = model(aud).logits\n    predicted_ids = torch.argmax(logits, dim=-1)\n    transcription = processor.decode(predicted_ids[0])\n    \n    transcription = transcription.replace('[UNK]', '').replace('[PAD]', '')\n    \n    ids.append(id_n[0])\n    sentences.append(transcription)","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:54:45.531164Z","iopub.execute_input":"2023-10-03T01:54:45.531646Z","iopub.status.idle":"2023-10-03T01:54:52.775259Z","shell.execute_reply.started":"2023-10-03T01:54:45.531621Z","shell.execute_reply":"2023-10-03T01:54:52.773941Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"original=[]\nfor i in ids:\n    original.append(df[df.id==i]['sentence'].values[0])","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:55:46.085339Z","iopub.execute_input":"2023-10-03T01:55:46.085841Z","iopub.status.idle":"2023-10-03T01:55:46.331977Z","shell.execute_reply.started":"2023-10-03T01:55:46.085805Z","shell.execute_reply":"2023-10-03T01:55:46.330040Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sentences","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:55:50.880910Z","iopub.execute_input":"2023-10-03T01:55:50.881225Z","iopub.status.idle":"2023-10-03T01:55:50.888848Z","shell.execute_reply.started":"2023-10-03T01:55:50.881201Z","shell.execute_reply":"2023-10-03T01:55:50.887144Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"original","metadata":{"execution":{"iopub.status.busy":"2023-10-03T01:55:52.075241Z","iopub.execute_input":"2023-10-03T01:55:52.075611Z","iopub.status.idle":"2023-10-03T01:55:52.082173Z","shell.execute_reply.started":"2023-10-03T01:55:52.075590Z","shell.execute_reply":"2023-10-03T01:55:52.081305Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Done!","metadata":{}}]}