CTC-轉(zhuǎn)錄層(翻譯層)

1) 簡(jiǎn)介

先拿語(yǔ)音識(shí)別任務(wù)來說姆打,如果現(xiàn)在有一個(gè)包含剪輯語(yǔ)音和對(duì)應(yīng)的文本良姆,我們不知道如何將語(yǔ)音片段與文本進(jìn)行對(duì)應(yīng),這樣對(duì)于訓(xùn)練一個(gè)語(yǔ)音識(shí)別器增加了難度幔戏。

為了解決上述問題玛追,我們可以先制定一個(gè)規(guī)則,例如“一個(gè)字符對(duì)于是個(gè)語(yǔ)言片段輸入”闲延。對(duì)于不同的人來說痊剖,他們說話的語(yǔ)速也不一樣,這樣導(dǎo)致了上述的定義規(guī)則不可行垒玲。另一個(gè)解決辦法邢笙,手動(dòng)對(duì)齊每個(gè)字符在音頻中的位置。這種方法對(duì)于我們訓(xùn)練模型非常有效侍匙,但是不可否認(rèn)的是這種做法非常耗時(shí)。

上面只是拿語(yǔ)音識(shí)別來舉例叮雳,其實(shí)在其他一些識(shí)別任務(wù)中也會(huì)出現(xiàn)這個(gè)問題想暗,例如手寫字符識(shí)別,上面兩例如下圖所示

Connectionist Temporal Classification (CTC)正適合這種不知道輸入輸出是否對(duì)齊的情況使用算法帘不,所以CTC適合語(yǔ)音識(shí)別和手寫字符識(shí)別的任務(wù)

為了方便下面的描述说莫,我們做如下定義,輸入(如音頻信號(hào))用符號(hào)序列X=[x1,x2,...,xT]

表示寞焙,對(duì)應(yīng)的輸出(如對(duì)應(yīng)的標(biāo)注文本)用符號(hào)序列Y=[y1,y2,...,yU]储狭,為了方便訓(xùn)練這些數(shù)據(jù)我們希望能夠找到輸入X與輸出Y之間精確的映射關(guān)系互婿。

在使用有監(jiān)督學(xué)習(xí)算法訓(xùn)練模型之前,有幾個(gè)難點(diǎn):

  • X和Y都是變長(zhǎng)的

  • X和Y的長(zhǎng)度比也是變化的

  • X和Y相應(yīng)的元素之間沒有嚴(yán)格的對(duì)齊(即xt與yu不一定對(duì)齊)

使用CTC算法能克服上述問題辽狈。到這里可以知道CTC就是可以解決輸入輸出對(duì)應(yīng)問題的一種算法慈参。

這里我們首先需要明確的是,還拿語(yǔ)音識(shí)別來說刮萌,現(xiàn)在使用的CTC常用的場(chǎng)景是RNN后接CTC算法驮配,RNN模型輸入是個(gè)個(gè)音頻片段,輸出個(gè)數(shù)與輸入的維度一樣着茸,有T個(gè)音頻片段壮锻,就輸出T個(gè)維度的概率向量,每個(gè)向量又由字典個(gè)數(shù)的概率組成涮阔。例如網(wǎng)絡(luò)輸入音頻個(gè)數(shù)定為T猜绣,字典中不同字的個(gè)數(shù)為N,那么RNN輸出的維度為T×N敬特。根據(jù)這個(gè)概率輸出分布掰邢,我們就能得到最可能的輸出結(jié)果。在接下來的討論中可以把RNN+CTC看成一個(gè)整體擅羞,當(dāng)然也可以將RNN替換成其他的提取特征算法

損失函數(shù)的定義: 對(duì)于給定的輸入X尸变,我們訓(xùn)練模型希望最大化Y的后驗(yàn)概率P(Y∣X),P(Y∣X)應(yīng)該是可導(dǎo)的减俏,這樣我們就能利用梯度下降訓(xùn)練模型了召烂。

測(cè)試階段: 當(dāng)我們已經(jīng)訓(xùn)練好一個(gè)模型后,輸入X娃承,我們希望輸出Y的條件概率最高即Y?=argmaxYp(Y∣X)奏夫,而且我們希望盡量快速的得到Y(jié)?值,利用CTC我們能在低投入情況下迅速找到一個(gè)近似的輸出历筝。

2) 算法

CTC算法對(duì)于輸入的X能給出非常多的Y的條件概率輸出(可以想象RNN輸出概率分布矩陣酗昼,所以通過矩陣中元素的組合可以得到很多Y值作為最終輸出),在計(jì)算輸出過程的一個(gè)關(guān)鍵問題就是CTC算法如何將輸入和輸出進(jìn)行對(duì)齊的梳猪。在接下來的部分中麻削,我們先來看一下對(duì)齊的解決方法,然后介紹損失函數(shù)的計(jì)算方法和在測(cè)試階段中找到合理輸出的方法春弥。

