主要内容

使用X载体的扬声器估算

扬声器日流是根据扬声器标识将音频信号划分为段的过程。它回答了“谁谈到”讲话者的事先知识的问题,并且根据申请,没有先验知识的扬声器的知识。

扬声器日期具有许多应用,包括:根据主动扬声器,视频字幕,内容检索,通过构建文本来增强语音转录(简说了什么?)和扬声器计数(会议中有多少个发言者?)。

在本例中,使用预训练的x向量系统执行扬声器diarization[1]将音频和凝聚分层聚类(AHC)的区域特征为分组类似区域的音频区域[2].要了解x向量系统是如何定义和训练的,请参见使用x向量的说话人识别。

加载音频信号

加载一个音频信号和一个包含ground truth注释的表。信号由五个扬声器组成。听音频信号并绘制其时域波形。

[audioIn, fs] = audioread ('exampleconversation.flac');加载('exampleconversationlabels.mat')audioin = audioin./max(abs (abautioin));声音(AudioIn,FS)T =(0:Size(AudioIn,1)-1)/ FS;图(1)绘图(t,audioin)xlabel(“时间(s)”) ylabel (“振幅”)轴

图包含一个坐标轴对象。轴对象包含类型线的对象。

提取x-vectors

在本例中,您使用了一个预训练的x向量系统。x-向量系统是在中描述的原始x-向量系统的一个轻量级版本[1].要了解x向量系统是如何定义和训练的,请参见使用x向量的说话人识别。

加载预训练的x向量系统

加载轻量级净定的X-向量系统。X-Vector系统包括:

  • af- 一个audioFeatureExtractor反对提取MEL频率谱系数(MFCC)。

  • 因素- 包含由代表数据集确定的MFCC的平均值和标准偏差的结构。这些因素用于标准化MFCC。

  • 提取器- 包含培训的神经网络的参数和状态以提取X载体的结构。这xvecmodel.功能执行实际的X矢量提取。这xvecmodel.打开此示例时,函数放在当前文件夹中。

  • 分类器- 包含经过培训的投影矩阵的结构,以减少X载体的维度和用于评分X载体的培训的PLDA模型。

加载(“xvectorSystem.mat”的)

提取标准化声学特征

从音频数据提取标准化的MFCC功能。查看要素分发以确认从单独的数据集中学习的标准化因素大致标准化此示例中导出的功能。标准分布的平均值为零和标准偏差为1。

特点=单身((提取(AFE,AUDION)-Factors.mean)./ factors.std);图(2)直方图(特征)XLabel(“标准化MFCC”的)

图包含一个坐标轴对象。轴对象包含类型直方图的对象。

提取X载体

每个声学特征向量代表大约0.01秒的音频数据。将功能组分为大约2个段,在段之间的0.1秒跳跃。

featureVectorHopDur = (numel(afe.Window) - afe.OverlapLength)/afe.SampleRate;segmentDur =2;seminghopdur =0.1;segmentlength = round(segmentdur / featurevectorhopdur);segshop = round(segshopdur / featurevectorhopdur);idx = 1:secmentLength;featuressegmented = [];IDX(结束)结尾

从每个段中提取X载体。X载体对应于使用X型载体训练扬声器识别的X载体模型中的第7层的输出。第七层是第一个分段级层,用于统计到时间扩展的帧级别层。随着时间的推移可视化X载体。

