Chapter3-1_Speech Separation(Deep Clustering, PIT)
文章目錄
- 1 內(nèi)容簡(jiǎn)述
- 2 評(píng)價(jià)指標(biāo)
- 2.1 Signal-to-noise ratio (SNR)
- 2.2 Scale invariant signal-to-distortion ratio (SI-SDR)
- 2.3 其他的評(píng)價(jià)指標(biāo)
- 3 Permutation Issue
- 4 Deep Clustering
- 5 PIT
本文為李弘毅老師【Speech Separation - Deep Clustering, PIT】的課程筆記,課程視頻youtube地址,點(diǎn)這里👈(需翻墻)。
下文中用到的圖片均來(lái)自于李宏毅老師的PPT,若有侵權(quán),必定刪除。
文章索引:
上篇 - 2-2 CycleGAN and StarGAN
下篇 - 3-2 TasNet
總目錄
1 內(nèi)容簡(jiǎn)述
人在一個(gè)嘈雜的環(huán)境下聽(tīng)別人說(shuō)話的時(shí)候,可以很神奇的抽取到說(shuō)話人說(shuō)話的信息,換而言之,也就是把說(shuō)話人發(fā)出的聲音和說(shuō)話人之外的聲音給分開(kāi)了。而Speech Separation要做的事情,也就是把不同物體發(fā)出的聲音給分開(kāi)。
Speech Separation可以分為兩大類:
-
Speech Enhancement
把人的聲音和其他的聲音給分開(kāi)來(lái),也被稱為denoising -
Speaker Separation
把不同人說(shuō)話的聲音分開(kāi)來(lái)
本篇的著重點(diǎn)在于Speaker Separation,而且在討論的時(shí)候,都以兩個(gè)speakers,單一麥克風(fēng)的情況為例子。同時(shí),要說(shuō)明的是,用于訓(xùn)練和驗(yàn)證的聲音數(shù)據(jù)來(lái)自于不同的speaker,也就是說(shuō),訓(xùn)練集是A,B,C,D說(shuō)的,驗(yàn)證集是E,F說(shuō)的,這樣子。
Speaker Separation有一個(gè)特點(diǎn),就是它的輸入和輸出的長(zhǎng)度必然是一致的,所以可以不使用seq2seq的模型來(lái)解,用seq2seq的模型有一種殺雞用牛刀的感覺(jué)。
Speaker Separation有一個(gè)好處就是,數(shù)據(jù)集很容易構(gòu)造,我們只需要找一堆單個(gè)speaker的聲音信號(hào)過(guò)來(lái),然后兩兩合成一下,就可以了。
2 評(píng)價(jià)指標(biāo)
2.1 Signal-to-noise ratio (SNR)
有一種評(píng)估模型輸出質(zhì)量的方法叫做SNR,SNR的目的是讓模型的輸出X?X^*X?和X^\hat{X}X^越接近越好。SNR的計(jì)算公式如下所示
SNR=10log10∣∣X^∣∣2∣∣E∣∣2SNR=10 log_{10} \frac{||\hat{X}||^2}{||E||^2} SNR=10log10?∣∣E∣∣2∣∣X^∣∣2?
其中,X?X^*X?和X^\hat{X}X^均為向量,且
E=X^?X?E=\hat{X}-X^* E=X^?X?
不難看出,當(dāng)EEE越大的時(shí)候,SNRSNRSNR就小,也就是SNRSNRSNR認(rèn)為模型的結(jié)果越差,反之越好。
這種簡(jiǎn)單粗暴的評(píng)價(jià)方式,在面對(duì)聲音的時(shí)候,會(huì)存在一個(gè)致命的問(wèn)題。比如模型輸出的X?X^*X?和X^\hat{X}X^向量幾乎是平行的,只不過(guò)X?X^*X?短了一點(diǎn)(音量小了一點(diǎn)),這個(gè)時(shí)候SNR卻認(rèn)為模型學(xué)的不好,這其實(shí)是不合理的,不我們只要把音量調(diào)大一點(diǎn)就可以了。
又比如說(shuō),模型輸出的X?X^*X?和X^\hat{X}X^偏差比較大,但是當(dāng)X?X^*X?被調(diào)大了音量之后,這個(gè)SNRSNRSNR就認(rèn)為模型變好了,這也是我們不希望看到的。
總而言之,SNRSNRSNR受音量大小的干擾太大。
2.2 Scale invariant signal-to-distortion ratio (SI-SDR)
另一種文獻(xiàn)中常用的評(píng)價(jià)指標(biāo)叫做SI-SDR,SI-SDR也被稱為SI-SNR,知道這兩個(gè)是同一個(gè)東西就可以了。SI-SDR的計(jì)算公式為
SISDR=10log10∣∣XT∣∣2∣∣XE∣∣2SISDR=10log_{10} \frac{||X_T||^2}{||X_E||^2} SISDR=10log10?∣∣XE?∣∣2∣∣XT?∣∣2?
其中
{XE=X??XTXT=X??X^∣∣X^∣∣2X^\left\{ \begin{aligned} X_E = X^* - X_T \\ X_T = \frac{X^* \cdot \hat{X}}{||\hat{X}||^2}\hat{X} \end{aligned} \right. ??????XE?=X??XT?XT?=∣∣X^∣∣2X??X^?X^?
這個(gè)評(píng)價(jià)指標(biāo)就是在看X?X^*X?與X^\hat{X}X^的平行程度,解決了SNR被音量大小干擾的問(wèn)題。
而在實(shí)際使用的時(shí)候,我們看的,往往是SI-SDR的improvement。什么是improvement?比如我們要看下圖中藍(lán)色信號(hào)的improvement,那么我們就要先把輸入mixed audio和藍(lán)色信號(hào)的ground truth做一個(gè)SI-SDR得到SI-SDR1,然后再把藍(lán)色信號(hào)對(duì)應(yīng)的輸出和藍(lán)色信號(hào)的ground truth算一個(gè)SI-SDR2,再用SI-SDR2減去SI-SDR1來(lái)看這個(gè)增量。
為什么要這么做?因?yàn)橛行r(shí)候,mixed audio的紅色信號(hào)可能音量較低,這使得SI-SDR1本身就會(huì)比較大,SI-SDR2自然也就是大的,這個(gè)時(shí)候看增量improvement會(huì)更有意義。
2.3 其他的評(píng)價(jià)指標(biāo)
除了SNR和SI-SDR之外,還有其他很多評(píng)價(jià)指標(biāo),比如用來(lái)評(píng)價(jià)輸出聲音質(zhì)量的Perceptual evaluation of speech quality (PESQ),用來(lái)評(píng)價(jià)聲音清晰度的short-time objective intelligibility (STOI)。這些評(píng)價(jià)指標(biāo)都比較復(fù)雜,這里不多做介紹。
3 Permutation Issue
講完了評(píng)價(jià)指標(biāo)之后,我們就可以像正常了模型那樣開(kāi)始train了,我們的Loss就用L1或者L2或者SI-SDR都是可以的,SI-SDR是可以微分的。我們就輸入一個(gè)mixed audio然后經(jīng)過(guò)一個(gè)speaker Separation的model,出來(lái)一個(gè)X1X_1X1?和X2X_2X2?,再算一下loss,然后反向傳播,就結(jié)束了。真的就么就結(jié)束了嗎?錯(cuò)錯(cuò)錯(cuò)!
我們仔細(xì)來(lái)思考一下,輸出X1X_1X1?的這端和X2X_2X2?的這端是連接著固定的weights的,為什么X1X_1X1?一定是紅色信號(hào),X2X_2X2?一定是藍(lán)色信號(hào)。這兩個(gè)不能換一下嗎?加入我們又來(lái)了一個(gè)橙色信號(hào),那這個(gè)橙色信號(hào)應(yīng)該在哪個(gè)輸出?仔細(xì)想一下,這樣子網(wǎng)絡(luò)是沒(méi)法train起來(lái)的。這個(gè)其實(shí)就是Speech Separation中的Permutation Issue。
它不能像其他問(wèn)題那樣直接轉(zhuǎn)變?yōu)橐粋€(gè)可以直接train的神經(jīng)網(wǎng)絡(luò)。
那怎么辦?下面來(lái)介紹一下Deep Clustering和PIT。
4 Deep Clustering
在介紹deep clustering之前,我們先來(lái)說(shuō)一下其中用到的mask。由于Speech Separation只是對(duì)于輸入聲音信號(hào)的一個(gè)拆分,所以我們可以不生成聲音信號(hào),而是生成兩個(gè)mask。這兩個(gè)mask是互斥的,即M1=1?M2M_1 = 1 - M_2M1?=1?M2?,mask中的值可以是binary的(0和1),也是可以是continuous的(0至1)。如果是binary的,X1X_1X1?就是XXX中M1M_1M1?對(duì)應(yīng)元素為1的元素的組合,即X1=M1?XX_1 = M_1 \cdot XX1?=M1??X;X2X_2X2?就是X?X1=M2?XX-X_1 = M_2 \cdot XX?X1?=M2??X。
這種binary的方式,顯得非常簡(jiǎn)單粗暴,這樣難道不會(huì)造成很多信息的丟失嗎?不管你信不信,實(shí)際情況下,這種做法是work的。不過(guò)既然要把我們的訓(xùn)練目標(biāo)變成一個(gè)mask,那在處理數(shù)據(jù),生成label的時(shí)候,也有一些相應(yīng)的操作。
如下圖中,我們有藍(lán)色的聲音和紅色的聲音,然后合成了左上角紅藍(lán)結(jié)合的聲音。藍(lán)色和紅色的矩陣表示聲音信號(hào)轉(zhuǎn)換之后得到的spectrogram,紅藍(lán)矩陣的shape是一樣的,矩陣中每個(gè)元素之間比個(gè)大小,藍(lán)的大的話,藍(lán)色mask相應(yīng)為止的值就是1,反之是0。紅色的也是一樣。mask就是用這種方式構(gòu)造出來(lái)的。
然后用這種方式得到的mask在mixed audio上去取值,得到左下角的信號(hào),這個(gè)信號(hào)的聲音,和藍(lán)色信號(hào)的聲音,人聽(tīng)起來(lái),是沒(méi)什么區(qū)別的。這樣的mask叫做Ideal Binary Mask (IBM)。
也就是說(shuō),我們的模型只要能學(xué)到這樣的兩個(gè)IBM,就可以實(shí)現(xiàn)Speech Separation了。那么,我們的模型就變成了下圖這樣。
但是!到現(xiàn)在為止,我們?nèi)耘f沒(méi)有解決Permutation Issue。別急,馬上給你搞定。
先來(lái)說(shuō)一下Deep Clustering的Inference的過(guò)程。我們的輸入是一個(gè)代表mixed audio的D×TD \times TD×T的矩陣,經(jīng)過(guò)一個(gè)Embedding的網(wǎng)絡(luò)之后,生成了一個(gè)D×T×AD \times T \times AD×T×A的矩陣,這個(gè)AAA就是embedding之后的特征維度。然后,我們會(huì)對(duì)這個(gè)輸出做k-means clustering,如果有2個(gè)說(shuō)話人,就把cluster的個(gè)數(shù)設(shè)置為2即可,然后每個(gè)cluster就代表一個(gè)speaker的Ideal Binary Mask。是不是很機(jī)智!完美解決Permutation Issue。
不過(guò)這個(gè)東西訓(xùn)練該怎么train呢?k-means clustering是額外的算法,且不可導(dǎo),要做loss的話,就要在D×T×AD \times T \times AD×T×A的這個(gè)矩陣上做文章。
我們是有Ideal Binary Mask這個(gè)label的,那么,我們呢就可以讓mask上值一樣的feature的距離越大越好,mask值上值不同的feature越遠(yuǎn)越好,這樣的loss是可以做成可導(dǎo)的。
神奇的是,用2個(gè)speakers的聲音mix的的數(shù)據(jù)和deep clustering模型train出來(lái)的結(jié)果,針對(duì)于3個(gè)speakers的輸入,也是有效的!這真的是很了不起。
5 PIT
PIT是一種訓(xùn)練的方法,全稱為Permutation Invariant Training。這種訓(xùn)練方式就可以end-to-end去訓(xùn)練,總體思想很直覺(jué),就是我先隨便假設(shè)一個(gè)speakers對(duì)應(yīng)于輸出的X1X_1X1?和X2X_2X2?的順序,稍微train幾下,得到一個(gè)model。然后,下一次train的時(shí)候,我會(huì)算兩次SI-SDR之類的評(píng)價(jià)指標(biāo),分別是紅1,藍(lán)2和藍(lán)1,紅2,然后把Loss小的那個(gè)作為排序,然后按這個(gè)順序train下去。
每train一次,這個(gè)排序都可能會(huì)發(fā)生變化,所以剛開(kāi)始的時(shí)候,是非常不穩(wěn)定的,但只要這樣train下去,最終,是可以收斂的。感覺(jué)這個(gè)真的要靠做實(shí)驗(yàn)做出來(lái)。
還有就是,PIT相比于按照某種方式,假定一個(gè)順序的訓(xùn)練方式是要好一點(diǎn)的。
總結(jié)
以上是生活随笔為你收集整理的Chapter3-1_Speech Separation(Deep Clustering, PIT)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 6055. 转化时间需
- 下一篇: LeetCode 2151. 基于陈述统