3) 對(duì)齊

CTC算法并不要求輸入輸出是嚴(yán)格對(duì)齊的呛哟。但是為了方便訓(xùn)練模型我們需要一個(gè)將輸入輸出對(duì)齊的映射關(guān)系,知道對(duì)齊方式才能更好的理解之后損失函數(shù)的計(jì)算方法和測(cè)試使用的計(jì)算方法匿沛。

為了更好的理解CTC的對(duì)齊方法扫责,先舉個(gè)簡(jiǎn)單的對(duì)齊方法。假設(shè)對(duì)于一段音頻逃呼,我們希望的輸出是Y=[c,a,t]這個(gè)序列鳖孤,一種將輸入輸出進(jìn)行對(duì)齊的方式如下圖所示者娱,先將每個(gè)輸入對(duì)應(yīng)一個(gè)輸出字符,然后將重復(fù)的字符刪除苏揣。


上述對(duì)齊方式有兩個(gè)問題:

  1. 通常這種對(duì)齊方式是不合理的黄鳍。比如在語(yǔ)音識(shí)別任務(wù)中,有些音頻片可能是無聲的腿准,這時(shí)候應(yīng)該是沒有字符輸出的

2.對(duì)于一些本應(yīng)含有重復(fù)字符的輸出际起,這種對(duì)齊方式?jīng)]法得到準(zhǔn)確的輸出。例如輸出對(duì)齊的結(jié)果為[h,h,e,l,l,l,o]吐葱,通過去重操作后得到的不是“hello”而是“helo”

為了解決上述問題街望,CTC算法引入的一個(gè)新的占位符用于輸出對(duì)齊的結(jié)果。這個(gè)占位符稱為空白占位符弟跑,通常使用符號(hào)?灾前,這個(gè)符號(hào)在對(duì)齊結(jié)果中輸出,但是在最后的去重操作會(huì)將所有的?刪除得到最終的輸出孟辑。利用這個(gè)占位符哎甲,可以將輸入與輸出有了非常合理的對(duì)應(yīng)關(guān)系,如下圖所示


在這個(gè)映射方式中饲嗽,如果在標(biāo)定文本中有重復(fù)的字符炭玫,對(duì)齊過程中會(huì)在兩個(gè)重復(fù)的字符當(dāng)中插入?占位符。利用這個(gè)規(guī)則貌虾,上面的“hello”就不會(huì)變成“helo”了吞加。

回到上面Y=[c,a,t]這個(gè)例子來,下圖中有幾個(gè)示列說明有效的對(duì)齊方式和無效的對(duì)齊方式尽狠,在無效的對(duì)齊方式中舉了三種例子衔憨,占位符插入位置不對(duì)導(dǎo)致的輸出不對(duì),輸出長(zhǎng)度與輸入不對(duì)齊袄膏,輸出缺少字符a


CTC算法的對(duì)齊方式有下列屬性:

  • 輸入與輸出的對(duì)齊方式是單調(diào)的践图,即如果輸入下一輸入片段時(shí)輸出會(huì)保持不變或者也會(huì)移動(dòng)到下一個(gè)時(shí)間片段

  • 輸入與輸出是多對(duì)一的關(guān)系

  • 輸出的長(zhǎng)度小于等于輸入

4) 損失函數(shù)

這里要明確一點(diǎn),對(duì)于一個(gè)標(biāo)定好的音頻片段沉馆,訓(xùn)練該片段時(shí)码党,我們希望的輸出就是標(biāo)定的文本,如下圖所示斥黑,音頻說的一個(gè)hello闽瓢,RNN或者其他模型輸出的是相同數(shù)量的向量,向量里是每個(gè)字母的概率

對(duì)于一對(duì)輸入輸出(X,Y)來說心赶,CTC的目標(biāo)是將下式概率最大化

p(Y∣X)=∑A∈AX,Y∏Tt=1pt(at∣X)

解釋一下,對(duì)于RNN+CTC模型來說缺猛,RNN輸出的就是pt(at∣X)概率缨叫,t表示的是RNN里面的時(shí)間的概念椭符。乘法表示一條路徑的所有字符概率相乘,加法表示多條路徑耻姥。因?yàn)樯厦嬲f過CTC對(duì)齊輸入輸出是多對(duì)一的销钝,例如he?l?lo?與hee?l?lo對(duì)應(yīng)的都是“hello”,這就是輸出的其中兩條路徑琐簇,要將所有的路徑相加才是輸出的條件概率

