最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

金融風(fēng)控-神經(jīng)網(wǎng)絡(luò)語音識別模型介紹(附代碼)

2023-09-19 12:07 作者:python風(fēng)控模型  | 我要投稿

前言

在金融風(fēng)控領(lǐng)域里,邏輯回歸,評分卡,集成樹算法是信用風(fēng)險計算的核心算法。

實(shí)際上,金融風(fēng)控領(lǐng)域覆蓋面很廣。人臉識別和語音識別也有廣泛應(yīng)用。貸前n要素檢測和反欺詐部門會應(yīng)用人臉識別技術(shù)。

催收部門會應(yīng)用到語音識別模型。今天就介紹一下基礎(chǔ)的語音識別模型建模,并提供python代碼。


今天我們將看到CNN(卷積神經(jīng)網(wǎng)絡(luò))應(yīng)用于語音識別應(yīng)用的示例。
我們基于 CNN 深度學(xué)習(xí)算法的機(jī)器學(xué)習(xí)模型的目標(biāo)是對一些簡單的單詞進(jìn)行分類,從 0 到 9 的數(shù)字開始。

為了提取語音的獨(dú)特特征,我們將首先采用在ASR(自動語音識別)領(lǐng)域使用的語音編碼過程,稱為梅爾頻率倒譜系數(shù)或更簡單的MFCC。

借助 MFCC 技術(shù),我們將能夠?qū)⒖陬^說出的每個單詞編碼為向量序列,每個向量有 13 個值長,代表 MFCC 算法系數(shù)。

在我們的例子中,即由個位數(shù)表示的單個單詞,我們將使用 48 x 13 矩陣對每個單個數(shù)字進(jìn)行編碼。

上圖顯示了MFCC編碼過程中涉及的主要模塊鏈:語音信號在時域中被分割成幾個具有適當(dāng)持續(xù)時間(通常為 25-40 ms)的幀。

對于每個分段,我們將計算功率譜密度。結(jié)果作為一系列部分重疊濾波器(濾波器組)的輸入提供,這些濾波器計算與功率譜的不同頻率范圍相對應(yīng)的能量譜密度。

每幀獲得 26 個系數(shù),由每個濾波器下游的能量譜結(jié)果組成。最后將結(jié)果通過離散余弦變換或DCT(離散余弦變換)進(jìn)行處理。

DCT 具有能夠通過盡可能最好地使用低頻來編碼信號特征的特性:這是一個有用的特性,因?yàn)槲覀冋谔幚碚Z音信號,其主要特性在 300 到 3400 Hz 之間。

最終結(jié)果:在此過程結(jié)束時,MFCC為我們提供了13 個有用的系數(shù),我們將通過部署一些最佳分類器(在本例中基于CNN)與適當(dāng)?shù)臋C(jī)器學(xué)習(xí)算法一起使用。

就訓(xùn)練階段而言,我們將使用這里提供的名為Free Spoken Digit Dataset的數(shù)據(jù)集:它是由不同的人根據(jù)不同的環(huán)境和時間發(fā)音從 0 到 9 的數(shù)字的大約2000 段錄音。

對于我們的分類器,我們將使用具有不同級別的卷積神經(jīng)網(wǎng)絡(luò),如下所示:

現(xiàn)在讓我們看看一些代碼和性能!
我們可以將一些有用的庫導(dǎo)入到我們的 Python Jupyter Notebook 中:

import?pandas as pdfrom sklearn.model_selection?import?train_test_splitimport?pickleimport?matplotlib.pyplot as pltimport?matplotlib.ticker as tickerfrom?IPython.display?import?HTMLimport?numpy as npfrom sklearn?import?preprocessingimport?matplotlib.pyplot as pltfrom scipy.io?import?wavfile as wavimport?scipyfrom python_speech_features?import?mfccfrom python_speech_features?import?logfbank

import?tensorflow?as?tf

from keras.models?import?Sequentialfrom keras.layers?import?Dense, Flatten, Activation, Dropout, LSTMfrom keras.layers?import?Conv2D, MaxPooling2D, GlobalMaxPooling2Dfrom keras.optimizers?import?SGDimport?os

讓我們分析一條隨機(jī)語音消息,例如“?0_jackson_0.wav?”文件:

N = sig1.shape[0]L = N / ratef, ax = plt.subplots()ax.plot(np.arange(N) / rate, sig1)ax.set_xlabel(‘Time [s]’)ax.set_ylabel(‘Amplitude [Base-ten signed range (per sample)]’);


出于好奇,現(xiàn)在讓我們看看將 MFCC 函數(shù)應(yīng)用于信號的結(jié)果:

mfcc_feat = mfcc(sig1,rate,nfft=512)plt.imshow(mfcc_feat[0:20,:])

