blog posts

MATLAB Konuşma Tanıma – MATLAB’de Konuşma Tanıma

MATLAB Konuşma İnsan konuşmasının makine tarafından anlaşılması, ” Yapay Zekanın” ana hedeflerinden biridir .MATLAB Konuşma Bu doğrultuda yapılan araştırmalar arasında “Konuşma Tanıma” hem konuşma işlemeyi hem de metin işlemeyi kapsayan bu alanın çalışma kollarından biri olarak kabul edilebilir. Bu yazımızda konuşma tanıma konusuna kısa bir giriş yapıp bu sistemlerin kullanım alanları ile avantaj ve dezavantajlarını açıklamaya çalışıyoruz. Makalenin sonunda MATLAB’de derin öğrenme algoritmaları kullanarak bir konuşma tanıma sistemi gerçekleştireceğiz .

MATLAB’de konuşma tanımaya giriş ve giriş

Bu bölümde öncelikle MATLAB’de konuşma tanıma için ön konular ve ön koşullar ele alınmış, ardından bir sonraki bölümde ana tartışma ele alınmıştır.

Konuşma tanıma nedir?

Konuşma tanıma, amacı insan sesini (konuşmayı) tanıyabilen ve onu makinenin anlayabileceği bir forma dönüştürebilen akıllı sistemler tasarlamak olan yapay zeka alanındaki sorunlardan biri olarak kabul edilmektedirSiri, Alexa, Google ve Cortana gibi bazı şirketler konuşma tanıma programları geliştirmek için yapay zeka, ” Makine Öğrenimi ” , ” Derin Öğrenme” ve ” Neural Networks ” gibi yeni teknolojileri kullanıyorlar .

Bu, akıllı telefonlar, ev güvenlik araçları, arabalar ve bunun gibi donanım cihazlarının ve elektronik araçların kullanım biçiminde değişiklik ve dönüşümleri beraberinde getirdi.Burada konuşma tanıma probleminin “Ses Tanıma” probleminden farklı olduğunu unutmamak gerekir. Konuşma tanımada, farklı dil ve lehçelere sahip farklı kişilerin seslerini kaydedebilecek, ardından ses dosyasındaki kelimeleri tanıyabilecek ve son olarak tanınan sesli kelimeleri metne dönüştürebilecek bir sistem tasarlamayı düşünüyoruz.

Buna karşılık, ses tanıma probleminin amacı, sistem için halihazırda tanımlanmış olan sesleri tanımaktır. Yani ses tanıma sistemleri sadece sınırlı sayıda kişinin konuşmasını tanımak için tasarlanmıştır. Ayrıca bu sistemlerin tanıyabileceği kelime ve cümle aralığı da oldukça sınırlıdır.”Aç”, “Kapat”, “Hava sıcaklığını 25 santigrat dereceye değiştir” gibi sınırlı komutlarla çalışan elektronik sistemler, ses tanıma programı ile donatılmıştır.

Konuşma tanıma sistemi nasıl çalışır?

Konuşma tanıma sistemleri karmaşık bir süreç içerir ve 4 ana adımdan oluşur. İlk adımda, modelin konuşmadaki kelimeleri tanıması gerekir, bunun için giriş ses dosyasını daha küçük parçalara bölmek gerekir. Ardından, konuşma tanıma sistemi tanınan kelimeleri metne dönüştürmelidir. Bir sonraki adımda konuşma tanıma sistemi konuşulan cümlenin anlamını belirlemeli ve son adımda belirlenen anlama göre ilgili işlemi yapmalıdır.

Konuşma tanıma sistemlerinin uygulamaları

Konuşma tanıma sistemleri birçok kuruluşta kullanılmaktadır. Bu sistemleri kullanan merkezlerden biri de firmaların çağrı merkezidir. Bu merkezlerde bulunan konuşma tanıma sistemi müşterilerin sesli mesajlarını dinleyerek ihtiyaçlarına göre hizmet ve danışmanlık hizmeti vermektedir.

Bankalar ayrıca konuşma tanıma sistemini müşterilerin banka hesaplarıyla ilgili sorularına rehberlik etmek ve yanıtlamak için kullanabilen diğer kuruluşlardır.

