wenet-e2e / WeTextProcessing

Text Normalization & Inverse Text Normalization
Apache License 2.0
457 stars 67 forks source link

Some badcase #10

Closed day9011 closed 1 year ago

day9011 commented 2 years ago

ITN: 我要一百 -> 我要1百 我要一百两 -> 我要1百2

TN: 我要1.3和2.7这两个数值 ->我要幺点三和二点七这两个数值 (这里一般读yi1)

pengzhendong commented 2 years ago

对于 TN,如果数字后面不带单位,都是按数字序列来读。 “我要11.3” 是会念成 “幺幺点三” 的。

我不确定哪种更合理,可以再讨论一下。

xingchensong commented 2 years ago
  1. 一百的问题是“百”作为单位被加进 itn/chinese/data/measure/units_zh.tsv
  2. 一百两的问题是“两”这个单位没加进 itn/chinese/data/measure/units_zh.tsv

哈哈11.3也可能是十一点三 <_<

day9011 commented 2 years ago

对于 TN,如果数字后面不带单位,都是按数字序列来读。 “我要11.3” 是会念成 “幺幺点三” 的。

我不确定哪种更合理,可以再讨论一下。

我感觉啊,如果是带"."这个符号的,肯定是按数学的方法读了,这个应该是可以考虑进来的。

pengzhendong commented 2 years ago

对于 TN,如果数字后面不带单位,都是按数字序列来读。 “我要11.3” 是会念成 “幺幺点三” 的。 我不确定哪种更合理,可以再讨论一下。

我感觉啊,如果是带"."这个符号的,肯定是按数学的方法读了,这个应该是可以考虑进来的。

ip 地址带点,还得读数字序列。哈哈,后续确实可以优化一下。

JaheimLee commented 2 years ago

这个case很有难度啊

ITN: 我想要一百块钱 -> 我想要1百块钱 我想要一百块砖 -> 我想要1百块砖

xingchensong commented 2 years ago

这个case很有难度啊

ITN: 我想要一百块钱 -> 我想要1百块钱 我想要一百块砖 -> 我想要1百块砖

这个是因为“百块”作为单位被加进 itn/chinese/data/measure/units_zh.tsv,想了一下似乎没有必要做单位,同样的还有“千块”,方便的话可以提个pr去掉这两个单位

JaheimLee commented 2 years ago

这个case很有难度啊 ITN: 我想要一百块钱 -> 我想要1百块钱 我想要一百块砖 -> 我想要1百块砖

这个是因为“百块”作为单位被加进 itn/chinese/data/measure/units_zh.tsv,想了一下似乎没有必要做单位,同样的还有“千块”,方便的话可以提个pr去掉这两个单位

我甚至觉得这些单位都没有必要做itn,“¥100”tn到“一百元”没问题,“一百元”itn到“100元”就已经完美了,程序需要tn和itn完全对称吗?

xingchensong commented 2 years ago

这个case很有难度啊 ITN: 我想要一百块钱 -> 我想要1百块钱 我想要一百块砖 -> 我想要1百块砖

这个是因为“百块”作为单位被加进 itn/chinese/data/measure/units_zh.tsv,想了一下似乎没有必要做单位,同样的还有“千块”,方便的话可以提个pr去掉这两个单位

我甚至觉得这些单位都没有必要做itn,“¥100”tn到“一百元”没问题,“一百元”itn到“100元”就已经完美了,程序需要tn和itn完全对称吗?

这个确实没有必要对称的,欢迎提交pr修改

xingchensong commented 2 years ago

ITN有一个hardcase,比如“一点零一”可以是时间“1:01”也可以是数字“1.01”,基于规则的做法不太好利用上下文去判断到底是什么含义。

kFoodie commented 2 years ago

对于 TN,如果数字后面不带单位,都是按数字序列来读。 “我要11.3” 是会念成 “幺幺点三” 的。 我不确定哪种更合理,可以再讨论一下。

我感觉啊,如果是带"."这个符号的,肯定是按数学的方法读了,这个应该是可以考虑进来的。

ip 地址带点,还得读数字序列。哈哈,后续确实可以优化一下。

