• aishell数据格式对于用神经网络处理数据的同学来说比较不友善,因为他只有文字转录和音素级别的转录,并没有拼音的转录。
  • 而thchs30由于有拼音标注的优势被很多同学用来训练神经网络声学模型,因此想通过一些简单的处理,将aishell也转化为方便易用的格式。

aishell数据转换格式

废话不多说,转化后数据格式和thchs相同,如下:

  • thchs30

    • train.syllable.txt: A11_0 lv4 shi4 yang2 chun1 yan1 jing3 da4 kuai4 wen2 zhang1 de5 di3 se4 si4 yue4 de5 lin2 luan2 geng4 shi4 lv4 de5 xian1 huo2 xiu4 mei4 shi1 yi4 ang4 ran2
    • train.wav.lst: A11_0 data_thchs30/train/A11_0.wav
  • aishell
    • train.syllable.txt: BAC009S0002W0122 er2 dui4 lou2 shi4 cheng2 jiao1 yi4 zhi4 zuo4 yong4 zui4 da4 de5 xian4 gou4
    • train.wav.lst: BAC009S0002W0122 data_aishell/wav/train/S0002/BAC009S0002W0122.wav

      数据的标注和读取路径就和thchs30一样了,就能在thchs30的网络中,使用aishell的数据进行训练了。

      特别是一些用ctc训练神经网络的同学,就可以使用更多的数据训练了。

aishell数据转化方法

一言不合,直接粘贴。

该脚本和生成的数据也可以去我的GitHub上down下来,代码地址

# -----------------------------------------------------------------------------------------------------
'''
&usage: aishell数据处理,将汉字处理为拼音,并生成thchs30的数据形式
@author: hongwen sun
'''
# -----------------------------------------------------------------------------------------------------
from pypinyin import pinyin, lazy_pinyin, Style
import numpy as np
import re # -----------------------------------------------------------------------------------------------------
'''
usage: 将aishell汉字标注转化为拼音
env: pip install pypinyin
'''
# -----------------------------------------------------------------------------------------------------
def trans_aishell_to_pinyin(word_path, pinyin_path):
# 需要转换为拼音的中文汉字路径
textobj = open(word_path, 'r+', encoding='UTF-8')
# 转化为拼音后的保存txt路径
savefile = open(pinyin_path, 'w+', encoding='UTF-8')
# 对aishell进行文本数据处理
for x in textobj.readlines():
textlabel = x.strip('\n')
textlabel = textlabel.split(' ')
x = pinyin(textlabel,style=Style.TONE3)
str2 = ''
for i in x:
str1 = " ".join(i)
if (re.search(r'\d',str1)):
pass
else:
str1 += '5'
str2 = str2 + str1 + ' '
str2 = str2[:-1]
# 保存生成的数据
savefile.write(str2 + "\n") # -----------------------------------------------------------------------------------------------------
'''
usage: 生成train, dev, test的音频文件列表
'''
# -----------------------------------------------------------------------------------------------------
import os
def gen_wavlist(wavpath,savefile):
fileids = []
fileObject = open(savefile, 'w+', encoding='UTF-8')
for (dirpath, dirnames, filenames) in os.walk(wavpath):
for filename in filenames:
if filename.endswith('.wav'):
str1 = ''
filepath = os.sep.join([dirpath, filename])
fileid = filename.strip('.wav')
str1 = fileid + ' ' + filepath
fileObject.write(str1 + '\n')
fileObject.close() # -----------------------------------------------------------------------------------------------------
'''
usage: 生成train, dev, test的音频文件对应的标注文件
'''
# -----------------------------------------------------------------------------------------------------
def gen_label(readfile,writefile):
fileids = []
content_dict = {}
allfile = open('aishell_transcript.txt','r+', encoding='UTF-8')
for textlabel in allfile.readlines():
textlabel = textlabel.strip('\n')
textlabel_id = textlabel.split(' ',1)[0]
textlabel_text = textlabel.split(' ',1)[1]
content_dict[textlabel_id] = textlabel_text
listobj = open(readfile, 'r+', encoding='UTF-8')
labelobj = open(writefile, 'w+', encoding='UTF-8')
for content in listobj.readlines():
label = ''
content = content.strip('\n')
content_id = content.split(' ',1)[0]
if content_id in content_dict:
content_text = content_dict[content_id]
label = content_id + ' ' + content_text
labelobj.write(label+'\n')
labelobj.close()
allfile.close()
listobj.close() # -----------------------------------------------------------------------------------------------------
'''
usage: 修正train, dev, test的音频文件列表,将标注中不存在的文件删除
'''
# -----------------------------------------------------------------------------------------------------
def fix_list(listfile,labelfile):
fileids = []
content_dict = {}
allfile = open(listfile,'r+', encoding='UTF-8')
for textlabel in allfile.readlines():
textlabel = textlabel.strip('\n')
textlabel_id = textlabel.split(' ',1)[0]
textlabel_text = textlabel.split(' ',1)[1]
content_dict[textlabel_id] = textlabel_text
allfile.truncate()
allfile.close() labelobj = open(labelfile, 'r+', encoding='UTF-8')
listobj = open(listfile, 'w+', encoding='UTF-8')
for content in labelobj.readlines():
label = ''
content = content.strip('\n')
content_id = content.split(' ',1)[0]
content_text = content_dict[content_id]
label = content_id + ' ' + content_text
listobj.write(label+'\n')
labelobj.close()
listobj.close() # 将汉字标注化为拼音标注
# 在data_aishell同级目录下运行该脚本。
trans_aishell_to_pinyin('E:\\aishell_transcript_v0.8.txt', 'E:\\aishell_transcript1.txt')
# 生成train, dev, test的音频文件列表
gen_wavlist('data_aishell/wav/train','train.wav.lst')
gen_wavlist('data_aishell/wav/test','test.wav.lst')
gen_wavlist('data_aishell/wav/dev','dev.wav.lst')
# 生成train, dev, test的音频文件对应的标注文件
gen_label('train.wav.lst', 'train.syllable.txt')
gen_label('test.wav.lst', 'test.syllable.txt')
gen_label('dev.wav.lst', 'dev.syllable.txt')
# 修正train, dev, test的音频文件列表,将标注中不存在的文件删除
fix_list('train.wav.lst', 'train.syllable.txt')
fix_list('test.wav.lst', 'test.syllable.txt')
fix_list('dev.wav.lst', 'dev.syllable.txt')

