WeNet 更新:超大规模数据 UIO,支持千万小时语音训练任务(转载自语音杂谈)

转载自语音杂谈 https://mp.weixin.qq.com/s/C6vVQ455g_fVNtRBb9pa7A

WeNet 更新:超大规模数据 UIO,支持千万小时语音训练任务

近日,WeNet 中更新了超大规模数据 UIO (Unified IO) 支持,可以支持工业级千万小时级别的语音数据训练,支持云存储 OSS/S3/HDFS 等,并且训练速度更快,接口更简单,更容易使用和调试。

旧有 IO 方案的问题

WeNet 中旧有的 IO 方案基于 Pytorch 原生的 Dataset,在训练时,需要一次性把所有训练音频路径和对应标注的索引信息加载到内存,训练时对所有数据进行随机读取。在工业级的超大规模数据(5万小时以上,大约5000万条以上音频)时,该方案会导致两个严重的问题:

  1. 内存溢出(OOM)问题:在超大规模数据时,一般机器的物理内存已经难以一次性加载训练数据的索引信息。
  2. 读取性能慢:旧有方案为随机读取,在超大规模数据内存无法做文件 cache 的情况下,训练数据读取速度大幅度降低,从而导致训练速度慢。

UIO 解决方案

为解决上述问题,受如下工业级的解决方案的启发:

  1. webdataset: https://github.com/webdataset/webdataset
  2. tfrecord:Tensorflow 的 IO 解决方案

我们重新设计了 WeNet 的 IO 方案,其核心思想是:将多个小数据(如1000条)的音频和标注打成压缩包(tar),并基于 Pytorch 的 IterableDataset 进行读取。该方案在训练时:

  1. 内存中仅需维护压缩包的的索引信息,从而大大节省了内存,解决了 OOM 的问题。
  2. 读取时在内存中进行 on-the-fly 的解压缩,同一个压缩包内的数据顺序读取,解决了随机读取性能慢的问题。不同的压缩包可以进行随机读取,保证了数据的全局随机性。

同时,新 IO 方案在小数据集时支持选择使用原始形式的数据(无需压缩包),以保证在小数据集时的简洁性,也避免了小数据时浪费额外的空间。所以,新的 IO 方案同时兼顾了小数据集和大数据集,我们称之为 Unified IO(UIO)。UIO 的整体设计如下图所示:

在这里插入图片描述

其中:

  1. Small IO 为小数据集支持,我们称之为 raw 模式,该模式仅支持本地文件读取。所需文件须整理成 Kaldi 风格的语音列表文件 wav.scp 和标注列表文件 text。

  2. Big IO 为大数据集支持,我们称之为 shard 模式,该模式既可以支持本地文件读取,也可以支持网络云存储文件的读取。所需文件须整理成压缩包形式,单个压缩包内顺序存储了音频(wav)和其标注(txt)。

除此之外,受 TFRecord 链式 (chain IO) 的启发,UIO 也采用链式实现。在实际使用中,链式 IO 更灵活,更易于扩展,也更易于调试。
TFRecord 中的链式 IO 示例

def read_dataset(filename, batch_size):
    dataset = tf.data.TFRecordDataset(filename)
    dataset = dataset.map(_parse_image_function, num_parallel_calls=tf.data.experimental.AUTOTUNE)
    dataset = dataset.shuffle(500)
    dataset = dataset.batch(batch_size, drop_remainder=True)
    dataset = dataset.repeat()
    dataset = dataset.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
    return dataset

WeNet 中的 UIO 链式数据流如下图所示:
在这里插入图片描述

其链式 IO 包括以下模块:

  1. tokenize 模块: 将标注解析成建模单元 char 或者 BPE。
  2. filter 模块:过滤掉训练数据中音频过长过短、标注过长过短的句子。
  3. resample 模块: 对训练数据进行可选的重采样。
  4. compute_fbank 模块:特征提取
  5. spec_augmentation 模块:对特征进行 spec_augmentation 增强。
  6. shuffle 模块:对数据进行局部 shuffle。
  7. sort 模块:对数据进行局部排序。
  8. batch 模块:将多条数据组织成 batch。
  9. padding 模块:对同一 batch 内的数据进行 padding 处理。

实验

