使用Python和Keras創建簡單語音識別引擎

2020-12-10 不靠譜的貓

語音識別是機器或程序識別口語中的單詞和短語並將其轉換為機器可讀格式的能力。通常,這些算法的簡單實現有一個有限的詞彙表,它可能只識別單詞/短語。但是,更複雜的算法(例如Google的Cloud Speech-to-Text和Amazon Transcribe)具有廣泛的詞彙量,並包含方言、噪音和俚語。

在本文中,我將演示:

語音轉文字的工作原理如何處理要轉錄的音頻使用Keras解決問題的深度學習模型一種評估此模型的方法將預測模型集成到項目中的腳本

簡介

語音只是由我們的聲帶引起的空氣周圍振動而產生的一系列聲波。這些聲波由麥克風記錄,然後轉換為電信號。然後使用高級信號處理技術處理信號,分離音節和單詞。得益於深度學習方面令人難以置信的最新進展,計算機也可以從經驗中學習理解語音。

語音識別通過聲學和語言建模使用算法來工作。聲學建模表示語音和音頻信號的語言單元之間的關係;語言建模將聲音與單詞序列進行匹配,以幫助區分聽起來相似的單詞。通常,基於循環層的深度學習模型用於識別語音中的時間模式,以提高系統內的準確性。也可以使用其他方法,例如隱馬爾可夫模型(第一個語音識別算法是使用這種方法)。在本文中,我將僅討論聲學模型。

信號處理

有多種方法可以將音頻波轉換為算法可以處理的元素,其中一種方法(在本教程中將使用的一種方法)是在等距的點上記錄聲波的高度:

我們每秒讀取數千次,並記錄一個代表當時聲波高度的數字。這是一個未壓縮的.wav音頻文件。「 CD質量」音頻以44.1 kHz(每秒44,100個讀數)採樣。但是對於語音識別而言,16khz(每秒16,000個樣本)的採樣率足以覆蓋人類語音的頻率範圍。

用這種方法,音頻是通過一個數字向量來表示的,其中每個數字以1/16000秒的間隔表示聲波的振幅。這個過程類似於圖像預處理,如下例所示:

多虧尼奎斯特定理(1933年— 弗拉基米爾·科特爾尼科夫(Vladimir Kotelnikov)),我們知道,只要採樣速度至少是我們要記錄的最高頻率的兩倍,我們就可以使用數學方法從間隔採樣中完美重建原始聲波。

Python庫

為了完成這個任務,我使用Anaconda環境(Python 3.7)和以下Python庫:

ipython (v 7.10.2)keras (v 2.2.4)librosa (v 0.7.2)scipy (v 1.1.0)sklearn (v 0.20.1)sounddevice (v 0.3.14)tensorflow (v 1.13.1)tensorflow-gpu (v 1.13.1)numpy (v 1.17.2)

1.數據集

我們在實驗中使用TensorFlow提供的語音指令數據集。它包括由成千上萬不同的人發出的由30個短單詞組成的65000個一秒鐘長的話語。我們將建立一個語音識別系統,它可以理解簡單的語音命令。您可以從此處下載數據集(kaggle.com/c/tensorflow-speech-recognition-challenge)。

2.預處理音頻波

在使用的數據集中,一些記錄的持續時間少於1秒,並且採樣率太高。因此,讓我們閱讀聲波並使用下面的預處理步驟來解決這個問題。這是我們要執行的兩個步驟:

重採樣刪除少於1秒的短命令讓我們在下面的Python代碼片段中定義這些預處理步驟:

由上可知,信號的採樣率為16000 hz。我們把它重採樣到8000赫茲,因為大多數語音相關的頻率都在8000赫茲。

第二步是處理我們的標籤,這裡我們將輸出標籤轉換為整數編碼,將整數編碼標籤轉換為one-hot 向量,因為這是一個多目標問題:

預處理步驟的最後一步是將2D數組reshape為3D,因為conv1d的輸入必須是3D數組:

all_wave = np.array(all_wave).reshape(-1,8000,1)

3.創建訓練和驗證集

為了執行我們的深度學習模型,我們將需要生成兩個集合(訓練和驗證)。對於此實驗,我使用80%的數據訓練模型,並在其餘20%的數據上進行驗證:

4.機器學習模型架構

我使用Conv1d和GRU層來建模用於語音識別的網絡。Conv1d是一個僅在一維上進行卷積的卷積神經網絡,而GRU的目標是解決標準循環神經網絡的梯度消失問題。GRU也可以看作是LSTM的一個變體,因為兩者的設計相似,在某些情況下,可以產生同樣優秀的結果。

該模型基於deepspeech h2和Wav2letter++ algoritms這兩種著名的語音識別方法。下面的代碼演示了使用Keras提出的模型:

注意:如果僅使用CPU來訓練此模型,請用GRU替換CuDNNGRU層。

下一步是將損失函數定義為分類交叉熵,因為它是一個多類分類問題:

model.compile(loss='categorical_crossentropy',optimizer='nadam',metrics=['accuracy'])

Early stopping和模型檢查點是回調,以在適當的時間停止訓練神經網絡並在每個epoch後保存最佳模型:

讓我們在32的batch size上訓練機器學習模型,並評估保留集上的性能:

該命令的輸出為:

5.可視化

我將依靠可視化來了解機器學習模型在一段時間內的性能:

6.預測

在這一步中,我們將加載最佳的權重,並定義識別音頻和將其轉換為文本的函數:

對驗證數據進行預測:

這是一個提示用戶錄製語音命令的腳本。可以錄製自己的語音命令,並在機器學習模型上測試:

最後,我們創建一個腳本來讀取保存的語音命令並將其轉換為文本:

最後

語音識別技術已經成為我們日常生活的一部分,但目前仍局限於相對簡單的命令。隨著技術的進步,研究人員將能夠創造出更多能夠理解會話語音的智能系統。

相關焦點

  • Python 深度學習,你的 Keras 準備好了嗎?
    創建 tensorflow 的虛擬環境Python 為不同的項目需求創建不同的虛擬環境非常常見。因為在實際項目開發中,我們通常會根據自己的需求去下載各種相應的框架庫,但是可能每個項目使用的框架庫並不一樣,或使用框架的版本不一樣,這樣需要我們根據需求不斷的更新或卸載相應的庫,管理起來相當麻煩。
  • 【C/Python】單詞語音識別-牛刀小試
    今天筆者簡單的實現了一下單詞的語音識別器,在訓練集(1060 個樣本)上,錯誤率壓到 1.2%,一學期的努力算是有了一個交代。        注意項目用 Python 3.5.x 和 C 語言開發,開發環境是 Visual Studio 2017。本項目主要參考 HTK 語音識別包,但中間掉進不少的坑,讀者參考 HTK 時也需謹慎。
  • 用Keras+TensorFlow,實現ImageNet數據集日常對象的識別
    王新民編譯自DeepLearningSandbox博客量子位出品|公眾號QbitAI在計算機視覺領域裡,有3個最受歡迎且影響非常大的學術競賽:ImageNetILSVRC(大規模視覺識別挑戰賽),PASCALVOC(關於模式分析,統計建模和計算學習的研究)和微軟COCO圖像識別大賽。
  • Python語音識別終極指北,沒錯,就是指北!
    最重要的是,在 Python 程序中實現語音識別非常簡單。閱讀本指南,你就將會了解。你將學到:•語音識別的工作原理;•PyPI 支持哪些軟體包; •如何安裝和使用 SpeechRecognition 軟體包——一個功能全面且易於使用的 Python 語音識別庫。
  • 基於Tensorflow\keras銀行卡識別
    本文轉載自【微信公眾號:機器學習算法與Python精研 ,ID:AITop100】,經微信公眾號授權轉載,如需轉載原文作者聯繫來自:GitHub測試環境Ubuntu 18.04python3.6.7numpy 1.16.4tensorflow-gpu 1.13.1 或者是cpu版本keras 2.2.4opencv-python 4.1.0.25PyQt5 5.12.2CUDA 10.0.130cuDNN
  • 使用 Keras搭建一個深度卷積神經網絡來識別 c驗證碼
    下面的可視化代碼都是在 jupyter notebook 中完成的,如果你希望寫成 python 腳本,稍加修改即可正常運行,當然也可以去掉這些可視化代碼。Keras 版本:1.2.2。captchacaptcha 是用 python 寫的生成驗證碼的庫,它支持圖片驗證碼和語音驗證碼,我們使用的是它生成圖片驗證碼的功能。
  • 手把手教你在小數據集下使用Keras進行圖像分類
    它用於各種圖像和視頻分析,如面部識別和檢測、車牌識別、照片編輯、高級機器人視覺、光學字符識別等等。在本教程中,我們將使用它來讀取和調整圖像大小。NumPy 是 Python 中最流行的數學庫。有了這個庫,大型、多維數組和矩陣的工作和計算變得簡單快捷。它有大量的高級數學函數來操作這些數組。
  • 基於Arduino的文本語音轉換器和語音控制燈
    語音識別技術在自動化中非常有用,它不僅可以讓您免提控制設備,還可以提高系統的安全性。除了製造語音控制小工具外,語音識別還為患有各種殘疾的人們提供了重要幫助。 在之前的帖子中,我們製作了基於Arduino的文本到語音(TTS)轉換器和語音控制燈。
  • 帶你少走彎路:強烈推薦的Keras快速入門資料和翻譯(可下載)
    的快速入門資料,受到很多好評,讀者強烈建議我再出一個keras的快速入門路線,經過翻譯和搜索網上資源,我推薦4份入門資料,希望對大家有所幫助。當然這本書裡的代碼需要改一下,但非常簡單:import keras -> from tensorflow import keras
  • 教程 | 一招教你使用 tf.keras 和 eager execution 解決複雜問題
    (圖片標註)在暑期實習期間,我使用 TensorFlow 的兩個最新 API(tf.keras 和 eager execution)開發了這些示例,以下是分享內容。希望你們能覺得它們有用,有趣! Eager execution 是一個由運行定義的命令式接口,一旦從 Python 調用,其操作將被立即執行。這使得入門 TensorFlow 變得更簡單,也使研發更直觀。
  • 使用Keras和Tensorflow檢測惡意請求
    而安全軟體則可以幫你監控和抵禦各種未知的攻擊。那麼,是否可以利用Google的Tensorflow這個強大的引擎來判斷某個請求是否是惡意的呢?這就是我在參加Slalom最近的AI hackathon時想要回答的問題。本文簡單介紹了一個安全監控程序的PoC技術細節,該應用程式是在其他幾個Slalom參與者的協助下構建起來的。
  • python在Keras中使用LSTM解決序列問題
    首先,我們導入將在本文中使用的必需庫:from numpy import arrayfrom keras.preprocessing.text import one_hotfrom keras.preprocessing.sequence import pad_sequencesfrom keras.models import
  • 易用的新深度學習框架Keras簡介及使用
    最近發現了一個叫做Keras的框架,跟我的想法不謀而合,用起來特別簡單,適合快速開發。(其實還有很多其他的深度學習框架都是比較容易用的。)1. Keras簡介Keras是基於Theano的一個深度學習框架,它的設計參考了Torch,用Python語言編寫,是一個高度模塊化的神經網絡庫,支持GPU和CPU。
  • Keras和TensorFlow究竟哪個會更好?
    如果你陷於「我應該使用 Keras 還是 TensorFlow」這樣的問題,你可以退一步再看,其實這是一個錯誤的問題,因為你可以選擇同時使用兩個。 我會使用基於 TensorFlow 的標準 keras 模塊和 tf.keras 模塊,來實現一個卷積神經網絡(CNN)。
  • MXNet開放支持Keras,高效實現CNN與RNN的分布式訓練
    地址:https://github.com/awslabs/keras-apache-mxnetKeras 是用 Python 編寫的高級神經網絡 API,因其快速、簡單的 CNN 和 RNN 原型而廣受歡迎。
  • 用Python將Keras深度學習模型部署為Web應用程式
    該項目需要將眾多主題結合在一起:Flask:用Python創建一個基本的Web應用程式Keras:部署訓練有素的遞歸神經網絡使用Jinja模板庫創建模板用於編寫網頁的HTML和CSSFlask:http://flask.pocoo.org/Keras:http://keras.io/HTML
  • 《概率深度學習:使用Python,Keras和TensorFlow概率》附下載
    Probabilistic Deep Learning: With Python, Keras and TensorFlow Probability作者: Oliver Duerr出版日期: 2020ISBN: 9781617296079頁數: 252語言: English格式: PDF大小: 60 Mb概率性深度學習: 使用
  • 使用 Python 構建圖片搜尋引擎
    為了解決這個問題,我們可以使用產品的圖像,提取其特徵,並利用這些特徵檢索相似的產品。我們稱這個概念為基於內容的圖像檢索。在本文中,我將向您展示如何使用 Python 構建圖像搜尋引擎。在我向您解釋如何使用 Python 構建圖像檢索之前,讓我向您解釋基於內容的圖像檢索的概念。基於內容的圖像檢索(CBIR)是一種基於給定圖像的相關圖像檢索系統。
  • 使用Python三步完成文本到語音的轉換
    這裡小編將介紹文本到語音翻譯的基礎知識。簡要介紹文本語音轉換,然後介紹如何開始安裝Google文本語音轉換(gTTS)模塊。然後繼續了解gTTS模塊的工作原理,並編寫一個簡單的程序以更好地掌握總體概念。最後將探索更多有關使用此模塊可以完成的工作的想法,然後嘗試理解可以使用gTTS完成的許多實際用例。
  • 代碼詳解:構建一個簡單的Keras+深度學習REST API
    具體而言,我們將了解:· 如何(以及如何不)將Keras模型加載到內存中,以便有效地進行推理· 如何使用Flask web框架為我們的API創建端點· 如何使用我們的模型進行預測,用JSON-ify轉換它們,並將結果反饋到客戶端· 如何使用cURL和Python來調用我們的Keras REST API在本教程結束時,你將能很好地理解創建Keras REST API所需的組件(以最簡單的形式)。