1、目录项目8基于PaddleSpeech实现新闻自动播报11 实训目标12 实训环境13 实训说明14 实训步骤44.1 文本前端处理44.2 合成声学模型74.3 声码器合成94.4 结果评测115 实训小结14项目8基于PaddleSpeech实现新闻自动播报1实训目标(1) 掌握通过PaddleSpeech中的Frontend类进行文本前端处理。(2) 掌握通过调用PaddleSpeech中的FastSpeech2类构建声学模型,并加载预训练模型参数。(3) 掌握使用PaddleSpeech中的PWGGenerator类构建ParallelWaveGAN声码器。(4) 熟练掌握语音合成结果
2、的播放与保存方法。(5) 能够对生成语音结果的准确率进行测试。2实训环境环境版本说明Windows1064电脑操作系统Python3.8.5Python语言版本pandas1.3.0主要用于数据读取、清洗等操作NumPy1.21.6主要用于Python中的数值计算jieba0.42.1主要用于文本分词Gensim4.2.0主要用于检索文本、计算文本相似度、训练词向量、建模主题等Matplotlib3.3.0主要用于数据可视化PaddlePaddle2.4.2是一个深度学习框架,提供了高效的计算框架和优化算法PaddleSpeech1.2.0主要用于语音和音频中的各种关键任务的开发scikit-
3、learn1.0.2广泛地用于统计分析和机器学习建模等数据科学领域Librosa0.8.1主要用于分析一般的音频信号,是一个非常强大的Python语音信号处理的第三方库NETK3.5是一个常用的自然语言处理工具包,可用于文本处理、语义分析、词性标注等SciPy1.7.3是一个科学计算工具包,可用于数学、科学、工程学等领域pyttsx32.9.0主要用于将文本转换成语音3实训说明近年来,人工智能领域的快速发展带动了各类行业的变革。特别是深度学习技术的进步,为语音合成技术提供了新的突破口。在智能音箱、语音助手、无障碍服务、在线教育等领域,语音合成技术得到了广泛的应用。高质量、自然的合成语音不仅能够
4、帮助人们更好地与计算机进行交流,还能够降低信息获取的难度,提高用户体验。随着信息技术的不断发展和普及,新闻媒体行业也在不断创新和变革。传统的新闻报道方式已经无法满足人们的需求,新闻自动播报技术应运而生,深入实施创新驱动发展战略。新闻自动播报是指利用人工智能技术和语音合成技术,将新闻文本自动转换为语音信号,并通过音频设备自动播放出来的一种新型新闻播报方式。例如,每日经济新闻推出每经AI电视,运用Al虚拟主播生成驱动、AI文本及视频生成等多项人工智能技术,支持多景别、多姿态、多场景的应用,可进行汉语、英语等多语种的播报。本项目基于CSMSC(ChineseStandardMandarinSpeec
5、hCorpus)数据集进行语音合成,CSMSC是一个中文普通话语音数据集,它由财经媒体的播报员录制而成,具有较高的音质和准确度。数据集包括大约100小时的录音,涵盖了10000多个句子,以及相应的拼音和汉字文本。CSMSC数据集可用于训练和评估各种中文语音合成(TTS)和语音识别(ASR)系统。CSMSC数据集的特点如下。(1)专业播报员录制。由于数据集是由专业播报员录制的,所以具有较高的语音质量,适合用于训练高质量的语音合成系统。(2)多样化文本内容。CSMSC数据集包含了各种主题和领域的文本,有助于训练出更具泛化能力的模型。(3)数据标签。数据集包含拼音和汉字文本,便于训练和评估各种基于拼
6、音或汉字的语音合成和语音识别模型。(4)开源可用。CSMSC数据集已经开源,对学术研究和商业应用具有较高的价值。总之,CSMSC数据集是一个有价值的中文普通话语音数据集,适用于训练和评估各种中文TTS和ASR系统,部分内容如图8-1所示。0001.w000002.w0003.w0004.wOOOOO5.w0006.w07.w08.w09.w0010.w0011.w0012.wOOOol3.w0014.wavavavavavavavavavavavavavav0OOOoI5.wavO000016.wavO000017.wavO0018.wavOOOoOlg.wavO000020.wavO0000
7、21.wavOOoOO22MavOOO23.wavO0024.wavO000025.wavO000026.wavO0027.wavOOooO2&wavOOOOOOGOOOO00O000029.w0030.w0031.w0032.wOO33.w000034.wOOOO35.wOoOo36.wOO37.w0038.w000039.w000040.w41.w0042.wavavavavavavavavavVavavavavOOOOO0O0OOOOOO000043.w000044.w000045.wOOoO46WOoOo47W000048.w000049.w0050.w0051.wOOoO52wOOO
8、O53.w000054.wOoOo55.w0056.wavavavavavavavavavavavavavavOOOOOOOOOOOOOO0057.w000058.w0059.w0060.w61.w000062.w000063.w000064.w0065.w0066.w000067.w000068.w69.w0070.wavavavavavavavavavavavavavavO0OOOOOOOOOOOO00007Lw000072.w0073.w0074.w75.w0076.w000077.w78.w0079.w80.w000081.w0082.wOOOo83.w0084.wavavavavav
9、avavavavavavavavav图8-1CSMSC数据集(部分)通常情况下,新闻自动播报主要分为以下3个阶段。(1)构造文本前端:构造文本前端对象,将输入的文本序列转换为音素序列,为声学模型的输入提供语音特征表示。(2)合成声学模型:基于PaddlePaddIe搭建一个声学模型FaStSPeeCh2,用于将处理过的文本转换为音频信号的中间表示,如梅尔频谱图。(3)合成声码器:使用声码器ParaneIWaVeGAN,将声学模型生成的中间表示转换为最终的音频信号,实现高质量的语音合成。本项目将介绍基于PaddleSpeech实现新闻自动播报的基本流程,该流程与通用流程存在一定差异,主要包括文本
10、前端处理、合成声学模型、声码器合成和结果评测等。基于PaddleSpeech的新闻自动播报基本流程如图8-2所示,基本步骤如下。4实训步骤4.1文本前端处理文本前端模块主要包括分段、文本正则化、分词(主要用于中文)、词性标注、韵律预测、字音转换、多音字处理、变调以及方言等处理。在该模块中,文本正则化和字音转换(通常在TTS中用G2P表示)是非常关键的部分,在输入声学模型之前,还需将音素序列转换为IDo本任务的处理流程如图8-3所示。;构建文本前端文本正则化文本前端-模块字音转换图8-3文本前端模块处理流程文本前端模块的设计需要结合很多专业的语义学知识和经验。人类在读文本的时候可以自然而然地读出
11、正确的发音,但这一些先验知识计算机并不知晓。例如,对于一个句子进行分词,如表8-1所示。表8-1句子的分词原始句子句子分词我也想过过过儿过过的生活我也想/过过/过儿/过过的/生活货拉拉拉不拉拉布拉多货拉拉/拉不拉/拉布拉多南京市长江大桥南京市/长江大桥在构建文本前端对象之前,需要导入相应的库,并设置预训练模型的路径,如代码8-1所示。代码8-1导入相应的库并设置预训练模型!pipinstallpaddlespeech!wget-Pdownloadhttps:PaddleSPeeCh.bj上CeboS.com/Parakeet/released_models/pwgan/pwg_baker_ck
12、pt_0.4.zip!unzip-o-ddownloaddownload/pwg_baker_ckpt_0.4.zip!wget-Pdownloadhttps:PaddIeSPeeCh.bj上CebOS.com/Parakeet/released_models/fastspeech2/fastspeech2_nosiLbaker_ckpt_0.4.ziP!unzip-o-ddownloaddownload/fastspeech2_nosil_baker_ckpt_0.4.zip!wget!tarzxvfnltk_data.tar.gzimportargparse#导入argparse库,用于解
13、析命令行参数importos#导入C)S库,用于处理文件和目录路径frompathlibimportPath#导入Path类,用于处理文件系统路径importIPython.displayasdp#导入IPython.display模块,用于在JupyterNotebook中显示音频和图像importmatplotlib.pyplotaspit#导入matplotlib.pyplot模块,用于绘制图像importnumpyasnp#导入NumPy库,用于进行数值计算importpaddle#导入Paddle库,用于构建和训练深度学习模型importsoundfileassf#导入soundfi
14、le库,用于读取和写入音频文件importyaml#导入yaml库,用于处理YAML格式的配置文件frompaddlespeech.t2s.frontend.zh_frontendimportFrontend#导入PaddleSpeech中文前端处理类frompaddlespeech.t2s.models.fastspeech2importFastSpeech2#导入PaddleSpeech中的FastSpeech2声学模型类frompaddlespeech.t2s.models.fastspeech2importFastSpeechZInference#导入PaddleSpeech中的Fas
15、tSpeech2类frompaddlespeech.t2s.models.parallel_waveganimportPWGGenerator#导入PaddleSpeech中的ParallelWaveGAN声码器类frompaddlespeech.t2s.models.parallel_waveganimportPWGInference#导入PaddleSpeech中的ParallelWaveGAN推理类frompaddlespeech.t2s.modules.normalizerimportZScore#导入PaddleSpeech中的ZScore正贝!)化类fromyacs.configi
16、mportCfgNode#导入yacs库的CfgNode类,用于处理配置文件plt.rcParamsfont,sans-serif=SimHeiplt.rcParamsaxes.unicode_minus=False# 定义FaStSPeeCh2模型的配置文件路径、检查点路径和统计量路径fastspeech2_config=download/fastspeech2_nosil_baker_ckpt_0.4/default.yamrfastspeech2_checkpoint=download/fastspeech2_nosil_baker_ckpt_0.4/snapshot_iter_7600
17、0.pdzfastspeech2_stat=download/fastspeech2_nosil_baker_ckpt_0.4/speech_stats.npy# 定义ParanelWaVeGAN模型的配置文件路径、检查点路径和统计量路径pwg_config=download/pwg_baker_ckpt_0.4/pwg_default.yamrpwg_checkpoint=download/pwg_baker_ckpt_0.4/pwg_snapshot_iter_400000.pdzpwg_stat=download/pwg_baker_ckpt_0.4/pwg_stats.npy# 定义p
18、honeme到id的映射文件路径phones_dict=download/fastspeech2_nosil_baker_ckpt_0.4/phone_id_map.txt# 读取FastSpeech2模型的配置文件并以CfgNode形式保存# 读取conf配置文件并结构化withopen(fastspeech2_config)asf:fastspeech2_config=CfgNode(yami.safeOad)withopen(pwg_config)asf:pwg_config=CfgNode(yaml.safeJoad(f)Printe=Config=)print(fastspeech2
19、config)print()print(pwg_config)首先通过PaddleSpeech中的Frontend类构建文本前端对象,构造文本前端之后进行文本正则化和字音转换,得到文本正则化结果和对应的音阶列表,如代码8-2所示。代码8-2构造文本前端并进行文本正则化、字音转换frontend=Frontend(phone_vocab_path=phones_dict)# 待转换为音素ID序列的文本input=,学习,是心灵的翅膀,是智慧的火花,是我们通向知识宝库的钥匙。热爱学习,便是燃起心中那抹不灭的热忱,让我们在知识的海洋中畅游,拓展视野,豁然开朗。# 调用前端方法,对文本进行正则化处理
20、将文本转换为音素ID序列input_ids=frontend.get_input_ids(input,merge_sentences=True,print_info=True)# 获取音素ID列表phone_ids=input_idsphone_ids0# 打印音素ID列表print(phone_ids:%s%phone_ids)在代码8-2中,使用Frontend类构造文本前端对象,该类的常用参数说明如表8-2所zjO表8-2Frontend类的常用参数说明参数名称参数说明phone_vocab_path接收str,表示指定音素词典文件的路径或位置。默认为PaddleSPeeCh中提供的中文
21、音素词典文件的位置其中,Frontend类的frontend.get_input_ids函数可以将文本转换为音素ID序列,其常用参数说明如表8-3所示。表8-3frontend.get_input_ids函数的常用参数说明参数名称参数说明text接收str,表示待转换的文本序列,以字符串形式传入。无默认值merge_sentences接收bool,表示是否将多个句子合并为一个句子。默认为TrUeprint_info接收bool,表示是否打印调试信息。默认为FaISe运行代码8-2,得到文本正则化和字音转换的结果如下。textnormresults:学习,是心灵的翅膀,是智慧的火花,是我们通向知
22、识宝库的钥匙。热爱学习便是燃起心中那抹不灭的热忱,7让我们在知识的海洋中畅游,7拓展视野,7豁然开朗。g2presults:,x,ve2,x,i2,sp,sh,in4,x,in,ing2,d,e5,ch,iii4,b,ang3,sp,sh,i114,zh,iii4,h,uei4,d,e5,h,uo3,h,ua,sp,sh,iii4,uo3,m,en5,t,ong,x,iang4,zh,iii,sh,iii5,b,ao3,k,u4,d,e5,iao4,sh,iii5,sp,r,e4,ai4,x,ve2,x,i2,sp,b,ian4,sh,i114,r,an2,q,i3,x,in,zh,ong,n
23、a4,m,o3,b,u2,m,ie4,d,e5,r,e4,ch,en2,sp,r,ang4,uo3,m,en5,z,ai4,zh,iii,sh,iii5,d,e5,h,ai3,iang2,zh,ong,ch,ang4,iou2,sp,t,uo4,zh,an3,sh,i114,ie3,sp,h,uo4,r,an2,k,ai,ang3phone_ids:Tensor(shape=127,dtype=int64,place=Place(cpu),Ste)P_gradient=TnIe,260,251,260,73,179,177,116,260,120,153,126,40,45,39,116,3
24、7,21,179,177,116,262,116,71,214,40,45,71,232,71,188,179,177,116,232,154,55,182,161,260,90,262,113,177,117,37,29,152,186,40,45,99,177,117,179,175,44,10,260,251,260,73,179,37,85,177,116,175,15,174,74,260,120,262,161,155,5,154,158,37,184,154,106,40,45,175,44,39,52,179,175,22,232,154,55,261,10,262,113,1
25、77,117,40,45,71,9,88,262,161,39,22,141,179,182,233,262,16,177,116,105,179,71,233,175,15,152,7,153,211)4.2合成声学模型声学模型负责将字符或音素转换为声学特征,如线性频谱图、Mel频谱图、LPC特征等。声学特征以“帧”为单位,通常一帧约为IOms,一个音素大致对应520帧左右。声学模型需要解决的核心问题是“不等长序列间的映射问题”。“不等长”意味着同一个人在发不同音素时,持续时间可能不同;在不同场景下说同一句话时,语速可能不同,从而导致各个音素的持续时间不同。止匕外,不同人之间的发音特点也不同
26、进一步影响各个音素的持续时间。这是一个具有挑战性的“一对多”问题。声学模型主要分为两类:自回归模型和非自回归模型。在自回归模型中,z时刻的预测输出依赖于M时刻的输出作为输入,这使得预测过程相对较慢,但音质表现较好。相反,非自回归模型在预测过程中不存在此依赖关系,从而实现更快的预测速度,但音质可能稍逊色一些。在本项目中,将使用自回归模型中的FaStSPeeeh2作为声学模型,在分句的基础上构建FastSpeech2模型,流程如图8-4所示。构建FaStSPeeCh2模型一输出Mel频谱通过调用PaddleSpeech中的FastSpeech2类构建声学模型,如代码8-3所示。代码8-3构建Fa
27、stSpeech2模型withopen(phones_dict,r)asf:phn_id=line.strip().split()forlineinf.readlines()vocab_size=len(phn_id)Print(词汇表的大小:n,vocab_size)odim=fastspeech2_config.n_melsmodel=FastSpeech2(idim=vocab_size,odim=odim,*fastspeech2_configmodel)在代码8-3中,使用到PaddleSpeech中的FastSpeech2类构建声学模型,其常用参数说明如表8-4所示。表8-4Fas
28、tSpeech2类的常用参数说明参数名称参数说明idim接收int,表示输入维度,即词表大小。无默认值odim接收int,表示输出维度,即音频特征维度。无默认值*FastSpeech2_configmodel接收diet,表示预训练模型的参数。无默认值运行代码8-3,构建FastSpeech2模型,得到词汇表的大小如下。词汇表的大小:268构建模型之后,加载模型的预训练参数,为生成Mel频谱打下基础,如代码8-4所示。代码8-4加载预训练模型参数# 加载预训练模型参数model.set_state_dict(paddle.load(fastspeech2_checkpoint)main_par
29、ams)# 推理阶段不启用BatchNorm和Dropoutmodel.eval()stat=np.load(fastspeech2_stat)# 读取数据预处理阶段数据集的均值和标准差mu,std二statmu,std=paddle.to_tensor(mu),paddle.to_tensor(std)# 构造归一化的新模型fastspeech2_normalizer=ZScore(mu,std)fastspeech2_inference=FastSpeech2Inference(fastspeech2_normalizer,model)fastspeech2_inference.eval(
30、)构建好预训练模型,便可以通过音素ID序列生成MeI频谱,如代码8-5所示。代码8-5调用模型并绘制Mel频谱withpaddle.no_grad():mel=fastspeech2_inference(phone_ids)PrintcMeI频谱的形状:rf,mel.shape)# 绘制声学模型输出的Mel频谱fig,ax=pit.subplots(figsize=(16,6)im二ax.imshow(mel.T,aspect=auto,origin=lower)plt.title(Mel频谱pltxlabel(时间)pltylabel(频率)plt.tightjayout()运行代码8-5,
31、得到Mel频谱的形状如下,得到声学模型输出的Mel频谱如图8-5所示。Mel频谱的形状:1067,80Mel频谱时间图8-5Mel频谱图4.3声码器合成声码器负责将声学特征转换成波形。声码器需要解决的关键问题是“信息缺失的补全”。信息缺失包括音频波形转换为频谱图时的相位信息缺失,以及频谱图转换为Mel频谱图时因频域压缩导致的信息缺失。假设音频的采样率为16kHz,一帧音频时长为10ms,这意味着1秒的音频包含16000个采样点,而1秒内有100帧,每一帧包含160个采样点。声码器的任务是将一个频谱帧转换成音频波形的160个采样点,因此声码器通常会包含上采样模块。与声学模型相似,声码器也可分为自
32、回归模型和非自回归模型。在本项目中,使用ParallelWaveGAN作为声码器,具体流程如图8-6所示。构建ParalIelWaVeGAN模型一输出生成音频波形图8-6声码器模块ParallelWaveGAN是一种基于GAN(GenerativeAdversarialNetWOrkS)的语音生成模型,其主要特点是可以并行地生成高质量的语音波形,速度较快,适用于实时应用场景。用户首先需要创建一个PWGGeneratOr对象,传入预训练模型的参数;然后加载预训练模型的参数,并去除权重归一化,将声码器切换到推理模式。其次,需要读取数据预处理阶段数据集的均值和标准差,构建Z-SCore归一化器,同时
33、构建归一化的PWGlnferenCe对象,并将其切换到推理模式。最后使用PWGlnferenCe对象对输入的MeI频谱图进行声码器推理,得到音频文件并绘制声码器输出的波形图。构建ParallelWaveGAN声码器如代码8-6所示。代码8-6构建ParallelWaveGAN声码器#创建PWGGeneratOr对象,传入预训练模型的参数vocoder=PWGGenerator(*pwg_configgenerator_params)# 加载预训练模型参数vocoder.set_state_dict(paddle.load(pwg_checkpoint)generator_params)# 去除
34、权重归一化vocoder.remove_weight_norm()# 推理阶段不启用BatchNormalization和Dropoutvocoder,eval()# 读取数据预处理阶段数据集的均值和标准差stat=np.load(pwg_stat)mu,std二statmu,std=paddle.to_tensor(mu),paddle.to_tensor(std)# 构建Z-Score归一化器pwg_normalizer=ZScore(mu,std)# 构建归一化的PWGlnferenCe对象pwg_inference=PWGInference(pwg_normalizer,vocoder
35、)pwg_inference.eval()# 打印完成信息Printc调用声码器,)withpaddle.no_grad():wav二pwg_inference(mel)Printe音频文件形状:W%s,%wav.shape)PrintC绘制声码器输出的波形图,)wave_data=wav.numpy().Ttime=np.arange(O,wave_data.shape1)*(1.0/fastspeech2_config.fs)fig,ax=pit.subplots(figsize=(16,6)plt.plot(time,wave-dataO)pit.IitleC波形Mfontsize=18
36、)plt.xlabelC时间;fontsize=18)plt.ylabelC振幅;fontsize=18)plt.tight_layout()在代码8-6中,使用到PaddleSpeech中的PWGGenerator类构建声学模型,该类的常用表8-5PWGGenerator类的常用参数说明参数名称参数说明*pwg_configgenerator_params接收diet,表示预训练模型的参数。无默认值运行代码8-6,得到如下音频文件形状等信息,同时得到的声码器输出的波形图如图8-7所ZjO调用声码器音频文件形状:320100,1绘制声码器输出的波形图波形时间图8-7声码器输出的波形图44结果评
37、测通过构建文本前端对象、文本正则化、字音转换的文本前端处理,之后基于PaddlePaddle框架搭建声学模型,并使用声码器ParallelWaveGAN将声学模型生成的中间表示转换为最终的音频信号,实现高质量的语音合成。最后进行结果评测,对最终合成结果进行播放并保存,如代码8-7所示。代码8-7播放并保存合成结果# 播放音频PrintC开始播放音频?dp.Audio(wav.numpy().T,rate=fastspeech2_config.fs)# 保存音频sf.write(output.wav,wav.numpy(),samplerate=fastspeech2_config.fs)out
38、put.wav图8-8保存结果评测语音合成的准确性是非常重要的,它可以帮助用户判断语音合成技术是否满足实际需求,评估合成语音的质量和可用性,以及指导技术的进一步发展和改进。语音合成的准确性直接关系到用户体验,评测语音合成可以提高用户体验。如果合成语音质量差、自然度低,那么用户可能无法正常使用相应的应用程序,甚至产生不良体验感。评测语音合成的准确性可以帮助人们了解当前语音合成技术的瓶颈和挑战,并提出改进方向和技术创新点,促进技术的发展和创新。不同的应用场景对语音合成的准确性和要求有所不同。通过评测语音合成的准确性,可以帮助人们选择合适的语音合成技术和应用场景,提高技术的适用性和实用性。评测语音合
39、成的准确性可以促进行业标准化和规范化,推动语音合成技术的发展和应用,为人机交互和语音智能化提供更好的服务。评测语音合成的准确性是一个复杂的任务,需要综合考虑多个因素。以下是一些常用的方法和指标。(1)主观评价:主观评价是最基本的评价方法,即由人工听取合成语音并给出评价。常见的主观评价方法包括听音评分(MoS)、主观质量评估(SQ)、听感实验等。(2)客观评价:客观评价是通过计算机算法对合成语音进行自动评价,通常包括声学特征分析、语音识别等。常用的客观评价方法包括语音质量评估(PESQ)、语音可懂度评估(STOI)、语音自然度评估(MCD)等。(3)语音识别准确率:可以使用语音识别引擎对合成语音
40、进行识别,并计算识别准确率作为评价指标,若识别率越高,则反应语音合成质量越高。常用的语音识别引擎包括百度语音、谷歌语音等。(4)端到端评价:可以评价合成语音在某个具体应用场景下的表现,如语音助手、自动驾驶、语音翻译等。在实际评测中,常常需要综合考虑以上多种评价指标,并根据应用场景和需求选择合适的评价方法。本项目将使用语音识别准确率对新闻数据(部分)生成的语音结果进行评测,如代码8-8所示。importargparseimportosimportpaddlefrompaddlespeech.cli.asrimportASRExecutorfrompaddlespeech.cli.textimpo
41、rtTextExecutor# 设置输入参数parser=argparse.ArgumentParser(_doc)parser.add-argument(-input,type=str,default=input.wav)parser.add-argument(-device,type=str,default=paddle.get-device()args=parser.parse_args()# 定义输入列表和相关变量input_list=第六十一集第六十二集第六十三集7第六十四集第六十五集一分利食府,中国人民保险集团股份有限公司闽宁营销服务部闽宁镇卫生院中国电信闽宁镇合作营业厅input
42、path=.datainputtotal_len=0total_correct=0list_dir=os.listdir(input_path)# 初始化ASR和文本处理模块asr_executor=ASRExecutorOtext_executor=TextExecutorO# 对每个音频文件进行处理和评估forindex,iinenumerate(list_dir):#通过ASR模块获取音频文件的文字转录结果text=asr_executor(audio_file=os.path.join(input_path,i),device=args.device)print(ASRResult:
43、n.format(text)#统计准确率指标now_len=len(inputjistindex)total_len+=now_lennow_correct=0forjinrange(min(len(text),now_len):iftextj=input_listindexj:now_correct+=1total_correct+=now_correctprint(Accuracy:,now_correct*100/now_len,%)print()#输出总体准确率Printe总词数量:W,total_correct)print(正确词数量:n,totaljen)Print(准确率:n,%
44、2f%total_correct*100/%)运行代码8-8,得到的语音识别准确率如下。总词数量:73正确词数量:68准确率:93.15%从代码8-8运行结果可以看出,合成语音的总词数量为73个,正确词数量为68个,准确率为93.15%,这意味着大部分单词均被正确使用。语音识别软件可以有效识别合成的语音,侧面说明了合成语音的质量有效性。影响语音识别引擎准确率的因素有:音频清晰度、自然度、韵律和语调等。用户可以通过调整合成参数,降低噪音、回声和失真等来提高合成音频清晰度;通过调整音调、语速、音量等参数,以及使用更高质量的训练数据来提高语音合成引擎的自然度;通过加入基于注意力的语音合成技术确保音频的韵律、语调、停顿等,从而与自然语言相符。为更有针对性地优化合成语音,可以实时监测语音识别引擎的