目前我们在 aishell(200小时) 和 WenetSpeech(1万小时)数据上分别验证了 UIO 的准确性。

AIshell
在这里插入图片描述

从该实验可以看到,UIO 无论是 raw 还是 shard 的模式,均能取得与之前旧有方案相当的识别率。

WenetSpeech
在这里插入图片描述

表中 WeNet 的结果直接基于 UIO shard 方案训练。WeNet 和 ESPnet 使用相近的模型结构和参数配置,两者取得相近的识别率,说明了 UIO 方案在大规模数据上的正确性。在训练过程中,我们观测到 UIO 的 GPU 整体的利用率在 80% ~ 90% 以上,说明整体 IO 的读取效率很高。

如何使用?

关于 UIO 的详细使用方式请参考 aishell 数据集示例:
https://github.com/wenet-e2e/wenet/blob/main/examples/aishell/s0/run.sh

目前 wenet 中所有的数据集均已使用 UIO 作为默认数据准备和读取方案。
和 UIO 相关的有三个参数:

  1. train_data(cv_data/test_data): data.list
  2. data_type: 可以为raw或者shard
  3. symbol_table: 训练时的建模单元字典文件
python wenet/bin/train.py --gpu $gpu_id \
 --config $train_config \
 --data_type $data_type \
 --symbol_table $dict \
 --train_data $feat_dir/$train_set/data.list \
 --cv_data $feat_dir/dev/data.list \
 ...

对于 data_type 为 raw 的文件,data.list 的形式如下所示,每一行为一行 json 序列化的字符串,该 json 串中含有 key, wav, txt 三个字段。

{"key": "BAC009S0002W0122", "wav": "/export/data/asr-data/OpenSLR/33//data_aishell/wav/train/S0002/BAC009S0002W0122.wav", "txt": "而对楼市成交抑制作用最大的限购"}
{"key": "BAC009S0002W0123", "wav": "/export/data/asr-data/OpenSLR/33//data_aishell/wav/train/S0002/BAC009S0002W0123.wav", "txt": "也成为地方政府的眼中钉"}
{"key": "BAC009S0002W0124", "wav": "/export/data/asr-data/OpenSLR/33//data_aishell/wav/train/S0002/BAC009S0002W0124.wav", "txt": "自六月底呼和浩特市率先宣布取消限购后"}

对于 data_type 为 shard 的文件,data.list 中每一行为一个统一资源标识符 URI 的地址,该地址可以为本地文件,或者网络文件 HTTP/HTTPS/FTP 等形式。通过网络接口形式,我们即可实现对 S3/OSS/HDFS 等分布式存储系统的支持。例如: 对于本地文件 data.list 的形式为:

/export/maryland/binbinzhang/code/wenet/examples/aishell/s3/raw_wav/train/shards/shards_000000000.tar.gz
/export/maryland/binbinzhang/code/wenet/examples/aishell/s3/raw_wav/train/shards/shards_000000001.tar.gz
/export/maryland/binbinzhang/code/wenet/examples/aishell/s3/raw_wav/train/shards/shards_000000002.tar.gz

对于网络文件,例如 OSS,data.list 的形式为:

https://examplebucket.oss-cn-hangzhou.aliyuncs.com/exampledir/1.tar.gz
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/exampledir/2.tar.gz

实现细节

如何做数据的 Distributed Partition? 根据rank 和 num_workers 对数据进行分割即可,如以下代码所示:

class DistributedSampler:
    def __init__(self, shuffle=True, partition=True):
        self.epoch = -1
        self.update()
        self.shuffle = shuffle
        self.partition = partition

    def set_epoch(self, epoch):
        self.epoch = epoch

    def sample(self, data):
        data = list(range(len(data)))
        if self.partition:
            if self.shuffle:
                random.Random(self.epoch).shuffle(data)
            data = data[self.rank::self.world_size]
        data = data[self.worker_id::self.num_workers]
        return data

如何处理不平衡的数据?

在训练时每个 rank 上分配到的数据不一定完全一样多,即使分配到一样多的数据,在后续处理中也会有数据过滤,也会导致每个 rank 上分配的数据不一样多。使用 model.join() 处理每个rank上分配到的数据不均衡, 详请参考 https://pytorch.org/tutorials/advanced/generic_join.html#how-does-join-work

