2020年3月27日 星期五

讀書筆記 - Speech Recognition - Overview (Part 1) ~ 李鴻毅教授

出處:李鴻毅教授 youtube : https://www.youtube.com/watch?v=AIKu43goh-8
投影片:http://speech.ee.ntu.edu.tw/~tlkagk/courses/DLHLP20/ASR%20(v10).pdf


1969 年,文章:語音辨識應該何去何從 ~ J.R. PIERCE (電晶體發明人) 為語音辨識下評論,當時懷疑語音辨識是否可能成真,把語音辨識和水變汽油、大海中濤金、治療癌症與登上月球,但今天已經能在每個人的手機中實現。
語音辨識簡單說就是一個 model,輸入是音訊輸出是文字,input/output 被表示成什麼樣子:輸入音訊:一串向量,T : 向量的長度, d: dimension
輸出文字:為 token 的 sequence,長度為 N,V 種不同 tokens
T 遠比 N 還大

3:55
輸出:文字想像成一個一個 Token,Token 有多種樣貌,常用的其中一種叫做 Phoneme
Phoneme:發音的基本單位 (可想像成音標,但有些音標超一個 Phoneme),但 Phoneme 人看不懂所以要一個 Lexicon (詞典) 記錄文字和 Phonemes 的關係,如 cat 有三個 Phonemes 組成。在機器學習還未發達前,Phoneme 是常見的選擇,缺點是需要一個 Lexicon 由懂語言學的人來建立,而一個語言有哪些 Phoneme 更不是一般人容易取得。
Grapheme :第二種單位,為書寫的基本單位,即英文字母,把字母當 Token 不足因為需要空白分隔單字,還要有標點符號,則英文的 Token 至少 > 26,以 one punch man 來看這句就有 13 個 token,中文可用全型字做為 Token,而中文的字一般常用為 4000 (康熙字典超過一萬),而中文是沒有空白的。Grapheme 好處:1) 新的語言用 Grapheme 做 Token 只收集該語言的字就能做語音辨識,2) 某些辭彙沒在訓練資料也可期待機器靠聽力拼出辭彙 (可能指像是學過羅碼拼音,不會的就用羅碼拼音先表示,之後再找出文字是羅碼拼音的是什麼字) 。缺點 : 1) ㄎ的音在英文可能是 [k] or [c],則模型需要能靠上下文, 2) 機器自己學會辭彙有哪些 Grapheme ,可能拼錯字,較難有風險。

Grapheme 更大的單位 Word (辭),英文明確且空白分隔且辭彙多過十萬,中文沒有辦法用空白分隔,一句話中有幾個辭彙很難說明,辭彙做單位不是好選擇,某些語言他的辭彙可能非常的巨大。如土耳其文,可在字根後不段加字根,無法窮舉永遠可以創造新的辭彙

另一個可以做語音辨識的單位是 Morpheme,語言可傳達意思的最小單位,比 Word 小比 Grapheme 大的單位。英文 unbreakable 可拆三個 Morpheme,可拆 un, break, able,但 Grapheme 單一個是沒有意義的,可是 Morpheme 是幾個字母湊起來會是有意義的字首 or 字根。但 Morphemes 要如何來,給你一個語言你如何知道可表意思的最小單位是什麼 : 1. 語言學家, 2. 統計大量收集。
最狂的方法,以 Bytes 做單位,每一個符號都可以用 UTF-8 表示,把所有不同語言、符號都用 Bytes Sequence 來描敘他,語音辨識的輸出即可是 Language Independence,也許不同單位適用於不同語言,但用 bytes 他即 Language Independence,聽到中文語音轉成 UTF-8,再查表後轉成文字,且 Token 的 size 不會太大 (V is always 256),藍色 ICASSP'19 的文章即是這樣使用 link
Token 統計表由 INTERSPEECH'19, ICASSP'19, ASRU'19, ASLT 發表的論文統計使用的 Token ,最多用的是 Grapheme,收集語言的文字即可得知,不需要找語言學家,第二是 Phoneme 與聲音之間關係較明確,接續 Morpheme 和 Word
其他語音辨識輸出的想法:
1. 用聲音訊號,直接轉 Word Embeddings (詞向量)
2. 語音和翻譯直接結合
3. 語音輸入後,透過語音辨識去判段你的意圖
4. 語音辨識和 Slot filling (給段文字判斷哪些東西是你要的) ,如買票的對話要知時間和地點

