☰
方言语音合成技术解析:从数据困境到文化传承的破局之路
2026/10/16 7:33:53 网站建设 项目流程

你有没有过这种经历:在外地待久了,跟家人视频时突然想讲一句家乡话,刚开口就自己先笑出来——语调飘了,词也忘了。更扎心的是,你身边的晚辈多半是"听得懂、不会讲",方言就这么在一代人的沉默里,慢慢退出客厅、退出菜市场、退出日常。

我最近连续接触了几个想做方言项目的朋友和团队,有的是要做一个方言地图App,有的是给景区做方言导览,还有的想复刻一位老播音员的乡音,做成一套"会说话的方言档案"。聊来聊去,问题最后都撞到同一个点:方言语音合成。

坦白说,这活儿比做普通话TTS(语音合成)难多了。普通话有几十甚至上百小时的高质量录音可以买、可以公开下载,有统一拼音和开源工具链;而方言通常只有几个愿意配合的母语者,几段手机录出来的嘈杂音频,连"这个字在方言里到底怎么读"都要吵架。但反过来想,正因为难,做成了才真的有用。

这篇文章我把这套东西掰开揉碎讲清楚:方言语音合成为什么难、技术上到底怎么破局、一个真实项目从零到上线要经历什么、以及文化传承这条线怎么接得住。适合正在评估方言语音合成可行性的开发者、产品经理,也适合想做方言保护但还没找到技术入口的普通人。

1. 方言语音合成比普通话TTS难在哪:不是一个量级,是三个死角

很多人的第一反应是:普通话能合成,方言不就是换个发音吗?把普通话模型拿来改改不就行了?

真不是。普通话TTS之所以成熟,是因为它有一条完整的工业化链条:数据、文字规则、音系建模全都有。方言在这三块几乎都是塌的。用做普通话的思路去做方言,大概率翻车。

1.1 数据死角:母语者难找,录音更难干净

训练语音合成模型,核心燃料是"标注好的语音数据集"。一个合格的普通话TTS模型,起步就要10到20个小时的干净录音,想要自然度高一点,50小时也不算夸张。市面上有成熟的配音录制团队、录音棚、播音指导,付钱就能拿到质量稳定的数据。

方言呢?你很难找到一批普通话水平稳定、方言地道、音色又统一的发音人。实际情况往往是:一个县里会说地道方言的人不少,但多数集中在50岁以上;年轻人会听不会说,偶尔冒出一句还带着明显的普通话腔。要凑够20小时有效数据,可能需要动员几十个人,每个人录几分钟,最后音色五花八门,模型根本学不了一个稳定的"人设"。

更现实的问题是录音环境。大部分采集只能上门入户,在客厅里、厨房里拿手机录,背景里狗叫、电视声、家人的咳嗽声全都收进去了。我见过一个项目,团队花了两个月录了14小时的方言语音,按信噪比和连续性筛完,真正能进训练集的只有5小时出头。5小时训普通话模型都勉强,何况是音系更复杂的方言。

1.2 文字死角:方言没有"标准答案"写在纸上

语音合成系统的输入是文字。普通话有拼音方案、有分词词典,任何一个汉字都能通过G2P(Grapheme-to-Phoneme,字素到音素的转换)模块算出读音。方言呢?大部分方言没有一套官方承认的书写体系。

有人会说,方言不是有汉字吗?用汉字写方言确实存在,比如粤语的口语字"咗""唔""哋",闽南语的白话字、吴语的拼音方案,但问题是这些方案没有完全统一,识字率也低。你用汉字写一行方言句子,不同的人会读出完全不同的音。

最典型的坑是"文白异读"。同一个字,在书面语词汇里有一套读音(文读),在日常口语词汇里又有另一套读音(白读)。闽南语里"大"字,说"大学"是一种读法,说"大只"又是另一种读法;粤语里"生"字,在"生日"和"生果"里声调都不同。如果标注时不做区分,模型看到同样的汉字,学到的读音是混乱的,合成出来的语气词、量词、动词全都在"文读和白读之间反复横跳",听起来极其难受。

1.3 音系死角:声调、入声、连读变调,每一种都是普通话没有的

