背景
说明
随着豆包语音复刻2.0模型的上线,复刻1.0的最佳实践已相应调整。本文针对声音复刻2.0能力,基于一些用户的常见问题提供实践指导,供参考。
为什么要好的prompt?
整个ICL声音复刻的过程中,prompt起到了最关键的作用。声音复刻大模型是会充分学习音频的特征并进行还原,所以质量好的prompt对于复刻效果的保证,是有决定性作用的。如果用户忽视prompt的选择,选取了带有噪声、长度过长(>30s)或过短(<14s)、多人声、人声不清晰、方言严重、带有一些杂音毛刺的prompt,会使得最终复刻效果不佳。
什么是好的prompt?
- 训练音频Prompt长度在14~30s,使用wav格式。过长的音频系统会自动截断,有可能会保留瑕疵音频而影响效果;
- 尽可能的选取低噪声、单人且人声效果较好的单轨音频(不用双声道录制)作为prompt;
- 进一步的调优,可以利用降噪等手段,保证音频人声的清晰度(但是降噪会损失一定的相似度,需要注意);
- 整个音频中情绪尽可能保持一致,不要有过大的起伏,也不要过于平淡、避免发音模糊、语气生硬,注意语气、语调、语速需要贴合内容场景;
- 对于中英混情况,prompt中最好能同时覆盖中英文
什么是context_texts?
- 在豆包声音复刻2.0能力中,新增了context_texts;
- 在通用合成任务中,可以通过类似文本的一句话指令提升合成的情感效果(如:["用最悲伤的语气演绎下面这句话:"]);
- 在LLM文本大模型的后置语音合成任务中,可以通过提供上文query,从而使得合成语音与用户query更适配。如整个LLM中,几轮的对话是 Q: 我今天分手了。A: 啊,那你不要太难过哦。Q:我才不难过呢,那个人太渣了。A: 哈哈,那就好,那你吃点好吃的好好庆祝一下。可以将["我才不难过呢,那个人太渣了。"] 作为context_text送给服务进行合成,从而使得回复语音有更好的对话效果。
稳定的情感表现
说明
建议助手类、客服类的用户使用情感平稳的prompt,情感表现上会更稳定一些
一般而言,相对情感平稳的prompt会在生成语音时有更稳定的复刻情感表现:

test_case_peace_prompt.wav
未知大小
合成语音:
我不懂啊,随便瞎刷,随便点点看看是什么样子

test_case_peace_output.wav
未知大小

test_case_peace_output_1_0.wav
未知大小
留学生的钱真好骗;这话说的还真是,你别说

test_case_peace_output_2.wav
未知大小

test_case_peace_output_2_0.wav
未知大小
而情感更为丰富的prompt,在多次合成同一文本时,情感也会有一定的变化:

test_case_emotional_prompt.wav
未知大小
合成语音:
我不懂啊,随便瞎刷,随便点点看看是什么样子

test_case_emotional_2_1.wav
未知大小

test_case_emotional_2_2.wav
未知大小
留学生的钱真好骗;这话说的还真是,你别说

test_case_emotional_output_1.wav
未知大小

test_case_emotional_output_2.wav
未知大小
高表现力的情感复现
说明
豆包声音复刻2.0支持通过context_texts字段,提升情感的预期表现;2.0模型不会完全贴合prompt情感,会更贴合语义信息
一个常见的情景:用户既想要prompt的音色又需要prompt情感的时候,就在请求中常驻context_texts(带上prompt的情感描述)即可
Prompt:
合成语音:(不带context_texts)
引航者...你为什么说这些话...真的好过分啊!呜呜...你是不是在开玩笑,别吓我好不好,我不想失去你
合成语音:(context_texts: ["用最悲伤的语气演绎下面这句话:"])
引航者...你为什么说这些话...真的好过分啊!呜呜...你是不是在开玩笑,别吓我好不好,我不想失去你

sad_output_update.wav
未知大小
Prompt:
合成语音:(不带context_texts)
别在这儿扯犊子了!明明是你犯的错还找借口,能不能有点担当啊?!
合成语音:(context_texts: ["用最生气的语气演绎下面这句话:"])
别在这儿扯犊子了!明明是你犯的错还找借口,能不能有点担当啊?!