本周,WeNet 新增首个日语数据集 csj 的支持。该工作由吴先超博士贡献,以下是更新的具体内容。
吴先超,博士毕业于东京大学。目前就职于 NVIDIA Japan,任深度学习资深架构师,负责 Finance + NVIDIA AI、General NLP、Riva 等平台研究和开发。
知乎主页:https://www.zhihu.com/people/wuxianchao
个人主页:https://sites.google.com/site/xianchaowu2012/home
recipe: https://github.com/wenet-e2e/wenet/tree/main/examples/csj/s0
关于数据处理的详细描述,请参看:
https://zhuanlan.zhihu.com/p/445032888
数据集简述
CSJ (Corpus of Spontaneous Japanese, https://ccd.ninjal.ac.jp/csj/en/) 500 小时,来自于日语学术会议的录音。 它是一个收集大量日语自发声音并添加大量研究信息的口语研究数据库,无论从质量还是数量上都是世界上最高水平的日语口语数据库之一。 该语料库可以用于语音信息处理、自然语言处理、日语语言学、语言学、语音学、心理学、社会学、日语教育、词典编纂等广泛领域。
数据前处理
CSJ 是 XML 格式来组织的文本,因为每个 wav 都是10分钟以上,需要根据 XML 文件里面的句子信息,分别对 XML 和 WAV 进行按照句子切割 (分别使用了 csj_tools 文件夹下的 wn.0.parse.py 和 wn.1.split_wav.py 实现)。 wav 中有40多个文件是双声道的(list_files/2ch.id.list里面),可以统一转换为单声道。 按照 CSJ 的建议,从500小时的语音中,分别找出10个文件,作为 test1, test2, test3。这三个测试集合使用的文件id在 list_files/test.set.1/2/3.list里面。 按照 WeNet 的要求,为训练集,三个测试集构造 text 和 wav.scp 文件。这里的发展集设定为三个测试集的合体。 当有时长<0.1s的语音文件的时候,会导致抽取feature的时候,window size 大于语音长度的尴尬问题。所以,可以过滤一下,过滤的脚本用的是csj_tools/wn.3.mincut.py 因为按照句子划分,最长的在16秒左右,所以这里没有对长度上限进行过滤。 词典方面,使用的是 sentencepiece,设定了词表大小为4096(基本上是3000多单字加1000多复合词的思路),以及bpe来切割。 然后是 data.list,这个是 WeNet 所需要的规范化输入。鉴于 CSJ 中有几个 ID 的text和wav不是1:1对齐的,这里简单修改了一下 WeNet 中的make_raw_list.py,去除了1:1限制,更新后的脚本是csj_tools/wn.4.make_raw_list.py 模型的训练,测试,都是沿用了 WeNet 的标配。
模型结果
Conformer Result Bidecoder (large)

+号表示在测试的时候,删除了两个长度<0.1s的语音文件。
Conformer Result

+号表示在测试的时候,删除了两个长度<0.1s的语音文件。