但是對(duì)于一個(gè)輸出蒸健,路徑會(huì)非常的多,這樣直接計(jì)算概率是不現(xiàn)實(shí)的婉商,CTC算法采用動(dòng)態(tài)規(guī)劃的思想來求解輸出的條件概率似忧,如下圖所示,該圖想說明的是通過動(dòng)態(tài)規(guī)劃來進(jìn)行路徑的合并(看不懂也沒關(guān)系丈秩,下面有詳細(xì)的解釋)

假設(shè)我們現(xiàn)在有輸入音頻X對(duì)應(yīng)的標(biāo)定輸出Y為單詞“ZOO”盯捌,為了方便解釋下面動(dòng)態(tài)規(guī)劃的思想,現(xiàn)在每個(gè)字符之間還有字符串的首位插入空白占位符?蘑秽,得到下面結(jié)果

Z={?,Z,?,O,?,O,?}

為了便于說明饺著,先定義好下圖的橫縱坐標(biāo)軸的含義,橫軸是XXX的時(shí)間片單位為t肠牲,縱軸為ZZZ序列單位為s幼衰。根據(jù)CTC的對(duì)齊方式的三個(gè)特征,輸入有9個(gè)時(shí)間片缀雳,標(biāo)簽內(nèi)容是“ZOO”渡嚣,P(Y∣X)的所有可能的合法路徑如下圖


α表示對(duì)齊結(jié)果合并后(如圖3.png)節(jié)點(diǎn)的概率。αs,t 表示上圖中坐標(biāo)為(s,t)節(jié)點(diǎn)的概率俏险,該點(diǎn)的概率計(jì)算分為下面兩種情況:

Case 1

1)如果αs,t=?則αs,t只能由前一個(gè)字符αs?1,t?1或者本身αs,t?1得到

2)如果αs,t不等于?严拒,但是αs,t 為連續(xù)字符的第二個(gè),即αs=αs?2

(αs?1=?)竖独,則αs,t只能由一個(gè)空白符αs?1,t?1 或者其本身αs,t?1得到裤唠,而不能由前一個(gè)字符得到。

上述兩種情況中莹痢,αs,t可以由下式算出种蘸,其中pt(zs∣X))表示在時(shí)刻t輸出字符zs的概率。

αs,t=(α(s,t?1)+α(s?1,t?1))?pt(zs∣X)

Case 2:

如果αs,t不等于?竞膳,則αs,t可以由αs,t?1航瞭,αs?1,t?1以及αs?2,t?1得來,可以表示為

αs,t=(α(s,t?1)+α(s?1,t?1)+α(s?2,t?1))?pt(zs∣X)

從圖7中可以看到合法路徑由兩個(gè)起始點(diǎn)坦辟,輸出兩個(gè)終止點(diǎn)刊侯,最后輸出的條件概率為兩個(gè)終止點(diǎn)輸出概率的和。使用這種計(jì)算方法就能高效的計(jì)算損失函數(shù)锉走,下一步的工作表示計(jì)算梯度用于訓(xùn)練模型滨彻。由于P(Y|X)的計(jì)算只涉及加法和乘法藕届,因此是可導(dǎo)的。對(duì)于訓(xùn)練集D\mathcal{D}D亭饵,模型優(yōu)化的目標(biāo)是最小化負(fù)對(duì)數(shù)似然函數(shù)

∑(X,Y)∈D?logp(Y∣X)

5) 預(yù)測(cè)

當(dāng)我們訓(xùn)練好一個(gè)模型后休偶,我們輸入X,我們的目的是計(jì)算下式得到輸出

Y?=argmax Yp(Y∣X)

1.一種方法是貪婪算法辜羊,取RNN每次輸出概率最大的節(jié)點(diǎn)踏兜,計(jì)算方式如下

A?=argmaxA∏Tt=1pt(at∣X)

然后通過去重得到輸出結(jié)果。

