Идентифицируйте метку
Используйте базу данных переписи населения (также известную как AN4 Database) из группы распознавания робастной речи CMU [1]. Набор данных содержит записи мужских и женских субъектов, говорящих слова и цифры. Функция helper в этом примере загружает набор данных для вас и преобразует необработанные файлы в FLAC и возвращает два audioDatastore объекты, содержащие обучающий и тестовый наборы. По умолчанию набор данных сокращается так, что пример запускается быстро. Можно использовать полный набор данных путем установки ReduceDataset на ложь.
[adsTrain,adsTest] = HelperAN4Download('ReduceDataset',true);Разделите набор тестовых данных на наборы регистрации и тестирования. Используйте два слова для регистрации и оставшиеся для тестового набора. Как правило, чем больше высказываний вы используете для регистрации, тем лучше эффективность системы. Однако большинство практических приложений ограничены небольшим набором заявлений о зачислении.
[adsEnroll,adsTest] = splitEachLabel(adsTest,2);
Смотрите распределение динамиков в наборах обучения, тестирования и регистрации. Динамики в наборе обучающих данных не перекрываются с динамиками в тесте и регистрируются наборами.
summary(adsTrain.Labels)
fejs 13
fmjd 13
fsrb 13
ftmj 13
fwxs 12
mcen 13
mrcb 13
msjm 13
msjr 13
msmn 9
summary(adsEnroll.Labels)
fvap 2
marh 2
summary(adsTest.Labels)
fvap 11
marh 11
Создайте i-векторную систему, которая принимает вход функции.
fs = 16e3; iv = ivectorSystem('SampleRate',fs,'InputType','features');
Создайте audioFeatureExtractor возразите, чтобы извлечь gammatone cepstral коэффициенты (GTCC), дельта GTCC, дельта дельты GTCC и тангаж с 50 мс периодические окна Hann с 45 наложениями мс.
afe = audioFeatureExtractor('gtcc',true,'gtccDelta',true,'gtccDeltaDelta',true,'pitch',true,'SampleRate',fs); afe.Window = hann(round(0.05*fs),'periodic'); afe.OverlapLength = round(0.045*fs); afe
afe =
audioFeatureExtractor with properties:
Properties
Window: [800×1 double]
OverlapLength: 720
SampleRate: 16000
FFTLength: []
SpectralDescriptorInput: 'linearSpectrum'
Enabled Features
gtcc, gtccDelta, gtccDeltaDelta, pitch
Disabled Features
linearSpectrum, melSpectrum, barkSpectrum, erbSpectrum, mfcc, mfccDelta
mfccDeltaDelta, spectralCentroid, spectralCrest, spectralDecrease, spectralEntropy, spectralFlatness
spectralFlux, spectralKurtosis, spectralRolloffPoint, spectralSkewness, spectralSlope, spectralSpread
harmonicRatio
To extract a feature, set the corresponding property to true.
For example, obj.mfcc = true, adds mfcc to the list of enabled features.
Создайте преобразованные хранилища данных путем добавления редукции данных в read функция adsTrain и adsEnroll.
trainLabels = adsTrain.Labels; adsTrain = transform(adsTrain,@(x)extract(afe,x)); enrollLabels = adsEnroll.Labels; adsEnroll = transform(adsEnroll,@(x)extract(afe,x));
Обучите и экстрактор, и классификатор с помощью набора обучающих данных.
trainExtractor(iv,adsTrain, ... 'UBMNumComponents',64, ... 'UBMNumIterations',5, ... 'TVSRank',32, ... 'TVSNumIterations',3);
Calculating standardization factors ....done. Training universal background model ........done. Training total variability space ...done. i-vector extractor training complete.
trainClassifier(iv,adsTrain,trainLabels, ... 'NumEigenvectors',16, ... ... "PLDANumDimensions",16, ... "PLDANumIterations",5);
Extracting i-vectors ...done. Training projection matrix .....done. Training PLDA model ........done. i-vector classifier training complete.
Зарегистрируйте докладчиков из набора регистрации.
enroll(iv,adsEnroll,enrollLabels)
Extracting i-vectors ...done. Enrolling i-vectors .....done. Enrollment complete.
Оцените точность предсказания на уровне файла на тестовом наборе.
numCorrect = 0; reset(adsTest) for index = 1:numel(adsTest.Files) features = extract(afe,read(adsTest)); results = identify(iv,features,'plda'); trueLabel = adsTest.Labels(index); predictedLabel = results.Label(1); isPredictionCorrect = trueLabel==predictedLabel; numCorrect = numCorrect + isPredictionCorrect; end fprintf('File Accuracy: %0.2f percent\n', 100*numCorrect/numel(adsTest.Files))
File Accuracy: 100.00 percent
Ссылки
[1] «CMU Sphinx Group - Audio Databases». http://www.speech.cs.cmu.edu/databases/an4/. Доступ к 19 декабря 2019.
ivs - i-векторная системаivectorSystem объектi-векторная система, заданная как объект типа ivectorSystem.
data - Данные для идентификацииДанные для идентификации, заданные как вектор-столбец, представляющая одноканальный (моно) аудиосигнал или матрицу аудиосигнала функций.
Если InputType установлен в 'audio' когда i-векторная система создается, data должен быть вектором-столбцом с базовым типом single или double.
Если InputType установлен в 'features' когда i-векторная система создается, data должна быть матрицей с базовым типом single или double. Матрица должна состоять из аудио функций, где количество функций (столбцов) блокируется с первого раза trainExtractor вызывается, и количество переходов (строк) изменяется.
Типы данных: single | double
scorer - Алгоритм оценки'plda' | 'css'Алгоритм оценки, используемый i-векторной системой, заданный как 'plda', что соответствует вероятностному линейному дискриминантному анализу (PLDA), или 'css', что соответствует счету косинусоидальности (CSS).
Примечание
Как использовать 'plda', вы должны обучить модель PLDA используя trainClassifier.
Типы данных: char | string
N - Количество кандидатовКоличество кандидатов для возвращения в tableOut, заданный как положительная скалярная величина.
Примечание
Если вы запрашиваете количество кандидатов, больше, чем количество labels зачислен в i-векторную систему, затем возвращаются все кандидаты. Если не задано, количество кандидатов по умолчанию равняется количеству зарегистрированных labels.
Типы данных: single | double
tableOut - Доверительная таблицаМетки кандидата и соответствующие оценки достоверности, возвращенные как таблица. Количество строк tableOut равно N, количество кандидатов. Кандидаты сортируются в порядке доверия.
Типы данных: table
detectionErrorTradeoff | enroll | info | ivector | ivectorSystem | release | trainClassifier | trainExtractor | unenroll | verify
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.