Buffer size, 目前的设置中有两处 buffer。

Shuffle buffer:用来 shuffle 数据,这个 buffer 设置的大小建议大于单个 shards 中含有的数据数量,每次相当于数据在两个 shards 间做 shuffle,增大了数据的随机性。例如每个 shard 中含1000 条语音时,可以设置 shuffle_buffer 为 1500.
Sort buffer: 用来对数据按语音帧数排序,这个操作很重要,能大大提高训练速度。
当然,两个 buffer 均不建议设置的过大,设置过大时,一方面比较占内存,二是程序可能卡在读满一个 buffer 这一步上。

Prefetch

Pytorch Dataloader 中使用 prefetch 来预读数据,prefetch的粒度是最终训练的batch,默认参数为2,也就是默认会预读两个 batch 的数据。在新 IO 的设计中,因为有前置 buffer 的存在,预读的数据可能已经在 buffer 中,从而没有去做真正的预读,等到下次训练时,buffer 中的数据不足,才会 on the fly 的再去填充 buffer,这时训练即 block 在了读数据上。简言之,就是在prefetch 很小的时候训练在部分时间会 block 在读数据上,因为前面某一级还在缓存数据。所以要设置比较大的 prefetch 来避免这个问题,例如:

  • shards: 1000 条
  • buffer: 1000 条
  • batch_size: 32
  • pretch: 100

相当于预读了 32 * 100,大约是3个shards的内容。

读者潜在的问题

  1. 为什么不直接使用 TFRecord?

TFRecord 是为 Tensorflow 专门设计的一个重量级的库,使用 protobuf 进行数据组织,protobuf 格式数据可读性差。Pytorch 中也缺乏相应的 TFRecord 的生态。

  1. 为什么不直接使用 webdataset?

WeNet 中 UIO 的设计理念和方式和 webdataset 非常相近。但从目前现有的实现来看,webdataset 是基于图像数据设计的,在语音任务中使用的话,仍需做大量的修改。并且,我们希望在小数据集时,依然使用原始的语音文件,webdataset 中也不支持。

  1. 为什么使用 LMDB, HDF5 等 key/value 的数据库?

这些数据库能够解决大量小文件的问题,但依然不能解决文件随机读取的问题,也不支持 Cloud IO。

转载自语音杂谈:https://mp.weixin.qq.com/s/C6vVQ455g_fVNtRBb9pa7A

相关推荐

《SPARK官方教程系列》(标贝科技)

1-概述Apache Spark是一个用于大规模数据处理的统一分析引擎,它在Java、Scala、Python和R中的提供了高级api,以及一个支持通用执行图[general execution graphs]的优化引擎。它还支持一组丰富的高级工具,包括用于SQL和结构化数据处理的Spark SQL、用于机器学习的MLlib、用于图形处理的GraphX以及用于增量计算和流处理的结构化流。在Spark 2.0之前,Spark的主要编程接口是弹性分布式数据集(RDD)。在Spark 2.0之后,RDDs被D

DataBaker的博客 2863

uni-app多平台融合【入门】(标贝科技)

uni-app多平台融合【入门】一、uni-app介绍uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。二、功能框架从下面uni-app功能框架图可看出,uni-app在跨平台的过程中,不牺牲平台特色,可优雅的调用平台专有能力,真正做到海纳百川、各取所长。三、使用工具【推荐】HBuilderX 【官网下载地址:http

DataBaker的博客 2905

Elasticsearch相似度算分TF-IDF BM25(标贝科技)

控制相关度处理结构化数据(比如:时间、数字、字符串、枚举)的数据库,只需检查文档(或关系数据库里的行)是否与查询匹配。布尔的是/非匹配是全文搜索的基础,但不止如此,我们还要知道每个文档与查询的相关度,在全文搜索引擎中不仅需要找到匹配的文档,还需根据它们相关度的高低进行排序。全文相关的公式或 相似算法(similarity algorithms) 会将多个因素合并起来,为每个文档生成一个相关度评分 _score 。这里,我们会验证各种可变部分,然后讨论如何来控制它们。当然,相关度不只与全文查询有关,也

DataBaker的博客 2755