語音辨識輸入的部份,為一向量的序列,長度為 T,高度為 d,一段聲音訊號取一段 window 長度為 25 milliseconds,用一個向量來描敘這 25 milliseconds 的特徵,稱為 frame 音框,有什麼方法來描敘他:
1. 在 16KHz 的音訊檔,25 ms 的 window 內會有 400 sample points 與數值,排成一排向量 (不建議)
2. Deep Learning 未流行前會用 MFCC 39 dimension (未細講)
3. 目前流行的是 filter bank output 有 80 dimension (維)
取樣時,移動 window 時一次只移 10 ms,是有重疊,1 s 會有 100 個 frames。

聲音如何被抽出,Feature 如何被抽出,將音訊的 Waveform (波形圖) 透過 DFT (Discrete Fourier Transform 離散傅立葉變換, wikipedia), 得到 spectrogram (時頻譜, wikipedia), DFT 很重要,聲音訊號很複雜,人聽起來一樣的聲音訊號與 Waveform 會有不同,但 spectrogram 和聲音訊號明確,有些人可直接讀 spectrogram 即知道是什麼聲音 (Spectrogram Reading),透過 filter bank 得到一個向量,filter bank 跟解剖據哺乳類器官或人類聲學器官的理解,所設計出的 filter,通常都會取 log  (要懂聲音學 且取 log 後有無窮妙用,未細說),之後 DCT 得到 MFCC (最複雜)。

以上均稱為 Acoustic Feature 以下為 2019 的大驅勢,2010 年 MFCC 為主流,Deep Learning 後MFCC 逐漸被取代,2014 INTERSPEECH 微軟鄧利說了 bye bye MFCC,五年後的變化,75% 用 filter back output,MFCC 只剩 18%。
硬 Training 一發最重要的是收集資料,大量聲音訊號以及文字標駐,要多少才足夠,以下列出英文常用來訓練的語音資料庫,最小 TIMIT,最大 Fisher,Librispeech 為免費可以下載,TIMIT 小 (類似語音的 MNIST 手寫數字辨識) 分期確認自己的模型是否可行。
假想圖型的訓練集為音訊,比較看看音訊與圖像常用的訓練集大小差別:MNIST 的數據為 28*28*1*60000  (長 * 寬 * 單色 * 訓練集),語音是每一秒中有 16K 的 Sample point,即 1 秒中有 16000 個數字,如果把 MNIST 當音訊看 (最後都是轉成一個連續數字的向量),長度只有 49 分鐘,是 TIMIT 1/4 再更小。CIFAR-10 的圖是 32*32*3*50000,換算後約 2 小時 40 分鐘,都小於 TIMIT。最後是 google / FB 發表的文獻上說明使用的音訊長度,但教授認為至少實際上數據量使用至少大於十倍。
接下來會從 Seq-to-seq 開始說起,如何一步步進行改造,以及 HMM 的說明
分享五個模型,LAS (Seq-to-Seq 大家熟悉的 model)、CTC 和 RNN-T 為常用的模型,較新的是 Neural Transducer 和 Monotonic Chunkwise Attention,以下為 19 年大家愛用的模型,LAS + CTC 也可進行,RNN-T 還未有大量文件因此未來可能大量成長,HMM-hybrid 為 HMM + Deep Learning。

沒有留言:

張貼留言

How to install & specified python version or distreibtuion package version in google colab

在買了 RTX 3080 要來 挖礦...  嗯~是跑機器學習後,結果發現了 GOOGLE COLAB,其實之前在「GAN 對抗式生成網路」一書就有看到,但資訊人就是什麼都想自己安裝,在本機用 Anaconda + pyCharm 弄了 GPU 環境,結果有天從新竹回家發現家裡沒...