请问这个数字"1"有什么优化的方案/计划/建议吗? TN里面,基本上“1”都会被转成“幺”,这个困扰了我好久……

pengzhendong commented 2 years ago

请问这个数字"1"有什么优化的方案/计划/建议吗? TN里面,基本上“1”都会被转成“幺”,这个困扰了我好久……

最新版本已经把“幺”还原回“一”了

kFoodie commented 2 years ago

请问这个数字"1"有什么优化的方案/计划/建议吗? TN里面,基本上“1”都会被转成“幺”,这个困扰了我好久……

最新版本已经把“幺”还原回“一”了

感谢您的及时回复。 我看了一下,本质问题不是“1”被为“幺”,而是包含“1”的数字,转化有点问题。 比如在TN中:最高气温18度 -> 最高气温一八度

btw ”一“怎么改成”幺“……我的使用场景中,都是口语化的说法……

pengzhendong commented 2 years ago

请问这个数字"1"有什么优化的方案/计划/建议吗? TN里面,基本上“1”都会被转成“幺”,这个困扰了我好久……

最新版本已经把“幺”还原回“一”了

感谢您的及时回复。 我看了一下,本质问题不是“1”被为“幺”,而是包含“1”的数字,转化有点问题。 比如在TN中:最高气温18度 -> 最高气温一八度

btw ”一“怎么改成”幺“……我的使用场景中,都是口语化的说法……

这个 case 是需要将“度”添加到 units_zh.tsv 中即可,方便的话顺便提个 pr。在 cardinal.py 中通过 build_rule 可以将一改成幺

kFoodie commented 2 years ago

好咧。我再看看有哪些单位,到时再一起提。 ios11 -> ios幺幺,这种case怎么解呀

pengzhendong commented 2 years ago

好咧。我再看看有哪些单位,到时再一起提。 ios11 -> ios幺幺,这种case怎么解呀

这个目前还没有考虑到,可以多找一些这种 case,我后续支持一下

day9011 commented 2 years ago

image image image 数字组合或多或少有点问题。 一个蛋疼的测试,感觉不是很好改的,改了怕是有其他问题

kFoodie commented 2 years ago

TN中”-“的badcase: 金融中心2层2-5 -> 金融中心两层二减五 2-6室 -> 二减六室 大岭山镇元岭村-1号岗 -> 大岭山镇元岭村负幺号岗 芦井路1号(327-385-951-漫水桥站) -> 芦井路幺号(三二七三八五九五幺-漫水桥站)

pengzhendong commented 2 years ago

TN中”-“的badcase: 金融中心2层2-5 -> 金融中心两层二减五 2-6室 -> 二减六室 大岭山镇元岭村-1号岗 -> 大岭山镇元岭村负幺号岗 芦井路1号(327-385-951-漫水桥站) -> 芦井路幺号(三二七三八五九五幺-漫水桥站)

请描述你预期的输出

kFoodie commented 2 years ago

TN中”-“的badcase: 金融中心2层2-5 -> 金融中心两层二减五 2-6室 -> 二减六室 大岭山镇元岭村-1号岗 -> 大岭山镇元岭村负幺号岗 芦井路1号(327-385-951-漫水桥站) -> 芦井路幺号(三二七三八五九五幺-漫水桥站)

请描述你预期的输出

poi/地名/地址等场景下,"-" -> ”杠“/”负“(”负“已经有了,”杠“还没见到过) 算术场景下,”-“ -> ”减“/”负“。 主要场景是 poi

kFoodie commented 2 years ago

另一个badcase: 中山北路200-1号 -> 中山北路两百到幺号 "-" -> "到”

另外问一下,支持多输出吗? 比如:驾岭路208号 -> 驾岭路两百零八号 中的 ”208“ 能不能输出 “两百零八,二百零八,二零八” 多种结果?

pengzhendong commented 2 years ago

另一个badcase: 中山北路200-1号 -> 中山北路两百到幺号 "-" -> "到”

另外问一下,支持多输出吗? 比如:驾岭路208号 -> 驾岭路两百零八号 中的 ”208“ 能不能输出 “两百零八,二百零八,二零八” 多种结果?