outputLayer = 7;xvecs = 0(元素个数(extractor.Parameters。(“俱乐部”+ OutputLayer).bias),大小(Featureassegmented,3));为了sample = 1:size(featuressegmentation,3) dlX = dlarray(featuressegmentation (:,:,sample),'scb');xvecs(:,sample)=提取数据(xvecmodel(dlx,extrutiplor.parameters,stutticer.state,“DoTraining”假的,'outputlayer',输出层));结尾图(3)冲浪(xvecs ','Edgecolor''没有任何')视图([90,-90])轴([1尺寸(xvecs,1)1尺寸(xvecs,2)])xlabel('特征') ylabel (“段”的)

图包含一个坐标轴对象。轴对象包含类型表面的对象。

应用预磨削的线性判别分析(LDA)投影矩阵以降低X载体的维度,然后随着时间的推移可视化X载体。

x =分类器.projmat * xvecs;图(4)冲浪(X','Edgecolor''没有任何')视图([90,-90])轴([1尺寸(x,1)1尺寸(x,2)] xlabel('特征') ylabel (“段”的)

图包含一个坐标轴对象。轴对象包含类型表面的对象。

集群X载体

x向量系统学习提取说话人的紧凑表示(x向量)。聚类的x矢量组相似的音频区域使用聚类层次聚类(clusterdata.(统计和机器学习工具箱))或k均值聚类(威彻斯(统计和机器学习工具箱))。[2]建议使用与PLDA评分的凝聚性大规模聚类作为距离测量。k-means使用余弦相似度分数的聚类也是常用的。假设关于音频中的扬声器数量的先验知识。将最大群集设置为已知扬声器+ 1的数量,以便独立群集背景。

xovelnnumberofspeakers = numel(唯一(outdrtruth.label));maxclusters = nextednnumberofspeakers + 1;clustermethod ='凝聚 -  PLDA得分';开关ClusterMethod.案件'凝聚 -  PLDA得分't = clusterdata(x','标准''距离''距离'@ (a, b) helperPLDAScorer (a, b,分类器),'连锁'“平均”'maxclust', maxclusters);案件'凝聚- CSS评分't = clusterdata(x','标准''距离''距离''余弦''连锁'“平均”'maxclust', maxclusters);案件'kmeans  -  css得分't = kmeans(x',maxlusters,“距离”'余弦');结尾

随着时间的推移绘制群集决策。

图(5)平铺布局(2,1)nexttile plot(t,audioIn)轴ylabel (“振幅”)包含(“时间(s)”)NextDile Plot(T)轴ylabel ('集群索引')包含(“段”的)

图包含2个轴对象。轴对象1包含类型线的对象。轴对象2包含类型线的对象。

分离对应于集群的语音段,将段映射回音频样本。绘制结果。

面具=零(尺寸(AudioIn,1),1);start = round((segmentdur / 2)* fs);semmenthopsamples = round(segshopdur * fs);面具(1:开始)= T(1);start = start + 1;为了ii = 1:numel(T) finish = start + segmenthoopsamples;mask(start:start + segmentHopSamples) = T(ii);Start = finish + 1;结尾面具(完成:结束)= T(结束);图(6)平铺布局(2,1)nexttile plot(t,audioIn)轴nextdile plot(t,mask)ylabel('集群索引')轴包含(“时间(s)”的)

图包含2个轴对象。轴对象1包含类型线的对象。轴对象2包含类型线的对象。

利用检测跳孔确定语音区域。利用Sigroi2binmask.将语音区域转换为二进制语音活动检测(VAD)掩码。调用检测跳孔第二次没有任何参数来绘制检测到的语音区域。

mergeduration =.0.5;vadidx =检测echech(AudioIn,FS,“MergeDistance”,fs * mergeduration);Vadmask = Sigroi2binmask(Vadidx,Numel(AudioIn));图(7)检测expeech(AudioIn,FS,“MergeDistance”,fs * mergeduration)

图包含一个坐标轴对象。标题为Detected Speech的轴对象包含line、constantline、patch类型的31个对象。

将VAD遮罩应用于扬声器掩码并绘制结果。群集索引为0表示没有语音的区域。

面具=面具。* vadmask;图(8)TileDlayout(2,1)NextTile Plot(T,AudioIn)轴nextdile plot(t,mask)ylabel('集群索引')轴包含(“时间(s)”的)

图包含2个轴对象。轴对象1包含类型线的对象。轴对象2包含类型线的对象。

在此示例中,您假设每个检测到的语音区域属于单个扬声器。如果语音区域中存在两个以上的标签,则将它们合并到最频繁地发生标签。

masklabels =零(尺寸(vadidx,1),1);为了II = 1:大小(Vadidx,1)MaskLabels(ii)= mode(掩码(vadidx(ii,1):Vadidx(II,2)),'全部');面膜(Vadidx(II,1):Vadidx(II,2))= Masklabels(ii);结尾图(9)平铺布局(2,1)nexttile plot(t,audioIn)轴nextdile plot(t,mask)ylabel('集群索引')轴包含(“时间(s)”的)

图包含2个轴对象。轴对象1包含类型线的对象。轴对象2包含类型线的对象。

计算剩余扬声器集群的数量。

unquiquesheakerclusters =唯一(Maskleabels);NumSpeakers = Numel(UnunquesheAlegersers)
NumSpeakers = 5

可视化日复性化结果

创建一个signermask.对象,然后绘制说话者群。给情节贴上地面真相标签。集群标签用图右侧的一个键进行颜色编码。真正的标签印在图的上方。

msk = signalMask(表(VADidx分类(maskLabels)));图(10)plotsigroi(msk,audioIn,true)轴([0 numel(audioIn) -1 1]) trueLabel = groundTruth.Label;为了ii = 1:numel(trueLabel) text(VADidx(ii,1),1.1,trueLabel(ii),'fontweight''胆大'的)结尾

图包含一个坐标轴对象。坐标轴对象包含21个类型为line、patch、text的对象。

选择一个要检查的集群,然后使用binmask隔离扬声器。绘制隔离的语音信号并收听扬声器群集。

speakertoinspect =2;cutoutsilencefromaudio =真正的;BMSK = BinMask(MSK,Numel(AudioIn));audiotoplay = audioin;如果cutoutsilencefromaaudio audioToPlay(~bmsk(:,speakerToInspect)) = [];结尾sound(audioToPlay,fs)图(11)tiledlayout(2,1) nexttile plot(t,audioIn)轴ylabel (“振幅”)NextDile Plot(T,AudioIn。* BMSK(:,speakertoInspect)轴包含(“时间(s)”) ylabel (“振幅”) 标题(“扬声器小组”+ speakerToInspect)

图包含2个轴对象。轴对象1包含类型线的对象。轴对象2带标题扬声器组2包含类型线的对象。

深度化系统评价

扬声器日复两度系统的常见度量是深度缓释误差率(DER)。DER是错过率的总和(分类言论为非语音),误报率(分类为语音为语音)和扬声器错误率(混淆一个扬声器对另一个发言者的演讲)。

在这个简单的例子中,错过率和误报率是微不足道的问题。您仅评估扬声器错误率。

将每个真正的发言者映射到相应的最合适的发言者集群。为了确定说话人错误率,计算真实说话人与最佳匹配说话人集群之间的不匹配数,然后除以真实说话人区域的数量。

uniqueLabels =独特(trueLabel);guessLabels = maskLabels;uniqueGuessLabels =独特(guessLabels);totalNumErrors = 0;为了isSpeaker = unique elabel (ii)==true elabel;minNumErrors =正;为了JJ = 1:Numel(Uniquequesslabels)GroupCandidate = UniquequessLabels(JJ)==猜测标签;numerrors = nnz(Isspeaker-groupacandidation);如果minNumErrors = numErrors;bestCandidate = jj;结尾minnumerrors = min(minnumerrors,numerrors);结尾uniqueGuessLabels (bestCandidate) = [];totalNumErrors = totalNumErrors + minNumErrors;结尾SpeakErerrrate = TotalNumerrors / Numel(Truilabel)
SpeakerErrorRate = 0

参考文献

[1] Snyder, David等著,< x向量:用于说话人识别的鲁棒DNN嵌入>。2018 IEEE音响,语音和信号处理国际会议(ICASSP),ieee,2018,pp。5329-33。doi.org(crossref), doi: 10.1109 / ICASSP.2018.8461375。

[2]卖,G.,斯奈德,D.,McCree,A.,Garcia-Romero,D.,Villalba,J.,Maciejewski,M.,Manohar,V.,Dehak,N.,Povey,D.,Watanabe,S.,Khudanpur,S。(2018)日益增长是艰难的:一些经验和经验教训为jhu队在首届二哈德挑战中挑战。Proc。Interspeech 2018,2808-2812,DOI:10.21437 / Interspeech.2018-1893。