MATLAB'de Konuşma Tanıma Uygulamaları

Hastaneler ve tıp merkezleri de hastalara daha iyi hizmet verebilmek için konuşma tanıma sistemlerini kullanabilir. Yani hastalar doktor ve hemşirelerle iletişim kurmak için isteklerini konuşma tanıma sistemlerine gönderebiliyor. Ayrıca bu sistemler hasta öyküsünü kaydedebilmekte ve doktorlar bu sistemlerde kaydedilen bilgilerle hastaların fiziksel durumlarından haberdar olabilmektedir.Konuşma tanıma sistemlerinin bir diğer yaygın kullanımı ise internet ve sosyal medyadır. Kullanıcılar bu tür programları kullanarak konuşmalarını yazıya dökerek yazıya gerek duymadan arkadaşlarına gönderebilmekte veya sosyal medyada paylaşabilmektedir.

Konuşma tanıma sisteminin avantajları

Konuşma tanıma sisteminin uygulamaları ile ilgili bölümde, bu sistemlerin insan yaşamının farklı alanlarındaki olumlu etkileri ele alınmıştır. Aşağıda, bu sistemlerin en önemli avantajlarından bazılarına değineceğiz:

  • Makine ve insan arasında iletişim : Konuşma tanıma sistemini kullanarak insan sistemle kendi dilinde iletişim kurabilir.
  • Kolay erişim : Konuşma tanıma sistemlerine bilgisayar ve akıllı telefonlardaki çeşitli yazılım programları aracılığıyla kolayca erişilebilir.
  • Kullanımı kolay : Kişiler konuşma tanıma sistemlerini akıllı telefon ve bilgisayar gibi kişisel cihazlarında rahatlıkla kullanabilirler ve bu sistemlerle çalışmak özel bir bilgi gerektirmez.
  • İşi hızlandırmak : Konuşmak, yazmaktan çok daha hızlı gerçekleşir. Bu sayede bilgisayar sistemlerinden belirli bir eylemi mümkün olan en kısa sürede gerçekleştirmelerini istemek mümkündür.
  • Fiziksel engelli kişilerin işini kolaylaştırmak : konuşma tanıma sistemleri, fiziksel engelli kişilerin çeşitli görevleri yerine getirmelerine yardımcı olabilir. Bu kişilerin bu sistemlerle konuşarak iletişim kurmaları isteklerinin yerine getirilmesi için yeterlidir.
Konuşma tanıma sisteminin avantajları ve dezavantajları

Konuşma tanıma sisteminin dezavantajları

Konuşma tanıma sistemleri ile ilgili bahsedilen avantajların yanı sıra bu sistemlerin en önemli zayıf yönlerinden bazılarını sayabiliriz:

  • Düşük performans : konuşma tanıma sistemleri, aksan ve lehçelerin çeşitliliği, bazı dillerin desteklenmemesi ve çevresel gürültülerin varlığı gibi çeşitli nedenlerle konuşmayı yüksek doğrulukla tanıyamayabilir.
  • Kaynak dosyalarla ilgili sorunlar : Konuşma tanıma sistemleri, güçlü ses kayıt ekipmanlarına sahiplerse iyi çalışabilirler. Bu sistemler giriş konuşmasını düzgün bir şekilde kaydedemezlerse, konuşmayı doğru bir şekilde tanıyamazlar ve ardından kullanıcının isteğine göre doğru işlemi yapmazlar.
  • Düşük sistem hazırlama hızı : Bazı konuşma tanıma sistemleri çok ağır ve karmaşıktır ve bunların kullanıcılara sunulması çok zaman alır.

konuşma tanıma algoritmaları

