{"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":"someone has to figure out:\n1. install nemo without internet\n2. how to configure nemo to use local files for tokenizer, etc ...\n\nWith 'Conformer-CTC-BPE.nemo', it achieve  WER 0.2600063794449883 for 29587 mp3 files in the kaggle validation split of train.csv kaggle dataset\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-07-19T03:11:21.095059Z","iopub.execute_input":"2023-07-19T03:11:21.095657Z","iopub.status.idle":"2023-07-19T03:12:11.985528Z","shell.execute_reply.started":"2023-07-19T03:11:21.095615Z","shell.execute_reply":"2023-07-19T03:12:11.984197Z"}}},{"cell_type":"code","source":"! apt-get install sox libsox-fmt-mp3 -y\n#!apt-get install ffmpeg\n#!apt-get install libsndfile1\n\n#!pip install Cython\n!pip install nemo_toolkit['all']\n\nprint('INSTALL OK !!!!!')","metadata":{"execution":{"iopub.status.busy":"2023-07-19T03:42:23.585623Z","iopub.execute_input":"2023-07-19T03:42:23.586319Z","iopub.status.idle":"2023-07-19T03:42:54.426825Z","shell.execute_reply.started":"2023-07-19T03:42:23.586270Z","shell.execute_reply":"2023-07-19T03:42:54.424847Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# https://stackoverflow.com/questions/66680733/soxi-failed-with-exit-code-1\n# check sox installation ...\nif 0:\n    from sox import Transformer\n    tfm = Transformer()\n    tfm.rate(samplerate=16000)\n    tfm.channels(n_channels=1)\n\n    mp3_dir = f'/kaggle/input/bengaliai-speech/train_mp3s'\n    id = '000005f3362c'\n    mp3_file  = f'{mp3_dir}/{id}.mp3'    \n\n    !pwd\n    tfm.build(input_filepath=mp3_file, output_filepath='temp.wav')   ","metadata":{"execution":{"iopub.status.busy":"2023-07-19T03:51:38.013508Z","iopub.execute_input":"2023-07-19T03:51:38.014134Z","iopub.status.idle":"2023-07-19T03:51:39.286948Z","shell.execute_reply.started":"2023-07-19T03:51:38.014083Z","shell.execute_reply":"2023-07-19T03:51:39.285817Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#import sys\n#sys.path.append('/kaggle/input/my-nemo/NeMo-main')\n\nimport nemo\nprint('nemo', nemo.__version__)\n\nimport numpy as np\nimport pandas as pd\nimport jiwer\n\nimport nemo.collections.asr as nemo_asr\nfrom sox import Transformer\n\nmode='debug'\nif mode=='debug':\n    mp3_dir = f'/kaggle/input/bengaliai-speech/train_mp3s'\n    valid_df = pd.read_csv('/kaggle/input/bengaliai-speech/train.csv')\n    valid_df = valid_df[:25]\nif mode=='submit':\n    mp3_dir = f'/kaggle/input/bengaliai-speech/test_mp3s'\n    valid_df = pd.read_csv('/kaggle/input/bengaliai-speech/sample_submission.csv')\n    \nprint(len(valid_df))\nprint(valid_df['id'][:5].tolist())\n\n#########################################################################\ntfm = Transformer()\ntfm.rate(samplerate=16000)\ntfm.channels(n_channels=1)\n\ncheckpoint_file = \\\n    '/kaggle/input/my-nemo/Conformer-CTC-BPE.nemo'\nasr_model = nemo_asr.models.EncDecCTCModelBPE.restore_from(restore_path=checkpoint_file)\n#asr_model.cuda()\n\n\npredict=[]\nfor t, d in valid_df.iterrows():\n    print('\\r', t, d['id'], end='')\n    #print(t, d['id'])\n    mp3_file  = f'{mp3_dir}/{d[\"id\"]}.mp3'\n    tfm.build(input_filepath=mp3_file, output_filepath='temp.wav')\n  \n    p = asr_model.transcribe(paths2audio_files=['temp.wav', ], batch_size=1)[0] \n    p = p[:-2]+p[-1] ##?\n    predict.append(p)\n    \n    if mode=='debug':\n        print(p)\n        print(d.sentence)\n        print('')\n\nif mode=='debug':\n    score = jiwer.wer(valid_df['sentence'].to_list(), predict)\n    print('jiwer', score)\n    \nprint('')\nsubmit_df = valid_df.copy()\nsubmit_df.loc[:,'sentence']=predict\nsubmit_df.to_csv('submission.csv',index=False)\nprint(submit_df)\nprint('SUBMIT DONE !!!!!!!')\n\n\n","metadata":{"execution":{"iopub.status.busy":"2023-07-19T03:53:48.564647Z","iopub.execute_input":"2023-07-19T03:53:48.566351Z","iopub.status.idle":"2023-07-19T03:55:21.803585Z","shell.execute_reply.started":"2023-07-19T03:53:48.566298Z","shell.execute_reply":"2023-07-19T03:55:21.802379Z"},"trusted":true},"execution_count":null,"outputs":[]}]}