主要内容

演讲者Diarization使用x-vectors

演讲者diarization是音频信号的过程划分为部分根据说话人的身份。它回答了这个问题“谁说当“没有先验知识的扬声器,这取决于应用程序,没有先验知识的扬声器的数量。

演讲者diarization有许多应用程序,包括:提高演讲表示结构化文本转录活跃的演讲者,视频字幕、内容检索(简说什么了?)和扬声器计数(多少人出席会议?)。

在本例中,您使用pretrained执行议长diarization向量x系统[1]音频和描述地区会凝聚的层次聚类(AHC)音频组类似的地区[2]。向量x系统是如何定义和训练,明白了说话人识别使用x-vectors

下载Pretrained议长Diarization系统

下载pretrained议长diarization系统和支持文件。金宝app总大小大约是22 MB。

downloadFolder = matlab.internal.examples.download金宝appSupportFile (“音频”,“SpeakerDiarization.zip”);dataFolder = tempdir;解压缩(downloadFolder dataFolder) netFolder = fullfile (dataFolder,“SpeakerDiarization”);目录(netFolder)

加载一个音频信号和一个表包含地面实况注释。信号由五人组成。听音频信号及其时域波形图。

[audioIn, fs] = audioread (“exampleconversation.flac”);负载(“exampleconversationlabels.mat”)audioIn = audioIn. / max (abs (audioIn));声音(audioIn fs) t =(0:大小(audioIn, 1) 1) / fs;图(1)情节(t, audioIn)包含(“时间(s)”)ylabel (“振幅”)轴

提取x-vectors

在本例中,您使用了pretrained向量x系统基于[1]。向量x系统是如何定义和训练,明白了说话人识别使用x-vectors

负载Pretrained向量x系统

加载轻量级pretrained向量x系统。向量x系统包括:

  • afe——一个audioFeatureExtractor对象提取mel频率cepstral系数(MFCCs)。

  • 因素——一个结构体,其中包含的平均值和标准偏差MFCCs决定从一个代表数据集。这些因素是用来规范MFCCs。

  • dlnet——一个训练dlnetwork。网络是用来提取x-vectors MFCCs。

  • projMat——一个训练有素的投影矩阵,以减少x-vectors的维度。

  • plda——一个训练有素的得分x-vectors PLDA模型。

xvecsys =负载(“xvectorSystem.mat”);

提取标准化的声学特性

从音频数据提取标准化的MFCC特征。查看功能分布确认标准化因素从一个单独的数据集大约规范派生的特性。一个标准的分布有一个零均值和标准差为1。