普通话只有4个声调加轻声,声母韵母的组合也算规整。但很多方言的音系比这复杂得多。

以声调为例:粤语有9个声调(按传统音韵学细分是"九声六调",实际调值有6个,但入声分阴阳还会带入声调),闽南语有7个调类,吴语普遍有7到8个调类,而且吴语还保留了全浊声母,比如b、d、g这些在普通话里压根不作为独立音位出现。入声就更典型了,普通话没有入声,但粤语、闽南语、客家话都保留着以-p、-t、-k结尾的入声韵。这些音一出现,普通话模型直接"破音"。

比单个音素更麻烦的是连读变调。闽南语里,一个字在句子中间和句子末尾,声调经常不同;吴语更是整个词组都会发生变调。普通话音节可以孤立读准,但方言必须把上下文一起处理,把变调规则揉进模型里。这种上下文相关的声调变化,不是简单调几个参数就能解决的。

一句话总结:数据、文字、音系三个死角叠加,让方言语音合成从一开始就不可能是"换换数据重训一遍"的小工程。

2. 技术破局的核心打法:用小数据训练出"有内味"的乡音

难点归难点,问题总得解决。这几年我看到的可行路径,基本围绕三个方向:迁移学习、统一音素表、显式声调和韵律建模。这三条路相辅相成,单独用哪一条都差点意思。

2.1 迁移学习:把普通话积累的"声音底盘"借给方言

方言数据少,但有个好消息:人在发不同语言的声音时,底层声学空间是共通的。普通话和方言共享大量声母韵母,发音器官的运动规律也接近。这意味着我们可以先用海量普通话数据训练一个基础好的模型,再拿少量方言数据微调。这样做的前提是预训练模型已经学会了"人类语音发声的通用规律",方言数据只需要帮它纠正"哪个音对应哪个方言特征"。

具体做法上,一般分两步:

第一步,加载一个在普通话大规模语料上预训练好的端到端语音合成模型,比如常见的Tacotron、FastSpeech或VITS这类架构。注意一定要选带声码器的完整链路,微调时才不会在波形重构上踩坑。

第二步,用清洗好的方言数据做微调。微调时学习率要调低,通常设为基础学习率的十分之一到二十分之一,防止模型忘了已经学好的普适声学特征。训练轮次也不宜多,我见过在方言数据只有3到5小时的情况下,微调两到三个epoch就过头了,出现合成语音"声调忽高忽低、音色漂移"的过拟合现象。

如果方言数据实在太少,还有一个办法:混合训练。把普通话数据和方言数据按比例混合,比如方言数据占30%、普通话占70%,一起喂给模型。这种做法等于给模型设立一个"锚点",让它始终记得正常人类语音长什么样,不会因为方言数据量少就学偏。我实测下来,混合训练对5小时以下方言数据的稳定效果,比单纯微调要好不少。

2.2 统一音素表和罗马字前端:让模型先"认识"方言再开口

刚才提到,方言没有统一书写系统,所以输入端不能直接把汉字丢给模型。正确的做法是:在汉字和声学模型之间,加一层"方言音素中间层"。

具体来说,先要设计一套覆盖目标方言的音素表。什么叫覆盖?就是把这个方言里所有的声母、韵母、声调都列全。比如粤语要有-m、-n、-ng、-p、-t、-k这些韵尾,闽南语要有鼻化元音,吴语要保留浊塞音。声调也要单独编码,普通话4个声调用数字1到4就行,粤语就得编到9个调类,而且入声和平声的搭配要区分清楚。

有了音素表,前端流程就变成了:汉字文本 → 方言罗马字或国际音标 → 音素序列。很多方言已经有成熟的罗马字方案,比如粤语拼音、闽南语白话字,可以直接借用来做标注。没有现成方案的,就用国际音标标注,虽然标注员门槛高一点,但信息无损。

这一步有个容易犯的错:想省事,直接用普通话的G2P给方言文本注音。结果就是模型学会了"用普通话的音去读方言的字",合成出来像"外地人在模仿口音",而不是本地人在讲话。我后来总结出一条纪律:除非目标就是"带口音的普通话",否则前端必须走方言音素表,一步都不能省。

2.3 声调和韵律显式建模:把"连读变调"变成模型规则

