深夜收到一段语音留言,语气温和,句子之间几乎没有缝。听第一遍觉得正常,第二遍开始不对劲:它把每一个字都咬得很清楚,清楚到不像人在赶时间说话。
一段「太完整」的留言
这种不适感很难指认。音色本身没有问题,甚至比多数真人录音干净。问题出在干净本身——真人说话会拖尾、会吞半个字、会在换气的地方轻轻一顿,而这段留言从头到尾都在匀速前进。
把一段录音放慢,人声的纹理就出来了:呼吸、口腔摩擦、音节之间的黏连。这些在文字稿里全是空白,但耳朵一直在听。
难点从发音挪到了节奏
早年的做法是把人声切成很小的单元,按需拼起来。音素本身没问题,拼缝处容易露怯。后来统计参数模型接手,声音变顺滑,代价是细节被抹平,听起来像隔着一层布。端到端神经网络把文本直接映射成波形之后,这两类毛病同时被压了下去,语音合成的音色问题基本不再是主要矛盾。
真正的麻烦换了个位置,跑到长尾文本上。中文里那些小地方最考验人:
- 多音字,「重」在「重复」和「重量」里不是一回事;
- 数字、单位、型号,念法取决于上下文;
- 中英混排,缩写到底是逐字母读,还是当单词读;
- 姓名、地名、外来词式的专有名词,词典里未必收得全。
规则和词典能兜住一部分,但端到端之后,这类问题反而不好下手——模型内部没有可以逐条修改的接口,只能回头补数据,或者在前端做文本归一化。工程上做得越深,越像在跟一个黑箱商量。
不合语法的地方,恰恰是人的地方
还有一个容易被忽略的层面:什么时候不说话。
真人讲话充满冗余。想到一半改口,说到关键处停半拍,被电话打断后再接上时,会轻轻重复上一个词。这些不构成信息,却构成可信度。语音合成长期把话说得太完整,每句都收得干干净净,反而显得没有人味。
于是近些年的注意力往韵律和「不流畅」上挪:气口放在哪、停顿多长、句尾是升还是降、语气词要不要拖。技术上这是在建模更细的时长和音高曲线,感受上却是在还原人的迟疑。
边界与代价
再往外的边界,是情感强度和口音。把情绪调高很容易滑向播音腔,调低又像在念说明书。方言、老年音、儿童音这类声音,可用的自然语料相对有限,做出来的效果参差。
另一面是代价。声音一旦足够像,被冒用的风险也随之上升。水印、溯源、授权确认这些配套,正在从可选项变成必选项,但落地节奏各说各话。
回到那段留言。它缺的不是好嗓子,是一次恰当的迟疑——在说错之前停住,在被打断之后接上。语音合成把话说得太利索了,而人说话,本来就不利索。