CosyVoice icon indicating copy to clipboard operation
CosyVoice copied to clipboard

如何微调,能让模型支持汉语拼音呢? 或者支持 读音提示?

Open noahbentusi opened this issue 1 year ago • 15 comments

最终需求是,在一篇文章,需要对某个字的读音 纠正改音。

最一开始,我是尝试在text-normalize阶段用同音字替换,发现很多字音没有 独音字。 比如 一拍两散, 有时候会错误读成 3声,而不是4声。 然而san4,没有独音字。没办法做同音字替换。

所以,我又试着用训练微调让模型认识sàn这个汉语拼音音节。

于是,我基于examples/magicdata_read的例子,做了这样的数据集

train: pinyin_san4.txt (内容为: sàn) pinyin_san4.wav (sàn的语音)

dev和test内容与train一致

然后,训练200个epoch。 训练出来的模型, 可以正确读出单次出现的sàn。但是放到中文句子 (他们在昨晚的争执之后就一拍两sàn了) 中就非常不正常了。

是数据集设计的不正确吗?

我这种需求,该用什么方法来实现呢?

谢谢,诸位大佬。

noahbentusi avatar Sep 25 '24 09:09 noahbentusi

well this is the drawback of bpe tokenization, more data can make it more stable

aluminumbox avatar Sep 26 '24 02:09 aluminumbox

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

github-actions[bot] avatar Oct 26 '24 02:10 github-actions[bot]

请问你的这个问题找到解决办法了吗?

hjj-lmx avatar Oct 26 '24 03:10 hjj-lmx

请问你的这个问题找到解决办法了吗? 找到了。问题在于 微调时训练使用的 调度器和学习率不正确。

将conf/consyvoice.yaml配置文件中

train_conf.scheduler 调度器改成constantlr, 常量学习度 train_conf.optim_conf.lr 学习度设置成0.00001

就能学习出来拼音。但是又遇到新问题了,就是微调出来的模型丧失了变声的功能。我正试着 多弄些 不同语音样本,训练 看看能不能行。

炼丹 真不容易阿。

noahbentusi avatar Oct 28 '24 00:10 noahbentusi

请问你的这个问题找到解决办法了吗? 找到了。问题在于 微调时训练使用的 调度器和学习率不正确。

将conf/consyvoice.yaml配置文件中

train_conf.scheduler 调度器改成constantlr, 常量学习度 train_conf.optim_conf.lr 学习度设置成0.00001

就能学习出来拼音。但是又遇到新问题了,就是微调出来的模型丧失了变声的功能。我正试着 多弄些 不同语音样本,训练 看看能不能行。

炼丹 真不容易阿。

只能自己做训练吗?多音字的种类那么多

hjj-lmx avatar Oct 28 '24 04:10 hjj-lmx

请问你的这个问题找到解决办法了吗? 找到了。问题在于 微调时训练使用的 调度器和学习率不正确。

将conf/consyvoice.yaml配置文件中 train_conf.scheduler 调度器改成constantlr, 常量学习度 train_conf.optim_conf.lr 学习度设置成0.00001 就能学习出来拼音。但是又遇到新问题了,就是微调出来的模型丧失了变声的功能。我正试着 多弄些 不同语音样本,训练 看看能不能行。 炼丹 真不容易阿。

只能自己做训练吗?多音字的种类那么多

是的。我扫了一遍线上新华字典,穷举了所有音节和音调。每一个做一个句子。这就十几万条样本了。

noahbentusi avatar Oct 28 '24 05:10 noahbentusi

请问你的这个问题找到解决办法了吗? 找到了。问题在于 微调时训练使用的 调度器和学习率不正确。

将conf/consyvoice.yaml配置文件中 train_conf.scheduler 调度器改成constantlr, 常量学习度 train_conf.optim_conf.lr 学习度设置成0.00001 就能学习出来拼音。但是又遇到新问题了,就是微调出来的模型丧失了变声的功能。我正试着 多弄些 不同语音样本,训练 看看能不能行。 炼丹 真不容易阿。

只能自己做训练吗?多音字的种类那么多

是的。我扫了一遍线上新华字典,穷举了所有音节和音调。每一个做一个句子。这就十几万条样本了。

我现在这多音字的都不知道怎么处理,想着看能不能用同音字替代,但是又没有拼音转汉字的开源项目

hjj-lmx avatar Oct 28 '24 09:10 hjj-lmx

请问你的这个问题找到解决办法了吗? 找到了。问题在于 微调时训练使用的 调度器和学习率不正确。

将conf/consyvoice.yaml配置文件中 train_conf.scheduler 调度器改成constantlr, 常量学习度 train_conf.optim_conf.lr 学习度设置成0.00001 就能学习出来拼音。但是又遇到新问题了,就是微调出来的模型丧失了变声的功能。我正试着 多弄些 不同语音样本,训练 看看能不能行。 炼丹 真不容易阿。

只能自己做训练吗?多音字的种类那么多

是的。我扫了一遍线上新华字典,穷举了所有音节和音调。每一个做一个句子。这就十几万条样本了。

我现在这多音字的都不知道怎么处理,想着看能不能用同音字替代,但是又没有拼音转汉字的开源项目

我用的是pinyin4js. 正确率还可以

noahbentusi avatar Oct 29 '24 00:10 noahbentusi

pinyin4js这个不是只能汉字转拼音吗?你用的是哪个地址的,能给一下地址吗?我是用的java的pinyin4j

hjj-lmx avatar Oct 29 '24 01:10 hjj-lmx

pinyin4js

https://www.npmjs.com/package/pinyin4js

对,汉字转拼音。我在试着 训练模型能够 将拼音读出来。这样,多音字跟随拼音标注。这样一句话就能读正确了。

noahbentusi avatar Oct 29 '24 01:10 noahbentusi

pinyin4js

https://www.npmjs.com/package/pinyin4js

对,汉字转拼音。我在试着 训练模型能够 将拼音读出来。这样,多音字跟随拼音标注。这样一句话就能读正确了。

大佬,训练出来了,能分享一下不

hjj-lmx avatar Oct 29 '24 01:10 hjj-lmx

pinyin4js

https://www.npmjs.com/package/pinyin4js 对,汉字转拼音。我在试着 训练模型能够 将拼音读出来。这样,多音字跟随拼音标注。这样一句话就能读正确了。

大佬,训练出来了,能分享一下不

/_\ 这个有点难。毕竟 用的是 单位的资源训练。这么多人看着呢....

noahbentusi avatar Oct 29 '24 02:10 noahbentusi

pinyin4js

https://www.npmjs.com/package/pinyin4js

对,汉字转拼音。我在试着 训练模型能够 将拼音读出来。这样,多音字跟随拼音标注。这样一句话就能读正确了。

你這不就是 BreezyVoice 的做法,它們有開源的。

indiejoseph avatar May 01 '25 20:05 indiejoseph

理论上应该是扩词表把,然后训练模型进行拼音对发音的对齐

FlynnFlag avatar Aug 01 '25 07:08 FlynnFlag

请问搞定了吗,不需要扩充词表吗?

springBrightbongbong avatar Oct 11 '25 03:10 springBrightbongbong