Bir konuşma tanıma sistemi tasarlamak ve gerçekleştirmek için aşağıda belirtilen farklı yöntemler kullanılabilir:

  • “Gizli Markov Modeli” (HMM) : Bu yöntem, bir sistemi, modelin kararını vermek için tüm bilgilere sahip olmayacak şekilde tasarlamak istediğimizde kullanılır. Bu yöntem, konuşmayı tanımak için ses sinyallerinin her biri ile dil birimlerini eşleştirmek için konuşma tanıma sisteminde kullanılabilecek olasılıksal bir yöntemdir.
  • N-gram yöntemi : Bu yöntem, bir cümlenin veya ifadenin olasılık dağılımını belirleyen bir dil modeli oluşturmak için en basit yöntem olarak kabul edilir . Mevcut verilere göre, bu dilbilimsel model, cümlenin devamında hangi kelimenin geçme olasılığının daha yüksek olduğunu belirler.
  • Yapay zeka modelleri : derin öğrenme algoritmaları ve makine öğrenme algoritmaları, konuşma tanıma sistemlerinin uygulanmasında yaygın olarak kullanılmaktadır. Bu modeller, konuşmayı işlemek için dilbilgisi ve kelimelerin yapısal özellikleri ve ses sinyali bilgileri gibi bilgileri kullanır.
konuşma tanıma yöntemleri

Bu yazımızda MATLAB’de ses tanıma sistemini gerçekleyebilmek için yapay zeka yöntemini kullanacağız. Aşağıda, bu sistemin uygulama adımlarını tartışacağız.

Örneklerle MATLAB’de konuşma tanımaya giriş eğitimi

Bu bölümde, derin öğrenme modelini kullanarak, MATLAB’de bir konuşma tanıma örneği sunuyoruz. MATLAB, tıpkı Python programlama dili gibi, yapay zeka alanında yaygın olarak kullanılan programlama dillerinden biri olarak kabul edilmekte ve kullanıcılarına yapay zeka modellerini gerçekleştirmeleri için çeşitli kolaylıklar ve araçlar sağlamaktadır. Aşağıda, programa veri yüklemeden model değerlendirmeye kadar konuşma tanıma sistemi tasarımının farklı aşamalarını tartışacağız.

veri yükleme

MATLAB’de bir Konuşma Tanıma sistemi uygulamak için, önce modelin eğitim verilerini programa yükleyin. Bu örnekte, Google Konuşma Komutlarından alınan verileri kullanıyoruz. Aşağıdaki kod parçacığını kullanarak verileri indiririz ve ardından sıkıştırılmış halden çıkarırız.

downloadFolder = matlab.internal.examples.downloadSupportFile("audio","google_speech.zip");
dataFolder = tempdir;
unzip(downloadFolder,dataFolder)
dataset = fullfile(dataFolder,"google_speech");
MATLAB’deki konuşma tanıma modeli, kelimelerin yanı sıra konuşmacının sessizlik anlarını ve çevredeki gürültüyü de tanıyabilmelidir. Bunun için adında bir fonksiyon kullanabiliriz. artırılmış veri kümesi  kullanılmış. Bu işlev, gürültüyü algılamak için Google Speech Commands veri kümesindeki arka plan klasöründeki dosyayı kullanır.
augmentDataset(dataset)
işlevden audioDatastore MATLAB’de konuşma tanıma modelinin eğitim verilerini belirlemek için aşağıdaki gibi kullanılabilir:
ads = audioDatastore(fullfile(dataset,"train"), ...
    IncludeSubfolders=true, ...
    FileExtensions=".wav", ...
    LabelSource="foldernames");
Aşağıdaki kod parçasını kullanarak modelin tanımlaması gereken kelimeleri “Komut” olarak tanımlayarak bu kelimelerin seste tanınması karşılığında bir işlem gerçekleştirebilirsiniz. Ayrıca, gürültü içeren veya “Komut” kelimeleri içermeyen tüm ses dosyaları ile etiketlenmelidir. Bilinmeyen Belirtilmek
commands = categorical(["yes","no","up","down","left","right","on","off","stop","go"]);
background = categorical("background");

isCommand = ismember(ads.Labels,commands);
isBackground = ismember(ads.Labels,background);
isUnknown = ~(isCommand|isBackground);

includeFraction = 0.2; % Fraction of unknowns to include.
idx = find(isUnknown);
idx = idx(randperm(numel(idx),round((1-includeFraction)*sum(isUnknown))));
isUnknown(idx) = false;

ads.Labels(isUnknown) = categorical("unknown");

adsTrain = subset(ads,isCommand|isUnknown|isBackground);
adsTrain.Labels = removecats(adsTrain.Labels);
Ayrıca, modelin onlar üzerindeki performansını ölçmek için MATLAB’deki konuşma tanıma modelinin verilerinin bir kısmını “Doğrulama Setleri” olarak ele alıyoruz.
ads = audioDatastore(fullfile(dataset,"validation"), ...
    IncludeSubfolders=true, ...
    FileExtensions=".wav", ...
    LabelSource="foldernames");

isCommand = ismember(ads.Labels,commands);
isBackground = ismember(ads.Labels,background);
isUnknown = ~(isCommand|isBackground);

includeFraction = 0.2; % Fraction of unknowns to include.
idx = find(isUnknown);
idx = idx(randperm(numel(idx),round((1-includeFraction)*sum(isUnknown))));
isUnknown(idx) = false;

ads.Labels(isUnknown) = categorical("unknown");

adsValidation = subset(ads,isCommand|isUnknown|isBackground);
adsValidation.Labels = removecats(adsValidation.Labels);
Aşağıdaki kod parçacığını kullanarak eğitim verilerinin ve doğrulama verilerinin MATLAB’deki dağılımını görebilirsiniz.
figure(Units="normalized",Position=[0.2,0.2,0.5,0.5])

tiledlayout(2,1)

nexttile
histogram(adsTrain.Labels)
title("Training Label Distribution")
ylabel("Number of Observations")
grid on

nexttile
histogram(adsValidation.Labels)
title("Validation Label Distribution")
ylabel("Number of Observations")
grid on

Yukarıdaki kodun çıktısını aşağıdaki görselde şema halinde görebilirsiniz:

MATLAB'de bir konuşma tanıma verisi örneği

Daha büyük boyutta görüntülemek için resmin üzerine tıklayın.

MATLAB’de konuşma tanıma modelinin öğretimi için veri hazırlama

MATLAB’deki mevcut konuşma tanıma örneğinde, ” Evrişimli Sinir Ağı ” (CNN) kullanıyoruz. Bu amaçla, ses verilerini “İşitsel Spektrogramlara” dönüştürmemiz gerekiyor. Bu bağlamda, aşağıdaki liste gibi parametrelerin tanımlanması gerekir:

  • segmentDuration parametresi : Bu parametre, her bir ses dosyasının süresini saniye cinsinden belirtir.
  • frameDuration parametresi : Bu parametre, spektrumu hesaplamak için her çerçevenin süresini belirler.
  • hopDuration : Bu parametre, her spektrum arasındaki zaman adımını belirtir.
  • numBands : Bu parametre, ses spektrogramı filtrelerinin sayısını tanımlar.

Aşağıdaki kod parçacığı, MATLAB’de tanımlanan parametrelerin her birinin değerini gösterir.

if canUseParallelPool && ~speedupExample
    useParallel = true;
    gcp;
else
    useParallel = false;
end

fs = 16e3; % Known sample rate of the data set.

segmentDuration = 1;
frameDuration = 0.025;
hopDuration = 0.010;

FFTLength = 512;
numBands = 50;

segmentSamples = round(segmentDuration*fs);
frameSamples = round(frameDuration*fs);
hopSamples = round(hopDuration*fs);
overlapSamples = frameSamples - hopSamples;
Parametreleri tanımladıktan sonra, fonksiyonu kullanarak audioFeatureExtractor Aşağıdaki kod parçacığı ile ses dosyalarından model için gerekli özellikleri çıkarmak mümkündür:
afe = audioFeatureExtractor( ...
    SampleRate=fs, ...
    FFTLength=FFTLength, ...
    Window=hann(frameSamples,"periodic"), ...
    OverlapLength=overlapSamples, ...
    barkSpectrum=true);
setExtractorParameters(afe,"barkSpectrum",NumBands=numBands,WindowNormalization=false);
Bu bölümde öncelikle ses dosyalarının uzunluklarını eşitlemek için bir dizi “Transform” katmanı kullanmak, ardından modelin gerekli özelliklerini bunlardan çıkarmak ve son olarak bunlara logaritmik değişiklikler uygulamak gerekiyor.

Daha büyük boyutta görüntülemek için resmin üzerine tıklayın.Bu amaçla MATLAB’de aşağıdaki kod parçası kullanılabilir:

transform1 = transform(adsTrain,@(x)[zeros(floor((segmentSamples-size(x,1))/2),1);x;zeros(ceil((segmentSamples-size(x,1))/2),1)]);
transform2 = transform(transform1,@(x)extract(afe,x));
transform3 = transform(transform2,@(x){log10(x+1e-6)});
Her “Dönüştür” katmanını tanımladıktan sonra, işlevi kullanabilirsiniz. hepsini oku Veriler üzerinde tanımlı üç dönüşümü uygulamak için tüm eğitim verilerini dönüşüm katmanlarına girdi olarak dönüştürdü.
Daha büyük boyutta görüntülemek için resmin üzerine tıklayın.

Aşağıdaki kod parçacığında, işlevin nasıl kullanılacağı hepsini oku Gözlenir:

XTrain = readall(transform3,UseParallel=useParallel);
Yukarıdaki komutun çıktısı, eğitim verilerinin uzunluğuna sahip bir dizidir ve dizinin her hücresi, ses verilerinden çıkarılan ses spektrogramlarının her birini içerir. Son olarak, ortaya çıkan diziyi 4 boyutlu bir diziye dönüştürüyoruz:
XTrain = cat(4,XTrain{:});

[numHops,numBands,numChannels,numFiles] = size(XTrain)
Çıktıyı aşağıda görebilirsiniz:
sayiHop = 98
sayıBantları = 50
kanal sayısı = 1
dosya sayısı = 28463

Ayrıca aşağıdaki kod parçacığını kullanarak dönüştürme ve boyut değiştirme katmanlarının adımlarını doğrulama verilerine uygularız:

transform1 = transform(adsValidation,@(x)[zeros(floor((segmentSamples-size(x,1))/2),1);x;zeros(ceil((segmentSamples-size(x,1))/2),1)]);
transform2 = transform(transform1,@(x)extract(afe,x));
transform3 = transform(transform2,@(x){log10(x+1e-6)});
XValidation = readall(transform3,UseParallel=useParallel);
XValidation = cat(4,XValidation{:});
Aşağıdaki MATLAB kod parçacığını kullanarak eğitim verilerinin ve doğrulama verilerinin etiketlerini ayrı ayrı ayırıyoruz:
TTrain = adsTrain.Labels;
TValidation = adsValidation.Labels;
Aşağıdaki kod parçacığı kullanılarak az miktarda eğitim verisi görselleştirilebilir:
specMin = min(XTrain,[],"all");
specMax = max(XTrain,[],"all");
idx = randperm(numel(adsTrain.Files),3);
figure(Units="normalized",Position=[0.2,0.2,0.6,0.6]);

tiledlayout(2,3)
for ii = 1:3
    [x,fs] = audioread(adsTrain.Files{idx(ii)});

    nexttile(ii)
    plot(x)
    axis tight
    title(string(adsTrain.Labels(idx(ii))))
    
    nexttile(ii+3)
    spect = XTrain(:,:,1,idx(ii))';
    pcolor(spect)
    clim([specMin specMax])
    shading flat


   sound(x,fs)
    pause(2)
end

Yukarıdaki kodun çıktısı aşağıdaki görselde görülmektedir.

MATLAB'de Konuşma Tanıma verilerinin görselleştirilmesi

MATLAB’de konuşma tanıma modelinin tanımı

MATLAB’de konuşma tanıma sistemini uygulamak için, 5 evrişimli sinir ağı ve tam bağlantılı bir katman içeren basit bir sinir ağı mimarisi kullandık.

Değişken numF Evrişimli sinir ağı filtrelerinin sayısını belirtir. Modelin doğruluğunu artırmak için sinir ağı katmanlarının sayısı arttırılabilir ve model için ReLU aktivasyon fonksiyonu kullanılabilir. Aşağıdaki resimde sinir ağı mimarisini görebilirsiniz.

Konuşma tanıma için sinir ağı mimarisi

Aşağıdaki kod parçacığını kullanarak, konuşma tanıma modeli MATLAB’de uygulanabilir:

classes = categories(TTrain);
classWeights = 1./countcats(TTrain);
classWeights = classWeights'/mean(classWeights);
numClasses = numel(classes);