通过这个方法将得到和thchs30相同的数据格式,可以用这个变换方法将其他的中文数据都整合成统一格式,就可以增加训练的数据集啦。

当然这也是我的抛转引玉,希望大家也能有更多的方法将不同的数据集给整合起来。

转载请注明出处:hongwen 的博客

aishell数据处理为thchs30格式的更多相关文章

  1. 数据处理 array json 格式 转换成 数组形式

    处理这种数据应该使用的方式是 this.cities= res.data.data.cities.sort((a,b)=>{ //排序 进行字母排序 return a.pinyin[0].cha ...

  2. GRU-CTC中文语音识别

    目录 基于keras的中文语音识别 音频文件特征提取 文本数据处理 数据格式处理 构建模型 模型训练及解码 aishell数据转化 该项目github地址 基于keras的中文语音识别 该项目实现了G ...

  3. 最新中国IP段获取办法与转成ROS导入格式

    获取中国IP段办法     1.到APNIC获取亚太最新IP分配 http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest     2 ...

  4. 非图片格式如何转成lmdb格式--caffe

    链接 LMDB is the database of choice when using Caffe with large datasets. This is a tutorial of how to ...

  5. JSON(及其在ajax前后端交互的过程)小识

    一. json介绍 json是一种轻量级的数据交换格式,规则很简单: 并列的数据之间用逗号(,)分隔: 映射用冒号(:)表示: 并列数据的集合(数组)用方括号([])表示: 映射的集合(对象)用大括号 ...

  6. 如何处理json数据

    1. 前台处理方式之一: ★jQuery.parseJSON(json)                     var parsej = $.parseJSON(data);             ...

  7. Caffe使用:如何将一维数据或其他非图像数据转换成lmdb

    caffe事儿真多,数据必须得lmdb或者leveldb什么的才行,如果数据是图片的话,那用caffe自带的convert_image.cpp就行,但如果不是图片,就得自己写程序了.我也不是计算机专业 ...

  8. JavaScript脚本语言基础(四)

    导读: JavaScript和DOM DOM文档对象常用方法和属性 DOW文档对象运用 JSON数据交换格式 正则表达式 1.JavaScript和DOM [返回] 文档对象模型(Document O ...

  9. RTMP协议

    Real Time Messaging Protocol(实时消息传送协议协议)概述   实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频.视频和数据传输开发的私有协 ...

随机推荐

  1. Subclass UICollectionViewFlowLayout,自定义流布局

    需求:为实现第一行显示一个,第二行以后显示两个 方案1:用系统自带的流布局,实现的效果是,若第二行只有一个,则系统默认会居中显示,不是左对齐(如下图),不符合项目要求. 方案2:自定义系统的UICol ...

  2. c/c++面试指导---c语法总结

    任何一门学科或者专业在学习的过程中都要把握总结框架,大家在面试c/c++职位过程中要应对各种企业的面试,回答企业面试官的各种技术问题.如何应对各种各样的关于c/c++的企业面试题目,从各种繁杂的题目中 ...

  3. centos总结linux下svn安装与使用

    一.安装篇 centos下yum安装 yum install subversion 查看安装是否成功: svnserve --version 查看安装内容与位置 rpm -ql subversion ...

  4. AppleScript 快速入门

    AppleScript 快速入门 AppleScript 顾名思义是苹果开发的一套脚本语言,利用 AppleScript 在 macOS 系统上可以对其他程序进行操作,点击按钮.发送消息.模拟自动化执 ...

  5. C# 设计模式之 单例模式

    单例模式三种写法: 第一种最简单,但没有考虑线程安全,在多线程时可能会出问题,不过俺从没看过出错的现象,表鄙视我…… public class Singleton{    private static ...

  6. Docker之centos 简单安装

    centos6因为系统自带的可执行的应用程序与 docker 包名字发生冲突,所以重新命名 docker 的RPM包名字为 docker-io. 首先卸载docker包 sudo yum -y rem ...

  7. ES基础知识与高频考点梳理

    知识点梳理目录列表 变量类型 JS的数据类型分类和判断 值类型和引用类型 原型与原型链(继承) 原型和原型链的定义 继承写法 作用域和闭包 执行上下文 this 闭包是什么 异步 同步VS异步 异步和 ...

  8. C语言实例解析精粹学习笔记——18

    <C语言实例解析精粹>中编译环境采用的是Turbo C 2.0.但是这个编译器年代久远,较新的编译器对书中的某些例子支持不好,在学习的时候同时做一些笔记. 实例18:将一个无符号整数转换为 ...

  9. Python3 urllib 与 Python2 urllib的变化

    Infi-chu: http://www.cnblogs.com/Infi-chu/ Py2.x: Urllib库 Urllin2库 Py3.x: Urllib库 变化: 在Pytho2.x中使用im ...

  10. Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务、WCF消息头添加安全验证Token

    原文:Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务.WCF消息头添加安全验证Token 为什么选择wcf?   因为好像wcf和wpf就是哥俩,,, 为什么选择异步 ...