本發(fā)明涉及語(yǔ)音識(shí)別領(lǐng)域,特別涉及一種神經(jīng)網(wǎng)絡(luò)聲學(xué)模型壓縮及語(yǔ)音識(shí)別方法。
背景技術(shù):
在語(yǔ)音識(shí)別領(lǐng)域,利用深層神經(jīng)網(wǎng)絡(luò)(Deep Neural Network,DNN)進(jìn)行聲學(xué)建模取得了很好的效果。DNN的深層結(jié)構(gòu)使得模型具有很強(qiáng)的學(xué)習(xí)能力,同時(shí)導(dǎo)致模型參數(shù)量巨大,因此要在計(jì)算能力偏弱的移動(dòng)設(shè)備上應(yīng)用DNN進(jìn)行語(yǔ)音識(shí)別的聲學(xué)建模十分困難:主要面臨著存儲(chǔ)需求大和計(jì)算復(fù)雜度高的問(wèn)題。
基于矢量量化的方法被用來(lái)對(duì)DNN模型進(jìn)行壓縮,從而節(jié)省儲(chǔ)存空間和計(jì)算量。其原理如下:
對(duì)于DNN的權(quán)值矩陣將其每一個(gè)行向量都分裂為個(gè)維度為d的子向量:
其中是權(quán)值矩陣W第i行的第j個(gè)子向量,上標(biāo)T表示轉(zhuǎn)置,之后,使用矢量量化的方法將全部子向量量化為K個(gè)碼本向量。這樣,原本M×N的矩陣,就可以用一個(gè)包含了K個(gè)d維向量的碼本表示,另外還需要(log2K)×(MJ)個(gè)比特來(lái)記錄每個(gè)子向量在碼本中的索引。該方法同時(shí)可以節(jié)省計(jì)算量,在DNN的前向計(jì)算中,由于處于同一列的子向量都是與相同的激活向量相乘,如果處于同一列的子向量中存在若干個(gè)子向量被量化為同一個(gè)碼本向量,那么這些子向量與激活向量的相乘結(jié)果就可以共享,從而減少了計(jì)算次數(shù)。
利用矢量量化壓縮DNN的方法會(huì)導(dǎo)致DNN的性能受到影響,其受影響的程度依賴(lài)于矢量量化的量化誤差,然而傳統(tǒng)的矢量量化只使用單級(jí)碼本,當(dāng)碼本較小(即碼本中的碼本向量數(shù)量較少)時(shí),量化誤差比較高,為了降低量化誤差,不得不呈指數(shù)地提高碼本規(guī)模,這樣就會(huì)使計(jì)算量大大增加,使得該方法失去了節(jié)省空間和計(jì)算的意義。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服矢量量化壓縮DNN的方法存在的量化誤差較大的問(wèn)題,提出利用多級(jí)矢量量化的方法對(duì)DNN進(jìn)行壓縮,通過(guò)加入第二級(jí)的量化,對(duì)第一級(jí)量化的殘差進(jìn)行再次量化,最終利用兩級(jí)碼本來(lái)代替原始的權(quán)值矩陣,一方面大大降低了量化誤差,同時(shí)避免了碼本規(guī)模呈指數(shù)增長(zhǎng)。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種神經(jīng)網(wǎng)絡(luò)聲學(xué)模型的壓縮方法,所述方法包括:將神經(jīng)網(wǎng)絡(luò)聲學(xué)模型的輸出層權(quán)值矩陣W的行向量按照指定的維數(shù)劃分為若干個(gè)子向量;對(duì)若干個(gè)子向量進(jìn)行一級(jí)矢量量化,獲得一級(jí)碼本,用一級(jí)碼本向量代替矩陣W的子向量,得到矩陣W*;利用矩陣W和W*,計(jì)算殘差矩陣R,并對(duì)R的向量進(jìn)行二級(jí)矢量量化;獲得二級(jí)碼本,用二級(jí)碼本向量代替矩陣R的向量,得到矩陣R*;最后用矩陣W*和R*表示權(quán)值矩陣W。
上述技術(shù)方案中,所述方法具體包括:
步驟S1)將神經(jīng)網(wǎng)絡(luò)聲學(xué)模型的輸出層權(quán)值矩陣W的行向量分裂成維數(shù)為d的子向量:
其中,W為M×N矩陣;
步驟S2)對(duì)步驟S1)得到的子向量進(jìn)行一級(jí)矢量量化,獲得一級(jí)碼本,用一級(jí)碼本向量代替矩陣W的子向量,得到矩陣W*;
對(duì)步驟S1)得到的子向量進(jìn)行一級(jí)矢量量化,得到一級(jí)碼本該碼本共含有K1個(gè)碼本向量,設(shè)權(quán)值矩陣W第i行的第j個(gè)子向量所對(duì)應(yīng)的一級(jí)碼本向量在C(1)中的索引值為id(1)(i,j)∈{1,…,K1},對(duì)應(yīng)的碼本向量為用碼本向量代替矩陣W的子向量得到矩陣W*:
步驟S3)利用矩陣W和W*,計(jì)算殘差矩陣R,并對(duì)R的向量進(jìn)行二級(jí)矢量量化;獲得二級(jí)碼本,用二級(jí)碼本向量代替矩陣R的向量,得到矩陣R*;
計(jì)算殘差矩陣R:
其中,
對(duì)向量進(jìn)行二級(jí)矢量量化,得到二級(jí)碼本該碼本共含有K2個(gè)碼本向量,設(shè)權(quán)值矩陣R第i行的第j個(gè)子向量所對(duì)應(yīng)的碼本向量在C(2)中的索引值為id(2)(i,j)∈{1,…,K2},對(duì)應(yīng)的碼本向量為用碼本向量代替對(duì)應(yīng)的矩陣R的子向量得到矩陣R*:
步驟S4)用矩陣W*和R*表示權(quán)值矩陣W:
矩陣W中的子向量在兩級(jí)碼本中的索引為id(1)(i,j)和id(2)(i,j);這樣存儲(chǔ)W轉(zhuǎn)換成存儲(chǔ)id(1)(i,j)和id(2)(i,j)。
上述技術(shù)方案中,所述步驟1)中的d的取值滿足:d能被矩陣W的行數(shù)N整除。
基于上述的神經(jīng)網(wǎng)絡(luò)聲學(xué)模型的壓縮方法,本發(fā)明還提供了一種語(yǔ)音識(shí)別方法,所述方法包括:
步驟T1)對(duì)于輸入的語(yǔ)音特征向量,經(jīng)過(guò)輸入層和隱層的前向計(jì)算之后,得到向量將其分裂為維度為d的子向量,得到其中
步驟T2)計(jì)算輸出層具體包括:
權(quán)值矩陣W由兩個(gè)碼本C(1)和C(2)以及相應(yīng)的索引id(1)(i,j)和id(2)(i,j)表示,其中i∈{1,2,…,M},
遍歷對(duì)于i=1,2,…,M,依次計(jì)算和如果在這個(gè)過(guò)程當(dāng)中,存在id(k)(i,j)=id(k)(i′,j),k∈{1,2},i′>i,則當(dāng)計(jì)算時(shí),直接使用的結(jié)果;計(jì)算:
得到輸出:y=[y1,…,yi,…,yM];
步驟T3)對(duì)y進(jìn)行softmax規(guī)整,得到似然值其中
步驟T4)將a送入解碼器進(jìn)行解碼;獲得文本形式的識(shí)別結(jié)果。
本發(fā)明的優(yōu)點(diǎn)在于:本發(fā)明的方法能夠降低神經(jīng)網(wǎng)絡(luò)聲學(xué)模型的存儲(chǔ)空間,同時(shí)大大降低了量化誤差,避免了碼本規(guī)模呈指數(shù)增長(zhǎng)。
附圖說(shuō)明
圖1本發(fā)明的神經(jīng)網(wǎng)絡(luò)聲學(xué)模型壓縮方法的流程圖。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步詳細(xì)的說(shuō)明。
如圖1所示,一種神經(jīng)網(wǎng)絡(luò)聲學(xué)模型的壓縮方法,所述方法包括:
步驟S1)將神經(jīng)網(wǎng)絡(luò)聲學(xué)模型(DNN)的輸出層權(quán)值矩陣W的行向量分裂成維數(shù)為d的子向量:
其中,W為M×N矩陣;
在本實(shí)施例中,DNN模型共有7層,其中5個(gè)隱層的權(quán)值矩陣規(guī)模都是5000×500,輸入層的權(quán)值矩陣規(guī)模為5000×360,輸出層的權(quán)值矩陣規(guī)模為20000×500。輸入觀測(cè)向量的維度為360,具體來(lái)說(shuō)是13維梅爾域倒譜系數(shù)(MFCC)特征經(jīng)過(guò)擴(kuò)展、線性鑒別分析(LDA)、最大似然線性變換(MLLT)以及特征空間的最大似然線性回歸(FMLLR)后得到40維特征,之后對(duì)其進(jìn)行上下文各4幀的擴(kuò)展,得到(4+1+4)×40=360維的輸入特征。采用的數(shù)據(jù)集為標(biāo)準(zhǔn)英語(yǔ)數(shù)據(jù)集Switchboard,訓(xùn)練數(shù)據(jù)為286小時(shí),測(cè)試數(shù)據(jù)3小時(shí);輸出層參數(shù)量約占整個(gè)模型參數(shù)量的一半。
在本實(shí)施例中,
步驟S2)采用規(guī)模為1024的碼本,對(duì)步驟1)得到的子向量進(jìn)行一級(jí)矢量量化,獲得一級(jí)碼本該碼本共含有K1個(gè)碼本向量,設(shè)權(quán)值矩陣W第i行的第j個(gè)子向量所對(duì)應(yīng)的碼本向量在C(1)中的索引值為id(1)(i,j)∈ {1,…,K1},對(duì)應(yīng)的碼本向量為用碼本向量標(biāo)識(shí)代替矩陣W的子向量得到矩陣W*:
步驟S3)利用矩陣W和W*,計(jì)算殘差矩陣R,并對(duì)R的向量進(jìn)行二級(jí)矢量量化;獲得二級(jí)碼本,用二級(jí)碼本向量代替矩陣R的向量,得到矩陣R*;
計(jì)算第一級(jí)量化的殘差,得到殘差矩陣R:
其中,
采用規(guī)模為1024的碼本對(duì)殘差向量進(jìn)行二級(jí)矢量量化,得到二級(jí)碼本該碼本共含有K2個(gè)碼本向量,設(shè)權(quán)值矩陣R第i行的第j個(gè)子向量所對(duì)應(yīng)的碼本向量在C(2)中的索引值為id(2)(i,j)∈{1,…,K2},對(duì)應(yīng)的碼本向量為用碼本向量代替對(duì)應(yīng)的矩陣R的子向量得到矩陣R*:
步驟S4)用矩陣W*和R*表示權(quán)值矩陣W:
矩陣W中的子向量在兩級(jí)碼本中的索引為id(1)(i,j)和id(2)(i,j);這樣存儲(chǔ)W轉(zhuǎn)換成存儲(chǔ)id(1)(i,j)和id(2)(i,j);
本發(fā)明的方法繼承了傳統(tǒng)方法能夠節(jié)省計(jì)算量的特性,在本方法中,一個(gè)子向量會(huì)被量化為兩個(gè)分屬不同級(jí)碼本的碼本向量之和,因此在DNN前向計(jì)算過(guò)程中,單個(gè)子向量與激活向量相乘,也會(huì)轉(zhuǎn)化為兩部分分別相乘再加和:
若處于同一列的子向量在第一級(jí)或者第二級(jí)量化中共享碼本矢量,就可以簡(jiǎn)化運(yùn)算。
基于上述神經(jīng)網(wǎng)絡(luò)聲學(xué)模型壓縮方法,本發(fā)明還提供了一種語(yǔ)音識(shí)別方法;所述方法包括:
步驟T1)對(duì)于輸入的語(yǔ)音特征向量,經(jīng)過(guò)輸入層和隱層的前向計(jì)算之后,得到向量將其分裂為維度為d的子向量,得到其中
在本實(shí)施例中,與輸出層權(quán)值矩陣對(duì)應(yīng),M=20000,N=500,d=4。
步驟T2)計(jì)算輸出層
由于權(quán)值矩陣W可由兩個(gè)碼本C(1)和C(2)以及相應(yīng)的索引id(1)(i,j)和id(2)(i,j)表示,其中i∈{1,2,…,M},
遍歷對(duì)于i=1,2,…,M,依次計(jì)算和如果在這個(gè)過(guò)程當(dāng)中,存在id(k)(i,j)=id(k)(i′,j),k∈{1,2},i′>i,則當(dāng)計(jì)算時(shí),可以直接使用的結(jié)果,從而節(jié)省了計(jì)算量;
計(jì)算:
得到輸出:y=[y1,…,yi,…,yM];
步驟T3)對(duì)y進(jìn)行softmax規(guī)整,得到似然值其中
步驟T4)將a送入解碼器進(jìn)行解碼;獲得文本形式的識(shí)別結(jié)果。
下面對(duì)本實(shí)施例的性能進(jìn)行分析。
利用測(cè)試集測(cè)試各個(gè)模型的單詞錯(cuò)誤率(word error rate,WER),模型分別為未經(jīng)壓縮的模型,單級(jí)矢量量化壓縮的模型(1024規(guī)模的碼本和8192規(guī)模的碼本)和多級(jí)矢量量化壓縮的模型(1024規(guī)模碼本進(jìn)行第一級(jí)量化,1024規(guī)模碼本進(jìn)行第二級(jí)量化);
單詞錯(cuò)誤率的計(jì)算公式如下:
壓縮比值得是模型壓縮后和壓縮前所需儲(chǔ)存空間之比,其計(jì)算公式為:
其中M和N分別為矩陣的行和列,分別等于20000和500,J為每行子向量個(gè)數(shù),取值為500/4=125,K1和K2分別為兩級(jí)碼本的規(guī)模,sizeof(data)指的是存儲(chǔ)單個(gè)數(shù)據(jù)所需要的比特?cái)?shù),比如對(duì)于浮點(diǎn)型數(shù)據(jù),需要32比特。
利用本發(fā)明的二級(jí)矢量量化壓縮后的權(quán)值矩陣所需要的存儲(chǔ)空間為:
sizeof(data)×d×(K1+K2)+log2(K1×K2)×M×J。
實(shí)驗(yàn)結(jié)果見(jiàn)表1:
表1
由實(shí)驗(yàn)結(jié)果可以看出,采用單級(jí)矢量量化,量化誤差較大,使用單級(jí)矢量量化壓縮后的DNN性能受損明顯;當(dāng)采用多級(jí)矢量量化對(duì)DNN進(jìn)行壓縮后,只需要采用兩個(gè)規(guī)模較小的碼本,便可以大大降低量化誤差,同時(shí)使得模型的識(shí)別性能近乎無(wú)損。對(duì)比表格中的后兩行:“8192”和“1024+1024”,雖然多級(jí)矢量量化后模型的壓縮比高于單級(jí)矢量量化后的模型,這是由于新加入的二級(jí)碼本需要額外的空間來(lái)記錄索引;但是得益于碼本總規(guī)模的縮小,多級(jí)矢量量化方法在計(jì)算量降低方面的表現(xiàn)要優(yōu)于單級(jí)矢量量化方法,在避免碼本規(guī)模呈指數(shù)增長(zhǎng)的同時(shí),做到了對(duì)DNN的性能無(wú)損壓縮。