PHP各版本技术特性(标贝科技)

文章目录PHP8JIT流程配置测试小结match表达式PHP7HugepageHugepage简介Hugepage配置Opcache file cacheOpcache file cache简介Opcache file cache配置PHP5Opcache简介安装配置注意事项yield关键字总结PHP8JITPHP8 的 JIT( Just In Time )无疑是新特性中一大亮点, JIT 是一种编译器策略,它将代码表述为一种中间状态,在运行时将其转换为依赖于体系结构的机器码,并即时执行。在 PH

DataBaker的博客 937

go-mysql-elasticsearch+mysql 同步 ElasticSearch(标贝科技)

一、Elasticsearch:https://www.elastic.co/downloads/past-releases1、Elasticsearch无需安装,解压即用。2、进入elasticsearch/bin目录,执行./elasticsearh即可启动。3、es 绑定了两个端口:9300:Java程序访问的端口9200:浏览器、postman访问的端口4、浏览器中访问:http://ip:9200 即可二、ik(分词) : https://github.com/medcl/el

DataBaker的博客 4179

白话Android音频系统原理(上)(标贝科技)

白话Android音频系统原理(上)一、基本原理二、初始化准备工作三、播放流程四、录音流程一、基本原理谁来发起(录音和播放)?AudioRecorder,AudioTrack。谁来处理(录音和播放)? AudioFlinger!怎么处理?AudioPolicyService !什么是output?为了便于管理, 把一个设备上具有相同参数的一组播放device组织称为一个output。它描述一些实际支持的设备(有实际硬件)一个output对应一个处理线程thread。二、初始化准备工作从f

DataBaker的博客 500

mysql 锁(标贝科技)

mysql 锁锁类型类型表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低这些存储引擎通过总是一次性同时获取所有需要的锁以及总是按相同的顺序获取表锁来避免死锁。表级锁更适合于以查询为主,并发用户少,只有少量按索引条件更新数据的应用,如Web 应用行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高最大程度的支持并发,同时也带来了最大的锁开销在 InnoDB 中,除单个 SQL 组成的事务外,锁是逐步获得的,

DataBaker的博客 2507

Docker概述(二)(标贝科技)

Docker概述(二)文章目录Docker概述(二)前言一、镜像构建与运行二、docker常用命令总结前言本文将介绍Docker镜像的构建、运行以及介绍docker的常用命令一、镜像构建与运行Dockerfile创建Dockerfile常用命令介绍这里以tomcat9.0为例首先下载一个tomcat9.0docker pull tomcat:9.0通常我们启动一个Tomcat容器,官方镜像是简化版的,在webapps 目录下没有任何内容,所有我们启动之后访问主页也是没有任

DataBaker的博客 861

postman安装使用教程(标贝科技)

postman安装使用教程文章目录postman安装使用教程前言一、postman安装二、postman使用前言postman是Chrome浏览器的插件,是一款功能强大的网页调试工具(接口调试神器)一、postman安装1.下载: https://www.postman.com/downloads/2. 安装双击postman应用程序进入到postman主界面,如下证明安装成功3. 界面主要功能介绍二、postman使用1. 状态码解释各位小伙伴可以学习一下关于接口

DataBaker的博客 2万+

Mysql 事务(标贝科技)

文章目录事务InnoDB对ACID的支持隔离级别不同隔离级别下读读取数据可能出现的情况不可重复读和幻读区别redo log (共享表空间)redo log block刷redo log策略:innodb存储引擎中checkpoint:触发逻辑解决问题Log sequence number日志序列号innodb从执行修改语句开始:undo log 日志(共享表空间)记录日志的方式事务InnoDB对ACID的支持特性说明InnoDB支持原子性一个事务(transaction)中的所

DataBaker的博客 1045

srilm的安装与使用(标贝科技)

一、简介简单且概括的来说,SRILM是一个构建和应用统计语言模型的开源工具包,主要用于语音识别,统计标注和切分,以及机器翻译,可运行在UNIX及Windows平台上。(具体概念都能搜索出来,不再赘述,主讲安装和简单使用。)SRILM的主要目标是支持语言模型的估计和评测。二、安装在此,为解决大家下载版本不一致,导致安装出错的问题,提供压缩包下载链接,如下所示:SRILM:链接:https://pan.baidu.com/s/18T474NLSqlBL_xhMKEivnA提取码:adslTCL:链