音素对了,还要让声调对。方言的声调不像普通话那么"老实",尤其是连读变调,不处理的话,模型会自己瞎猜。

处理连读变调有两种思路:

一种是在前端做"变调预计算":写一套变调规则,在文字转音素时就把变调后的声调算好,直接输入模型。比如闽南语常见规则中,非句末音节多数要变调,那就先扫描句子,把所有需要变调的音节挑出来,换成变调后的调类,再进入声学模型。这种做法的好处是可解释、可控,缺点是要把方言的变调规则吃透,遇到例外情况容易漏。

另一种是让模型在训练中自动学变调规律,比如在输入中加入"音节位置""词边界""句法成分"等特征。但方言数据本来就少,模型很难从几百句样本里总结出稳定规律,容易学了前面的忘了后面的。

我目前比较推荐的做法是混合:显式的核心变调规则写进前端,上下文相关的复杂变化交给模型。这样既不至于让规则库膨胀到维护不动,也不会让模型在数据不足时瞎猜。

另外,多人录制的数据还会碰到一个隐藏问题——音色不一致。如果采集时混入了多位发音人的录音,模型学到的"声音"是平均脸,谁都不像。解决办法是用说话人向量(speaker embedding)把每个发音人区分开,合成时指定目标说话人的向量,这一点在方言数据多源采集的项目里几乎是必需品。

3. 从零到上线:一个方言合成项目的完整操作链路与翻车记录

理论说了一堆,落到实操才是真章。我把一个方言语音合成项目从需求到上线的过程完整梳理一遍,以我最近跟进的一个模拟项目为例,项目背景是某文旅景区的方言语音导览系统。为了避免纠结具体地名,姑且叫它"模拟项目X"。

3.1 立项先想清楚:你的场景决定数据策略

我见过太多人上来就准备数据、选模型,结果连"要合成什么内容"都没定。这直接决定了技术路线:

应用场景典型输入数据量要求推荐方案
方言词典/词汇表单词、短语、短句3-5小时微调或小规模端到端
文旅导览/语音播报固定长文本8-15小时端到端模型微调
开放对话/自由文本合成任意文本15小时以上端到端大规模预训练+微调

模拟项目X要做的是景区导览,属于"固定长文本"场景,里面会涉及大量地名、古迹名称和方言俗语。数据目标定在10小时有效录音比较合理。

立项时还有两件事必须在动工前办完:一是确定发音人。导览场景要听起来有亲和力,我们选了一位本地广播站退休的前辈,音色稳重、方言地道,普通话底子也不差(这样在碰到人名、现代词汇时不会读得太突兀)。二是签好授权协议。声音是生物特征,用别人声音训练合成模型,至少要明确:录音用于训练、合成内容的使用范围、是否允许对外公开、使用者身份标识。这一环别省,省了后患无穷。

3.2 数据采集与清洗:5小时有效数据背后是20小时原始录音

录音脚本不是随便找篇文章念念就行的。设计脚本时要覆盖目标方言的全部声韵调组合,同时把景区导览会出现的核心词汇、固定句式都放进去。比如导览词里"历史悠久""依山傍海"这类高频词,一定要多录几遍不同语境下的念法,因为连读变调在不同位置不一样。

录音设备上,不一定要专业录音棚,但要有基本保障:一个安静的房间、一支电容麦克风、一台电脑加外置声卡,采样率至少48kHz。手机录音可以作为补充,但底噪处理起来很麻烦,能不用尽量不用。

模拟项目X的实际过程是:录了约22小时原始音频,包括自由朗诵和少量问答式对话,之后做了几轮清洗——

第一轮,自动检测。用静音检测和信噪比评估把太短、太噪、有人声重叠的片段标出来,先自动剔除一批;第二轮,人工听测。把自动筛选后的片段按句切好,由一位方言母语者逐条听,把读错、吃字、笑场、环境音混入的句子挑出来;第三轮,统一格式。重采样到22050Hz、16bit单声道,按句子切成2到5秒的音频片段,并逐句标注好罗马字音素序列。

