-
Notifications
You must be signed in to change notification settings - Fork 4.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix bug in #1690 #1700
base: main
Are you sure you want to change the base?
Fix bug in #1690 #1700
Conversation
修改按英文句号.切分方式
删除punctuation中的“ ”,以便于按英文句号切分
那个小数点异常切分还有一个很关键的影响是,如果把句号后面的空格切掉,会导致单词变成 xxx.yyy,这样 wordSegment 是切分不出来的,导致如果 yyy 这个单词如果比较生僻的话,大模型可能不会读这个单词(特别是如果用户想自己加特殊词的时候,特殊词不被切分就很麻烦了)。所以这个空格的保留挺重要的。 |
我没太理解你的意思(你的意思是这个bug还会引发一个问题,还是我修改中去除空格会引发问题),能请你给我提供一个测试用例吗? |
@RVC-Boss 花佬帮我看看呗((๑Ő௰Ő๑) |
我近期看看 |
这个问题主要是容易和“序号”冲突,导致“序号”后接数字变成小数点识别 |
确实哈,不过如果输入规范的话( 我觉得输入规范是用户要考虑的事情(懒比专属手动狗头)),(eg. ”1. 6 billion dollars“, 在序号后和正文有一个空格,这样在做正则的时候就能先把序号项读走,再处理后面的部分) ,还有一个问题就是我不太清楚 这样的序号项应该怎么读,是转化为序数词 First 吗?确定读法后我去加一个正则处理到 normalize_numbers 就可以了。 PS:今天空了又看了下英文处理这块,好像还有很多的小问题,我打算去开一个 issue 修一修
|
这几个数字日期时间啥的可以参考下中文的试试? |
嗯嗯,我等下看看 |
我对中英文的序号进行了测试,中文的测试用例就不打出来了,确实在英文序号存在问题,不过如果输入规范的话 ( 就是序号的"."后加上空格 )( 我觉得输入规范是用户要考虑的事情(懒比专属手动狗头)),(eg. "1. 6 billion dollars", 在序号后和正文有一个空格,这样在做正则的时候就能先把序号项读走,再处理后面的部分) 然而, 在后面的测试中, 我发现在英文中如果使用下面的测试用例:
得到的结果如下图所示:
定位到 TTS_infer_pack/TextPreprocessor 如下:
def get_phones_and_bert(self, text: str, language: str, version: str, final: bool = False):
# 格式化前,也就是传入的文本
print("\n"+ "a "+text)
if language in {"en", "all_zh", "all_ja", "all_ko", "all_yue"}:
language = language.replace("all_", "")
# LangSegment 的 setfilters["en"] 存在一些问题
if language == "en":
LangSegment.setfilters(["en"])
formattext = " ".join(tmp["text"]
for tmp in LangSegment.getTexts(text))
else:
# 因无法区别中日韩文汉字,以用户输入为准
formattext = text
# formattext = text
while " " in formattext:
formattext = formattext.replace(" ", " ")
# 格式化文本后
print("b "+ formattext) 我想这可能是因为序号项后接数字 ( 不只是小数, "1. 6 billion dollars" 也会被吞掉前面的序号和数字) 这种不规范的输入 ( "1. 6" 或者 "1. 6") 会被过滤器直接去除, 这不太符合我们的期望. 要解决这个问题, 有两个方案:
方案效果:
可以看到都符合期望输出了正确的结果。 |
修改代码风格和zh处理保持一致
删除了英文预处理的过滤器
添加英文序号转化
|
|
等你俩好消息 |
修复按英文句号.切分将句中数字(包含小数点)异常切分
在 GPT_SoVITS\TTS_infer_pack\text_segmentation_method.py 的 cut4 中:
修改其
为:
使用正则表达式保证**只有前后都不是数字(也就是不是数字内包含的小数点)**是才进行切分
此外,还需要在 ...\GPT_SoVITS\TTS_infer_pack\TextPreprocessor.py 中修改:
修改
为
去掉其中的“ ”(空格);
为什么可以去掉?
在 preprocess 函数中
也就是在切分前先不去掉重复的空格,而在 pre_seg_text 中又调用了 filter_text 去掉无效的字符(比如空格),所以最后切分的文本还是正常的。个人理解,代码没看很全,有疏忽请多指教haha。
修复推理英文%未能正确读出
在 ...\GPT_SoVITS\text\english.py 中的 text_normalize 函数中,在
前添加:
一个 简单的测试:
目标文本:
hello. 123.45 is a number. 23% should be read as 23 percent.
推理截图:
生成语音:
audio.mov