{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Put comma using Force Alignment\n", "\n", "Put commas on ASR output using Force Alignment model." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "This tutorial is available as an IPython notebook at [malaya-speech/example/put-comma-force-alignment](https://github.com/huseinzol05/malaya-speech/tree/master/example/put-comma-force-alignment).\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "This module is not language independent, so it not save to use on different languages. Pretrained models trained on hyperlocal languages.\n", " \n", "
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import malaya_speech\n", "import numpy as np\n", "from malaya_speech import Pipeline\n", "import IPython.display as ipd\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### List available Force Aligner model" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Size (MB)Quantized Size (MB)Language
conformer-transducer12032.3[malay]
conformer-transducer-mixed12032.3[mixed]
conformer-transducer-singlish12032.3[singlish]
\n", "
" ], "text/plain": [ " Size (MB) Quantized Size (MB) Language\n", "conformer-transducer 120 32.3 [malay]\n", "conformer-transducer-mixed 120 32.3 [mixed]\n", "conformer-transducer-singlish 120 32.3 [singlish]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "malaya_speech.force_alignment.available_aligner()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load Force Aligner model\n", "\n", "```python\n", "def deep_aligner(\n", " model: str = 'conformer-transducer', quantized: bool = False, **kwargs\n", "):\n", " \"\"\"\n", " Load Deep Aligner model.\n", "\n", " Parameters\n", " ----------\n", " model : str, optional (default='conformer-transducer')\n", " Model architecture supported. Allowed values:\n", "\n", " * ``'conformer-transducer'`` - Conformer + RNNT trained on Malay STT dataset.\n", " * ``'conformer-transducer-mixed'`` - Conformer + RNNT trained on Mixed STT dataset.\n", " * ``'conformer-transducer-singlish'`` - Conformer + RNNT trained on Singlish STT dataset.\n", "\n", " quantized : bool, optional (default=False)\n", " if True, will load 8-bit quantized model.\n", " Quantized model not necessary faster, totally depends on the machine.\n", "\n", " Returns\n", " -------\n", " result : malaya_speech.model.tf.TransducerAligner class\n", " \"\"\"\n", "```" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "model = malaya_speech.force_alignment.deep_aligner(model = 'conformer-transducer')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load sample" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Malay samples" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "malay1, sr = malaya_speech.load('speech/example-speaker/shafiqah-idayu.wav')\n", "malay2, sr = malaya_speech.load('speech/example-speaker/haqkiem.wav')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "texts = ['nama saya shafiqah idayu',\n", " 'sebagai pembangkang yang matang dan sejahtera pas akan menghadapi pilihan raya umum dan tidak menumbang kerajaan dari pintu belakang']" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ipd.Audio(malay2, rate = sr)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Predict\n", "\n", "```python\n", "def predict(self, input, transcription: str):\n", " \"\"\"\n", " Transcribe input, will return a string.\n", "\n", " Parameters\n", " ----------\n", " input: np.array\n", " np.array or malaya_speech.model.frame.Frame.\n", " transcription: str\n", " transcription of input audio\n", "\n", " Returns\n", " -------\n", " result: Dict[words_alignment, subwords_alignment, subwords, alignment]\n", " \"\"\"\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Predict Malay\n", "\n", "Our original text is: 'sebagai pembangkang yang matang dan sejahtera pas akan menghadapi pilihan raya umum dan tidak menumbang kerajaan dari pintu belakang'" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "results = model.predict(malay2, texts[1])" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "dict_keys(['words_alignment', 'subwords_alignment', 'subwords', 'alignment'])" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results.keys()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'text': 'sebagai', 'start': 0.08, 'end': 0.45},\n", " {'text': 'pembangkang', 'start': 0.56, 'end': 1.05},\n", " {'text': 'yang', 'start': 1.16, 'end': 1.29},\n", " {'text': 'matang', 'start': 1.4, 'end': 1.69},\n", " {'text': 'dan', 'start': 1.84, 'end': 1.85},\n", " {'text': 'sejahtera', 'start': 2.08, 'end': 2.57},\n", " {'text': 'pas', 'start': 2.84, 'end': 2.85},\n", " {'text': 'akan', 'start': 3.12, 'end': 3.33},\n", " {'text': 'menghadapi', 'start': 3.4, 'end': 3.93},\n", " {'text': 'pilihan', 'start': 4.04, 'end': 4.45},\n", " {'text': 'raya', 'start': 4.56, 'end': 4.81},\n", " {'text': 'umum', 'start': 4.88, 'end': 5.17},\n", " {'text': 'dan', 'start': 5.36, 'end': 5.37},\n", " {'text': 'tidak', 'start': 5.56, 'end': 5.73},\n", " {'text': 'menumbang', 'start': 5.84, 'end': 6.25},\n", " {'text': 'kerajaan', 'start': 6.36, 'end': 6.85},\n", " {'text': 'dari', 'start': 7.04, 'end': 7.25},\n", " {'text': 'pintu', 'start': 7.36, 'end': 7.53},\n", " {'text': 'belakang', 'start': 7.68, 'end': 8.05}]" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results['words_alignment']" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(10, 8))\n", "ax = fig.add_subplot(111)\n", "ax.set_title('Alignment steps')\n", "im = ax.imshow(\n", " results['alignment'],\n", " aspect='auto',\n", " origin='lower',\n", " interpolation='none')\n", "ax.set_yticks(range(len(results['subwords'])))\n", "labels = [item.get_text() for item in ax.get_yticklabels()]\n", "ax.set_yticklabels(results['subwords'])\n", "fig.colorbar(im, ax=ax)\n", "xlabel = 'Encoder timestep'\n", "plt.xlabel(xlabel)\n", "plt.ylabel('Decoder timestep')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you listen to the audio, there is a silent between `pas` and `akan`, this we can assume a comma between those words. We can use `malaya_speech.aligner.put_comma` to help us,\n", "\n", "```python\n", "def put_comma(alignment, min_threshold: float = 0.5):\n", " \"\"\"\n", " Put comma in alignment from force alignment model.\n", "\n", " Parameters\n", " -----------\n", " alignment: List[Dict[text, start, end]]\n", " min_threshold: float, optional (default=0.5)\n", " minimum threshold in term of seconds to assume a comma.\n", "\n", " Returns\n", " --------\n", " result: List[str]\n", " \"\"\"\n", "```" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['sebagai',\n", " 'pembangkang',\n", " 'yang',\n", " 'matang',\n", " 'dan',\n", " 'sejahtera',\n", " ',',\n", " 'pas',\n", " ',',\n", " 'akan',\n", " 'menghadapi',\n", " 'pilihan',\n", " 'raya',\n", " 'umum',\n", " 'dan',\n", " 'tidak',\n", " 'menumbang',\n", " 'kerajaan',\n", " 'dari',\n", " 'pintu',\n", " 'belakang',\n", " '.']" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "malaya_speech.aligner.put_comma(results['words_alignment'], 0.25)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.7" } }, "nbformat": 4, "nbformat_minor": 4 }