DataBaker的博客 2270

GMM-HMM声学模型实例详解(标贝科技)

GMM-HMM声学模型实例详解GMM-HMM为经典的声学模型,基于深度神经网络的语音识别技术,其实就是神经网络代替了GMM来对HMM的观察概率进行建模,建模解码等识别流程的格个模块仍然沿用经典的语音识别技术接下来我将从GMM、最大似然估计到EM算法实例,再到最后使用一段语音介绍GMM-HMM声学模型参数更新过程一、GMM (混合高斯分布)1、正态分布(高斯分布)如果你绘制出来的概率分布是一条钟型曲线,且平均值、众数和中位数都是相等的,那么随机变量X就服从正态分布,记为X~N(μ,σ2),正态分布概

DataBaker的博客 4584

MySQL索引原理(标贝科技)

什么是索引?索引是帮助MySQL高效获取数据的数据结构。索引的本质就是数据结构。索引的目的在于提高查询效率,可以类比图书的目录,根据目录中的页码快速找到所需的内容。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。索引的优点和缺点优点1)索引可以提高数据检索的效率,降低数据库的IO成本2)索引可以将随机IO变成顺序IO3)索引可以帮助服务器避免排序和创建临时表缺点1)虽然索引提高了查询的速度,同时也降低了更新表的速度,比如对表进行INSERT、UPD

DataBaker的博客 757

基于AudioQueue实现音频的录制和播放(标贝科技)

基于AudioQueue实现音频的录制和播放文章目录基于AudioQueue实现音频的录制和播放背景总览Audio Queue 架构AudioQueueBuffer数据结构创建`AudioQueueBuffer`释放 `AudioQueueBuffer`Buffer Queue 和EnqueuingAudio Queue Callback音频录制创建一个录音 AudioQueue 的示例音频播放播放流程说明通过AudioQueue来控制音频的播放Audio Queue 的控制和状态Audio Queue

DataBaker的博客 923

pytorch模型从训练到LibTorch部署(标贝科技)

pytorch和libtorch安装PyTorch 是Torch7 团队开发的,从它的名字就可以看出,其与Torch 的不同之处在于PyTorch 使用了Python 作为开发语言。所谓“Python first”,同样说明它是一个以Python 优先的深度学习框架,不仅能够实现强大的GPU 加速,同时还支持动态神经网络,这是现在很多主流框架比如Tensorflow 等都不支持的。  PyTorch 既可以看做加入了GPU 支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络,除了F

DataBaker的博客 3454

Docker概述(一)(标贝科技)

docker系列文章(一)第一章docker概述与安装文章目录docker系列文章(一)前言一、docker概述二、使用步骤1.引入库2.读入数据总结前言此系列文章将详细介绍docker的原理及使用一、docker概述docker是什么?docker是目前使用最广泛的开源容器引擎,是一种操作系统级的虚拟化技术,一个简单的应用程序打包工具为什么要使用容器?上线流程繁琐 —> 资源利用率低 —> 程序扩容不及时 —> 服务器环境臃肿 —> 服务所需环境不

DataBaker的博客 1674

Mysql整体介绍(适用于5.X版本)(下)(标贝科技)

Mysql整体介绍(适用于5.X版本)(下)(标贝科技)二、InnoDB介绍[9-11]InnoDB是Mysql取得成功的最关键的引擎,其重要性不言而喻,下面将单独对该引擎的核心特性进行介绍,其他引擎如MyISAM、MEMORY、NDB等,本文不作说明。本文主要从宏观角度整体性地对InnoDB进行介绍,索引、事务、锁等具体的知识点在后续文章单独介绍。2.1 InnoDB体系架构和关键技术在MySQL 5.1中,可以支持两个版本的InnoDB,一个是静态编译的InnoDB版本,可将其视为老版本的In

DataBaker的博客 1315

免费公测 标贝声音理解,检测声音性别和年龄