我們還可以可視化一種頻譜圖:實(shí)際上它是關(guān)于信號每個時間幀的 DCT 的 13 個輸出……在這里我們可以看到前 20 個。


現(xiàn)在是我們開始認(rèn)真做事的時候了。
首先,我們將2000個錄音文件導(dǎo)入到一個特殊的向量列表中,然后將其進(jìn)行適當(dāng)?shù)霓D(zhuǎn)換和分離,從而獲得用于學(xué)習(xí)的有用值和用于預(yù)測的目標(biāo)標(biāo)簽:


soundfile = os.listdir(‘/Users/diego/Diego/Xenialab/AI/jupyter/digits’)data=[]for i in soundfile:(rate,sig) = wav.read(‘/Users/diego/Diego/Xenialab/AI/jupyter/digits/’+i)data.append(sig)


#set the independent varsize = 48X=[]for i in range(len(data)):mfcc_feat = mfcc(data[i],rate,nfft=512)mfcc_feat = np.resize(mfcc_feat, (size,13))X.append(mfcc_feat)X = np.array(X)


#set the target labely?= [i[0] for i in soundfile]Y?= pd.get_dummies(y)

目標(biāo)標(biāo)簽無非就是2000個錄音文件按照發(fā)音數(shù)字的矩陣值“1”。
讓我們看看這個矩陣的前三行:

print(Y[0:3])

? 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9
0 ?0 ?0 ?0 ?0 ?0 ?1??0 ?0 ?0 ?0
1 ?0 ?0 ?0 ?1??0 ?0 ?0 ?0 ?0 ?0
2 ?0 ?0 ?0 ?0 ?1??0 ?0 ?0 ?0 ?0

因此,前三個加載的錄音對應(yīng)于數(shù)字五、三和四。

讓我們將目標(biāo)標(biāo)簽轉(zhuǎn)換成合適的矩陣:

Y = np.array(Y)

我們還可以輸出自變量 X 的格式以更好地理解:

print(X.shape)

(2000, 48, 13)

因此,X 由2000 個?48?x?13矩陣組成,對應(yīng)于使用MFCC函數(shù)為每個語音記錄提取的特征。

現(xiàn)在是時候使用卷積神經(jīng)網(wǎng)絡(luò)來執(zhí)行學(xué)習(xí)過程了。我們再看一下:

這種類型的架構(gòu)還可以用于許多其他應(yīng)用,包括圖像識別和多種分類。在本例中,讓我們應(yīng)用它來實(shí)現(xiàn)我們的目標(biāo):語音識別。

model = Sequential()

#Convolution layers
model.add(Conv2D(8, (3, 3), activation=’relu’, input_shape=(size, 13,1)))
model.add(Conv2D(8, (3, 3), activation=’relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.1))

#Flatteningmodel.add(Flatten(input_shape=(size, 13,1)))

#1st fully connected Neural Network hidden-layer
model.add(Dense(64))
model.add(Dropout(0.16))
model.add(Activation(‘relu’))

#2nd fully connected Neural Network hidden-layer
model.add(Dense(64))
model.add(Dropout(0.12))
model.add(Activation(‘relu’))

#Output layer
model.add(Dense(10))
model.add(Activation(‘softmax’))
model.summary()

Model: "sequential_1"
_________________________________________________________________
Layer (type) ? ? ? ? ? ? ? ? Output Shape ? ? ? ? ? ? ?Param # ?
=================================================================
conv2d_1 (Conv2D) ? ? ? ? ? ?(None, 46, 11, 8) ? ? ? ? 80 ? ? ? ?
_________________________________________________________________
conv2d_2 (Conv2D) ? ? ? ? ? ?(None, 44, 9, 8) ? ? ? ? ?584 ? ? ?
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 22, 4, 8) ? ? ? ? ?0 ? ? ? ?
_________________________________________________________________
dropout_1 (Dropout) ? ? ? ? ?(None, 22, 4, 8) ? ? ? ? ?0 ? ? ? ?
_________________________________________________________________
flatten_1 (Flatten) ? ? ? ? ?(None, 704) ? ? ? ? ? ? ? 0 ? ? ? ?
_________________________________________________________________
dense_1 (Dense) ? ? ? ? ? ? ?(None, 64) ? ? ? ? ? ? ? ?45120 ? ?
_________________________________________________________________
dropout_2 (Dropout) ? ? ? ? ?(None, 64) ? ? ? ? ? ? ? ?0 ? ? ? ?
_________________________________________________________________
activation_1 (Activation) ? ?(None, 64) ? ? ? ? ? ? ? ?0 ? ? ? ?
_________________________________________________________________
dense_2 (Dense) ? ? ? ? ? ? ?(None, 64) ? ? ? ? ? ? ? ?4160 ? ? ?
_________________________________________________________________
dropout_3 (Dropout) ? ? ? ? ?(None, 64) ? ? ? ? ? ? ? ?0 ? ? ? ?
_________________________________________________________________
activation_2 (Activation) ? ?(None, 64) ? ? ? ? ? ? ? ?0 ? ? ? ?
_________________________________________________________________
dense_3 (Dense) ? ? ? ? ? ? ?(None, 10) ? ? ? ? ? ? ? ?650 ? ? ?
_________________________________________________________________
activation_3 (Activation) ? ?(None, 10) ? ? ? ? ? ? ? ?0 ? ? ? ?
=================================================================
Total params: 50,594
Trainable params: 50,594
Non-trainable params: 0

