CosyVoice icon indicating copy to clipboard operation
CosyVoice copied to clipboard

CosyVoice 2.0 克隆模式下自然语言描述语气功能不工作

Open gitcitt1 opened this issue 7 months ago • 2 comments

我正在使用 CosyVoice 2.0 进行语音合成项目,尝试利用其自然语言描述的语气/情感/方言控制功能。根据官方文档和演示页面,CosyVoice 2.0 支持使用自然语言描述来控制语音的情感、语气和方言(如"模仿机器人风格"、"用天津话说"等)。

然而,在实际使用中发现,虽然单独使用 emotion 参数(如"happy")或 dialect 参数(如"天津话")可以正常工作,但使用自然语言描述的方式却无法达到预期效果。

复现步骤 1.我使用以下 API 调用尝试生成带有自然语言描述语气的语音:

test_payload = {
    "text": "你现在有什么安排吗?要不要一起去喝个下午茶?",
    "reference_audio": "ABC_10.wav",
    "reference_text": "XXXXX",
    "speed": 1.0,
    "version": "v2",
    "description": "用愤怒的语气说四川话",
    "use_instruct": True
}

2.尝试直接在文本中手动添加指令格式:

test_payload = {
    "text": "用天津话说<|endofprompt|>今儿个去逛古文化街,那些个手工艺品五花八门,特别是杨柳青年画,色彩鲜艳得让人眼花缭乱。",
    "reference_audio": "ABC_10.wav",
    "reference_text": "XXXXX",
    "speed": 1.0,
    "version": "v2",
    "use_instruct": True
}

实际结果 1.使用 [description] 参数时,生成的语音没有应用描述的语气或方言,保持了参考音频的语气。 2.当在文本中手动添加 <|endofprompt|> 标记时,模型将整段文本(包括指令部分)一起读出来。 3.对于复杂的描述(如"像将死之人一样无力地说"、"用愤怒的语气说四川话"),生成的语音也没有体现出相应特性。

预期结果 1.当提供自然语言描述(如"用天津话说"、"模仿机器人风格")时,生成的语音应该体现出相应的方言或语气特点。 2.复杂的组合描述(如"用愤怒的语气说四川话")应该同时呈现情感和方言特点。 3.系统应该能够识别并处理描述部分,而不是将其作为文本内容读出。

环境信息 CosyVoice 版本:2.0 (CosyVoice2-0.5B) 使用 FastAPI 构建的接口服务 可再现于所有自然语言描述语气的尝试(我们测试了多种不同描述)

补充信息 根据官方文档的演示示例部分,以下内容应该是支持的:

Instructed Voice Generation Role-playing Control Text CosyVoice1.0-Instruct CosyVoice2.0
神秘<|endofprompt|>那座古老的城堡笼罩在神秘的雾气中,吸引着冒险者前去探索。
凶猛<|endofprompt|>战士们以凶猛的勇气冲锋陷阵,让敌人闻风丧胆。
好奇<|endofprompt|>对艺术的无限可能,她总是充满好奇,愿意尝试各种不同的创作形式。
...

以及方言控制:

Dialect Control Text CosyVoice1.0-Instruct CosyVoice2.0
用粤语说这句话<|endofprompt|>我最近迷上一部经典港剧,入面嗰啲对白真系有嚟头,时唔时就嚟句"唔该晒",令我不禁莞尔。
用四川话说<|endofprompt|>前儿个去宽窄巷子喝盖碗茶,坐在小板凳上头听人摆龙门阵,简直安逸得很,不想走哦。

请问我的使用方式是否正确?或者是否需要特定的参数组合才能使这一功能正常工作?

可能的解决方案 我怀疑问题可能在于 inference_instruct2 函数的使用方式或参数传递。在官方演示中,对于自然语言描述使用了类似 description<|endofprompt|>text 的格式,但我尝试直接设置 description 参数或手动构建这种格式都未能成功。

请问正确使用自然语言描述控制语音特性的方法是什么?是否有特定的调用模式或参数组合我们应该遵循?

感谢您的帮助!

gitcitt1 avatar May 20 '25 21:05 gitcitt1

具体控制方式上,请参考report,不是任意instruct都支持的,支持的控制方式并不多

aluminumbox avatar May 26 '25 03:05 aluminumbox

使用 cosyvoice.inference_instruct2 参考readme的使用方式

