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

2021-01-08 不靠譜的貓

語音識別是機器或程序識別口語中的單詞和短語並將其轉換為機器可讀格式的能力。通常,這些算法的簡單實現有一個有限的詞彙表,它可能只識別單詞/短語。但是,更複雜的算法(例如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和Tesseract來識別圖形驗證碼
    很多時候驗證碼明明很簡單(對於非網際網路企業,或者企業內網中的應用來說特別如此),但因為沒有趁手的識別庫,也只能苦哈哈地進行人肉識別,或者無奈地放棄任務。在這裡,我分享一下自己使用Python和開源的tesseract OCR引擎做驗證碼識別的經驗,並提供相關的原始碼和示例供大家借鑑。
  • 基於Arduino的文本語音轉換器和語音控制燈
    語音識別技術在自動化中非常有用,它不僅可以讓您免提控制設備,還可以提高系統的安全性。除了製造語音控制小工具外,語音識別還為患有各種殘疾的人們提供了重要幫助。 在之前的帖子中,我們製作了基於Arduino的文本到語音(TTS)轉換器和語音控制燈。
  • 用python識別驗證碼
    今天,我們就簡單的說下,怎麼用python來處理驗證碼。(注意:我所有的python相關的文章用的都是python3。)準備工作1、tesseract-ocr軟體Tesseract的OCR引擎最先由HP實驗室於1985年開始研發,至1995年時已經成為OCR業內最準確的三款識別引擎之一。然而,HP不久便決定放棄OCR業務,Tesseract也從此塵封。
  • Keras和TensorFlow究竟哪個會更好?
    如果你陷於「我應該使用 Keras 還是 TensorFlow」這樣的問題,你可以退一步再看,其實這是一個錯誤的問題,因為你可以選擇同時使用兩個。 我會使用基於 TensorFlow 的標準 keras 模塊和 tf.keras 模塊,來實現一個卷積神經網絡(CNN)。
  • 語音識別第一課:基於Tensorflow的端到端語音識別技術
    全文共6655字,預計學習時長13分鐘本文闡述了如何利用Tensorflow編寫一個基本的端到端自動語音識別(Automatic Speech Recognition,ASR)系統,詳細介紹了最小神經網絡的各個組成部分以及可將音頻轉為可讀文本的前綴束搜索解碼器。
  • 用PyTorch重新創建Keras API
    這個問題讓我開始了工作,最後我用所有那些花哨的進度條重現了Keras的Dense層、卷積層和平坦層。模型可以通過堆疊一層到另一層來創建,並通過簡單地調用fit方法進行訓練,該方法類似於Keras的工作方式。
  • 使用Keras構建具有自定義結構和層次圖卷積神經網絡
    圖卷積的這個公式是最簡單的。對於我們的教程來說,這很好,但是graphCNN更棒!好的!現在,我們準備開始了!步驟1.準備工作首先,我們需要導入一些包。你應該把接收到的導入包版本作為輸出。相反,我們只是想提供一個使用keras自定義層實現自定義模型的示例!模型1:序列層的神經網絡作為基準,我們使用具有序列層的標準神經網絡(熟悉的keras序列模型)。我們可以繪製模型來查看序列結構。讓我們看看這個模型是如何運行的。
  • 初學者怎樣使用Keras進行遷移學習
    我們將使用Keras中提供的ImageDataGenerator來訓練我們的可用數據模型。這樣,就代碼而言,該過程變得更加簡單。 必須有一個主數據文件夾,在該數據文件夾中,每個包含相應圖像的數據類必須有一個文件夾。文件夾的名稱必須是其各自類的名稱。 模型的構建是一個三步過程: 導入預先訓練的模型並添加密集層。
  • 語音識別是什麼 語音識別聲學特徵介紹【圖文】
    語音識別,什麼是語音識別  語音識別  與機器進行語音交流,讓機器明白你說什麼,這是人們長期以來夢寐以求的事情。語音識別技術就是讓機器通過識別和理解過程把語音信號轉變為相應的文本或命令的高技術。語音識別是一門交叉學科。近二十年來,語音識別技術取得顯著進步,開始從實驗室走向市場。
  • 用Python 訓練自己的語音識別系統,這波操作穩了
    作者 | 李秋鍵責編 | Carol封圖 | CSDN 付費下載自視覺中國近幾年來語音識別技術得到了迅速發展,從手機中的Siri語音智能助手、微軟的小娜以及各種平臺的智能音箱等等,各種語音識別的項目得到了廣泛應用。
  • python環境配置簡要流程
    Users\用戶名 目錄下修改 Anaconda 配置文件 .condarc,將 -defaults 這一行刪掉即可 5、版本對應關係 首先明白各個版本對應關係: https://docs.floydhub.com/guides/environments/ 6、創建虛擬環境
  • 從小白到入門:用Keras進行圖像基礎分類
    【IT168 資訊】在這篇文章中,將解釋一些在keras中經常需要的常見操作。首先,如何保存模型並使用它們進行預測,從數據集中顯示圖像並從加載系統中圖像並預測其類別。
  • 專注E2E語音識別,騰訊AILab開源語音處理工具包PIKA
    機器之心報導作者:魔王、杜偉PyTorch + Kaldi,騰訊 AI Lab 開源輕量級語音處理工具包 PIKA,專注於端到端語音識別任務。Kaldi 是一個開源的語音識別系統,由 Daniel Povey 主導開發,在很多語音識別測試和應用中廣泛使用。
  • 學習筆記,從NumPy到Scrapy,學習Python不能錯過這些庫
    NumPy構建在Numeric代碼庫上,並添加了numarray引入的特性、擴展的C-API以及創建任意類型數組的能力,這也使得NumPy適合與通用資料庫應用程式進行接口。numpy庫可以用來存儲和處理大型矩陣,並且在一定程度上彌補了python在運算效率上的不足,正是因為numpy的存在使得python成為數值計算領域的一大利器;2.
  • Python驗證碼識別:利用pytesser識別簡單圖形驗證碼
    ,涉及到計算機圖形學,機器學習,機器視覺,人工智慧等等高深領域……簡單地說,計算機圖形學的主要研究內容就是研究如何在計算機中表示圖形、以及利用計算機進行圖形的計算、處理和顯示的相關原理與算法。在Debian/Ubantu Linux下直接通過apt安裝:$sudo apt-get install python-imagingMax和其他版本的Linux可以直接使用easy_install或pip安裝,安裝前需要把編譯環境裝好:$ sudo easy_install PIL
  • MXNet 宣布支持 Keras 2,可更加方便快捷地實現 CNN 及 RNN 分布式...
    Keras-MXNet 深度學習後端現在可用,這要歸功於 Keras 和 Apache MXNet(孵化)開源項目的貢獻者。Keras 是用 Python 編寫的高級神經網絡 API,以快速簡單的 CNN 和  RNN 原型而聞名。Keras 開發人員現在可以使用高性能 MXNet 深度學習引擎進行 CNN 和遞歸神經網絡 RNN 的分布式訓練。
  • 第85講 Python深度學習之圖像識別
    前面有幾講也是關於機器學習在圖像識別中的應用。今天再來講一個關於運用google的深度學習框架tensorflow和keras進行訓練深度神經網絡,並對未知圖像進行預測。導入python模塊導入圖像數據
  • Python深度學習之圖像識別
    作者 | 周偉能 來源 | 小叮噹講SAS和Python Python在機器學習(人工智慧,AI)方面有著很大的優勢。談到人工智慧,一般也會談到其實現的語言Python。前面有幾講也是關於機器學習在圖像識別中的應用。今天再來講一個關於運用google的深度學習框架tensorflow和keras進行訓練深度神經網絡,並對未知圖像進行預測。
  • 如何在Keras中創建自定義損失函數?
    Keras 是一個創建神經網絡的庫,它是開源的,用 Python 語言編寫。Keras 不支持低級計算,但它運行在諸如 Theano 和 TensorFlow 之類的庫上。在本教程中,我們將使用 TensorFlow 作為 Keras backend。
  • 基於Julius的機器人語音識別系統構建
    1.2 JuliUS簡介  Julius是日本京都大學和日本IPA(Information-tech-nology Promotion Agency)聯合開發的一個實用高效雙通道的大詞彙連續語音識別引擎。目前已經能較好地應用於日語和漢語的大詞彙量連續的語音識別系統。