現(xiàn)在讓我們使用SGD優(yōu)化器編譯模型:


sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)model.compile(loss=’binary_crossentropy’,optimizer=sgd,metrics=[‘a(chǎn)ccuracy’])

我們需要將訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)分開,并使它們具有適當(dāng)?shù)拇笮?,以便我們?CNN 網(wǎng)絡(luò)將其識別為適當(dāng)?shù)膹埩浚?/p>


x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.25)x_train = x_train.reshape(-1, size, 13, 1)x_test = x_test.reshape(-1, size, 13, 1)

讓我們擬合模型并評估性能:

history = model.fit(
x_train,
y_train,
epochs=18,
batch_size=32,
validation_split=0.2,
shuffle=True
)

model.evaluate(x_test, y_test, verbose=2)

Train on 1200 samples, validate on 300 samples
Epoch 1/18
1200/1200 [==============================] - 1s 469us/step - loss: 0.3319 - accuracy: 0.8967 - val_loss: 0.2683 - val_accuracy: 0.9070
Epoch 2/18
1200/1200 [==============================] - 0s 256us/step - loss: 0.2534 - accuracy: 0.9066 - val_loss: 0.1943 - val_accuracy: 0.9217
...
...
Epoch 18/18 1200/1200 [==============================] - 0s 254us/step - loss: 0.0444 - accuracy: 0.9837 - val_loss: 0.0425 - val_accuracy: 0.9880
Out[24]:
[0.039418088585138324, 0.9860000610351562]

以下是loss函數(shù)(損失)和準(zhǔn)確性:

結(jié)論:一點(diǎn)也不差!
我們必須對 CNN 的各種參數(shù)進(jìn)行一些研究才能得到這樣的結(jié)果。

讓我們通過預(yù)測測試數(shù)據(jù)集中可用的記錄消息之一來嘗試推理。

#Print the sound to be predicted
sound_index = 10
y_test[sound_index]

array([0, 0, 0, 0, 0, 0,?1, 0, 0, 0], dtype=uint8)

在這種情況下,數(shù)字是六。
這是使用我們的模型做出的預(yù)測:

pred = model.predict(x_test[sound_index].reshape(-1,size,13,1))

print(“\n\033[1mPredicted digit sound: %.0f”%pred.argmax(),”\033[0m \n “)
print(“Predicted probability array:”)
print(pred)

Predicted digit sound: 6

Predicted probability array:
[[3.8950305e-02 9.8831032e-04 7.7098295e-02 8.1201904e-02 2.2223364e-03
?4.8808311e-04 6.2295502e-01 1.0375674e-03 1.6901042e-01 6.0477410e-03]]


神經(jīng)網(wǎng)絡(luò)語音識別模型就為大家介紹到這里,歡迎各位同學(xué)學(xué)習(xí)python數(shù)據(jù)科學(xué)相關(guān)知識《從0到1Python數(shù)據(jù)科學(xué)之旅》,包含多個實(shí)戰(zhàn)案例,提供數(shù)據(jù)集和代碼下載。

如果有更高需求朋友,例如研究生,博士生論文,企業(yè)建模需求,可商務(wù)聯(lián)系up主,我們快速幫你們解決問題,節(jié)省大量時間。

版權(quán)聲明:文章來自公眾號(python風(fēng)控模型),未經(jīng)許可,不得抄襲。遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。


金融風(fēng)控-神經(jīng)網(wǎng)絡(luò)語音識別模型介紹(附代碼)的評論 (共 條)

分享到微博請遵守國家法律
淅川县| 永济市| 苏尼特左旗| 鄂尔多斯市| 外汇| 维西| 涞水县| 手机| 襄城县| 儋州市| 中山市| 太白县| 会理县| 仲巴县| 汉中市| 汝城县| 雷波县| 永年县| 潼南县| 偏关县| 吉木萨尔县| 万年县| 新乡市| 水城县| 拉萨市| 泽库县| 甘谷县| 房产| 吴忠市| 漳平市| 蓝田县| 高清| 京山县| 九龙城区| 惠东县| 信丰县| 开封市| 吴忠市| 邯郸县| 西藏| 墨竹工卡县|