https://github.com/wenet-e2e/WeTextProcessing/blob/6636cdff5c63fcfe62ed3cb1e51d11dd0e9b20d8/tn/processor.py#L67

把这里的 nbest 调大,再对每个 tag 的结果做 verbalize。

‘-’ 在 TN 中比较难处理,有些不念,有些念“到”,有些念“减”,有些念“负”。如果没有固定的模式,不容易处理。 如果 TN 用于训练语言模型,我觉得影响不大。如果是给 TTS 做前端,就提前处理一下吧。

kFoodie commented 2 years ago

另一个badcase: 中山北路200-1号 -> 中山北路两百到幺号 "-" -> "到” 另外问一下,支持多输出吗? 比如:驾岭路208号 -> 驾岭路两百零八号 中的 ”208“ 能不能输出 “两百零八,二百零八,二零八” 多种结果?

https://github.com/wenet-e2e/WeTextProcessing/blob/6636cdff5c63fcfe62ed3cb1e51d11dd0e9b20d8/tn/processor.py#L67

把这里的 nbest 调大,再对每个 tag 的结果做 verbalize。

‘-’ 在 TN 中比较难处理,有些不念,有些念“到”,有些念“减”,有些念“负”。如果没有固定的模式,不容易处理。 如果 TN 用于训练语言模型,我觉得影响不大。如果是给 TTS 做前端,就提前处理一下吧。

感谢回复。 感觉这个nbest改起来是个大工程呀……而且没有前置知识,改不了的样子……

day9011 commented 1 year ago

ITN有一个badcase,人名这块也会转数字王一凡->王1凡,是不是ITN这块,十以上的再转比较好

xingchensong commented 1 year ago

ITN有一个badcase,人名这块也会转数字王一凡->王1凡,是不是ITN这块,十以上的再转比较好

说的对!看看去掉68行的digits(0~9) 之后是否符合预期? https://github.com/wenet-e2e/WeTextProcessing/blob/master/itn/chinese/rules/cardinal.py#L68

上面是方案一。方案二是设置enable_standalone_number=False https://github.com/wenet-e2e/WeTextProcessing/blob/master/inverse_normalize.py#L31

丁神可以对比看看

day9011 commented 1 year ago

ITN有一个badcase,人名这块也会转数字王一凡->王1凡,是不是ITN这块,十以上的再转比较好

说的对!看看去掉68行的digits(0~9) 之后是否符合预期? https://github.com/wenet-e2e/WeTextProcessing/blob/master/itn/chinese/rules/cardinal.py#L68

上面是方案一。方案二是设置enable_standalone_number=False https://github.com/wenet-e2e/WeTextProcessing/blob/master/inverse_normalize.py#L31

丁神可以对比看看

enable_standalone_number=False这个我测试了,没有效果,方案一我试试。

xingchensong commented 1 year ago

@day9011 我这测试方案二是可以的: image

这种情况下需要用 https://mp.weixin.qq.com/s/q_11lck78qcjylHCi6wVsQ 4.2节的方式才行,修改git clone后的inverse_normalize.py

day9011 commented 1 year ago

好的,麻烦大佬了,我试试

day9011 commented 1 year ago

image 直接这么使用是不行的,看来这个参数在打好的python包里没生效,得重写cache

pengzhendong commented 1 year ago

image 直接这么使用是不行的,看来这个参数在打好的python包里没生效,得重写cache

是的,需要重新构图。 @xingchensong 在 setup.py 中打包一下 tsv 文件。

xingchensong commented 1 year ago

@day9011 @pengzhendong 这个不是打包tsv的问题,是最重要的参数cache_dir没给改,这个参数不改永远用pip装的默认规则: image

xingchensong commented 1 year ago

打包tsv,修改代码难道要改pip安装路径下的代码和tsv吗?这样每次pip update,修改全没了;又或者pip是系统用户装的没有修改权限。最合适的方式是自己在别的位置git clone然后就地修改,修改后通过cache_dir告知py包新的规则在哪。

pengzhendong commented 1 year ago