TruthLoveLife avatar May 27 '25 06:05 TruthLoveLife

This issue is stale because it has been open for 30 days with no activity.

github-actions[bot] avatar Jun 27 '25 02:06 github-actions[bot]

具体控制方式上,请参考report,不是任意instruct都支持的,支持的控制方式并不多

你好,作者,这个instruct是怎么支持的呀,具体什么方式实现的呀,可以通过仓库提供的sft代码赋能新的instruct,还是说这个是内化到模型参数,被写死了,固定了,无法赋能了

xgl0626 avatar Jul 04 '25 10:07 xgl0626

我正在使用 CosyVoice 2.0 进行语音合成项目,尝试利用其自然语言描述的语气/情感/方言控制功能。根据官方文档和演示页面,CosyVoice 2.0 支持使用自然语言描述来控制语音的情感、语气和方言(如"模仿机器人风格"、"用天津话说"等)。

然而,在实际使用中发现,虽然单独使用 emotion 参数(如"happy")或 dialect 参数(如"天津话")可以正常工作,但使用自然语言描述的方式却无法达到预期效果。

复现步骤 1.我使用以下 API 调用尝试生成带有自然语言描述语气的语音:

test_payload = { "text": "你现在有什么安排吗?要不要一起去喝个下午茶?", "reference_audio": "ABC_10.wav", "reference_text": "XXXXX", "speed": 1.0, "version": "v2", "description": "用愤怒的语气说四川话", "use_instruct": True } 2.尝试直接在文本中手动添加指令格式:

test_payload = { "text": "用天津话说<|endofprompt|>今儿个去逛古文化街,那些个手工艺品五花八门,特别是杨柳青年画,色彩鲜艳得让人眼花缭乱。", "reference_audio": "ABC_10.wav", "reference_text": "XXXXX", "speed": 1.0, "version": "v2", "use_instruct": True } 实际结果 1.使用 [description] 参数时,生成的语音没有应用描述的语气或方言,保持了参考音频的语气。 2.当在文本中手动添加 <|endofprompt|> 标记时,模型将整段文本(包括指令部分)一起读出来。 3.对于复杂的描述(如"像将死之人一样无力地说"、"用愤怒的语气说四川话"),生成的语音也没有体现出相应特性。

预期结果 1.当提供自然语言描述(如"用天津话说"、"模仿机器人风格")时,生成的语音应该体现出相应的方言或语气特点。 2.复杂的组合描述(如"用愤怒的语气说四川话")应该同时呈现情感和方言特点。 3.系统应该能够识别并处理描述部分,而不是将其作为文本内容读出。

环境信息 CosyVoice 版本:2.0 (CosyVoice2-0.5B) 使用 FastAPI 构建的接口服务 可再现于所有自然语言描述语气的尝试(我们测试了多种不同描述)

补充信息 根据官方文档的演示示例部分,以下内容应该是支持的:

Instructed Voice Generation Role-playing Control Text CosyVoice1.0-Instruct CosyVoice2.0 神秘<|endofprompt|>那座古老的城堡笼罩在神秘的雾气中,吸引着冒险者前去探索。 凶猛<|endofprompt|>战士们以凶猛的勇气冲锋陷阵,让敌人闻风丧胆。 好奇<|endofprompt|>对艺术的无限可能,她总是充满好奇,愿意尝试各种不同的创作形式。 ... 以及方言控制:

Dialect Control Text CosyVoice1.0-Instruct CosyVoice2.0 用粤语说这句话<|endofprompt|>我最近迷上一部经典港剧,入面嗰啲对白真系有嚟头,时唔时就嚟句"唔该晒",令我不禁莞尔。 用四川话说<|endofprompt|>前儿个去宽窄巷子喝盖碗茶,坐在小板凳上头听人摆龙门阵,简直安逸得很,不想走哦。 请问我的使用方式是否正确?或者是否需要特定的参数组合才能使这一功能正常工作?

可能的解决方案 我怀疑问题可能在于 inference_instruct2 函数的使用方式或参数传递。在官方演示中,对于自然语言描述使用了类似 description<|endofprompt|>text 的格式,但我尝试直接设置 description 参数或手动构建这种格式都未能成功。

请问正确使用自然语言描述控制语音特性的方法是什么?是否有特定的调用模式或参数组合我们应该遵循?

感谢您的帮助!

请问解决了吗

ZZKll avatar Jul 09 '25 04:07 ZZKll