aishell数据处理为thchs30格式
- 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
- train.syllable.txt:
- 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训练神经网络的同学,就可以使用更多的数据训练了。
- train.syllable.txt:
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格式的更多相关文章
- 数据处理 array json 格式 转换成 数组形式
处理这种数据应该使用的方式是 this.cities= res.data.data.cities.sort((a,b)=>{ //排序 进行字母排序 return a.pinyin[0].cha ...
- GRU-CTC中文语音识别
目录 基于keras的中文语音识别 音频文件特征提取 文本数据处理 数据格式处理 构建模型 模型训练及解码 aishell数据转化 该项目github地址 基于keras的中文语音识别 该项目实现了G ...
- 最新中国IP段获取办法与转成ROS导入格式
获取中国IP段办法 1.到APNIC获取亚太最新IP分配 http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest 2 ...
- 非图片格式如何转成lmdb格式--caffe
链接 LMDB is the database of choice when using Caffe with large datasets. This is a tutorial of how to ...
- JSON(及其在ajax前后端交互的过程)小识
一. json介绍 json是一种轻量级的数据交换格式,规则很简单: 并列的数据之间用逗号(,)分隔: 映射用冒号(:)表示: 并列数据的集合(数组)用方括号([])表示: 映射的集合(对象)用大括号 ...
- 如何处理json数据
1. 前台处理方式之一: ★jQuery.parseJSON(json) var parsej = $.parseJSON(data); ...
- Caffe使用:如何将一维数据或其他非图像数据转换成lmdb
caffe事儿真多,数据必须得lmdb或者leveldb什么的才行,如果数据是图片的话,那用caffe自带的convert_image.cpp就行,但如果不是图片,就得自己写程序了.我也不是计算机专业 ...
- JavaScript脚本语言基础(四)
导读: JavaScript和DOM DOM文档对象常用方法和属性 DOW文档对象运用 JSON数据交换格式 正则表达式 1.JavaScript和DOM [返回] 文档对象模型(Document O ...
- RTMP协议
Real Time Messaging Protocol(实时消息传送协议协议)概述 实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频.视频和数据传输开发的私有协 ...
随机推荐
- 能成为一名合格的Java架构师
原文地址:http://www.dalbll.com/Group/Topic/ArchitecturedDesign/4943 俗话说“没有见过好程序,怎么可能写出好程序”,同样,也可以说“不了解架构 ...
- 系统优化怎么做-Linux系统配置优化
大家好,这里是「聊聊系统优化 」,并在下列地址同步更新 博客园:http://www.cnblogs.com/changsong/ 知乎专栏:https://zhuanlan.zhihu.com/yo ...
- 【Graphql实践】使用 Apollo(iOS) 访问 Github 的 Graphql API
最近在协助调研 Apollo 生成的代码是否有可能跨 Query 共享模型的问题,虽然初步结论是不能,并不是预期的结果,但是在调研过程中积累的一些经验,有必要记录下.如果你也对 Graphql 感兴趣 ...
- chromium之message_pump_default
看看头文件,默认的消息泵,该类实现了MessagePump的四个接口 class MessagePumpDefault : public MessagePump { public: MessagePu ...
- 一分钟完成pip安装
很多实用Python的小伙伴都需要使用pip安装相应的包,对于初学者而已,检查遇到pip安装不成功的情况,如以下典型错误: Traceback (most recent call last): Fil ...
- Elasticsearch 映射操作
一.创建 语法: PUT /索引库名称/_mapping/类型名称 { "properties": { "字段名": { "type": 类 ...
- Django templates加载css/js/image等静态资源
配置步骤: 1.首先在应用下面创建static目录 2.将静态资源拷贝进去 3.在应用的settings.py文件中添加 import os BASE_PATH = os.path.dirname(o ...
- SVN错误记录
1.SVN错误:Attempted to lock an already-locked dir 发生这个错误多是中断提交导致了,执行clear后可修复 右键项目--->team--->清理 ...
- MySQL 5.7.21 免安装版配置教程
MySQL是世界上目前最流行的开源数据库.许多大厂的核心存储往往都是MySQL. 要安装MySQL,可以直接去官方网站下载.本教程将说明对于MySQL的免安装版如何进行配置和安装. 官方下载:http ...
- ECharts使用过程遇到的问题汇总
获取ECharts npm install echarts --save 自定义构建ECharts 我选用的是常用版的echarts/dist/echarts.common.js 在我的项目根目录下m ...