GPT-SoVITS icon indicating copy to clipboard operation
GPT-SoVITS copied to clipboard

中英文混合的一个TEST CASE,目前测试有单引号,中文书名号,中括号等可能导致问题

Open danvan opened this issue 1 year ago • 3 comments

中文的测试用例如下:

1993年,在The Shamen乐队的歌曲《Coming on Strong M-V中担任舞者。1997年,开始为某服装公司担任模特。1998年8月28日,主演的犯罪喜剧片《两杆大烟枪》上映,这是其电影处女作。2002年10月11日,主演的动作电影《非常人贩》上映。2005年8月3日,主演的动作电影《非常人贩2》上映。

日志记录如下:

实际输入的目标文本: 1993年,在The Shamen乐队的歌曲《Comin‘on Strong》MV中担任舞者。1997年,开始为某服装公司担任模特。1998年8月28日,主演的犯罪喜剧片《两杆大烟枪》上映,这是其电影处女作 [1]。2002年10月11日,主演的动作电影《非常人贩》上映。2005年8月3日,主演的动作电影《非常人贩2》上映。 实际输入的目标文本(切句后): 1993年,在The Shamen乐队的歌曲《Comin‘on Strong》MV中担任舞者。1997年,开始为某服装公司担任模特。1998年8月28日,主演的犯罪喜剧片《两杆大烟枪》上映,这是其电影处女作 [1]。2002年10月11日,主演的动作电影《非常人贩》上映。2005年8月3日,主演的动作电影《非常人贩2》上映。 实际输入的目标文本(每句): 1993年,在The Shamen乐队的歌曲《Comin‘on Strong》MV中担任舞者。1997年,开始为某服装公司担任模特。1998年8月28日,主演的犯罪喜剧片《两杆大烟枪》上映,这是其电影处女作 [1]。2002年10月11日,主演的动作电影《非常人贩》上映。2005年8月3日,主演的动作电影《非常人贩2》上映。 [] ['1993年,在', 'The Shamen', '乐队的歌曲《', 'Comin', '‘', 'on Strong', '》', 'MV', '中担任舞者。1997年,开始为某服装公司担任模特。1998年8月28日,主演的犯罪喜剧片《两杆大烟枪》上映,这是其电影处女作', ' ', '[1]。2002年10月11日,主演的动作电影《非常人贩》上映。2005年8月3日,主演的动作电影《非常人贩2》上映。'] ['zh', 'en', 'zh', 'en', 'zh', 'en', 'zh', 'en', 'zh', 'en', 'zh'] Traceback (most recent call last): File "/home/dell/miniconda3/envs/vc-server/lib/python3.9/site-packages/gradio/routes.py", line 442, in run_predict output = await app.get_blocks().process_api( File "/home/dell/miniconda3/envs/vc-server/lib/python3.9/site-packages/gradio/blocks.py", line 1389, in process_api result = await self.call_function( File "/home/dell/miniconda3/envs/vc-server/lib/python3.9/site-packages/gradio/blocks.py", line 1108, in call_function prediction = await utils.async_iteration(iterator) File "/home/dell/miniconda3/envs/vc-server/lib/python3.9/site-packages/gradio/utils.py", line 346, in async_iteration return await iterator.anext() File "/home/dell/miniconda3/envs/vc-server/lib/python3.9/site-packages/gradio/utils.py", line 339, in anext return await anyio.to_thread.run_sync( File "/home/dell/miniconda3/envs/vc-server/lib/python3.9/site-packages/anyio/to_thread.py", line 56, in run_sync return await get_async_backend().run_sync_in_worker_thread( File "/home/dell/miniconda3/envs/vc-server/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 2134, in run_sync_in_worker_thread return await future File "/home/dell/miniconda3/envs/vc-server/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 851, in run result = context.run(func, *args) File "/home/dell/miniconda3/envs/vc-server/lib/python3.9/site-packages/gradio/utils.py", line 322, in run_sync_iterator_async return next(iterator) File "/home/dell/miniconda3/envs/vc-server/lib/python3.9/site-packages/gradio/utils.py", line 691, in gen_wrapper yield from f(*args, **kwargs) File "/usr/local/workspaces/voice-change-server/GPT_SoVITS/inference_webui.py", line 336, in get_tts_wav bert2 = nonen_get_bert_inf(text, text_language) File "/usr/local/workspaces/voice-change-server/GPT_SoVITS/inference_webui.py", line 259, in nonen_get_bert_inf bert = get_bert_inf(phones, word2ph, norm_text, lang) File "/usr/local/workspaces/voice-change-server/GPT_SoVITS/inference_webui.py", line 218, in get_bert_inf bert = get_bert_feature(norm_text, word2ph).to(device) File "/usr/local/workspaces/voice-change-server/GPT_SoVITS/inference_webui.py", line 89, in get_bert_feature phone_level_feature = torch.cat(phone_level_feature, dim=0) RuntimeError: torch.cat(): expected a non-empty list of Tensors

danvan avatar Feb 04 '24 12:02 danvan

无法复现你的问题。 image image

RVC-Boss avatar Feb 04 '24 14:02 RVC-Boss

你拷贝的内容是通过测试的,经过我替换修改之后的内容。 你可以用下面这段来测试:

1993年,在The Shamen乐队的歌曲《Comin‘on Strong》MV中担任舞者。1997年,开始为某服装公司担任模特。1998年8月28日,主演的犯罪喜剧片《两杆大烟枪》上映,这是其电影处女作 [1]。2002年10月11日,主演的动作电影《非常人贩》上映。2005年8月3日,主演的动作电影《非常人贩2》上映。

danvan avatar Feb 05 '24 01:02 danvan

你拷贝的内容是通过测试的,经过我替换修改之后的内容。 你可以用下面这段来测试:

1993年,在The Shamen乐队的歌曲《Comin‘on Strong》MV中担任舞者。1997年,开始为某服装公司担任模特。1998年8月28日,主演的犯罪喜剧片《两杆大烟枪》上映,这是其电影处女作 [1]。2002年10月11日,主演的动作电影《非常人贩》上映。2005年8月3日,主演的动作电影《非常人贩2》上映。

实际输入的目标文本: 1993年,在The Shamen乐队的歌曲《Comin‘on Strong》MV中担任舞者。1997年,开始为某服装公司担任模特。1998年8月28日,主演的犯罪喜剧片《两杆大烟枪》上映,这是其电影处女作 [1]。2002年10月11日,主演的动作电影《非常人贩》上映。2005年8月3日,主演的动作电影《非常人贩2》上映。 实际输入的目标文本(切句后): 1993年,在The Shamen乐队的歌曲《Comin‘on Strong》MV中担任舞者。1997年,开始为某服装公司担任 模特。1998年8月28日,主演的犯罪喜剧片《两杆大烟枪》上映,这是其电影处女作 [1]。2002年10月11日,主演的动作电影《非常人贩 》上映。2005年8月3日,主演的动作电影《非常人贩2》上映。 实际输入的目标文本(每句): 1993年,在The Shamen乐队的歌曲《Comin‘on Strong》MV中担任舞者。1997年,开始为某服装公司担任模 特。1998年8月28日,主演的犯罪喜剧片《两杆大烟枪》上映,这是其电影处女作 [1]。2002年10月11日,主演的动作电影《非常人贩》 上映。2005年8月3日,主演的动作电影《非常人贩2》上映。 ['1993年,在', 'The Shamen', '乐队的歌曲《', 'Comin‘on Strong》MV', '中担任舞者。1997年,开始为某服装公司担任模特。1998 年8月28日,主演的犯罪喜剧片《两杆大烟枪》上映,这是其电影处女作 [1]。2002年10月11日,主演的动作电影《非常人贩》上映。2005年8月3日,主演的动作电影《非常人贩2》上映。'] ['zh', 'en', 'zh', 'en', 'zh'] [[2, 2, 2, 2, 2, 1, 2], [2, 2, 2, 2, 2], [2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1]]

以上为目前分词器处理的结果,并没有复现你的结果

def splite_en_inf(sentence, language):
    pattern = re.compile(r'[a-zA-Z ]+')
    textlist = []
    langlist = []
    pos = 0
    for match in pattern.finditer(sentence):
        start, end = match.span()
        if start > pos:
            textlist.append(sentence[pos:start])
            langlist.append(language)
        textlist.append(sentence[start:end])
        langlist.append("en")
        pos = end
    if pos < len(sentence):
        textlist.append(sentence[pos:])
        langlist.append(language)
    # Merge punctuation into previous word
    for i in range(len(textlist)-1, 0, -1):
        if re.match(r'^[\W_]+$', textlist[i]):
            textlist[i-1] += textlist[i]
            del textlist[i]
            del langlist[i]
    # Merge consecutive words with the same language tag
    i = 0
    while i < len(langlist) - 1:
        if langlist[i] == langlist[i+1]:
            textlist[i] += textlist[i+1]
            del textlist[i+1]
            del langlist[i+1]
        else:
            i += 1

    return textlist, langlist

目前在推理代码中会递归合并孤立的标点,请检查code版本

KakaruHayate avatar Feb 06 '24 04:02 KakaruHayate