特性=单((提取(xvecsys.afe audioIn) -xvecsys.factors.Mean”)。/ xvecsys.factors.STD ');图(2)直方图(特性)包含(“标准化MFCC”)

提取x-Vectors

每个声学特征向量代表约0.01秒的音频数据。组的特性为大约2第二段0.1秒跳段之间。

featureVectorHopDur =(元素个数(xvecsys.afe.Window) - xvecsys.afe.OverlapLength) / xvecsys.afe.SampleRate;segmentDur =2;segmentHopDur =0.1;segmentLength =圆(segmentDur / featureVectorHopDur);segmentHop =圆(segmentHopDur / featureVectorHopDur);idx = 1: segmentLength;featuresSegmented = [];idx(结束)<大小(功能,1)featuresSegmented =猫(3 featuresSegmented特性(idx:));idx = idx + segmentHop;结束

从每一段提取x-vectors。x-vectors对应于第一个全层的输出向量x模型训练说话人识别使用x-vectors。后的第一个全层是第一segment-level层统计计算的time-dilated框架水准仪层。随着时间的推移x-vectors形象化。

xvecs = 0(512年,大小(featuresSegmented, 3));示例= 1:尺寸(featuresSegmented, 3) dlX = dlarray (featuresSegmented(:,:、样品),“TCB”);xvecs(:,示例)=预测(xvecsys.dlnet dlX,输出=“fc_1”);结束图(3)冲浪(xvecs EdgeColor =“没有”)视图((90、-90))轴([1大小(xvecs,1) 1大小(xvecs, 2)])包含(“特征”)ylabel (“段”)

应用pretrained线性判别分析(LDA)投影矩阵降低维度x-vectors然后x-vectors形象化。

x = xvecsys.projMat * xvecs;图(4)冲浪(x ', EdgeColor =“没有”)视图((90、-90))轴([1大小(x, 1) 1大小(x, 2)])包含(“特征”)ylabel (“段”)

集群x-vectors

一个向量x系统学会提取紧凑表示(x-vectors)的扬声器。集群x-vectors组类似地区的音频使用会凝聚的层次聚类(clusterdata(统计和机器学习的工具箱)k -均值聚类()或kmeans(统计和机器学习的工具箱))。[2]建议使用烧结的阶层式聚类与PLDA得分的距离测量。k - means聚类使用一个余弦相似性得分也是常用的。假设的先验知识的数量在音频扬声器。设置最大集群已知扬声器的数量+ 1,背景是独立集群。

knownNumberOfSpeakers =元素个数(独特(groundTruth.Label));maxclusters = knownNumberOfSpeakers + 1;clusterMethod =“凝结的PLDA得分”;开关clusterMethod情况下“凝结的——PLDA评分”T = clusterdata (x ',则=“距离”,距离= @ (a, b) helperPLDAScorer (a, b, xvecsys.plda),链接=“平均”maxclust = maxclusters);情况下“凝结的CSS得分”T = clusterdata (x ',则=“距离”,距离=“余弦”链接=“平均”maxclust = maxclusters);情况下“kmeans - CSS得分”T = kmeans (x ' maxclusters,距离=“余弦”);结束

随着时间的推移图集群决定。

图(5)tiledlayout (2, 1) nexttile情节(t, audioIn)轴ylabel (“振幅”)包含(“时间(s)”)nexttile情节(T)轴ylabel (“集群指数”)包含(“段”)

隔离段言论对应于集群,映射段音频样本。策划的结果。

掩码= 0(大小(audioIn, 1), 1);开始=圆((segmentDur / 2) * fs);segmentHopSamples =圆(segmentHopDur * fs);面具(1:开始)= T (1);开始=开始+ 1;2 = 1:元素个数(T)完成= + segmentHopSamples开始;面具(启动:启动+ segmentHopSamples) = T (2);开始=完成+ 1;结束面具(完成:结束)= T(结束);图(6)tiledlayout (2, 1) nexttile情节(t, audioIn)轴nexttile情节(t,面具)ylabel (“集群指数”)轴包含(“时间(s)”)

使用detectSpeech确定演讲的地区。使用sigroi2binmask演讲区域转换成一个二进制语音活动检测(VAD)面具。调用detectSpeech第二次不带任何参数绘制发现演讲的地区。

mergeDuration =0.5;VADidx = detectSpeech (fs, audioIn MergeDistance = f * mergeDuration);VADmask = sigroi2binmask (VADidx元素个数(audioIn));图(7)detectSpeech (fs, audioIn MergeDistance = f * mergeDuration)

应用VAD面具演讲者面具和阴谋的结果。集群指数0表示一个地区的演讲。

掩码=面具。* VADmask;图(8)tiledlayout (2, 1) nexttile情节(t, audioIn)轴nexttile情节(t,面具)ylabel (“集群指数”)轴包含(“时间(s)”)

在这个例子中,假设每个检测到的演讲区域属于一个演讲者。如果超过两个标签存在地区的一次演讲中,合并他们最常发生的标签。

maskLabels = 0(大小(VADidx, 1), 1);2 = 1:尺寸(VADidx, 1) maskLabels (ii) =模式(面具(VADidx (2, 1): VADidx (2, 2)),“所有”);面具(VADidx (2, 1): VADidx (2, 2)) = maskLabels (ii);结束图(9)tiledlayout (2, 1) nexttile情节(t, audioIn)轴nexttile情节(t,面具)ylabel (“集群指数”)轴包含(“时间(s)”)

计算剩余的数量议长集群。

uniqueSpeakerClusters =独特(maskLabels);numSpeakers =元素个数(uniqueSpeakerClusters)
numSpeakers = 5

可视化Diarization结果

创建一个signalMask对象,然后情节演讲者集群。标签情节与地面真理标签。集群标签颜色编码的右边一个关键情节。真正的标签打印以上情节。

msk = signalMask(表(VADidx分类(maskLabels)));图(10)plotsigroi (msk, audioIn,真)轴([0元素个数(audioIn) 1 1]) trueLabel = groundTruth.Label;2 = 1:元素个数(trueLabel)文本(VADidx (ii, 1), 1.1, trueLabel (ii), FontWeight =“大胆”)结束

选择要检查,然后使用一个集群binmask孤立的演说家。画出孤立语音信号,听演讲者集群。

speakerToInspect =2;cutOutSilenceFromAudio =真正的;bmsk = binmask (msk的元素个数(audioIn));audioToPlay = audioIn;如果cutOutSilenceFromAudio audioToPlay (~ bmsk (:, speakerToInspect)) = [];结束声音(audioToPlay fs)图(11)tiledlayout (2, 1) nexttile情节(t, audioIn)轴ylabel (“振幅”)nexttile情节(t, audioIn。* bmsk (:, speakerToInspect))轴包含(“时间(s)”)ylabel (“振幅”)标题(“议长集团”+ speakerToInspect)

Diarization系统评估

演讲者diarization系统的常用指标是diarization错误率(DER)。DER是错过率之和(分类言语交际),假警报率(分类测度技术演讲)和演讲者错误率(另一个令人困惑的一位发言者的讲话)。

在这个简单的例子中,错过率和误警率是琐碎的问题。你只评估演讲者错误率。

地图每一个真正的集群发言者到对应的最佳拟合。确定演讲者错误率,数一数之间不匹配的真正的扬声器和拟合议长集群,然后除以真正议长区域的数量。

uniqueLabels =独特(trueLabel);guessLabels = maskLabels;uniqueGuessLabels =独特(guessLabels);totalNumErrors = 0;2 = 1:元素个数(uniqueLabels) isSpeaker = uniqueLabels (ii) = = trueLabel;minNumErrors =正;jj = 1:元素个数(uniqueGuessLabels) groupCandidate = uniqueGuessLabels (jj) = = guessLabels;numErrors = nnz (isSpeaker groupCandidate);如果numErrors < minNumErrors minNumErrors = numErrors;bestCandidate = jj;结束minNumErrors = min (minNumErrors numErrors);结束uniqueGuessLabels (bestCandidate) = [];totalNumErrors = totalNumErrors + minNumErrors;如果isempty (uniqueGuessLabels)打破结束结束SpeakerErrorRate = totalNumErrors /元素个数(trueLabel)
SpeakerErrorRate = 0

引用

[1]斯奈德,大卫,et al . " X-Vectors:健壮款嵌入的说话人识别。”2018年IEEE国际会议音响、演讲和信号处理(ICASSP),2018岁的IEEE 5329 - 33页。DOI.org (Crossref),doi: 10.1109 / ICASSP.2018.8461375。

[2]出售,G。斯奈德,D。McCree,。,Garcia-Romero, D., Villalba, J., Maciejewski, M., Manohar, V., Dehak, N., Povey, D., Watanabe, S., Khudanpur, S. (2018) Diarization is Hard: Some Experiences and Lessons Learned for the JHU Team in the Inaugural DIHARD Challenge. Proc. Interspeech 2018, 2808-2812, DOI: 10.21437/Interspeech.2018-1893.