通常這種啟發(fā)式的算法很有效八秃,但是這種方法忽略了一個(gè)輸出可能對(duì)應(yīng)多個(gè)對(duì)齊結(jié)果碱妆。例如[a,a,?]各自的概率均小于[b,b,b]的概率,但是他們相加的概率比[b,b,b]概率高喜德。簡(jiǎn)單的啟發(fā)是算法得到結(jié)果為Y=[b山橄,但是結(jié)果為Y=[a]更為合理∩崦酰考慮到這點(diǎn)第二種方式變的更為合理

2.第二種算法是Beam search的一種變形

先來說一下Beam search算法航棱,該算法有個(gè)參數(shù)叫做寬度,假設(shè)寬度設(shè)為3萌衬,在RNN的輸出中饮醇,該算法每個(gè)時(shí)間t輸出時(shí),不同于貪婪算法只找最高的秕豫,而是找最高的三個(gè)概率作為下一次的輸入朴艰,依次迭代,如下圖所示混移,每次t時(shí)間都是基于t-1輸出的最高三個(gè)查找當(dāng)前概率最高的三個(gè)祠墅。(這里也可以看出,當(dāng)寬度設(shè)置為1時(shí)就是貪婪算法)

因?yàn)槲覀冞@里想要結(jié)合多個(gè)對(duì)齊能夠映射到同一輸出的這種情況歌径,這時(shí)每次t時(shí)間的輸出為去重后以及移除?的結(jié)果毁嗦,具體如下圖所示

當(dāng)輸出的前綴字符串遇上重復(fù)字符時(shí),可以映射到兩個(gè)輸出回铛,如圖9所示狗准,當(dāng)T=3時(shí),前綴包含a茵肃,遇上新的a腔长,則[a]和[a,a]兩個(gè)輸出都是有效的。

當(dāng)我們將[a]擴(kuò)展為[a, a]時(shí)验残,我們只需統(tǒng)計(jì)之前以空白標(biāo)記?結(jié)尾的所有路徑的概率(位于字符中間的?也要統(tǒng)計(jì))捞附。同樣的,如果是擴(kuò)展到[a],那我們計(jì)算的就是不以?\epsilon?結(jié)尾的所有路徑概率鸟召。所以每次的輸出只需要記錄空白標(biāo)記?\epsilon?結(jié)尾的所有路徑的概率和不以?結(jié)尾的所有路徑概率來進(jìn)行下一次的概率計(jì)算想鹰。這個(gè)算法的實(shí)現(xiàn),Awni Hannun給出了示例

6) CTC的特征

1.條件獨(dú)立:CTC的一個(gè)非常不合理的假設(shè)是其假設(shè)每個(gè)時(shí)間片都是相互獨(dú)立的药版,這是一個(gè)非常不好的假設(shè)。在OCR或者語(yǔ)音識(shí)別中喻犁,各個(gè)時(shí)間片之間是含有一些語(yǔ)義信息的槽片,所以如果能夠在CTC中加入語(yǔ)言模型的話效果應(yīng)該會(huì)有提升。

2.單調(diào)對(duì)齊:CTC的另外一個(gè)約束是輸入X與輸出Y之間的單調(diào)對(duì)齊肢础,在OCR和語(yǔ)音識(shí)別中还栓,這種約束是成立的。但是在一些場(chǎng)景中例如機(jī)器翻譯传轰,這個(gè)約束便無效了剩盒。

3.多對(duì)一映射:CTC的又一個(gè)約束是輸入序列X的長(zhǎng)度大于標(biāo)簽數(shù)據(jù) YY的長(zhǎng)度,但是對(duì)于XXX的長(zhǎng)度大于YYY的長(zhǎng)度的場(chǎng)景慨蛙,CTC便失效了辽聊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市期贫,隨后出現(xiàn)的幾起案子跟匆,更是在濱河造成了極大的恐慌,老刑警劉巖通砍,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玛臂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡封孙,警方通過查閱死者的電腦和手機(jī)迹冤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虎忌,“玉大人泡徙,你說我怎么就攤上這事∧抛眩” “怎么了锋勺?”我有些...
    開封第一講書人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)狡蝶。 經(jīng)常有香客問我庶橱,道長(zhǎng),這世上最難降的妖魔是什么贪惹? 我笑而不...
    開封第一講書人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任苏章,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘枫绅。我一直安慰自己泉孩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開白布并淋。 她就那樣靜靜地躺著寓搬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪县耽。 梳的紋絲不亂的頭發(fā)上句喷,一...
    開封第一講書人閱讀 50,021評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音兔毙,去河邊找鬼唾琼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛澎剥,可吹牛的內(nèi)容都是我干的锡溯。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼哑姚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼祭饭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蜻懦,我...
    開封第一講書人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤甜癞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后宛乃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悠咱,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年征炼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了析既。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谆奥,死狀恐怖眼坏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酸些,我是刑警寧澤宰译,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站魄懂,受9級(jí)特大地震影響沿侈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜市栗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一缀拭、第九天 我趴在偏房一處隱蔽的房頂上張望咳短。 院中可真熱鬧,春花似錦蛛淋、人聲如沸咙好。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)勾效。三九已至,卻和暖如春叛甫,著一層夾襖步出監(jiān)牢的瞬間葵第,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工合溺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缀台。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓棠赛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親膛腐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子睛约,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350