打包tsv,修改代码难道要改pip安装路径下的代码吗?这样每次pip update,修改全没了;又或者pip是系统用户装的没有修改权限。最合适的方式是自己在别的位置git clone然后就地修改,修改后通过cache_dir告知py包新的规则在哪。

你说的很有道理,是我考虑不周。

day9011 commented 1 year ago

通过方案二改了后,正常不以量词结尾的转换就不行了,我只是想改这一个case,数字小于十的就不转了

xingchensong commented 1 year ago

方案3: https://github.com/wenet-e2e/WeTextProcessing/blob/master/itn/chinese/rules/cardinal.py#L84 这里改一下:

cardinal |= number_exclude_digit

另外想问如果带量词,小于10的是转了合适还是不转合适呢,比如:八块钱。 如果带量词的也不转那么方案一可以同时满足带量词和不带量词两种需求。如果只是针对这里人名,则方案三满足需求。 @day9011

day9011 commented 1 year ago

方案3: https://github.com/wenet-e2e/WeTextProcessing/blob/master/itn/chinese/rules/cardinal.py#L84 这里改一下:

cardinal |= number_exclude_digit

另外想问如果带量词,小于10的是转了合适还是不转合适呢,比如:八块钱。 如果带量词的也不转那么方案一可以同时满足带量词和不带量词两种需求。如果只是针对这里人名,则方案三满足需求。 @day9011

我采用工程的方法去修了,数字个数小于2个就不转了。 八块钱这个我觉得可转可不转,就象一个人和1个人

xingchensong commented 1 year ago

啥方法🥹丁神提个pr不发自我的 iPhone在 2022年10月20日,11:21,丁涵宇 @.***> 写道:

方案3: https://github.com/wenet-e2e/WeTextProcessing/blob/master/itn/chinese/rules/cardinal.py#L84 这里改一下: cardinal |= number_exclude_digit

另外想问如果带量词,小于10的是转了合适还是不转合适呢,比如:八块钱。 如果带量词的也不转那么方案一可以同时满足带量词和不带量词两种需求。如果只是针对这里人名,则方案三满足需求。 @day9011

我采用工程的方法去修了,数字个数小于2个就不转了。 八块钱这个我觉得可转可不转,就象一个人和1个人

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>

day9011 commented 1 year ago

额,暴力解决的,一句话没有超过两个数字就不转,理想的就是不出现连续数字就不转,比如“王一凡在群一二三四”,我想转成“王一凡在群1234”

day9011 commented 1 year ago

image "王一凡在群一二三四" image 分出来一个“群一”,好头大

xingchensong commented 1 year ago

fixed via https://github.com/wenet-e2e/WeTextProcessing/pull/42

kFoodie commented 1 year ago

大佬,TN里面,一个badcase。”容祖儿“ -> ”容祖“ 在data里面没找到”祖儿“,请问改哪里可以修这个badcase

pengzhendong commented 1 year ago

大佬,TN里面,一个badcase。”容祖儿“ -> ”容祖“ 在data里面没找到”祖儿“,请问改哪里可以修这个badcase

提个 PR 添加到这里:https://github.com/wenet-e2e/WeTextProcessing/blob/master/tn/chinese/data/erhua/whitelist.tsv

kFoodie commented 1 year ago

大佬,TN里面,一个badcase。”容祖儿“ -> ”容祖“ 在data里面没找到”祖儿“,请问改哪里可以修这个badcase

提个 PR 添加到这里:https://github.com/wenet-e2e/WeTextProcessing/blob/master/tn/chinese/data/erhua/whitelist.tsv

如果我不想做儿化音的处理,可以修改哪里?

pengzhendong commented 1 year ago

如果我不想做儿化音的处理,可以修改哪里?

https://github.com/wenet-e2e/WeTextProcessing/blob/eecd343ab4c4c8090709775881b60c189c88c781/tn/chinese/rules/whitelist.py#L33

kFoodie commented 1 year ago

如果我不想做儿化音的处理,可以修改哪里?

https://github.com/wenet-e2e/WeTextProcessing/blob/eecd343ab4c4c8090709775881b60c189c88c781/tn/chinese/rules/whitelist.py#L33

感谢~

pengzhendong commented 1 year ago

issue 太长了,有 badcase 再重新开一个。