Skip to content
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

pypinyin标注准确率测评结果 #133

Open
Jackiexiao opened this issue Jul 6, 2018 · 13 comments
Open

pypinyin标注准确率测评结果 #133

Jackiexiao opened this issue Jul 6, 2018 · 13 comments
Labels

Comments

@Jackiexiao
Copy link

Jackiexiao commented Jul 6, 2018

最近写了一个程序并利用thchs30语料库的拼音标注粗略地对python-pinyin标注的准确性进行评估,供大家参考。

准确率:约96%【仅供参考,不保证准确性

其中,错误次数最高的词如下:

一    232
为     83
不     80
得     36
子     34
上     25
个     23
十     20
可     19
有     19
儿     17
来     17
所     15
地     14
长     13
尽     11
曲     11
谁     10
老      9
也      9
颇      8
往      8
育      8
是      8
两      8
只      8
分      8
种      8
佛      7
百      7

thchs30将不少字按照实际音频发音标注成轻声,并且thchs30将两个三声连读的词中第一个标注为二声,这两个是主要误差

@mozillazg
Copy link
Owner

@Jackiexiao 感谢分享!

@Starlon87
Copy link

@mozillazg

还有一种情景不一致,比如词语:
‘表演’
‘你好’

这种两个第三声组合的词,正确的发音是首字读第二声.

pypinyin出来的结果是'biao3 yan3'、'ni3 hao3'

而thchs30中的标注是'biao2 yan3'、'ni2 hao3'

因为要借助pypinyin和thchs30来实现中文AI TTS,匹配不正确会引发异常.

这种情况能否修正呢?

@Jackiexiao
Copy link
Author

只能是修改词典,或者借助正确的分词来将两个三声连读的第一个三声变二声情况纠正。

@mozillazg
Copy link
Owner

现实生活中都是读第三声吧😳

@Jackiexiao
Copy link
Author

不是,这是拼音中的变调规则

@Starlon87
Copy link

是的,在一些情境下需要变调,目前有如下4四种情况.

三声变调
最普通的变调规则即是在一组两个上声(第三声)的合音节中,须将合音节中领先的第一个音节提升到阳平(第二声)。举例来说,你好(nǐ hǎo)为最普通的中文问候语,nǐ与hǎo原调都是上声,不过合音节第三声的“你”须提升为阳平,即“你好”要念为“ní hǎo”。
一不变调
当“一”和“不”夹在词语中间念轻声,例如“看一看”、“好不好”等等。
“一”的变调
“一”的原调是第一声。当“一”在表示数目时,以及在词尾出现时,念为原调。例如︰一二三四、第一等等。 当“一”与量词配搭时,如量词的声调是第一声、第二声或第三声,“一”念成第四声,例如“一根”、“一钱”和“一种”。如量词的声调是第四声,“一”念成第二声,例如“一个”。
“不”的变调
“不”的原调是第四声。当“不”后面跟着第一声、第二声和第三声的字,或者“不”出现在词末,念为原调。例如︰“不高”、“不祥”、“不好”和“我就不”。 当“不”后面的字是第四声,念为第二声,例如“不要”。

@mozillazg
Copy link
Owner

mozillazg commented Jul 28, 2018

@Jackiexiao @Starlon87 学习了,之前不知道这个知识点。

@zgdlime

This comment has been minimized.

@wangchou
Copy link

wangchou commented Oct 25, 2018

有可能「變調前、變調後」都提供嗎?

日文轉假名的程式庫(http://taku910.github.io/mecab/) 每個日文詞下去查會得到以下結果:

表層形     品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音

最後兩個「読み,発音」一個是拿來標注的(變調前)、一個是真正唸出來的音調(變調後)的假名。
0030-10-25 21 32 25

猜想現在 python-pinyin 都是「變調前」的。
thchs30 因為是拿來 train speech model 的所以都是「變調後」的。

兩個合起來才是所有的結果。

@hanabi1224
Copy link
Contributor

如果按读音区分的话,像 ti si shi 里的 i 其实是三种不同的读音,做speech model时需要输出成不同的符号,比如 cmu sphinx的中文词典里的表示分别是 i (ti), iy (si), ix (shi)

@mozillazg
Copy link
Owner

最新版本已支持部分变调规则(参考 https://en.wikipedia.org/wiki/Standard_Chinese_phonology#Tone_sandhi ):

>>> lazy_pinyin('你好', style=Style.TONE2, tone_sandhi=True)
['ni2', 'ha3o']

不过,如果要达到更好的效果还需要配合使用 https://github.com/mozillazg/pypinyin-dict 中更庞大的词语拼音库以及基于词语拼音库的更精准的分词方法来进行优化。

BTW,pypinyin 这种基于词语拼音库的方式优化拼音结果的方法的准确率毕竟是有限的,
听说 Interspeech 2020 有几个 session 介绍的方法都比 pypinyin 要更优,可以关注一下: https://mp.weixin.qq.com/s/vaqKKcNWKf-lFFfjT0813A
同时也可以关注一下最新的 Interspeech 2021 中相关内容的 session。

@Jackiexiao
Copy link
Author

一种比较好的方式是通过词频的方式来判断是否要3声变调,例如 小老虎,freq{老虎} > freq{小老} 所以[老虎]要优先变调,这种方式能解决大部分问题,当然少量情况下可能是错误的。

@mozillazg
Copy link
Owner

最新版本已支持部分变调规则(参考 https://en.wikipedia.org/wiki/Standard_Chinese_phonology#Tone_sandhi ):

>>> lazy_pinyin('你好', style=Style.TONE2, tone_sandhi=True)
['ni2', 'ha3o']

不过,如果要达到更好的效果还需要配合使用 https://github.com/mozillazg/pypinyin-dict 中更庞大的词语拼音库以及基于词语拼音库的更精准的分词方法来进行优化。

BTW,pypinyin 这种基于词语拼音库的方式优化拼音结果的方法的准确率毕竟是有限的, 听说 Interspeech 2020 有几个 session 介绍的方法都比 pypinyin 要更优,可以关注一下: https://mp.weixin.qq.com/s/vaqKKcNWKf-lFFfjT0813A 。 同时也可以关注一下最新的 Interspeech 2021 中相关内容的 session。

最近基于 Interspeech 2022 中发布的 g2pW 项目封装了一个项目,优点是继承了 g2pW 项目的支持通过训练模型的方式提升拼音准确性的能力以及可以沿用 pypinyin 的使用习惯(支持各种拼音风格),感兴趣的话可以试一下:

https://github.com/mozillazg/pypinyin-g2pW

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

6 participants