2021-12-29

ASR 文档

1. 环境搭建 (conda)

1)创建指定Python版本的conda虚拟环境:conda create -n 环境名称 python=3.6.2

2)安装Pytorch及对应版本的cuda-toolkit:conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch -c conda-forge

3)安装C-Python解释器:pip install Cython

4)更新conda仓库列表:conda config --add channels conda-forge

5)安装Python代数库依赖:conda install pyamg

6)安装Nemo工具包:pip install nemo_toolkit['all'] -i https://pypi.doubanio.com/simple/

补充说明:

1)文档cuda 版本: 11.1.114

2)Nemo工具包中已包含Pytorch-lightning框架在内的所有相关包,无需重复下载


2. 数据准备

1)数据路径:/aidate/home/ASR-data/King-ASR-059/

2)格式转换:Nemo框架采用映射的方式来生成训练集和测试集。具体来说,我们需要生成按照以下格式的Json文件:

{"audio_filepath": "绝对路径", "duration": 音频时长, "text": "文本"}

eg. {"audio_filepath": "/aihome/ASR-data/King-ASR-059/001.WAV", "duration": 1.2, "text": "今天天气真好"}

补充说明:

1)键的名称不允许更改,顺序可变

2)音频时长由librosa.core.get_duration()方法获取

3)text文本一般不含空格和特殊标点符号,因此需要对原始文本进行二次处理,主要是分词合并。这样可以减少模型待学习的信息,即词间隔(空格)和其他标点符号所包含的语义信息。


3. 参考模型

1)论文链接:./aidate/home/share_yy/Quarznet.pdf 或 arXiv地址

2)模型特点:一维全卷积网络,层与层之间存在残差级联结构,从而使模型可以更深。


4. 模型训练

1)Nemo中的模型描述保存在.yaml文件中,包括语音增强,模型声明,训练超参数设定等

2)Nemo支持Pytorch-lightning语法进行调参和测试,同时支持从断点恢复训练

3)分布式训练及GPU的指定通过Pytorch-lightning中的Trainer容器来进行配置

4)Nemo支持Tensorboard可视化,每次训练会在lightning_logs目录下生成相应的文件夹保存模型信息:

在命令行查看:tensorboard --logdir=项目路径/lightning_logs/version_x/


5. 性能测试

1)Nemo实例化后的模型继承了transcribe方法,输入参数包括"paths2audio_files"和"batch_size":

paths2audio_files: List列表,元素为每个音频的绝对路径,通过os方法遍历访问目标文件夹得到

batch_size:整型变量,指定了每次输出的样本量,默认为None

2)transcribe方法不包含字错误率(WER/CER),需要由._wer方法实现。同时,可以调用time包计算实时率:

import time; starttime = time.time(); 程序块; endtime = time.time();

3)Pytorch框架默认模型处于train模式,对于含BN层和dropout层的模型测试,需要手动设置为测试模式:

model.train() -> model.eval()

补充说明:stream流式测试及online实时测试可参考链接1链接2


6. 模型量化

1)静态等间隔量化(伪)

delta = (x_max - x_min) / (量化位数 - 1)

x_quant = x_min + floor( (x - x_min) / delta ) * delta

问题:处理后的x_series仍然为全精度表示,需考虑恒等值域变换等比缩放以减小物理存储

恒等值域变换:

目标:处理后的x_series为整型变量集合,值域在区间内连续分布

eg. 正则表达式表示

a)1bit量化:x = (0,1)* 

b)2bit量化:x = (0,1,2,3)* 或 x = (-1, 0, 1)*

注释:目标为有符号数时候量化表示范围 = 量化位数 - 1

等比缩放(fake quant):

恒等值域变换的基础上增加缩放因子alpha(通常为全精度表示)

a)1bit量化:x = (0,1)*                                    ->     x = (0,alpha)*

b)2bit量化:x = (0,1,2,3)* 或 x = (-1, 0, 1)*    ->     x= (0,alpha, 2*alpha, 3*alpha)* 或 x = (-alpha, 0, alpha)*

补充说明:常用零点的选择通常是x_min(即量化到非负区间)或者数值中点(即(x_max + x_min) / 2)

2)Tenary动态三值量化(受限alpha版本)

a)属于等比缩放,即x = (- alpha , 0, alpha )*的形式,论文地址:/aidate/home/share_yy/1605.04711.pdf

b)alpha可以是按层(滤波器组)求得,也可以按kernel(神经元)计算

c)"受限"是指alpha的计算过程中存在人为设定的超参数(参数分布)

3)可变比特动态量化(可学习alpha版本)

a)同属于等比缩放,参考论文地址:/aidate/home/share_yy/1606.06160.pdf

b)可以实现任意比特的量化,直接作用于torch.conv1D层的forward部分,基于预训练权重进行量化变换

4)Pytorch原生量化函数

a)1.7版本以后自带量化库,由第三方学者贡献,目前已整合至官方文档说明

b)仅支持16位量化,量化后的模型只能预测不能继续训练(梯度传播错误)

c)目前Pytorch支持将只包含二维卷积和BN层的模块,通过fusion后合并为SimpleModule,节省存储


7. 项目结构

-- 地址                           /aidate/home/share_yy/asr  或   /aidate/home/aiyy/asr

-- 文件夹

a)config                           模型描述文件, yaml格式

b)data_preparation         生成数据集的Json脚本映射

c)lightning_logs               保存训练过程信息,支持tensorboard可视化

d)models                         保存训练的模型权重

-- 文件

a)king_train.json            训练集语料,包含80%的King-ASR数据

b)king_test.json             测试集语料,包含20%的King-ASR数据

c)online_asr_zn.ipynb   实时ASR测试

d)train.py                       模型训练

e)test_asr.py                  模型测试

补充说明:

-- ASR数据集                           /aidate/home/ASR-data/King-ASR-059

-- 服务器环境                           /aidate/home/aiyy_env

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容