陳玟均的學習歷程檔案 - 111-1人工智慧 - 5. 語音識別
 


歷程檔案 Portfolio

    5. 語音識別

    前言

    上一篇我們舉了一個很簡單的範例,判斷聲音是bed、cat 或是 happy,實務上它可以應用在一些場域,例如,PowerPoint簡報時,我們可以用聲音下指令,例如『上、下、Play、Stop』代表『上一頁、下一頁、撥放影片、停止播放』,又譬如操作機器人,也可以用聲音使它前後左右移動,這種指令式的應用是否需要以 Neural Network 技術實踐,是否殺雞用牛刀,就見仁見智了。

    LSTM範例擴展

    上一篇我們使用 CNN 演算法作語音辨識,其實,也可以用RNN(LSTM)作辨識,因為 LSTM 會考慮前面的訊號,程式節錄如下:

    # 導入函式庫 from __future__ import division, print_function, absolute_import import tflearn import speech_data  # 設定參數(Hyperparameters) learning_rate = 0.0001 training_iters = 300000  # steps batch_size = 64  width = 20  # mfcc features height = 80  # (max) length of utterance classes = 10  # digits  # 取樣 batch = word_batch = speech_data.mfcc_batch_generator(batch_size) X, Y = next(batch)  # train, test, _ = ,X trainX, trainY = X, Y testX, testY = X, Y #overfit for now  # 建立模型 net = tflearn.input_data([None, width, height]) # 建立LSTM層 # net = tflearn.embedding(net, input_dim=10000, output_dim=128) net = tflearn.lstm(net, 128, dropout=0.8) # 全連接層: 10個output net = tflearn.fully_connected(net, classes, activation='softmax') net = tflearn.regression(net, optimizer='adam', learning_rate=learning_rate, loss='categorical_crossentropy')  # 進行訓練 model = tflearn.DNN(net, tensorboard_verbose=0) #model.load("tflearn.lstm.model") while 1: #training_iters   model.fit(trainX, trainY, n_epoch=100, validation_set=(testX, testY), show_metric=True,           batch_size=batch_size)   _y=model.predict(X)  # 顯示預測結果 print (_y) print (y) 

    程式說明

    1. 這個程式 speech2text-tflearn.py 可從這裡下載,訓練資料會用到 curl、untar 等Linux指令,適合在Linux 環境下執行。
    2. 程式邏輯與上一篇幾乎相同,只是把 CNN(Conv2D/MaxPooling2D) 換成 LSTM 層而已。
    3. 同一目錄下的 speech_data.py 為公用函數庫,會被主程式 speech2text-tflearn.py 呼叫。
    4. 本程式使用 TFLearn ,與 Keras 同為 metat framework,讀者其實可以把上述程式改為 Keras based,應該也不難。

    擴展

    從這個簡單的範例出發,大家應該都會想到一些應用擴展上的問題:

    1. 範例只辨識單字,如果要辨識整句呢?
    2. 如果要辨識整段演講呢?

    短句辨識

    一個簡單的作法就是請講者說話速度慢一點,中間自然會產生靜音,我們就可以將 input 切成數段,之後辨識每一段為哪一個單字,組合起來即為整句內容,這種作法中文會比外語容易,因為中文都是單音節,要切割比較簡單。另外,為了提高準確,可以有兩種作法:

    1. CNN + LSTM:利用 CNN 萃取特徵,辨識單字,再利用『自然語言處理』提到的 LSTM 模型,它會考慮上下文,就可以較準確的辨識出整句內容了,可參考『CNN Long Short-Term Memory Networks』。
    2. 利用『自然語言處理』的前置處理及語意分析,判斷可能性較大的內容。例如,使用 spaCy 套件,簡單範例如下:
    import spacy from spacy import displacy  nlp = spacy.load('en') doc = nlp(u'I like the movie very much.') displacy.serve(doc, style='dep') 

    執行以上程式後,在瀏覽器輸入下列網址,結果如下圖,它可以利用詞向量及語料庫分析,我們可以進一步根據語意分析判斷,那些候選句是較合理的。
    http://localhost:5000/
    https://ithelp.ithome.com.tw/upload/images/20180105/200019769h2kcZtIa9.png
    圖. spaCy Visualizer

    以上方法在短句辨識上,實踐上應該很容易,但是,較長的字句就會力有未逮了。

    自動語音識別(Automatic Speech Recognition)架構

    如果針對整段演講進行辨識,勢必要有一個較完整的架構,除了靠『語音信號處理』外,尚須借重『自然語音處理』去矯正辨識出來的結果,才能畢其功於一役,以下就是一個較完整的架構。
    https://ithelp.ithome.com.tw/upload/images/20180105/20001976k7l1JZqGFg.png
    圖. 自動語音識別(Automatic Speech Recognition)架構,圖片來源:現階段大詞彙連續語音辨識研究之簡介

    從另一個角度,以各模組功能來看:
    https://ithelp.ithome.com.tw/upload/images/20180105/200019768mZNINfb1d.png
    圖. 分三個層次,信號處理(Signal)、聲學處理(Acoustic)、語言處理(Language),圖片來源:Kaldi now offers TensorFlow integration

    現階段大詞彙連續語音辨識研究之簡介』一文有相當詳盡的說明,筆者還是秉持初衷,用圖說故事,整理如下:

    1. 語音特徵擷取(Feature Extraction)

      • 以示波器測得的『時域』(Time Domain)信號
        https://ithelp.ithome.com.tw/upload/images/20180105/20001976Zuuhrl0cOb.png
      • 利用『快速傅立葉轉換』(Fast Fourier Transform,FFT)轉為『頻域』(Frequency Domain)信號
        https://ithelp.ithome.com.tw/upload/images/20180105/20001976r2NrvD0ksR.png
      • 再抽樣,轉為 MFCC 特徵向量
        https://ithelp.ithome.com.tw/upload/images/20180105/20001976QwEclFcUyu.png
    2. 聲學比對 -- 聲學模型(Acoustic model):傳統上使用『隱藏馬可夫模型』(Hidden Markov Model,HMM) 技術,依照音素(Phoneme)、音節的特徵向量比對,找出機率最大(最有可能)的單字,後來,又結合『高斯混合模型』(Gaussian mixture model,GMM),成為經典的 GMM-HMM 模型。最近 Neural Network 崛起,各種演算法及模型紛紛出籠,例如 RNN-HMM、Connectionist Temporal Classification (CTC)、Attention-based models 等。

    3. 語言解碼(Decode) -- 語言模型(Language model):經過聲學分析出來的字句,可能會有多種候選字句,例如下圖,再透過語料庫比對及語言模型,進行解碼找出機率最大(最有可能)的文句。
      https://ithelp.ithome.com.tw/upload/images/20180105/20001976kn4MehN32a.png

    以上圖形來自

    1. Speech Processing
    2. Python Deep Learning

    結語

    自動語音識別(Automatic Speech Recognition)與自然語言處理的關係是密不可分的,辨識出來的結果還是要依據語意、文法及大量標註的語料庫,才能正確的辨識,進而了解其意,最後才能有人機對話的可能,讀到這裡,範圍有點大,已經有點痛苦,下次再加油吧。

     
    全部共 0則留言
    登入帳號密碼代表遵守學術網路規範


    文章分類 Labels


    最新文章 Top10

    中華科技大學數位化學習歷程 - 意見反應