{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Speaker Vector Nemo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "This tutorial is available as an IPython notebook at [malaya-speech/example/speaker-vector-nemo](https://github.com/huseinzol05/malaya-speech/tree/master/example/speaker-vector-nemo).\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "This module is language independent, so it save to use on different languages. Pretrained models trained on multilanguages.\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Does not required to install Nvidia Nemo, Malaya-Speech already exported necessary code and models only.\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "This is an application of malaya-speech Pipeline, read more about malaya-speech Pipeline at [malaya-speech/example/pipeline](https://github.com/huseinzol05/malaya-speech/tree/master/example/pipeline).\n", " \n", "
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "\n", "os.environ['CUDA_VISIBLE_DEVICES'] = ''" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "`pyaudio` is not available, `malaya_speech.streaming.pyaudio_vad.stream` is not able to use.\n" ] } ], "source": [ "from malaya_speech import Pipeline\n", "import malaya_speech\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import logging\n", "\n", "logging.basicConfig(level=logging.INFO)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### List available Nemo models" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:malaya_speech.speaker_vector:tested on VoxCeleb2 test set. Lower EER is better.\n", "INFO:malaya_speech.speaker_vector:download the test set at https://github.com/huseinzol05/malaya-speech/tree/master/data/voxceleb\n" ] }, { "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", " \n", " \n", " \n", " \n", "
Size (MB)Embedding SizeEERoriginal from
huseinzol05/nemo-ecapa-tdnn96.81920.02492https://catalog.ngc.nvidia.com/orgs/nvidia/tea...
huseinzol05/nemo-speakernet23.61920.04279https://catalog.ngc.nvidia.com/orgs/nvidia/tea...
huseinzol05/nemo-titanet_large101.61920.02278https://catalog.ngc.nvidia.com/orgs/nvidia/tea...
\n", "
" ], "text/plain": [ " Size (MB) Embedding Size EER \\\n", "huseinzol05/nemo-ecapa-tdnn 96.8 192 0.02492 \n", "huseinzol05/nemo-speakernet 23.6 192 0.04279 \n", "huseinzol05/nemo-titanet_large 101.6 192 0.02278 \n", "\n", " original from \n", "huseinzol05/nemo-ecapa-tdnn https://catalog.ngc.nvidia.com/orgs/nvidia/tea... \n", "huseinzol05/nemo-speakernet https://catalog.ngc.nvidia.com/orgs/nvidia/tea... \n", "huseinzol05/nemo-titanet_large https://catalog.ngc.nvidia.com/orgs/nvidia/tea... " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "malaya_speech.speaker_vector.available_nemo()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Smaller EER the better model is**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load Nemo model\n", "\n", "```python\n", "def nemo(\n", " model: str = 'huseinzol05/nemo-ecapa-tdnn',\n", " **kwargs,\n", "):\n", " \"\"\"\n", " Load Nemo Speaker verification model.\n", "\n", " Parameters\n", " ----------\n", " model : str, optional (default='huseinzol05/nemo-ecapa-tdnn')\n", " Check available models at `malaya_speech.speaker_vector.available_nemo()`.\n", "\n", " Returns\n", " -------\n", " result : malaya_speech.torch_model.nemo.Model class\n", " \"\"\"\n", "```" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:malaya_boilerplate.huggingface:downloading frozen huseinzol05/nemo-ecapa-tdnn/model_config.yaml\n", "INFO:malaya_boilerplate.huggingface:downloading frozen huseinzol05/nemo-ecapa-tdnn/model_weights.ckpt\n", "INFO:malaya_speech.utils.nemo_featurization:PADDING: 16\n" ] } ], "source": [ "model = malaya_speech.speaker_vector.nemo('huseinzol05/nemo-ecapa-tdnn')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [], "source": [ "from glob import glob\n", "\n", "speakers = ['speech/example-speaker/khalil-nooh.wav',\n", "'speech/example-speaker/mas-aisyah.wav',\n", "'speech/example-speaker/shafiqah-idayu.wav',\n", "'speech/example-speaker/husein-zolkepli.wav'\n", " ]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Pipeline" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def load_wav(file):\n", " return malaya_speech.load(file)[0]\n", "\n", "p = Pipeline()\n", "frame = p.foreach_map(load_wav).map(model)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p.visualize()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "r = p(speakers)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Calculate similarity" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1. , -0.30169573, -0.33176271, -0.24950222],\n", " [-0.30169573, 1. , -0.39778761, -0.39475821],\n", " [-0.33176271, -0.39778761, 1. , -0.30796176],\n", " [-0.24950222, -0.39475821, -0.30796176, 1. ]])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from scipy.spatial.distance import cdist\n", "\n", "1 - cdist(r['speaker-vector-nemo'], r['speaker-vector-nemo'], metric = 'cosine')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remember, our files are,\n", "\n", "```python\n", "['speech/example-speaker/khalil-nooh.wav',\n", " 'speech/example-speaker/mas-aisyah.wav',\n", " 'speech/example-speaker/shafiqah-idayu.wav',\n", " 'speech/example-speaker/husein-zolkepli.wav']\n", "```" ] } ], "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.8.10" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }