Идентифицируйте метку
Используйте базу данных переписи населения (также известную как 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.