三轮下来,22小时变成有效训练集6.8小时,还有大约1小时作为评测集单独留着,绝不混进训练。数据少的时候最容易犯的错就是把评测集也训进去,最后自以为效果很好,一上真实文本就露馅。

3.3 训练阶段的参数与监控:小数据训练要盯紧两个信号

模型架构上,模拟项目X用的是开源社区常见的端到端TTS框架,预训练权重是在大规模普通话数据上训好的。微调时我调整了三个关键参数:

学习率设在0.0003,并且用预热加余弦衰减。因为数据量小,学习率太高会一两步就把预训练学到的东西冲没了。Batch size设成24,梯度累积两步,等效batch 48,这样在6.8小时的小数据集上也能稳定更新。训练轮次控制在15个epoch以内,中间监控验证集的损失,一旦验证损失连续3个epoch不降反升,立刻停。

训练过程中有两个信号要重点盯:

一是合成音频里是否出现"糊音"。如果某个字发音含糊、像嘴里含了东西,多半是数据里那个音节出现次数太少,或者音素标注错了。回去查标注,而不是盲目加训练轮次。

二是音色稳定性和声调走势。很多小数据训练的模型,开头几轮声音正常,后面突然变成"不稳的抖音"。这通常是过拟合的前兆。我在第8个epoch后基本每个epoch都做一次人工听测,不能光看损失数字,因为损失下降不代表主观自然度上升。

3.4 评测不能只看评分:分维度拆开评,让母语者打分

评测环节,模拟项目X做了两个动作:客观指标上,计算合成音频与原始录音在音素层面的对齐误差和MOS预测值,这个值大概能反映整体自然度,但方言场景下参考意义有限,因为通用MOS模型是在普通话数据上训的,天然有偏见。

主观评测才是关键。我们请了8位本地中老年母语者和5位熟悉方言但对普通话更亲的年轻人,分两组盲测。评测维度拆成三个:声调准确度、用词地道度、整体自然度。盲测素材随机打乱,混入原始录音作为"满分对照组"。

结果很有意思:年轻人组给合成语音打的自然度分普遍偏高,他们觉得"能听懂、不难听"就够了;但中老年组对声调错误非常敏感,尤其是一些地名读错声调时,直接给了很低分。这说明方言合成的评测必须由真正的日常使用者把关,不能拿"能听懂普通话的年轻人"当主力评分员。

上线前我们还犯过一个低级错误:导览词里有一句方言俗语,标注时用了普通话的近义替换,结果发音是标准方言腔,词汇却是普通话词汇,本地母语者一听就笑了。最后把所有核心俗语逐条核对,确保"音是方言音、词是方言词",才放行上线。

4. 方言的"第二生命":合成技术落进文化传承的真实场景

技术项目聊完,我想聊聊更根本的问题:做方言语音合成,图什么?

如果只是为了做个技术Demo,那大可不必费这么大劲。真正有价值的地方在于,合成技术给方言提供了一种"可再生"的表达能力——方言不再只是档案馆里的旧录音,它可以出现在任何需要它发声的地方。

4.1 有声词典与方言档案:从"能查到"到"每天能听见"

传统的方言保护,做得最多的就是录音存档。一个发音人在录音棚里念完几千个词汇,磁带和硬盘一放,基本就完成了使命。但录音是"死"的:你想查一个词,得翻对应的音频文件;你想听一句特定的句子,还得看当年有没有录过。

方言语音合成能把档案激活。基于采集的语音训练一个模型后,任意输入的方言文本都能被念出来。有声词典不再需要一条条人工录音,只要前端做好罗马字转写,词库随时扩充、新词随时上架。我见过一个地方团队,把老音频做成了"方言开口词典",从一开始的几千词,现在能做到几万词条,都是模型批量生成的,人工只需要审核。

这种形态对濒危方言尤其重要。当最后一批母语者年事已高,录音资源会越来越稀少,合成模型相当于把这批人的语言能力"数字化复制"了一份,后续的扩充、教学、传播,不再受人力时间限制。

4.2 文旅导览、公交播报与地方广播:方言回到公共空间

方言最自然的生存土壤是公共空间。这些年不少城市在尝试方言报站、方言播报、方言文旅内容,但很多项目最后都卡在"没有足够多的方言语音素材"上——不可能让播音员把每一条可能的播报都提前录好。

