8 月 31 日,Daniel Povey 以小米集團首席語音科學(xué)家的身份,正式推出了新一代 Kaldi。
Daniel Povey 是語音識別領(lǐng)域的執(zhí)牛耳者,他主要開發(fā)和維護的開源工具 Kaldi,是業(yè)界公認的語音識別框架的基石,他也被稱為 Kaldi 之父。
2019 年 Daniel 離任約翰霍普金斯大學(xué)語言和語音處理中心教職,在 Facebook、美團、滴滴、快手等一眾互聯(lián)網(wǎng)巨頭拋來的橄欖枝中選擇了小米,開始帶領(lǐng)小米語音技術(shù)團隊開發(fā)新一代 Kaldi。
加入小米后,業(yè)界開發(fā)者對 Daniel 的研究動向一直高度關(guān)注。
昨日 Daniel 亮相發(fā)布會現(xiàn)場,宣布新一代 Kaldi 完成了所有子項目的布局。他表示,“新一代 Kaldi 的目標不僅僅是趕上或者稍微領(lǐng)先現(xiàn)有語音識別庫,而是要從根本上改變語音識別的實現(xiàn)方式。”
據(jù)悉,經(jīng)過近一年多的技術(shù)研發(fā),Daniel 團隊完成了所有模塊的研發(fā)和更新,新一代 Kaldi 在 Librispeech 數(shù)據(jù)集上的詞錯率降到了 2.57%;通過全新代碼庫解決了 Kaldi 靈活性不足、體量過大等問題;作為核心部件的 k2,不僅可以用來做語音識別,也可以用來做手寫文字識別等其他任務(wù)。
兼容 PyTorch,提高識別精度
Kaldi 集成了多種語音識別模型,包括隱馬爾可夫和最新的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò),自 2011 年發(fā)布以來下載量超過了兩萬多次。無論是工業(yè)界還是學(xué)術(shù)界,幾乎所有的語音團隊都在使用 Kaldi 引擎來開發(fā)智能解決方案,包括 MIT、哈佛、清華、微軟、谷歌、Facebook 等等。
作為語音識別領(lǐng)域的“老前輩”,Kaldi 也急需更新迭代。
Daniel 在媒體見面會上坦言,初版 Kaldi 的舊代碼庫已經(jīng)難以滿足機器學(xué)習(xí)發(fā)展的需求,用戶需要更輕便、更靈活的源代碼,也需要兼容 PyTorch 等主流框架的工具包。
新一代 Kaldi 的研發(fā)工作從 2019 開始啟動,去年已經(jīng)完成了 k2 和 Lhotse 模塊的研發(fā)工作。Daniel 還在 2020 MIDC 大會上進行了展示,不過當(dāng)時 Icefall 模塊還只是一個初步概念。今年研發(fā)團隊進一步完善了 k2 和 Lhotse 模塊, 并基于二者正式發(fā)布 Icefall 項目。
Daniel 介紹說,與初代 Kaldi 相比,新一代 Kaldi 是一個全新的代碼庫,主要是由 C++、CUDA 寫就;支持 Python 調(diào)用;后端也由 PyTorch 取代了此前的自定義代碼。
發(fā)布會現(xiàn)場,Daniel 團隊不僅展示了如何使用 k2 和 Lhotse 來實現(xiàn)現(xiàn)有的各種不同的語音識別模型,如基于 Transformer/Conformer 的 CTC 和 LF-MMI 等,更著重展示了 k2 何以能從根本上改變?nèi)藗儗崿F(xiàn)語音識別的方式。
“我們實現(xiàn)了多輪解碼 (mutiple pass decoding) 的示例,以及我們稱之為‘雙向建模’(bidirectional modeling) 的模型”。Daniel 興奮地表示,基于這種多層模型的優(yōu)勢,新一代 Kaldi 可以大大提高語音識別模型的建模能力,從而降低詞錯誤率。目前,新一代 Kaldi 在 LibriSpeech 數(shù)據(jù)集上的詞錯誤率為 2.57%。
值得一提的是,Daniel 團隊在 k2 中實現(xiàn)了所有的 FSA 操作的可導(dǎo)性,用戶僅使用幾十行代碼就可以完成復(fù)雜的多層模型結(jié)構(gòu)。同時,他們還為用戶提供了極大的“自定義”空間,諸如在網(wǎng)絡(luò)中加入 phone 的 embedding 信息,支持帶置信度的識別等用戶自己的各種想法都能夠基于 k2 來實現(xiàn)。
Daniel 表示,希望通過新一代 Kaldi,能為語音識別領(lǐng)域打開一扇嶄新的大門。
引入 Python,改善靈活性
新一代 Kaldi 分為 Lhotse、Icefall 和 k2 三個部分,Daniel Povey 博士在發(fā)布會上表示,新一代 Kaldi 的獨立設(shè)計是為了降低耦合性,方便用戶使用。更重要的是,這樣有助于擴展了組件使用的靈活性。
例如,用作數(shù)據(jù)準備的 Lhotse,既可以用在 Icefall 項目里,也可以用在任意其他語音識別庫里來處理音頻和文本數(shù)據(jù),
Daniel 團隊在發(fā)布會上介紹了Lhotse、Icefall 和 k2 三個部分的更新細節(jié)。
Lhotse 拋棄了傳統(tǒng)的 shell 腳本,采用了更加方便易用的 Python 語言。通過通用且不失靈活性的接口設(shè)計,滿足了包括語音識別,語音合成等多種語音任務(wù)的需求,方便用戶基于 Lhotse 可以方便地實現(xiàn)針對自己特定任務(wù)的接口,操縱各種不同的音頻元數(shù)據(jù)和文本。
Lhotse 引入了 Audio Cuts 的概念,將訓(xùn)練數(shù)據(jù)自動地組織為一組組 Cuts,并基于這種表示,提供了 on-the-fly 的數(shù)據(jù)混合,裁剪,增強和特征提取等操作,從而在不影響數(shù)據(jù)處理效率的前提下,降低了數(shù)據(jù)存儲所需空間。
此外,Lhotse 還提供了很多公開數(shù)據(jù)集的數(shù)據(jù)處理腳本,用戶可以直接使用這些腳本,來進行相關(guān)語音任務(wù)的數(shù)據(jù)處理工作,大大降低了用戶在某個數(shù)據(jù)集上進行實驗的前期成本。
“相信在不久的將來,隨著新一代 Kaldi 的推廣和普及,Lhotse 甚至有可能成為語音領(lǐng)域使用最為廣泛的數(shù)據(jù)準備工具。”Daniel 期待地表示。
作為訓(xùn)練腳本的集合,同 Lhotse 一樣,Icefall 也是一個純 Python 項目。
用過 Kaldi 的人都知道,Kaldi 里有大量的基于不同數(shù)據(jù)集的示例腳本,顯著降低了用戶的學(xué)習(xí)成本。
但這同時也帶來一個缺點:示例腳本集合太過龐大,代碼耦合過于緊密,導(dǎo)致維護成本較高。
考慮到這一點,Daniel 表示 Icefall 并不是對大量腳本的盲目集合,而是在提取公共組件的同時將不同數(shù)據(jù)集的示例腳本進行獨立組織,以方便用戶的學(xué)習(xí)和使用。
此外,由于將數(shù)據(jù)準備部分單獨放在 Lhotse 項目中,核心計算部分單獨放在 k2 中,Icefall 項目只需要關(guān)注語音識別模型的結(jié)構(gòu)定義部分,降低了整個語音識別過程的耦合性,方便了網(wǎng)絡(luò)結(jié)構(gòu)的復(fù)用。
k2 是新一代 Kaldi 的核心。它的貢獻在于,將加權(quán)有限狀態(tài)轉(zhuǎn)換器 (Weighted Finite State Transducers, WFST) 和相關(guān)算法無縫地集成到基于 Autograd 的機器學(xué)習(xí)工具包中,如 PyTorch(已完成支持)和 TensorFlow。
WFST 是語音識別領(lǐng)域最為核心的數(shù)據(jù)結(jié)構(gòu),可以用來構(gòu)建諸如“音標-> 詞-> 句子”的狀態(tài)轉(zhuǎn)換概率圖。
支持 WFST 可導(dǎo)意味著我們可以做很多以前很難做到,甚至做不到的事情,如消除以往語音識別任務(wù)中訓(xùn)練跟解碼過程不匹配的問題、多輪(可求導(dǎo))的語音識別過程、在聲學(xué)網(wǎng)絡(luò)中嵌入任意輔助信息等。
同時,k2 也支持很多現(xiàn)有的語音識別模型,如 CTC、LF-MMI、RNN-T 等。
值得一提的是,去年 Facebook 發(fā)布了類似于 k2 的圖網(wǎng)絡(luò)建模 GTN 框架。與之相比,k2 實現(xiàn)了更多的 WFST 相關(guān)算法,并且能夠高效地支持 GPU(GTN 目前只支持 CPU)。GPU 實現(xiàn),意味著語音識別模型的訓(xùn)練速度更快,解碼速度更高效。新一代 kaldi 的解碼速度已經(jīng)是實時的 300 倍左右。此外,k2 在語音識別的基礎(chǔ)上,還可以應(yīng)用于手寫文字識別等其他 seq-to-seq 的任務(wù)。
新一代 Kaldi 依然開源
“新一代 Kaldi 或?qū)⒃诿髂曛皩⑷繎?yīng)用到小米所有的智能語音產(chǎn)品中”,Daniel 向媒體表示。他說,新一代 Kaldi 能夠適用各種場景的不同語音模型,如遠近場語音喚醒、離在線語音識別、說話人識別等通用模型,以及口語評測、語種識別、語音情緒識別等。
以小米小愛為例,“通過它,用戶可以連接到各種各樣的 AIoT 設(shè)備并與它們產(chǎn)生互動: 智能音箱、手機、電視、智能手表、兒童故事機、車載后視鏡等。”
不僅是小米,所有企業(yè)、開發(fā)者和普通用戶都可以繼續(xù)享受新一代 Kaldi 的核心技術(shù)。Daniel 表示,當(dāng)初之選擇加盟小米,也是因為小米承諾 Kaldi 可以繼續(xù)作為開源項目。“小米是一家穩(wěn)定的公司,重視開源開放,而且允諾我一直做開源項目,這對于我來說是最好的選擇”
Kaldi 從誕生之日起,就是一款開源語音識別工具包。Daniel 一直堅持開源工作,鼓勵更廣泛的用戶自由使用、復(fù)制以及修改源代碼,并推動智能語音技術(shù)的發(fā)展。
新一代 Kaldi 依舊采用了高效的 C++ 代碼實現(xiàn)。由于將 k2 的 C++ 代碼都包裝到了 Python, 模型的訓(xùn)練迭代都可以使用純 Python 代碼完成。
Daniel 表示,基于 Icefall 中的示例腳本,開發(fā)者們可以很容易地基于自己公司產(chǎn)品的數(shù)據(jù)集進行修改,進而快速地搭建線上數(shù)據(jù)反饋和模型自動迭代更新的流程,這將大大縮短模型更新的周期。
隨著新一代 Kaldi 的發(fā)布和其在小米產(chǎn)品線的逐步落地,相信在不久的將來,小米將和其他公司一起,為普通用戶帶來更加完善的 AIoT 產(chǎn)品體驗。
關(guān)于 Daniel
Daniel 可以說是語音識別領(lǐng)域的殿堂級人物。除了開發(fā) kaldi 外,他還對語音識別做出了許多科學(xué)貢獻,包括助力判別訓(xùn)練(現(xiàn)在稱為序列訓(xùn)練)的早期發(fā)展等。從 1999 年發(fā)布語音識別研究成果以來,其論文被引用次數(shù)超過了 30000 次。也因如此,Daniel 從約翰斯?霍普金斯大學(xué)離職后,引發(fā)了全球科技巨頭的一場人才爭奪戰(zhàn)。
Daniel 在 2012 年加入約翰斯?霍普金斯大學(xué),擔(dān)任語言和語音處理中心任副教授。在此之前,他在 IBM 研究院、微軟研究院從事計算機語音識別研究。
2019 年 10 月,Daniel 正式加入小米公司,擔(dān)任小米集團首席語音科學(xué)家。