timePoolSize = ceil(numHops/8);

dropoutProb = 0.2;
numF = 12;
layers = [
    imageInputLayer([numHops,afe.FeatureVectorLength])
    
    convolution2dLayer(3,numF,Padding="same")
    batchNormalizationLayer
    reluLayer
    maxPooling2dLayer(3,Stride=2,Padding="same")
    
    convolution2dLayer(3,2*numF,Padding="same")
    batchNormalizationLayer
    reluLayer
    maxPooling2dLayer(3,Stride=2,Padding="same")
    
    convolution2dLayer(3,4*numF,Padding="same")
    batchNormalizationLayer
    reluLayer
    maxPooling2dLayer(3,Stride=2,Padding="same")
    
    convolution2dLayer(3,4*numF,Padding="same")
    batchNormalizationLayer
    reluLayer

    convolution2dLayer(3,4*numF,Padding="same")
    batchNormalizationLayer
    reluLayer
    maxPooling2dLayer([timePoolSize,1])
    dropoutLayer(dropoutProb)

    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer(Classes=classes,ClassWeights=classWeights)];
Optimizasyon fonksiyonu, Batch miktarı, Epoch sayısı ve “Öğrenme Oranı” gibi modelin diğer parametrelerini ayarlamak için fonksiyonu kullanabilirsiniz. eğitim Seçenekleri aşağıdaki gibi kullanılır:
miniBatchSize = 128;
validationFrequency = floor(numel(TTrain)/miniBatchSize);
options = trainingOptions("adam", ...
    InitialLearnRate=3e-4, ...
    MaxEpochs=15, ...
    MiniBatchSize=miniBatchSize, ...
    Shuffle="every-epoch", ...
    Plots="training-progress", ...
    Verbose=false, ...
    ValidationData={XValidation,TValidation}, ...
    ValidationFrequency=validationFrequency);
Modeli fonksiyondan da eğitmek için tren ağı Aşağıdaki gibi kullanılır:
trainedNet = trainNetwork(XTrain,TTrain,layers,options);
Kod parçacığını çalıştırarak model eğitimi başlar. Aşağıdaki görüntüde “Loss Function” doğruluğunu ve değerini görebilirsiniz:
MATLAB'de Konuşma Tanıma Örneği

MATLAB’de konuşma tanıma modelinin değerlendirilmesi

Eğitim modelini değerlendirmek için doğrulama verilerini kullanıyoruz. Bu amaçla MATLAB’de şu fonksiyonu kullanabilirsiniz: sınıflandırmak aşağıdaki gibi kullanılır:

YValidation = classify(trainedNet,XValidation);
validationError = mean(YValidation ~= TValidation);
YTrain = classify(trainedNet,XTrain);
trainError = mean(YTrain ~= TTrain);

disp(["Training error: " + trainError*100 + "%";"Validation error: " + validationError*100 + "%"])
Yukarıdaki kod parçacığının çıktısı aşağıda görülebilir:
"Eğitim hatası: %2,7263"
 "Doğrulama hatası: %6,3968"

“Karışıklık Matrisini” dikkate almak için işlevi kullanabilirsiniz karışıklık çizelgesi aşağıdaki gibi kullanılır:

figure(Units="normalized",Position=[0.2,0.2,0.5,0.5]);
cm = confusionchart(TValidation,YValidation, ...
    Title="Confusion Matrix for Validation Data", ...
    ColumnSummary="column-normalized",RowSummary="row-normalized");
sortClasses(cm,[commands,"unknown","background"])

Karışıklık matrisinin sonucunu aşağıdaki resimde görebilirsiniz.

MATLAB'de konuşma tanıma için karışıklık matrisi
Daha büyük boyutta görüntülemek için resmin üzerine tıklayın.

Çözüm

Konuşma tanıma sistemleri, insan yaşamının çeşitli alanlarında etkin olarak kullanılan akıllı sistemlerden biridir. Bu sistemlerin kullanılması insanların çeşitli görevleri yapmasını kolaylaştırmıştır. Bu yazımızda konuşma tanıma sistemlerini kısaca tanıtıp işleyişini, avantaj ve dezavantajlarını incelemek istedik.