{"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":"# **Step 1 - Import library**","metadata":{}},{"cell_type":"code","source":"import os\nimport pandas as pd\nimport librosa\nimport numpy as np\nimport IPython.display as ipd\nimport torchaudio\nimport librosa.display\nimport matplotlib.pyplot as plt\nimport random\nimport string\nimport nltk\nfrom nltk.tokenize import word_tokenize\nfrom nltk.corpus import stopwords\nfrom nltk.stem import PorterStemmer\nfrom collections import Counter\nfrom sklearn.feature_extraction.text import CountVectorizer\nfrom sklearn.decomposition import LatentDirichletAllocation\nfrom gensim import models","metadata":{"execution":{"iopub.status.busy":"2023-07-29T15:59:13.406068Z","iopub.execute_input":"2023-07-29T15:59:13.406692Z","iopub.status.idle":"2023-07-29T15:59:19.099096Z","shell.execute_reply.started":"2023-07-29T15:59:13.406654Z","shell.execute_reply":"2023-07-29T15:59:19.0981Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"markdown","source":"# **Step 2 - Load the Data**","metadata":{}},{"cell_type":"code","source":"# Define the paths to the data directories\nBASE_DIR = '/kaggle/input/bengaliai-speech'\ntrain_data_dir = f\"{BASE_DIR}/train_mp3s/\"  \ntest_data_dir = f\"{BASE_DIR}/test_mp3s/\" \ntrain_csv_path = f\"{BASE_DIR}/train.csv\" \ndomains = f\"{BASE_DIR}/examples/\" \n\n# Load the train.csv file using pandas\ntrain_df = pd.read_csv(train_csv_path)\n\n# Preview the first few rows of the DataFrame\ndisplay(train_df.head())","metadata":{"execution":{"iopub.status.busy":"2023-07-29T15:59:19.100963Z","iopub.execute_input":"2023-07-29T15:59:19.101452Z","iopub.status.idle":"2023-07-29T15:59:23.682218Z","shell.execute_reply.started":"2023-07-29T15:59:19.101426Z","shell.execute_reply":"2023-07-29T15:59:23.681204Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Data Domains Shows**","metadata":{}},{"cell_type":"code","source":"#data domains\n\ndata_domain = !ls /kaggle/input/bengaliai-speech/examples/\ndata_domain\n","metadata":{"execution":{"iopub.status.busy":"2023-07-29T15:59:23.684991Z","iopub.execute_input":"2023-07-29T15:59:23.685573Z","iopub.status.idle":"2023-07-29T15:59:23.713668Z","shell.execute_reply.started":"2023-07-29T15:59:23.685539Z","shell.execute_reply":"2023-07-29T15:59:23.712701Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Step 3 - EDA**","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Step 4 - Summary**","metadata":{}},{"cell_type":"code","source":"# Load audio files and corresponding transcriptions\naudio_data = []  # List to store audio data\ntranscriptions = []  # List to store corresponding transcriptions\n\nfor idx, row in train_df.head(5).iterrows():\n    audio_file_path = os.path.join(train_data_dir, f\"{row['id']}.mp3\")\n\n    # Load the audio file using librosa\n    audio, sr = librosa.load(audio_file_path, sr=None)\n\n    # Append audio data and transcription to lists\n    audio_data.append(audio)\n    transcriptions.append(row['sentence'])\n    \naudio_data = np.array(audio_data,dtype = 'object')\ntranscriptions = np.array(transcriptions,dtype = 'object')\n\n# Check the shapes of the loaded data\nprint(\"Audio data shape:\", audio_data.shape)\nprint(\"Transcriptions shape:\", transcriptions.shape)","metadata":{"execution":{"iopub.status.busy":"2023-07-29T15:59:23.716445Z","iopub.execute_input":"2023-07-29T15:59:23.716805Z","iopub.status.idle":"2023-07-29T15:59:32.535567Z","shell.execute_reply.started":"2023-07-29T15:59:23.716771Z","shell.execute_reply":"2023-07-29T15:59:32.534572Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Get the total number of audio files in the training and test directories\ntrain_audio_files = os.listdir(train_data_dir)\ntest_audio_files = os.listdir(test_data_dir)\n\n# Get the total duration of audio data in the training set (in seconds)\ntrain_total_duration = 0\nfor idx, row in train_df.head(10).iterrows():\n    audio_file_path = os.path.join(train_data_dir, f\"{row['id']}.mp3\")\n    audio_info = torchaudio.info(audio_file_path)\n    duration = audio_info.num_frames / audio_info.sample_rate\n    train_total_duration += duration\n\n# Get the number of unique domains present in the training data\nunique_domains = train_df['split'].unique()\n\n# Get the total number of samples in the training data\ntotal_samples = train_df.shape[0]\n\n# Print the data summary\nprint(\"Data Summary:\")\nprint(f\"Total number of audio files in the training directory: {len(train_audio_files)}\")\nprint(f\"Total number of audio files in the test directory: {len(test_audio_files)}\")\nprint(f\"Total duration of audio data in the training set (in seconds): {train_total_duration:.2f}\")\nprint(f\"Number of unique domains in the training data: {unique_domains}\")\nprint(f\"Total number of samples in the training data: {total_samples}\")\n","metadata":{"execution":{"iopub.status.busy":"2023-07-29T15:59:32.538877Z","iopub.execute_input":"2023-07-29T15:59:32.539375Z","iopub.status.idle":"2023-07-29T16:00:05.470358Z","shell.execute_reply.started":"2023-07-29T15:59:32.539347Z","shell.execute_reply":"2023-07-29T16:00:05.468681Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Step -4.1 think in  voice way**","metadata":{}},{"cell_type":"code","source":"# Hello Hello , mic check\n# Choose some random indices for checking\nrandom_indices = [0, 10, 20, 30, 40, 50]\n\nfor idx in random_indices:\n    row = train_df.iloc[idx]\n    audio_file_path = os.path.join(train_data_dir, f\"{row['id']}.mp3\")\n\n    # Load the audio file using librosa\n    audio, sr = librosa.load(audio_file_path, sr=None)\n\n    # Print the transcription and play the audio\n    print(\"Transcription:\", row['sentence'])\n    ipd.display(ipd.Audio(audio, rate=sr))","metadata":{"execution":{"iopub.status.busy":"2023-07-29T16:00:34.459563Z","iopub.execute_input":"2023-07-29T16:00:34.459927Z","iopub.status.idle":"2023-07-29T16:00:34.600106Z","shell.execute_reply.started":"2023-07-29T16:00:34.459898Z","shell.execute_reply":"2023-07-29T16:00:34.598862Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Step -4.2  Visualization Data**","metadata":{}},{"cell_type":"code","source":"domain_counts = train_df['split'].value_counts()\n\n# Plot the data distribution\n\nplt.figure(figsize=(10, 6))\ndomain_counts.plot(kind='bar', color='green')\nplt.title(\"Data Distribution Across Domains\")\nplt.xlabel(\"Domain\")\nplt.ylabel(\"Number of Recordings\")\nplt.xticks(rotation=45, ha='right')\nplt.tight_layout()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-07-29T16:00:49.872275Z","iopub.execute_input":"2023-07-29T16:00:49.872637Z","iopub.status.idle":"2023-07-29T16:00:50.365122Z","shell.execute_reply.started":"2023-07-29T16:00:49.872607Z","shell.execute_reply":"2023-07-29T16:00:50.364195Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for idx in random_indices:\n    row = train_df.iloc[idx]\n    audio_file_path = os.path.join(train_data_dir, f\"{row['id']}.mp3\")\n\n    # Load the audio file using librosa\n    audio, sr = librosa.load(audio_file_path, sr=None)\n\n    # Plot the waveform\n    plt.figure(figsize=(10, 4))\n    librosa.display.waveshow(audio, sr=sr)\n    plt.title(f\"Waveform - Audio File ID: {row['id']}\")\n    plt.xlabel(\"Time (s)\")\n    plt.ylabel(\"Amplitude\")\n    plt.tight_layout()\n    plt.show()\n\n    # Plot the log Mel spectrogram\n    plt.figure(figsize=(10, 4))\n    mel_spec = librosa.feature.melspectrogram(y=audio, sr=sr)\n    mel_spec_db = librosa.power_to_db(mel_spec, ref=np.max)\n    librosa.display.specshow(mel_spec_db, sr=sr, x_axis='time', y_axis='mel')\n    plt.colorbar(format='%+2.0f dB')\n    plt.title(f\"Log Mel Spectrogram - Audio File ID: {row['id']}\")\n    plt.xlabel(\"Time (s)\")\n    plt.ylabel(\"Mel Frequency\")\n    plt.tight_layout()\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2023-07-29T16:01:31.675573Z","iopub.execute_input":"2023-07-29T16:01:31.675922Z","iopub.status.idle":"2023-07-29T16:01:40.284767Z","shell.execute_reply.started":"2023-07-29T16:01:31.675893Z","shell.execute_reply":"2023-07-29T16:01:40.283888Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Step 4.3 - Sentence Analysis**","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Step 4.4 - Text Processing**","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Step 4.5 - Tokenization**","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Step 4.5 - Vocab Analysis**","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Step 5 - Sentence Length analysis**","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Step 5.1 - Word Frequency Analysis**","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Step 5.2 - Topics Modeling**","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Topic Modeling","metadata":{}},{"cell_type":"markdown","source":"# **OOD-Speech (Out-of Distribution Speech)**\nOOD-Speech: A Large Bengali Speech Recognition Dataset for Out-of-Distribution Benchmarking\n\nAuthors: Fazle Rabbi Rakib, Souhardya Saha Dip, Samiul Alam, Nazia Tasnim, Md. Istiak Hossain Shihab, Md. Nazmuddoha Ansary, Syed Mobassir Hossen, Marsia Haque Meghla, Mamunur Mamun, Farig Sadeque, Sayma Sultana Chowdhury, Tahsin Reasat, Asif Sushmit, Ahmed Imtiaz Humayun\n\n\"The authors presented OOD-Speech, the first out-of-distribution (OOD) benchmarking dataset for Bengali automatic speech recognition (ASR). Being one of the most spoken languages globally, Bengali portrays large diversity in dialects and prosodic features, which demands ASR frameworks to be robust towards distribution shifts.\"\n\n\"For example, islamic religious sermons in Bengali are delivered with a tonality that is significantly different from regular speech. Their training dataset is collected via massively online crowdsourcing campaigns which resulted in 1177.94 hours collected and curated from 22,645 native Bengali speakers from South Asia.\"\n\n\"Their test dataset comprises 23.03 hours of speech collected and manually annotated from 17 different sources, e.g., Bengali TV drama, Audiobook, Talk show, Online class, and Islamic sermons to name a few. OOD-Speech is jointly the largest publicly available speech dataset, as well as the first out-of-distribution ASR benchmarking dataset for Bengali.\"\n\nhttps://arxiv.org/abs/2305.09688 arXiv:2305.09688","metadata":{}},{"cell_type":"markdown","source":"**Bengali Language - Bangla Notes**","metadata":{}},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Bangla Word Cloud**","metadata":{}},{"cell_type":"code","source":"%%capture\n!pip install langdetect # Language Detection\n!pip install bnlp_toolkit # For Bangla Word Cloud\n!wget https://www.omicronlab.com/download/fonts/kalpurush.ttf # Bangla Font For the Word Cloud\n","metadata":{"execution":{"iopub.status.busy":"2023-07-29T16:03:00.799646Z","iopub.execute_input":"2023-07-29T16:03:00.799928Z","iopub.status.idle":"2023-07-29T16:03:35.594378Z","shell.execute_reply.started":"2023-07-29T16:03:00.799903Z","shell.execute_reply":"2023-07-29T16:03:35.592577Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def printmd(string):\n  display(Markdown(string))\n\nfrom langdetect import detect\nimport unicodedata\nimport html","metadata":{"execution":{"iopub.status.busy":"2023-07-29T16:03:53.304007Z","iopub.execute_input":"2023-07-29T16:03:53.304391Z","iopub.status.idle":"2023-07-29T16:03:53.309626Z","shell.execute_reply.started":"2023-07-29T16:03:53.30436Z","shell.execute_reply":"2023-07-29T16:03:53.308547Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! pip install pydub\n!pip install librosa","metadata":{"execution":{"iopub.status.busy":"2023-07-29T16:07:33.537817Z","iopub.execute_input":"2023-07-29T16:07:33.538214Z","iopub.status.idle":"2023-07-29T16:07:56.85631Z","shell.execute_reply.started":"2023-07-29T16:07:33.538181Z","shell.execute_reply":"2023-07-29T16:07:56.854941Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Poem Recital**","metadata":{}},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}