2noise / ChatTTS

A generative speech model for daily dialogue.
https://2noise.com
Other
26.58k stars 2.89k forks source link

refine_text() 会加入 [spk_emb] #459

Closed TianduoWang closed 4 days ago

TianduoWang commented 4 days ago

refine_text function 输入:[Sbreak]李卫是一位中国磁学与磁性材料专家。[Pbreak][oral_2][laugh_0][break_3] 输出:[Stts] [spk_emb] [pure] 李 卫 呢 是 一 位 中 国 磁 学 与 磁 性 材 料 专 家 [uv_break] 。

此处加入的 [spk_emb] 会引发之后 infer_code() 中

emb[input_ids[..., 0] == tokenizer.convert_tokens_to_ids('[spk_emb]')] = n

报错,因为形状不符

fumiama commented 4 days ago

试试最新提交呢,另外请贴出具体代码。

TianduoWang commented 4 days ago

我是昨天下载的代码,最新的版本我稍后试一下。这里我先贴一下可以复现这个 bug 的代码:

import torch
import ChatTTS
torch.manual_seed(2333)

from dotenv import load_dotenv
load_dotenv('sha256.env')

chat = ChatTTS.Chat()
chat.load_models(compile=False)
rand_spk = chat.sample_random_speaker()

params_refine_text = {
    'prompt': '[oral_2][laugh_0][break_3]',
}

texts = ['李卫是一位中国磁学与磁性材料专家。', '李卫是一位中国磁学与磁性材料专家。']
wavs = chat.infer(texts, params_refine_text=params_refine_text,  refine_text_only=True)
print(wavs)

输出是

'紧 [uv_break] 卫 呢 是 一 位 中 国 磁 学 与 磁 性 材 料 专 家 。'
'[Stts] [spk_emb] 你 比 如 说 李 卫 是 一 位 中 国 磁 学 与 磁 性 材 料 专 家 。 [uv_break]'

两个其实都不太对,感觉是模型参数的问题

fumiama commented 4 days ago

只有一次print啊,为何输出两个😂

fumiama commented 4 days ago

哦,看到了。

fumiama commented 4 days ago

我试验的结果是有概率刷出[Stts] [empty_spk]/[Stts] [spk_emb]在最开头且最开头的文字有问题。目前考虑先把它们强制移除。

截屏2024-06-26 下午5 09 53
TianduoWang commented 4 days ago

感谢!我目前的处理方法就是去掉 [Stts] 和 [spk_emb]

new_text = []
for t in text:
    t = t.replace('[spk_emb]', '')
    t = t.replace('[Stts]', '')
    new_text.append(t.strip())
text = new_text

加到 infer_code() function 开头