合成技术天然适配这个缺口。固定句式(到站提醒、景点介绍、安全提示)完全可以用合成语音生成,而且能在"标准普通话"和"方言"之间无缝切换。模拟项目X做的景区导览系统上线后,游客扫码就能听方言版讲解,效果超出预期:很多本地年轻游客第一次发现,原来自己从小听到大的方言讲起历史来这么有味道。

需要注意的是一条边界:公共空间里的方言报站,首先要保证听得懂,然后才是地道。如果某个方言音系和普通话差异太大,建议把方言版放在普通话之后,或者用"普通话+方言"的双语模式,不能为了文化传承牺牲公共服务的可达性。

4.3 乡音陪伴与代际连接:声音本身是情感

最后说一个容易被忽视的场景:情感陪伴。

很多老年人离乡不离土,在大城市里帮子女带孩子,周围全是普通话,能听到一句乡音都算奢侈。如果有一个会讲家乡话的小音箱,能陪他聊几句家常、念一段老家的新闻或者戏文,这种陪伴感不是标准普通话助手能给的。

我接触到的一个团队正在做类似的事情:为一位乡音浓重的老人录制了多小时的个人语音,经本人同意后训练了一个"方言陪伴模型",生成内容严格限定在生活提醒、故事讲述、节日问候等安心场景,并且在所有合成内容上明确标注"AI生成"。他们特别强调了透明原则——AI的声音可以模仿亲人,但不该冒充亲人。这条原则在我看来,是方言合成(或者说任何声音克隆技术)必须守住的底线。

5. 想入局的人请先看:我踩过的坑和现在的固定流程

技术方案讲完,最后分享几条用真金白银换来的经验,给准备动手做方言语音合成的朋友做个参考。

5.1 先把录音脚本做扎实,再谈模型选型

我初次做方言项目时,抱着"数据不够模型凑"的想法,先选了一个看起来很现代的端到端框架,跑通后才发现录音数据根本没有覆盖方言的入声韵和连读变调场景,合成出来十个字里有一半是"普通话腔调",最后推倒重来。

现在我的固定顺序是:先把目标方言的音系摸清,列出声母、韵母、声调清单;然后设计录音脚本,确保每个音素至少出现20到30次,高频词汇和特殊句式单独列一页;最后才开始选框架和数据预处理。录音脚本做得足够好,后面模型训练会省掉几轮返工。

5.2 合成质量要分开评,别被一个总分数骗了

一个很常见的误判是:合成语音的MOS分数到了3.8,就觉得没问题了。但方言场景下,总分高可能只是因为"像普通话"——对于不熟悉方言的评测人来说,越像普通话越好,因为他们只能参照普通话的自然度来打分。

我现在要求所有项目拆维度评:声调准确度、词汇地道度、韵律自然度、情感表现力,逐项打分。声调错了就是错了,词汇不地道就是不地道,不能靠韵律和音色把分拉平。另外,每轮迭代后都要让母语者做"挑刺测试"——给一句真实用户会说的句子,让他们标出所有听着不舒服的地方。这个流程比看10个指标都管用。

5.3 授权、标注和透明标识,一次都别省

有三件事我建议当成硬性规定:第一,所有参与录音的发音人,签清楚授权协议,明确训练用途、合成内容范围和传播边界;第二,所有标注必须经过至少两位母语者交叉确认,尤其是文白异读和连读变调,一个人说是对的可能是错觉;第三,凡是向用户提供的合成语音,都要在合适的位置标注"由AI合成",这既是对发音人的尊重,也是对用户的负责。

方言语音合成做到现在,技术上其实已经没有不可逾越的障碍了,难的是把每一步做扎实——数据是不是真的地道,标注是不是真的准确,应用是不是真的对文化有用。

我自己的体会是:每当一段合成语音能让一位老人会心一笑,或者让一个小朋友主动跟着模仿一句家乡话,这个项目就值了。技术破局是手段,让方言继续有人听、有人讲、有人爱,才是这件事真正的"新声量"。

如果你也在琢磨给某一种方言做合成应用,不妨从一段录音、一个词表、一份脚本开始。路不难,但得一步一步走。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询