古有听声辨位,今有听声“识”人。说到声音,其本质是不同频率声音的集合,以波的形式振动(震动)传播。由于每个人的发声器官(口腔、鼻腔、声带)各不相同,因此每个人的声音也不一样。因而,你的声音代表了个人很多关键信息,例如,性别、年龄、音色等特征。前几年,韩国大热的刑侦剧《Voice》里,女主是一个报警中心电话接听员,天生听力过人,不仅能听到很多常人听不到的细小微弱的声音,还能分辨出人讲话的声音、物体碰撞的声音、环境背景音等,靠着这个听声辨物的“超能力”,女主通过现场声音,准确的分辨人、物、地点,帮助组员破获了

DataBaker的博客 1117

Mysql整体介绍(适用于5.X版本)(上)(标贝科技)

Mysql整体介绍(适用于5.X版本)Mysql 8.X版本和 5.X版本相比,有比较大的调整。目前工作中应用最广的是Mysql 5.6/5.7的版本,所以文章将聚焦于对Mysql 5.6/5.7版本进行介绍,8.X版本的相关改动,有机会再单独整理。一、Mysql体系结构Mysql是一个单进程多线程、基于C/S架构的关系型数据库管理系统,其体系结构如图1所示(图片参考Mysql官方手册,各个版本会进行少许调整,总体上仍是准确的,虚线标出的查询缓存和缓冲区部分在Mysql 8.X版本中已废弃,侧面反映了

DataBaker的博客 1809

kaldi新手入门及语音识别的流程(标贝科技)

kaldi新手入门及语音识别的流程(标贝科技)欢迎体验标贝语音开放平台地址:https://ai.data-baker.com/#/?source=qaz123(注:填写邀请码hi25d7,每日免费调用量还可以翻倍)​​​​​​一、kaldikaldi简介Kaldi是当前最流行的开源的语音识别工具包,旨在提供灵活且可扩展的组件,包括多种语音信号处理,语音识别,声纹识别和深度神经网络。Kaldi的代码主要用C++编写,在此之上使用bash 和python脚本做了一些工具。kaldi安

DataBaker的博客 4158

教你windows下配置java环境变量&idea配置maven库(标贝科技)

安装java环境变量+idea配置maven库(标贝科技)提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录安装java环境变量+idea配置maven库(标贝科技)前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开

DataBaker的博客 677

教你如何用ffmpeg处理音频格式转换(标贝科技)

文章目录前言ffmpeg介绍?一、下载与安装1.下载安装包2.设置环境变量3.验证是否安装成功二、命令讲解1 参数解释2 音频格式转换命令三、标贝开放平台介绍前言ffmpeg介绍?FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案(本章介绍:ffmpeg的安装及音频转换命令使用)一、下载与安装1.下载安装包ffmpeg官网地址:https://ffmpeg.org/downlo..

DataBaker的博客 8257

手把手教你用JAVA实现“声音复刻”功能(复刻你的声音)标贝科技

手把手教你用JAVA调用websocket实现“语音识别”功能(声音转文字)标贝科技前言什么是语音识别?将自然语音转换为文本信息,本篇文章将介绍“长语音识别”(对长时间持续输入的语音流进行识别,例:视频直播)一、内容太长不愿意看,直接使用系列首先确认接口调用要求:支持音频格式:wav,pcm(Linear pcm)音频采样率:8000Hz,16000Hz位深:16bits声道:单声道时长限制:不超过3小时确认无误后,直接执行 2.2获取权限+2.3.4完整代码示例二、用JAVA调

DataBaker的博客 2197

手把手教你用JAVA实现“语音合成”功能(文字转声音)标贝科技

手把手教你用JAVA实现“语音合成”功能(文字转声音)标贝科技前言什么是语音合成?将文本转换成自然流畅的语音,本篇文章将介绍“实时在线合成”(文本长度不得超过1024字节)一、内容太长不愿意看,直接使用系列首先确认接口调用要求:合成音频的格式:PCM合成音频的采样率: 8000Hz,16000Hz支持语言:中文(zh),英文(eng),粤语(cat),四川话(sch)确认无误后,直接执行 2.2获取权限+2.3.4完整代码示例二、用JAVA调用标贝科技“语音合成”接口使用流程2.1

DataBaker的博客 4674

手把手教你用JAVA实现“语音识别”功能(声音转文字)标贝科技

手把手教你用JAVA实现“语音识别”功能(声音转文字)标贝科技前言什么是语音识别?将自然语音转换为文本信息,本篇文章将介绍“一句话识别”(对60秒以内的语音进行实时转写识别)一、内容太长不愿意看,直接使用系列首先确认接口调用要求:时长限制:60秒以内支持音频格式:wav,pcm音频采样率:8000Hz,16000Hz位深:16bits声道:单声道确认无误后,直接执行 2.2获取权限+2.3.3完整代码示例二、用JAVA调用标贝科技“语音识别”接口使用流程2.1.环境准备jav

DataBaker的博客 6160

手把手教你用JAVA调用Websocket实现“声音转换”功能(变声)标贝科技

手把手教你用JAVA调用Websocket实现“声音转换”功能(变声)前言什么是声音转换?基于深度学习和迁移学习技术,精准将原说话人的声音转换为目标说话人,同时保留原说话人的风格特色。让声音有更多的表现形式。一、内容太长不愿意看,直接使用系列首先确认接口调用要求:实现方式:Websocket支持音频文件的编码格式及文件名的后缀: pcm支持音频文件的采样率/位深: 16000Hz/16bit支持的语言:中文普通话音频有效时长:不超过180分钟确认无误后,直接执行 2.2获取权限+2

DataBaker的博客 1348

WAV2VEC:针对语音识别的无监督预训练

WAV2VEC: UNSUPERVISED PRE-TRAINING FOR SPEECH RECOGNITION概要本文使用大量的无标签数据集去预训练wav2vec模型,从而提升声学模型效果。本文训练的模型在性能上超越了Deep Speech 2,在nov92测试集上,WER达到了2.43%。1 简介预训练在深度学习算法中是一个很常用的方法,主要作用是能提升模型性能,即使是在当前带标签数据集的很少的情况下。主要方法是通过大量的无标签数据或者有标签的其他数据集对模型进行训练,可以使模型学习到通用的特

DataBaker的博客 3286

MFCC特征介绍

MFCC特征介绍在语音识别技术中,需要提取音频的特征,然后就可以使用该音频进行模型的训练或者是进行识别,目前很常用的一种特征叫做MFCC特征,又叫做梅尔倒谱系数特征。MFCC特征保留了语义相关的一些内容,过滤掉了诸如背景杂音等无关的信息。MFCC的特点是使用一组用来创建梅尔倒谱的关键系数,这样使得它的倒频谱和人类非线性的听觉系统更为接近。具体步骤如下:对音频信号进行分帧加窗将信号进行傅里叶变换将频谱映射到梅尔刻度取对数进行DCT变换为什么要对音频信号进行分帧加窗?因为音频信号本身是非平

DataBaker的博客 5730

Self-training and Pre-training are Complementary for Speech Recognition自训练和与预训练在语音识别中的互补

Self-training and Pre-training are Complementary for Speech Recognition自训练和与预训练在语音识别中的互补简介self-training和无监督的预训练可以互补,用来优化语音识别系统,但是还不清楚他们是否学习到了详细的patterns或者如何将他们有效的结合。本文仅使用了10分钟的带标签的数据(Libri-light)和5,300小时的无标签数据(LibriVox)进行训练,在Librispeech的clean和other的数据集上W

DataBaker的博客 670

手把手Python调用websocket接口实现实时语音合成,文字转语音

手把手使用Python进行语音合成,文字转语音0. 太长不看系列,直接使用1. Python调用标贝科技语音合成接口,实现文字转语音1.1 环境准备:1.2 获取权限1.2.1 登录1.2.2 创建新应用1.2.3 选择服务1.2.4 获取Key&Secret2. 代码实现2.1 获取access_token2.2 准备数据2.3 配置接口参数2.4 建立websocket客户端2.5 执行0. 太长不看系列,直接使用在1.2官网注册后拿到APISecret和APIKey,直接复制文章2.5de

DataBaker的博客 1503
上一篇: 教你如何用ffmpeg处理音频格式转换(标贝科技)
下一篇: 教你windows下配置java环境变量&idea配置maven库(标贝科技)
DataBaker标贝科技
DataBaker标贝科技 标贝科技官方账号 标贝科技官方账号
博客等级 码龄5年 39粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值