Skip to content

Instantly share code, notes, and snippets.

@abayomi185
Last active October 2, 2022 10:37
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save abayomi185/2c8a6e77ccbcacf2ffabc7c26fe5680b to your computer and use it in GitHub Desktop.
Save abayomi185/2c8a6e77ccbcacf2ffabc7c26fe5680b to your computer and use it in GitHub Desktop.
simple-nlp.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "simple-nlp.ipynb",
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyObCVrkwcgxGU/73YBPw19C",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/abayomi185/2c8a6e77ccbcacf2ffabc7c26fe5680b/cop506.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "az1-dsnCsSCr"
},
"source": [
"# Simple Natural Language Processing (NLP) Using Python"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "iXUMsp881cdc"
},
"source": [
"**Abstract** \n",
"This Jupyter Notebook details the process of importing, sorting and processing a select set of audio commands with corresponding labels, and training a neural network to accurately identify the audio label/command with only the audio data as an input. This forms the fundamentals of artificial intelligent personal assistants such as Apple's Siri, Amazon's Alexa and Google's Assistant. The notebook content is intended to be simple, favouring basic code and coding concepts over abstracted and complex ones."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "6ZSRWvqt1hxQ"
},
"source": [
"**Objectives:**\n",
"- Download and import audio dataset\n",
"- Shuffle, process and separate dataset into training, validation and testing\n",
"- Create and train neural network (NN)\n",
"- Test the accuracy of the NN model"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cJ1ktUM712t4"
},
"source": [
"**Similar Tutorials with Comparisons and other Sources** \n",
"___\n",
"\\[1\\] Simple audio recognition: Recognizing keywords \\[Online\\] Available: https://www.tensorflow.org/tutorials/audio/simple_audio\n",
"\n",
"\\[2\\] 1D Convolutional Neural Network Models for Human Activity Recognition \\[Online\\] Available: https://machinelearningmastery.com/cnn-models-for-human-activity-recognition-time-series-classification\n",
"\n",
"\\[3\\] TensorFlow Lite Tutorial Part 2: Speech Recognition Model Training \\[Online\\] Available: https://www.digikey.com/en/maker/projects/tensorflow-lite-tutorial-part-2-speech-recognition-model-training/d8d04a2b60a442cf8c3fa5c0dd2a292b\n",
"\n",
"\\[4\\] tensorflow_speech_recognition_demo \\[Online\\] Available: https://github.com/llSourcell/tensorflow_speech_recognition_demo\n",
"\n",
"\\[5\\] Tensorflow Documentation \\[Online\\] Available: https://www.tensorflow.org/api_docs\n",
"\n",
"\\[6\\] Librosa Documentation \\[Online\\] Available: https://librosa.org/doc/latest/index.html\n",
"\n",
"\\[7\\] Stack Overflow: Transform the input of the MFCCs Spectogram for a CNN (Audio Recognition) \\[Online\\] Available: https://stackoverflow.com/questions/59397558/transform-the-input-of-the-mfccs-spectogram-for-a-cnn-audio-recognition\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0v9DCztpIVLE"
},
"source": [
"The first thing to do is to import all the modules required for this project."
]
},
{
"cell_type": "code",
"metadata": {
"id": "cBT1wtiT5o4f"
},
"source": [
"# Built-in Python Modules \n",
"# These are mainly for file operations\n",
"import glob\n",
"import io\n",
"import os\n",
"import pathlib\n",
"import random\n",
"import requests\n",
"import zipfile"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "KE9Hii8uIQIs"
},
"source": [
">[Librosa](https://pandas.pydata.org/docs/), [Matplotlib](https://matplotlib.org/stable/contents.html) and [Numpy](https://numpy.org/doc/stable), popular modules for audio data analysis, various math operations and plotting data."
]
},
{
"cell_type": "code",
"metadata": {
"id": "JItIWew7DA3h"
},
"source": [
"import librosa\n",
"import librosa.display\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Z8aVpxoTJwnu"
},
"source": [
">[TensorFlow](https://www.tensorflow.org/api_docs), a machine learning library."
]
},
{
"cell_type": "code",
"metadata": {
"id": "c4Zj6bOcNghK"
},
"source": [
"import tensorflow as tf\n",
"from tensorflow.keras import layers\n",
"from tensorflow.keras import models"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "V-0Yp4fdH9Eg"
},
"source": [
"The next step is to download and extract the speech dataset using built-in python modules"
]
},
{
"cell_type": "code",
"metadata": {
"id": "0AKlFTNcMDUG"
},
"source": [
"# Dataset directories\n",
"audio_dir = pathlib.Path('audio_data') \n",
"speech_data = pathlib.Path('audio_data/mini_speech_commands')\n",
"\n",
"if not audio_dir.exists():\n",
" response = requests.get(\n",
" 'http://storage.googleapis.com/download.tensorflow.org' + \n",
" '/data/mini_speech_commands.zip'\n",
" )\n",
" zip_file = zipfile.ZipFile(io.BytesIO(response.content))\n",
" zip_file.extractall(audio_dir) # extracted mini_speech_commands"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "rx9xeYW1pEzy"
},
"source": [
"The data has now been download and extracted into the 'audio_data/mini_speech_commands' directory. The audio files can then be organised, shuffled and processed."
]
},
{
"cell_type": "code",
"metadata": {
"id": "5nMiQDJGdGid",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "4e099de8-7b51-4514-bed1-aa9c301090ef"
},
"source": [
"speech_commands = []\n",
"\n",
"# Iterate through extracted files to get the spoken commands\n",
"for name in glob.glob(str(speech_data) + '/*' + os.path.sep):\n",
" speech_commands.append(name.split('/')[-2])\n",
"\n",
"# Dictionary comprehension to map commands to an integer for quick lookups\n",
"speech_commands_dict = {i : speech_commands.index(i) for i in speech_commands}\n",
"\n",
"speech_commands_dict"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"{'down': 4,\n",
" 'go': 7,\n",
" 'left': 6,\n",
" 'no': 1,\n",
" 'right': 2,\n",
" 'stop': 5,\n",
" 'up': 0,\n",
" 'yes': 3}"
]
},
"metadata": {},
"execution_count": 70
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "a04eX9eQMpQg"
},
"source": [
"speech_data_list = []\n",
"\n",
"# Iterate through spoken commands to get individual audio files\n",
"for name in glob.glob(str(speech_data) + '/*/*'):\n",
" speech_data_list.append(name)\n",
"\n",
"# Seed to ensure shuffled data is repeatable on the same hardware\n",
"random.seed(42)\n",
"random.shuffle(speech_data_list)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "A3UUwAAlXrFG"
},
"source": [
"# Labels for corresponding shuffled audio data\n",
"speech_data_labels = []\n",
"\n",
"for audio in speech_data_list:\n",
" speech_data_labels.append(os.path.dirname(audio).split('/')[-1])"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "big9Yfq_BEGL"
},
"source": [
"# Integer representation of labels based on 'speech_commands_dict'\n",
"speech_label_int = []\n",
"\n",
"for audio in speech_data_labels:\n",
" speech_label_int.append(speech_commands_dict[audio])"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Mv_Ka-h-X8_0"
},
"source": [
"# Compiling all speech data into a list\n",
"loaded_speech_data = []\n",
"\n",
"for audio in speech_data_list:\n",
" loaded_speech_data.append(librosa.load(audio, sr=16000))"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "iT4XB1M0qP5f"
},
"source": [
"The audio data is processed by converting it to Mel-frequency cepstrum coefficients (MFCCs); a representation of the short-term power spectrum of a sound in the frequency domain."
]
},
{
"cell_type": "code",
"metadata": {
"id": "Xq_6jBUcd0mn"
},
"source": [
"speech_data_mfcc = []\n",
"\n",
"for loaded_audio in loaded_speech_data:\n",
" speech_data_mfcc.append(librosa.feature\n",
" .mfcc(\n",
" loaded_audio[0], loaded_audio[1])\n",
" )"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 330
},
"id": "22u_fH6dkkze",
"outputId": "5cc8baa6-91ba-4737-e30b-cf05456eecaa"
},
"source": [
"example_index = 101\n",
"librosa.display.specshow(speech_data_mfcc[example_index], \n",
" x_axis='time', y_axis='hz')\n",
"plt.colorbar()\n",
"plt.tight_layout()\n",
"plt.title(f'mfcc for \\\"{speech_data_labels[example_index]}\\\"')\n",
"plt.show\n",
"# Modified code from source [6] answer"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<function matplotlib.pyplot.show>"
]
},
"metadata": {},
"execution_count": 76
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 330
},
"id": "KW0Iq9Nd6dKQ",
"outputId": "9fec51b9-7917-4ee3-f961-8870d58933b1"
},
"source": [
"waveform_example = librosa.feature.inverse.mfcc_to_audio(\n",
" speech_data_mfcc[example_index])\n",
"librosa.display.waveplot(waveform_example)\n",
"plt.tight_layout()\n",
"plt.title(f'waveform for \\\"{speech_data_labels[example_index]}\\\"')\n",
"plt.show\n",
"# Modified code from source [6] answer"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<function matplotlib.pyplot.show>"
]
},
"metadata": {},
"execution_count": 77
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAacAAAEoCAYAAAD8CT6VAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dd3wUZf4H8M83hYQSeugl9F6E0FGqCmI7K3reifWsd6eed1gOOSxgP+/sd55ixfZTUZAqRaWGKkgNhg4JCIEAIe35/TGzm9nd2d3Z7CQ7u/t5v1682J3yzDPJZr77PPPM9xGlFIiIiJwkIdIVICIi8sbgREREjsPgREREjsPgREREjsPgREREjsPgREREjsPgRKQTkSEiskNECkTk8ggc/zcislc//jlVeFwlIu2r6nhEVjA4EZWbAuBlpVQtpdSXETj+cwDu0Y+/LtzCRGSxiAwXkckiMjn86tlDRHJEJENE3hGRCZGuDzkTgxNRudYANldkRxFJivDxE204PpFjMDiRI4jITSLyteH9DhH51PB+r4j01l+/pL8/ISJrRORcfXkzETkjIvUN+50jIkdEJFl/f7OIbBGRYyIyV0Ra68uzAbQF8LXerZailzdTRH4VkZ0icpuh3Mki8pmIvC8iJwBM0FsqT4jIMr2Mr0WkgYh8oNd1tYhkmJx7iogUAEgEsEGvC0Ski17mcRHZLCKXGvZ5R0ReE5HZInIKwIgQftYPishBETkgIjd7rasjIu+KSJ6I7BaRR0UkQV+3W0T66q9/q3cHdtPf3yIiXxp+Np/o5ZzU655ptX5EAAClFP/xX8T/QQsMx6F9YWoGYDeAfYZ1xwAk6O9vANAAQBKABwAcApCqr/sOwG2Gcp8F8Lr++jIAOwF00fd9FMAyw7Y5AEYb3i8F8CqAVAC9AeQBGKmvmwygGMDlep2rA1isl98OQB0APwPYDmC0frx3Abwd4GegALTXXyfrZT0MoBqAkQBOAuikr38HQD6AIfrxUy3+nMcAOAygO4CaAD70Ou67AL4CkAYgQ6//LYZ1D+iv3wSQDeBOw7r7DD+bQgAXQQu4UwGsiPRnjP+i6x9bTuQISqld0C6+vQGcB2AugAMi0hnAMADfK6XK9G3fV0odVUqVKKWeB5ACoJNe1IcArgMAEREA4/VlAHAHgKlKqS1KqRIATwHo7Wo9GYlIS2gX/r8ppQqVUusB/BfA7w2bLVdKfamUKlNKndGXva2UylZK5QP4FkC2UmqBfrxPAVgd6DAQQC0A05RSRUqp7wB84zo33VdKqR/14xdaLPcavY6blFKnoAUS1zknQvt5PaSUOqmUygHwPIDf6Zssgfa7AIBzoQUd1/th+nqXH5RSs5VSpQDeA9DLYv2IALBbj5xlCYDh0ILTEmgtkWHwuvCJyF/0rrl8ETkOrZXSUF/9OYBBItJUL6cMwPf6utYAXtK7yY4D+BWAAGhuUpdmAH5VSp00LNvtte1ek/0OG16fMXlfy/TMzY+/1xWQQzi+pXK9ynRpCK3FtttrveuYSwCcq/9sEwF8AmCI3lVZB8B6w36HDK9PA0i16b4cxQkGJ3ISV3A6V3/t+qbuDk76/aW/QmsB1FNK1YXWvSUAoJQ6BmAegGsBXA9ghlLKlXp/L4A/KKXqGv5VV0otM6nLAQD1RSTNsKwVgP2G95WZ0v8AgJau+z02Hv8ggJZeZbocgdZV2dpr/X4AUErthBZo7gWwVCl1AloQuh1aS8kYSInCwuBETrIE2o396kqpfdBaPGOg3V9yDa1OA1AC7f5PkohMAlDbq5wPoXW/XYXyLj0AeB3AQ4ab+HVE5Gqziiil9gJYBmCqiKSKSE8AtwB4P+yztGYltEDwVxFJFpHhAC4BMCPMcj+BNnijq4jUAPCYa4XeBfcJgCdFJE3v7rwfnue8BMA9KG/JLvZ6T2QLBidyDKXUdgAF0Lvh9G/muwD8qF84Ae1e1BxoN+p3Q7vx7t29NRNABwCHlFIbDOV/AeBpADP0EXabAIwNUKXroA0KOADgCwCPKaUWhHGKlimliqAFo7HQWjSvAvi9UmprmOV+C+Cf0AaO7NT/N7oXwCloP/cfoAX3/xnWL4H2BWGpn/dEtpDyHg8iIiJnYMuJiIgch8GJiIgch8GJiIgch8GJiIgcx7EPxTVs2FBlZGREuhpERGSjNWvWHFFKpQfbzrHBKSMjA1lZWZGuBhER2UhEdgffit16RETkQAxORETkOAxORETkOAxORETkOAxORETkOAxORETkOAxORETkOAxORETkOAxORETkOAxORAAGPrUQq375NdLVICIdgxMRgEMnCrE6h8GJyCkYnIiIyHEYnIiIyHEYnIiIyHEYnIiIyHEYnIiIyHEYnIiIyHEYnIiIyHEYnIh0ZWUq0lUgIh2DExEROQ6DE5Hu3RW7I10FItIxOBHp8s8UR7oKRKRjcKK4Vlxahrs+WAMAuGVomwjXhohcGJworh07VYTZPx0CAEiE60JE5RicKK6JlIekyh6r9/J3O/DtTwcr+ShEsSEp0hUgiqSEKmwuPTdvOzo0qoWxPZpW3UGJohRbThTXEqRqO/NKFZ+lIrKCwYlIx7hB5BwMThTXjPHo9SXZEasHEXlicCIiIsdhcKK4pqq4L4/D1YmssSU4icgYEdkmIjtFZGKA7a4UESUimXYcl4iIYlPYwUlEEgG8AmAsgK4ArhORribbpQH4E4CV4R6TyC4cA0HkTHa0nPoD2KmU2qWUKgIwA8BlJts9DuBpAIU2HJPIFlU9Qk+qeOg6UbSyIzg1B7DX8H6fvsxNRPoAaKmUmmXD8YiIKMZV+oAIEUkA8AKAByxse7uIZIlIVl5eXmVXjajKVfUADKJoZUdw2g+gpeF9C32ZSxqA7gAWi0gOgIEAZpoNilBKvamUylRKZaanp9tQNaLAVBXfdcrOO1WlxyOKVnYEp9UAOohIGxGpBmA8gJmulUqpfKVUQ6VUhlIqA8AKAJcqpbJsODZRWEo5NTuRI4UdnJRSJQDuATAXwBYAnyilNovIFBG5NNzyiSrTze/wOxKRE9mSlVwpNRvAbK9lk/xsO9yOYxJVxMnCYsxYtRe3ndcWALDl4IkI14iIzDBDBMWVJdvz8OTsLZGuBhEFweBEcYWD5YiiA4MTxZUyRieiqMDgREREjsNp2immFZWUITFB0P/JBRjXsykOHD8DACguLUNyor3fzXJPFCI9LYUpiohswJYTxbR+Ty7AxM834uipIry7fDcWbMkFALy3fLftx+r/1EIs3XEEAJCdV4AThcW2H4MoXjA4UUzLP1OMn/bn+ywvOFtSKcc7cUYLSKOeX4JJX26qlGMQxQMGJ4pLlTUuwtijV1kBkCgeMDhRzDO7BxRuTj2lFDYf8G2RGZUp7Z4XEYWOwYmoAtbuOY5x//oh6HYdH/0Wa/ccQ0kpgxRRKBicKOYlVMLgOSsJY12HzT1xFsbNP1+zz/4KEcUYBieKeQlm3XpBYotSCnknz4Z8LEH5sVyHFfG8F/Xs3G0hl0sUbxicKOaZPXYU7FGkmRsOoN+TC0IqM5z6EJEnBieKeRV5KPbXU0WWtvty3f7gGxFRyBicKObtORr67LNWw9lnFbh/xPx+RMExOFHMO3Y69EwNCRZHUXgPSfdspGlv/vDeGo97XBIk9C3cchgH888E3Ob+j9fj8IlCS3UkikYMTkQ2U2G2jG6ZnhV00MT/rduP5dlHwzoOkZMxOFFcCtZ6scosDmXnad2IxlZUqA/9WhmqThTLGJwoLoWbIcJvuRayQlg5Ngf0UbxjcCKykQiwI/dk2OWw3UTxjsGJ4lZ+BQZKuLhaNt6j1AXA52u14eVrdx9zLw9lQAQRMThRHCssKQ27DLN7Tq6Bfkf9PCt17LS1Z6iCHpvtK4phDE5EBofywx+eHaxdZFdIYQuMYhmDE8Uts0u7lWeHSssUDvEZI6JKlRTpChBFQv6Zit1vmrXxIO7+cK37/TKvZ41EzFtGoT76xCQSFO/YcqK49PaPOZa2K/N63mjdnmN+ttRYCSpWHtJlcliKdwxOFL8sBIC2D8/GnqOnQyrWLPYY8+kZ7xVlTJxlep+LLSeKdwxOFLfMBhQoADf+bxUmfbXZvcw4ui5YzPCeu8mM9yg7O3LkBZsy3kmOFoQ+TxbFHwYnIgOlFJZsz/NY5pGGKEh0+tvnPwU9RqBRdrkntUBVqhTWBulCNBr3rx9w4HjgZLFOkJXzK/o+4X+eLCIXBiciA7PYE8qQbX8DLTzK9X5w1zhL7hwt4eusjQdxxavLLB8XqJypOLzvuYVrxuq9tpZHsYvBieKW2UOsdoxDWLwtz2dZoEEQxuC37XDFUx9VZFLFQA7lF6Ltw7NtLbNj41q2lkexi8GJKAjbR84p77fWWydFJWXImDjLdN3o55fgw5V7wqmZB6uzAYeiSZ3qtpdJscmW4CQiY0Rkm4jsFJGJJuvvF5GfRWSjiCwUkdZ2HJcoLBXosapooAp0KGPLKVjXXKD1Z4pLsSz7SKhVq1LhznVF8SPs4CQiiQBeATAWQFcA14lIV6/N1gHIVEr1BPAZgGfCPS5RMGeKAufOs3qZNF5PK+PaGkrLKdjxE/iAFMUIO1pO/QHsVErtUkoVAZgB4DLjBkqpRUop18MiKwC0sOG4RAG9viQ74PoBTy2sopp4Cidhq1nL6bhhqLudscnuOHf8dJEtuQspPtgRnJoDMA7B2acv8+cWAN+arRCR20UkS0Sy8vJ8byoThaKoNPCkf2amfbu1EmoSuMUTymhAs2KMQ87tiCeFxaUY+fxi21uJN7y1ElMr6edLsadKB0SIyA0AMgE8a7ZeKfWmUipTKZWZnp5elVWjGFSRi+vKX34NeZ8X52+3UJnQ62JajMlJGRfZ0a137HQRduWdsr3llHeSD9+SdXYEp/0AWhret9CXeRCR0QAeAXCpUoqfUqp0VXXz/aWFO0LavrjUs17GILBp/4mA+9r82JGpRL1CZ4NMNx+qqqg7xQ47gtNqAB1EpI2IVAMwHsBM4wYicg6AN6AFplwbjknkodikC2/d3uMRqIk52yYGNBTz54/X+663obWToM+WaPdDvRyoR6EIOzgppUoA3ANgLoAtAD5RSm0WkSkicqm+2bMAagH4VETWi8hMP8URhWzT/nx0eORbDHt2keeKGLkYvr4kGwVnSwCYB7l7P1pny3GUUth++CSSE7TLAsf9USTZMp+TUmo2gNleyyYZXo+24zhEZi575UcAwG6v7OGrckK/f2RGREtW2qBWit9t3lwaeGRgOK2Gad9uRbv0Wji/a2OfcqYvy8HpIEPmrVq0LRc3v5OFBy/sBADuwQsvzt+O+87vaMsxiKxihgiKepV9b2ntnmPuZKX+Bgm8t2J3wDLCraHrsN5dbY/N3Oy7sW5XXoFvPZTCu8tzfLJMnCgsdge5Z+dq+f1W6YNDQr2n5o/x91QZ2ScotjA4UdSr7N474/QZ/rq6yoKMHSit4GiAsS99rx1XP7DVYk6dLcHI55f4LN9//IzH+bj0nDwPS7f7f3yjovU3MpbQ5/H5WG1Ty5ZiE4MTURV4/Jufg25z9eu+Wci3HPQcvRe0laivLvETTALt/knWPr/rgk3HMXX2lqBD6r1bS2w9USAMTkQWvfzdjgo/+zNzwwGfZb8cOQUAmPD2aizalovVOcHnbwr2YLEr9ljt6rzv4/WWpsU495lFAde/sXRX0IwcKUmelxs7u2OvfWM53vrhF9vKo8hjcCKy6Ll52/G/H3NM1+2vwER/I55bDAA4UnAWszceDLit6zp+6/SsgNudLtJG9Xl3w50zZR7yzxT7tJy+WLc/5OeZLnhxCeZsOhRwm9Iyz8kSD58oRFJi5Y3/W/nLr5i7OXCdKLowOBGFwI57L2a8Rxp6c7XYth4KPN/T3M2HPVokrtfHThcj72Sh16y+yqNsq7YfLsAPO/Ow//gZ9xB3wPOe0uJtue7JEjMmzsKApxb6BEaltOnlK+tnStGNwYmiRv6ZYvcIMpfcE4Ux8XCnXcPeAe2irwyvy4nPdr7bBHbXB2vc+wyZ9h0u/fcPptuZPRTtHQMVtOnl57HFQyYYnChq/GvhDlzzxnKPZVbu08SbotKy8sBjWJ6UIJ7Tf+j/h5IJYvZPWiBxtbZ26ffNvJkV6Z33zzVow640SXxoOLbY8hAuUaTc/eFan2XFpWW2p96JtFASul73nxVITUoE4Oq60/ZN9A5O+puK/KSC1ce1+mxJ+QPCJw1dgABQbHPuvtj6jRODE0WNIwXW8gV3eMR0RpboFkKzYN2e8pyCu46cws5c7WFcEc9WUqgj+/z5aNUek3K0Cv/ts41+91uw5XBYx6XYxm49ihpbD3oOBth91LxLKRpM+Tr4c09GFe2yuuP9NbjrA611KeLdctL/t1jW4RPlEwUa62P2MK2r5bTnV/8DPYa0bwgAAR/+DQmbTjGFwYmihndPUjTPD/S/H0N7JufY6SKflENW7MorD+BKeaaNdb1baLEFs8QQRIzlnNK76yTEYX+PfrkJALDeJHv84ROFyDZJvxSIbZnfyREYnChquC5+Rfq9CtfN+XgwY9Xe4BsFoRRwuZ4k1+i+jzdYLMB88dzNWnBLNAlO24IMfQdg2iz83VsrMcok/VIgHJEeWxicKOqUKYWduSdDbn1Es8SE8MeiKaUNxze+D4Vx3037892vOzdJA2D+vNQpCxnTR3Vu5LNs++HQWk0uO3ML8Py8bcg1dEFSdGJwoqhhvPaNfmGp6TZVNfttVTvlNdKtIsLt9pr/c3n331rDoItGtVMBlAenP89Yhz+8t8Zyuf/5XvuSYQx+FXHqbAlGv7AE//5uJz5d4z9PIEUHBieKGq5L6yuLdvrd5vO1+6umMlVsw7784BtVMn8PChsHNGw9dAJfrvfNIxjM60uy0esf87Bmd8UfRjZmz2DWiejH4ERR4YOVu90Zuv/9nf/gFCx7djzzblR+ZnPrQiD42iTBrRXT9IkNj50qtjTw45Z3VmPfsdOYu/mQ6fax9pxbPGJwoqjwyBebLG3Hi5J/3j8Z12g5O72yKHBm8mCsBsyFW3OxctevWLzNfBj6jtwCTskR5RicyNFeX5KNk4XW70UwNvkXDffj5gTIs3fqbAm+2VjeMguU32LWxoP440frPJZ9tT42u3xjFYMTOU7GxFnIO3kWJwuLMe3brVixy/p9iNyTHKXlj9nMuNFk7uZDuOfDde6Rgn/5NPAQeGO6pFcW7cSfZqzH6aISPDNnK0bq05UYFRaX4s2l2eg2aQ6yOEtvxDE4kSPlnynCgKcWAtASllrlnbWcotvRgrM4W6IFDddowIv9ZEIPxPWg8eETZ/Fj9lHThLUPfLoBT83eilNFpbjq9eUhtdjJfgxO5Eh//3IzTuvPyNz0zmrL+2XnRW9Ko2hXGd2GC7YcxvZDBXhq9lZk5/r+bkN9/mvEc4uxwSQjBeD7LHCPyfNCKpvsxeBEjvHhyj14R3+wdvmuoxGuDYWqMkZvb9yX724xvWzyCIF3vkXPfY8bXgcfit8vo37I9ftw5R58+1PgWYypYhicyDEmz9yMySEmRCXnOFMcPBtEqD5YuSfgTL1Zu/3P5+VqyJ0sLHbPHeV/W4XHZm42XW4mY+IsbNqfj4e/+Ml0v9U5v+Kh//sp4DEpsKgMTsZvRPGo4GwJjp+OvWGyTNxJZl5bXPHh6V+t349BU78LuM39n6xHm4dmm64LFNNciWmPef0tlpSW4erXl7unEjHKP12MHYct5Buk6AxOl778Y8jTJezKK8DbP/5SoczOZp6esxX/XrjDlrJCdfG/vkfvKfMjcuzKVFzK4ES+vtlY8W6z5dlHUeAn9dO9H63DztyT+L8AWUXMnpXq/HdtvrA/zVgPoPxzq5RCaZkK+Dm++o1lOP9F89RbFXHqbAneW7HbtvKcxPHBacBTCzDpq/KHBV3N7OJS/7NoKqUw7NlFeHNpNpRSWLfnGC54cSn+oXcZ5fiZWjoUry3OxqthfKOzqqikzKdrIeeo/zlyiKhcoDEaX284gLEvfR9w/35PLsD5LyzB6aLyAFdY7Hntad2gBia8vQqPfLkJ7R6e7dED8OZSz2tEKAltb3p7lcd0Il+t3485m8oD9ZGCs+j22Fz8vRIepnYCxwenwyfO4t3lu90XaFczu6RMQSmFtXt8+5zPlpRh99HTeGr2VizdcQS/eXWZR5/z8OcW44RhmOhew4RoZWUKa3Yfw5WvLQsYAKtKx0e/xf9+zAGgPT0/5p/WvnWVlikctTBz7E1vr8Ly7NAHHxScLcFzc7eFvJ+ZktIy21q0REYfZwWeasRKa31HbgG6TpqLTfvzsWhrrs/6klKFxdvy8OFKrRvP+DiDKy2TPycLiz0mazx+usjdZb9oWx4WGJLt/mnGejzwSfmzXdOX5bhfH/Nq4b2xJBsdHzWfEbq4tAyFQe4P/nPBdjz46YaIzpnm6OBk/OE/N0+7ELrS0zzxzRa0eWg2rnh1mXubmRsOuKekdsnONf+mcupsCfJPF0MphXOfWYSMibOQMXEW5mw+hCtfW4Y1u4+hoNBaJujZPx3Eo1/+hKKSMmw9pOV/CxQYFm/L9alnIK7EmvN/PoSth06iaR0tC/Td+gyngHaD1vgE/H+/34W+TywIWvaibXl4Yb55kNn762nc/cFaXP36Mp91czcdMh09ZcW9H63D3R+uxZrdx7Boay66TppboXKIqtLF//7B9LGG/V75HCe8Xb6N8Z7VHq8ej80H8tFj8jxc/fpy97LeU+aj95T52HdM27akTOFEYbE7KJ4qKsXeX0/jgheXeOSYPOfx+R5f8NbvPY6ikjLc65Ul45Z3VuPCfy5FvyDXhn8u2IFP1+zDkGna/bq7Pljjzm0JaNeGYAHO201vrwqplZcUUulVzDgK5pVF2bh3ZAf3+x92HnG/vvDFpXjggo7udCV3Dm/nXjflG/PRX66bpNdktvBYfpfhgv/XzzciO7cAIzo3Qv6ZYgxs2wAD2tTHiwu2A9BGJ50sLHbv8/4KzxugOdPGuV//7bON+DhrL3KmjXN/eL+4azDOaVUPx08XIS012eOZDeMvfsn2PMzZdNA9qdvBfC0LwqyfDuKFklKkJCVqx/h8I56YtQWrHxmNqQG+sRWXlqGgsAT1alYDAJzUg/CJwmL8/q1VePDCTujerA7OfWaRe5+8k2cx/s3lWPjAcADwOxLp1NkSTPpqM56/ppd7v7V7juHCbk0AaINZXMlBZ4VxL4EoWsz/+TBuezfLY5l3T8GJwmLUSE50vx/6tPa350rf9cHK8muL8e/SW7uHZ3tkZP96wwFc0ac5ujSpjSZ1UrHQ0PLbcvAEujStHbDuRaVl+M2rP2LdnuNoWb8GsvMK8NO+fLyxdBcAYOmDI9CqQQ339iWlZTh88iya163uU9aibXmoVyM54PGMxKn5tjIzM9WR0f/wWPbZHYPwxbr9Hr8oJ/tl6kU4UViCnbknceVry023WTZxJAZP+w5D2jfAezcPQIIeoIY/uwhHC4o8UrD4kzNtnMeH/cJujd2B7JepF+FUUSkOHD+DwuJSbNh7HOv2Hsf/rd2PGbcPxPg3VwAAzu3QEN/vKA/46Wkplpv0yx8aiTIFpCQlYNDUhSguVbi0VzOcLirBgi3aH8MzV/XEiTPFeGLWFktlEpG9plzWDZO+8hz2/vBFnfHs3G2YflN/tKxfAzvzCnDweCEe/sLaMPjr+rfCyl+OYlDbBrh5aBtc8u8f3A/PD27XAG/f1A+FRWWoUyPZfY3a/cyl61VZ6TnBynZscOrW8xx16qInIl2NiBjdpTEWbDkcfENd/ZrVmIGZiBynYa1qOFJQhBGd0rFIzyB/cPqfcfbgjqCpPWy55yQiY0Rkm4jsFJGJJutTRORjff1KEckIVubOvIpN0xwLQglMgPlwVyKiSDtSUD64I1RhBycRSQTwCoCxALoCuE5EunptdguAY0qp9gBeBPB0uMclIqLYZUfLqT+AnUqpXUqpIgAzAFzmtc1lAKbrrz8DMEokUFISIiKKZ3YEp+YAjA8T7NOXmW6jlCoBkA+ggXdBInK7iGSJSFbp6eCJGomIKDY56jknpdSbSqlMpVRmYo06ka4OERFFiB3BaT+Alob3LfRlptuISBKAOgA4JwIREZmyIzitBtBBRNqISDUA4wHM9NpmJoAb9ddXAfhOOXUMOxERRVzYGSKUUiUicg+AuQASAfxPKbVZRKYAyFJKzQTwFoD3RGQngF+hBbCAmtetjshntiMiokiwJX2RUmo2gNleyyYZXhcCuDqUMuvXrIYjXsv++/tM3OqVBsTJdj45FpsPnMDqnF/9ZkZ47bd9cKee/ijr0dGoWz0ZSYkJISVC3fr4GHT++xzTddueGIOcI6excd9x7MwtwLvLd6NWahLyTp7F/ed3xAvzt4d+Yl4+uHUARIDaqcm4+N8/AADq1UjGsdPlyXWvzWyJgqISpiwiipDRXRq5M7a4NK9bHfuPn8Gj47pAKS2h8+YDJyw/a9msTioO5BeiY+NauHFwBh75wjN33ppHR+NIQRE6NUlzX9OKj+61NKOoo3PreRvUroHfC/Gdw9u5JyXr0rS2R5LCcLl+gf0y6uG+0R1x8/TV7rT5M+8Zgktf/tF0v6TEBPRqWRe9WtbF1xsPYsPe41j58CgMeGohAODWoW0wpnsTzPrjULRuUBO1Usp/HSseGgUF5c4BeHHPpqbz2qz7+/lINeTkAjzTGaUkJaJTkzR0apIGAHjooi7IP1OMfcdOo1uzOnhh/na0qFcdP/xtJHbmnsToF5bi7xd3xSU9m6K/Xk8AWPSX4Rjx3GJ3vsD2D89GSZlC1qOj0bBWinu7rEdHY8BTC7Fu0gUAtFx6H63ag6lX9ERZmULfVvX85jskikV/HNUB/woy99vbE/qhT6t66DVlns+6Pq3qYu2eik+w+vtBrXFxz2bo36a+x5fel8b3xmW9vQdWa8y+HF/dtwVqVEvE52v3u+fI+s+NmWiXXgsJIqiWlIBLejXDpv35GNyuoXu/BobrAwCo4rOemXL9cHRwcgUFAOjerDZqpiShqEQLCmmpSX0ruyUAABuMSURBVO6Epa4L5uH8QnRvXgfj+7d0Z7q+ZWgbvPXDLz5lvz2hH2pXT0bXprXRZVJ5sHv2qp548LONALQLvys5qtHWx8ciY+IspCYnoGeLuvjz6A54dXE2/u/Owdh++CQu7NYEP3sFx49vH4gypVCjWhKu6NMcwzs1wqW9mgEAujXzHZnYRM88DgAD29bHy9f3wbZDS7AjtwAJomU7rlM92aN+fxvTGdf3bwUAuGNYO7y+xHy+qTrVk1Gnevkx69XQymjfKM0jWe0zV/bEXz/XfhZtGtb0WHfPyPb454IdHoEJABrWSkH2Uxe53/dsURc9W9QFACQkCG4e2gafZO3F2ZIyXNCtMXJPnMUX6/xP9kYUzUSA+0Z3wF3D22H5rqO4SU/6nDNtHD5bsw9/+VSbAmNE50Ye+31020Bc958V+P2g1pgwOANv/fCLO6fo6zf0xR3vrzE93q6nLoIIcOf7azFn8yEAwJTLuptu6y8wecuZNg4dH/0WF/dqhmEd0/GPy7pjefZRNKubitYNanpsWzs12SMwGTWtk4q26TVhdWpERwenHyeOdEfwr+8dCgBwJe7+5A+D0C69Ft5dnuPe/oVrewPwzOjdp1U9vAXf4HROq7qoq1+U357QD+e0qouikjLUSk3CkYIiPD1nK6pXS/TZz0igVebPozviz6M7AgC6N9cu+v0y6ntsa2zdvHBN74Dleuvdsh4A4OKezfDigu3uNPwbHrvAvc2qh0ehfs1qSErUxrjcO7I9LurRxFL5vxvU2nT5Nf1a4pp+LU3Xje/XCl9WMKh8cdcQAHD/fB++qAv6PRl8eg+iSJp8SVdk7T4WdGbeazJb4JOsfe73IoLU5ESM6OQZgK7q2wJ9WtXF1xvKy1tw/zAAQPtGtQBoF/u26bXw5G964IOVe1CzWiLGdG+CnGnj8PScre7eonn3nYfaqcnuxNGuL7fGL5Su98dOFfmdHdilbcOa2HXkFL7907kAgO1PjPVYP6idz2OqQX33wHAkJAAf3mZte0c95+RPWmoSXAklEvT/kxO1ZuSt57b12T5Zv0Bf0qsZRnVphIljO3usf+N3fVGnennq9hGdG6FujWpoVDsVNaol4c7h7ZAzbZxPd1kkLH1wBP48Wpsq5N6R7bH18TGm2zWqneoOTABQMyXJ3WIJJGfaOFyTaR6AAmlSJxWLHxwR8n6AFpSMgT89LQW/TL0owB5EFXNtBT7bZpZNHIkJQ9rg5ev7+KzL0KeM6N5cm37isUu6ude5ekf8aZteC38aXT4VUPtGtdyBCQB6tCjv4bh5SBvcPLSN+/3lhpZPx8ZpHr0tD13UGaseGWV6zHo1q6Fl/Rqm61y++8tw5EwbF3RKjVBUr5bont7HCke3nABg0z8uRHVDkHAlPUoIkP0oMUE8vjHcMawdWtWvgTeX7sL6vcfdcwuFY0j7BkhLsT43SUUZ50pJSBCkJkQ+YFYGZrOiqlanejJeub4Pbnhrpd9tvr5nqEeAMJNz9DRypo1DcWkZth8+6XFteml80Jkh/Jfr1eqZdIlnytJOTdLw3QPDTLv4UpIS0Sgtuq8Vjg9OxkECgHYRe3RcF7QKEvm9XdSjKcZ2b4LjhhFk4fjg1oG2lFMR3/91BM6EOAtlNEhOFEvTZlN8aZSWgtwKThee0bCm33UrHx6F1ORE1KmejPwz5teFrs18Ww6rHxmNfk8uwEvje+NPM9a7lycnJqBbszru++JmFtx/Hn4+eDKEMwisbXotzLtvmG3lOUlUdOt5u/Xcth5dWFaJiOkAh2jTsn4NdGycFulqEFWJt2/qV+F9/3BeW6x82Lx7y9Vtv+qRUX63MWvPp6dpg4Aa1NT+b1zbc1BQtaQEPHB+RzSpneqzb/tGaUG7+kgTlcGJYtPVmS1xxTnWRhCR86Qm23856di4VsD1Tev4BgCjhARButeIUm8pSYloXDsVt5/ne//aNcDA24ZJF2Boh4a4um8LXNuvlc/6e0d1wAo/AY+sYXAix3jqNz3cIy55Cyr6JFbCL+2WoW3gSnQ2uktjn/Vmy1x6tyx/hOGcVsEHB50KMoLNqE4N7X7zs1f3wv3nd7S8H1nH4ESONN/Qj/72hIp361DVqYxBLX1b10PLejXQtWltjOvpO5CppMz//R3j3UvXIIW3bsxEj+bmAxwO5Rd6vOfnLrIYnMiRUpMT8N0DWoAqLbM+SOLqvi0qq0oUAe0bpaFOjWTM/tO57hbUE5ebP1Tqw5Bbuq0+MGJg2wZo42eQxKRLuqKm/ojDpIu7+jwYS1WLwYkcZ/lDI9GiXg20Ta+FHs3rmI6Y8qdp3eqVWLPo9sVdgyNdhbAMaNsA1/ZriRsGag+NT7q4a8DtjfeLpl7RA/0z6qNGtUQ8c1VPbJh0gc/2rRvUxOYpY5AzbZzH80QUGY4fSk7xp2md8gDjygxilZ/71wS4M6JEq+Z1q+PpK3u632sP0pv/wts3quXRwkpKTMAndwwCoI3Sc8ID9hQYW04UFa7rb+1Jf/FzsSJf53Ywz4EWDqu/J3/+8/tMy9t2apLmdzTfxT2bmuaspOjB4ERRYeoVPdFZz6zeoZH/4cU1guRDjGfeYTuUQGDVpb0q9ijADQO14djJiYKsR0cH3T5n2jh0b14HEwZnYMeTY33W80tK9GNwoqjhGg0WqKvvxsEZVVSbqmX2QGeoKmt4fiP9oVQFhUHtGrgfUg3F3y/uiq/uHoLzOqT7ZLoPRETcuTSNac6SEhmcoh2DE0UN4+Xm1d/6JuAEtKfzY1HbdP9peKwKtzXxlwvKn+dJMtzccyUHdQ2OWzZxJF6+3npOuYljOyMlKRG9Wtb1+9CrFV2b1cabv+uL+jWrYVjH9AqXQ84Qm3/JFJNcA4NFtFyJIzrFzwVI2ZBy0LvlFGpLqpGh9Xb9gPKsCEu253lsl5yY4G7NWPFJ1l6fZS3rV2zU5QXdmmDt3893T11D0YvBiaKG0q/QrrT7d41oH8nqVKkRne0JxF/dPcRn2Q0DfNPvBGOMa3307AslJs+jubI0BGQSeJ+/ujdeMZmewmqdKPoxOFHU8G49eGesjyahDtzo1KS2zxQKVjQy3P8Rgcc8Zq5uvr96zXfmT08/U0e4Mn8rk+ZdoNbZgxd2AgA0r+fbSurfpj7G9WxqqV4ugabRoejD4ERRo4XXRczOidCq2s9TzCeN9Mfswm/F5Eu7eVzkjddv12url/TOTcp/3sbatAjw4HP1AM8TbT+sTR1xZR+bsnowNsUUBieKGv7SznhbNnEk5t13XiXXpmqFEpuMo90u6NrY3T2mlOegCNercHPi/XFUB59lrvr+6zr/AyP6ZdQP67gU2xicKGqUmlyhze5LNKtbPebmu1JmN2b8mPXHoe4puo2Bp0wpr5ZTxYOS8VfhmlvNszxtA2OgTPPqhk1Ltbdblg2n2BK9nfYUd67v3wppqckey4LN9xMrQmk5pddKwdFTRQA8L9jFpQrVEk1aThWpj0mw9AhNJvUt81qYlMDvxuQfPx0UNTo0TvOZO6dD47SYyKcXyoOnwYgY7id5/GzMI1xiCD9A16AMpYBP7xiEH/42wm8dvHkfPUGAp6/sgfO7+p+TKRQ2jLYnB2FwInKA4UGe2XI1OoJ1hXVukgYRMb2fVLt6sumAiIpol14L/TLqo0W9Gqbrh3ZIx0P6KMANj12AD28dYHq8a/u1Qs0oHnVJlYfBiaJeVX1jHtq+IW4713wqhWZBpgs389RverhfB3seyHVhn3H7wIDbuUYweg+rzpk2Do3SPOvoClyhtJwAYPsTY3HTkIyA29RKScIfhrUDoA1fH9y+IUpKPX9Tdo78Tk4Ud+5Fig0MTkQWvX/rAL/3foINLujfxndkmivLwjf3DnXPUeSPq/j0IN1/rlpYfeYnZ9o4S9kc3r9lgPt1taQEn/Md2LZ+0CznZ0s8Z621c+bcTf+4EI9d0s228ijyGJyIqoBxHiJ/rDxkG/SCHmSUQ6Ddh7Rv4HfdoHb+1wHAjNsH4b83Bp7WvH5Nz/mkqoWQ4iiYlKTEkFuA5GwMTkRBjO9XPkeRvy7EYDHDmJkhFK6AVaY3Oqxef2unJuE1k+S4DWulmHZ/fX3PUFzbz38aIzuu+8YyPr9zMJOzUkAMThT1Kvv78m8HtMbHQe71DGgTuGURbh3Lk956lnR572ZexxH3dmN7+Kb/SU1OxJw/n4etj3tmqOjRog4S9bIzGmiDHFzZHZrXrW5TF1x5GX1b1wsrAznFPgYninpPGgYWGPXLqGdL+SLAgLZa8PF3z+m5qwN324Vzbe/evDa6NXMNdPBc98/xnhkYrD6sazZN+agujfDy9efgSz057Ie3afeZfpw4MtQqE4UtrOAkIvVFZL6I7ND/97kaiEhvEVkuIptFZKOIXBvOMYm8Xde/Fb57YJjPPRs7ppmwWo6dN/e9fXPvuWim568zm5Ppv8YZbcM459TkRFzcsxlK9ezido+CZF5WCkW4LaeJABYqpToAWKi/93YawO+VUt0AjAHwTxGxkEefyLq26b6ZIro2c05iWNumDTcUM/mSrgAAuxMtuNJEMcs3RVK4H+vLAEzXX08HcLn3Bkqp7UqpHfrrAwByAfBOKFW6GtWq5uHOUKe/8GZsmQXLtG6MF3VrVPPZ3w6uwRd2jqYDmPuOQhPup6+xUuqg/voQgIB5SESkP4BqALL9rL9dRLJEJCsvL89sEyLLquqLv6XpLwx1SU70X7Fg8SBYa8aOOFUjRQu2dv/82BKjUAQNTiKyQEQ2mfy7zLid0iac8fu3ISJNAbwH4CalVJnZNkqpN5VSmUqpzPR0Nq4oPBW5FH5x12CfZaFkBPdblwCVMZYfrBVkVowxA3tF530yqp2aXKGJDYN575b+uHFQ4IeNiVyCBiel1GilVHeTf18BOKwHHVfwyTUrQ0RqA5gF4BGl1Ao7T4DIn+uDTD++/CFro9Bsu19kobxgjQuz1kfL+uX57UxmSq8wu7sLOzROwzmt7BlBSbEv3G69mQBu1F/fCOAr7w1EpBqALwC8q5T6LMzjEVnmLympS6LFbia7kqX6LT+E4Bfs+N7TUjgNe/bIqnCD0zQA54vIDgCj9fcQkUwR+a++zTUAzgMwQUTW6/96h3lcovBV4EJZ0Wt/oEMZu/XCvS/TukHggBxplTnknmJLWMOZlFJHAYwyWZ4F4Fb99fsA3g/nOESRZHtjJMD1OdilOzU5ESseGoWBUxf6rFtw/3lo09C+yRfDHYVo5kxRie1lUmxihgiKW2bdacHikJUv/r1Mpr+w2mII1hUJAE38TM+Rmmxv8tOMhjWx9EHzyQQravE2jsIlaxiciAzMLu2hjtarX8M3yWvAbj1D8X8Y1haANvngIxd1Cem4lXG7qZXN3YRX9Glha3kUuxiciLzUMwkuVr1+g28mcB8BgkjPFlqrq3ZqMm47r63l4z5+eXd3iiMnG9W5ET6/c1Ckq0FRgMGJ4pZZi0hEsOLhUZh0cVf3spSk0O69hNqAqV3B6TSMfjewdVTMZ5SQIOjb2nfiRSJvVZPfhciJTKKIQAtGSXoWhyUPDkfrBjU91leE8ZaTMSj+POVC0zRLHNRG8Y4tJ4pLY7s3sbSdMTABQNMKdp0ZB18YX/vL/+fwx5WIKh2DE8WlTiazwQLBWyw3Dc7AyodH4a9jOgHQJs0zUsq8deVRroVWEVtOFO8YnIgM0lID3/9JSBA0rp2K/hnafZOUJP4JEVUG/mVR3DLrOWvTsKbJUpuPyz47oqAYnChu2TG6zaz7LVjy1Xr6PExE5B+DE8WthrVSwi7DuxGkAAxp3wAAcEHX8unNjEGM8xoRBcfgRFQBgRpHQ9unB90mGIYvincMTkQ2S7Dhr4p3pSjeMTgRhcG7h04poF16Lfdr93YhtoWszjVFFKuYIYLikt2z2xolJ4b3nW/C4AyM69k04DapyQno0rR2WMchcjIGJyIT9oz21gp543d9vZYGLnzypd2Clrz18bEVrxZRFGC3HsW8Xi3qhLyP1WeRMi0mMfWY6p3DHYiCYnCiuBSs9ZIYpGvOFbvuO79j0GN5hyLeTiIKjt16FPPMHooN1jC6JrMFuoZ5T8d1DI68IwodW04U88znbQq8T0pSok9S14oeC/AMhpf0ahZyuUTxhsGJYl5Zme+ycO/7lAbLUWSQmpwIY6akh0Ocfp0oHrFbj2JeZXSr9WldF1Ov6BF0uwX3D0O79JoQ3mgiCgmDE8W8ysgCnpKUiOv6twq4jQjQvlEt249NFA/YrUdkI4+sEGwtEVUYW04U87Ts4yc9lgUbSl5Rrmk4XvttH3RmBgeiCmNwopi2/KGRqJmShJ6T56FNw5ooUwq7j57GzUPb2H6sj28fiD76CL+xPQKnHyKiwBicKKY1rVMdAJAzbRwAYOaGA/jjR+tQO8h07BUxoG0D28skile850RERI7D4ERxhUMUiKIDgxPFFQ6gI4oODE4UV3q3rIteLetGuhpEFERYwUlE6ovIfBHZof/vNxmZiNQWkX0i8nI4xyQKR4t6NfDV3UPc79NSOSaIyInCbTlNBLBQKdUBwEL9vT+PA1ga5vGIbPXZHYMjXQUiMhFucLoMwHT99XQAl5ttJCJ9ATQGMC/M4xHZql5N+4eUE1H4wg1OjZVSB/XXh6AFIA8ikgDgeQB/CfNYRLar6llpmWuPyJqgHe4isgBAE5NVjxjfKKWUiJjlhLkLwGyl1L5gucZE5HYAtwNAq1aBk2oSEVHsChqclFKj/a0TkcMi0lQpdVBEmgLINdlsEIBzReQuALUAVBORAqWUz/0ppdSbAN4EgMzMTE4gSkQUp8IdqjQTwI0Apun/f+W9gVLqt67XIjIBQKZZYCKKBD73RORM4d5zmgbgfBHZAWC0/h4ikiki/w23ckSxpjLmliKKRWG1nJRSRwGMMlmeBeBWk+XvAHgnnGMS2YkNJyJnYoYIimucEJDImRiciIjIcRicKK4Z2013DGtX6cfjHSciaxiciHRV0sPH6ERkCYMTxbWqjhUJCbzHRWQFUzJTXCurwqHdwzqmo29rv4n7iciAwYniWllZeXCq7DbN9Jv7V/IRiGIHu/UorqWlMis5kRMxOFFcq14tETnTxgEAvt10KMK1ISIXBici3S9HTkW6CkSkY3Ai0v1xVIdIV4GIdAxORLpkDvMmcgwGJyIdn0Eicg4GJyIichwGJyIichwGJyIichwGJyIichwGJyIichwGJyIichwGJyIichwGJyJdm4Y1I10FItJxygwiADueHIvkRH5XI3IK/jUSAQxMRA7Dv0giInIcBiciInIcBiciInIcBiciInIcBiciInIcBiciInIcBiciInIcBiciInIcUUpFug6mROQkgG2RroeNGgI4EulK2Ijn42w8H2eL5/NprZRKD7aRk9MXbVNKZUa6EnYRkSyej3PxfJyN5+NslXE+7NYjIiLHYXAiIiLHcXJwejPSFbAZz8fZeD7OxvNxNtvPx7EDIoiIKH45ueVERERxisGJiIgcp8qCk4iMEZFtIrJTRCaarE8RkY/19StFJMOw7iF9+TYRudBqmZXJwvmcJyJrRaRERK7yWnejiOzQ/91oWN5XRH7Sy/yXiEhVnIt+7GDnc7+I/CwiG0VkoYi0jvLzuUOv23oR+UFEuhrWRd3nzbDdlSKiRCTTsCzqzkdEJohInv77WS8itxrWRd3nTd/mGv1vaLOIfGhYHnXnIyIvGn4320XkuO3no5Sq9H8AEgFkA2gLoBqADQC6em1zF4DX9dfjAXysv+6qb58CoI1eTqKVMiN8PhkAegJ4F8BVhuX1AezS/6+nv66nr1sFYCAAAfAtgLEOOp8RAGror+80/H6i9XxqG15fCmBONH/e9O3SACwFsAJAZjSfD4AJAF422TdaP28dAKwz1LVRNJ+P1/b3Avif3edTVS2n/gB2KqV2KaWKAMwAcJnXNpcBmK6//gzAKD2yXgZghlLqrFLqFwA79fKslFlZgh5bKZWjlNoIoMxr3wsBzFdK/aqUOgZgPoAxItIU2gVzhdJ+k+8CuLzSz0Rj5XwWKaVO629XAGihv47W8zlheFsTgGtkUFR+3nSPA3gaQKFhWTSfj5mo/LwBuA3AK3qdoZTK1ZdH6/kYXQfgI/21bedTVcGpOYC9hvf79GWm2yilSgDkA2gQYF8rZVaWcI4d6Hz2VbDMcIV6PrdA++YTaF/Hn4+I3C0i2QCeAfDHIPs6+vMmIn0AtFRKzbK4r6PPR3el3o38mYi0DLKv0z9vHQF0FJEfRWSFiIwJsq/TzwcAoHfvtwHwXZB9Qz4fDoigkIjIDQAyATwb6bqESyn1ilKqHYC/AXg00vWpKBFJAPACgAciXRcbfQ0gQynVE9q37+lBtne6JGhde8OhtTT+IyJ1I1oje4wH8JlSqtTugqsqOO0H0NLwvoW+zHQbEUkCUAfA0QD7WimzsoRz7EDn08JkeVWwdD4iMhrAIwAuVUqdDbKv48/HYAbKuxii8fOWBqA7gMUikgOtX3+mPigiGs8HSqmjhs/YfwH0DbKv0z9v+wDMVEoV692r26EFq2g9H5fxKO/SC7Rv6OdTRTfYkqDdGGuD8hts3by2uRueAyI+0V93g+cN3V3QbtgFLTOS52PY9h34Doj4BdrNwnr66/rK/IbhRU45HwDnQLtJ2sFrebSeTwfD60sAZMXC503ffjHKB0RE5fkAaGp4/RsAK6L88zYGwHT9dUNoXV8NovV89O06A8iBnszB7t9PpZ+oodIXQfu2kA3gEX3ZFGjfwgEgFcCn0G7YrgLQ1rDvI/p+22AY4WFWpoPOpx+0b0unoLUANxv2vVk/z50AbjIszwSwSS/zZeMv3QHnswDAYQDr9X8zo/x8XgKwWT+XRcY/vmj8vHltuxh6cIrW8wEwVf/9bNB/P52j/PMm0LpefwbwE4Dx0Xw++vvJAKaZ7GvL+TB9EREROQ4HRBARkeMwOBERkeMwOBERkeMwOBERkeMwOBERkeMwOBHZTEQaGDI2HxKR/frrAhF5NdL1I4oGHEpOVIlEZDKAAqXUc5GuC1E0YcuJqIqIyHAR+UZ/PVlEpovI9yKyW0SuEJFn9Plu5ohIsr5dXxFZIiJrRGSunt2ZKOYxOBFFTjsAI6HNJ/U+gEVKqR4AzgAYpweof0NLf9UXwP8APBmpyhJVpaRIV4Aojn2rlCoWkZ+g5buboy//CdpklZ2gJXSdr08amgjgYATqSVTlGJyIIucsACilykSkWJXfAC6D9rcp0HIyDopUBYkihd16RM61DUC6iAwCABFJFpFuEa4TUZVgcCJyKKVNkX0VgKdFZAO0DOqDI1sroqrBoeREROQ4bDkREZHjMDgREZHjMDgREZHjMDgREZHjMDgREZHjMDgREZHjMDgREZHj/D+QDjyOiSI1CwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "uQ5uzN1lvvUH"
},
"source": [
"The compiled, shuffled and processed audio data is then split in the ratio, 70:15:15 for training data, validation data and testing data."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "UEwXhR8-kq6s",
"outputId": "8bfbcc34-532f-4291-996f-53cde778ee6f"
},
"source": [
"data_length = len(speech_data_list)\n",
"data_ratio = {\n",
" 'train': 0.7,\n",
" 'validate': 0.15,\n",
" 'test': 0.15\n",
"}\n",
"training_ratio = int(data_length*data_ratio['train'])\n",
"validation_ratio = int(data_length*data_ratio['validate'])\n",
"testing_ratio = int(data_length*data_ratio['test'])\n",
"\n",
"print(f\"Dataset Ratio - Training Data: {data_length*data_ratio['train']:.0f}, \\\n",
"Validation Data: {data_length*data_ratio['validate']:.0f}, Testing Data: \\\n",
"{data_length*data_ratio['test']:.0f}\")"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Dataset Ratio - Training Data: 5600, Validation Data: 1200, Testing Data: 1200\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "WXfbbAyzwmNz"
},
"source": [
"The audio data is currently of a numpy array data type and needs to be converted to a tensorflow data type in order to use tensorflow functions."
]
},
{
"cell_type": "code",
"metadata": {
"id": "fi-0HURtvlz4",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "1641ca0c-e413-4e83-b3cc-8d96672215ac"
},
"source": [
"speech_data_as_tensor = []\n",
"\n",
"for index in range(len(speech_data_mfcc)):\n",
" # Inconsistency in array size is rectified by resize the array and\n",
" # filling with zeros\n",
" mfcc_array = np.copy(speech_data_mfcc[index])\n",
" mfcc_array.resize((20,32), refcheck=False)\n",
" speech_data_as_tensor.append(tf.expand_dims(\n",
" tf.convert_to_tensor(mfcc_array), -1))\n",
"\n",
"speech_data_as_tensor[0].shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"TensorShape([20, 32, 1])"
]
},
"metadata": {},
"execution_count": 79
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "YWkJgT_YyNK3"
},
"source": [
"# Dataset slicing to desired ratios\n",
"training_slice = speech_data_as_tensor[:5600]\n",
"validation_slice = speech_data_as_tensor[5600: 5600 + 1200]\n",
"testing_slice = speech_data_as_tensor[5600 + 1200:]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "eFq49dQx9DNn"
},
"source": [
"Tensorflow datasets types are created using the data slices and integer value of the labels"
]
},
{
"cell_type": "code",
"metadata": {
"id": "nwjI1XzJkKMS"
},
"source": [
"training_dataset = tf.data.Dataset.from_tensor_slices((\n",
" training_slice, speech_label_int[:5600]))\n",
"validation_dataset = tf.data.Dataset.from_tensor_slices((\n",
" validation_slice, speech_label_int[5600: 5600+1200]))\n",
"testing_dataset = tf.data.Dataset.from_tensor_slices((\n",
" testing_slice, speech_label_int[-1200:]))\n",
"\n",
"batch_size = 10\n",
"\n",
"# Adds a dimension to the dataset that is necessary for \n",
"# model fit tensorflow function\n",
"training_dataset = training_dataset.batch(batch_size)\n",
"validation_dataset = validation_dataset.batch(batch_size)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "qSAp1rky9G99"
},
"source": [
"A Convolutional Neural Network (CNN) Model is created using multiple layers; convolution, relu, pooling, fully-connected"
]
},
{
"cell_type": "code",
"metadata": {
"id": "eRkPTTd6jk4s"
},
"source": [
"num_labels = len(speech_commands)\n",
"norm_layer = layers.Normalization()\n",
"\n",
"# CNN model code as from source [1]\n",
"model = models.Sequential([\n",
" layers.Input(shape=(20,32,1)),\n",
" layers.Resizing(32, 32), \n",
" norm_layer,\n",
" layers.Conv2D(32, 3, activation='relu'),\n",
" layers.Conv2D(64, 3, activation='relu'),\n",
" layers.MaxPooling2D(),\n",
" layers.Dropout(0.25),\n",
" layers.Flatten(),\n",
" layers.Dense(128, activation='relu'),\n",
" layers.Dropout(0.5),\n",
" layers.Dense(num_labels),\n",
"])\n",
"### end of source [1]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "H0_rJAa_9OmS"
},
"source": [
"Layers of the CNN Model"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "VjzeizgZL0ls",
"outputId": "8bfc6d76-05aa-4d90-9eab-a3f9a7341e49"
},
"source": [
"model.summary()"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Model: \"sequential_1\"\n",
"_________________________________________________________________\n",
" Layer (type) Output Shape Param # \n",
"=================================================================\n",
" resizing_1 (Resizing) (None, 32, 32, 1) 0 \n",
" \n",
" normalization_1 (Normalizat (None, 32, 32, 1) 3 \n",
" ion) \n",
" \n",
" conv2d_2 (Conv2D) (None, 30, 30, 32) 320 \n",
" \n",
" conv2d_3 (Conv2D) (None, 28, 28, 64) 18496 \n",
" \n",
" max_pooling2d_1 (MaxPooling (None, 14, 14, 64) 0 \n",
" 2D) \n",
" \n",
" dropout_2 (Dropout) (None, 14, 14, 64) 0 \n",
" \n",
" flatten_1 (Flatten) (None, 12544) 0 \n",
" \n",
" dense_2 (Dense) (None, 128) 1605760 \n",
" \n",
" dropout_3 (Dropout) (None, 128) 0 \n",
" \n",
" dense_3 (Dense) (None, 8) 1032 \n",
" \n",
"=================================================================\n",
"Total params: 1,625,611\n",
"Trainable params: 1,625,608\n",
"Non-trainable params: 3\n",
"_________________________________________________________________\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "2Ut1BLvJFPiJ"
},
"source": [
"# CNN model compile code as from source [1]\n",
"model.compile(\n",
" optimizer='Adam',\n",
" loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n",
" metrics=['accuracy'],\n",
")\n",
"### end of source [1]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "e8sHwTyH10FS"
},
"source": [
"The epoch is determined (the number of training data cycles) and the NN is trained with the training data. This might take some time."
]
},
{
"cell_type": "code",
"metadata": {
"id": "R-_UPMcBeTHW",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "8104b13b-63ab-4292-a935-08dd4d1269a4"
},
"source": [
"epochs = 10\n",
"# Training the Neural Network, this might take some time\n",
"measure = model.fit(\n",
" training_dataset,\n",
" validation_data=validation_dataset,\n",
" epochs=epochs,\n",
" callbacks=tf.keras.callbacks.EarlyStopping(verbose=1, patience=3)\n",
" )"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch 1/10\n",
"560/560 [==============================] - 33s 58ms/step - loss: 1.9472 - accuracy: 0.3936 - val_loss: 1.1123 - val_accuracy: 0.6475\n",
"Epoch 2/10\n",
"560/560 [==============================] - 33s 59ms/step - loss: 1.0670 - accuracy: 0.6184 - val_loss: 0.8506 - val_accuracy: 0.7050\n",
"Epoch 3/10\n",
"560/560 [==============================] - 33s 58ms/step - loss: 0.8465 - accuracy: 0.7052 - val_loss: 0.7352 - val_accuracy: 0.7483\n",
"Epoch 4/10\n",
"560/560 [==============================] - 34s 61ms/step - loss: 0.6994 - accuracy: 0.7489 - val_loss: 0.7521 - val_accuracy: 0.7567\n",
"Epoch 5/10\n",
"560/560 [==============================] - 33s 59ms/step - loss: 0.6044 - accuracy: 0.7843 - val_loss: 0.6803 - val_accuracy: 0.7792\n",
"Epoch 6/10\n",
"560/560 [==============================] - 33s 60ms/step - loss: 0.5401 - accuracy: 0.8084 - val_loss: 0.7112 - val_accuracy: 0.7692\n",
"Epoch 7/10\n",
"560/560 [==============================] - 33s 60ms/step - loss: 0.4433 - accuracy: 0.8427 - val_loss: 0.7109 - val_accuracy: 0.7758\n",
"Epoch 8/10\n",
"560/560 [==============================] - 34s 60ms/step - loss: 0.4090 - accuracy: 0.8566 - val_loss: 0.7966 - val_accuracy: 0.7808\n",
"Epoch 00008: early stopping\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 266
},
"id": "ffOUoCTmKbHv",
"outputId": "033e03af-3e59-46a2-c0f9-cb0d318f8408"
},
"source": [
"metrics = measure.history\n",
"# Loss and validation loss\n",
"plt.plot(measure.epoch, metrics['loss'], metrics['val_loss'])\n",
"plt.legend(['loss', 'val_loss'])\n",
"plt.show()\n",
"# Modified code from source [1]"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "YuYaNxJt5LS5"
},
"source": [
"The above plot shows the 'loss' of the model (based on the training dataset) decreasing with epochs, showing that the neural network is learning to identify the speech commands accurately.\n",
"\n",
"The 'val_loss' or validation loss shows that the model starts overfitting at about epoch 3. More audio data would be needed to improve the accuracy of this model."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "vg5SOsenWycx",
"outputId": "eab97b06-6605-4331-f62d-1f51d2e3bd97"
},
"source": [
"# Modified CNN model test code from source [1]\n",
"test_audio_data = []\n",
"test_label_data = []\n",
"\n",
"for audio, label in testing_dataset:\n",
" test_audio_data.append(audio.numpy())\n",
" test_label_data.append(label.numpy())\n",
"\n",
"test_audio_data = np.array(test_audio_data)\n",
"test_label_data = np.array(test_label_data)\n",
"\n",
"predicted_values = np.argmax(model.predict(test_audio_data), axis=1)\n",
"true_values = test_label_data\n",
"\n",
"test_accuracy = sum(predicted_values == true_values) / len(true_values)\n",
"print(f'Test set accuracy: {test_accuracy:.0%}')\n",
"### end of modified source [1]"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Test set accuracy: 74%\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "XGE2q4FE2b4n"
},
"source": [
"As outputted above, the CNN model is able achieve an accuracy in the realm of 75% based on the dataset used."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "NYGdnlWt35oA"
},
"source": [
"This has hopefully been a simple introduction to NLP using Python.\n",
"\n",
"Please don't hesitate to ask questions in the comments below or leave a message on the contact page."
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment