小米开源语音模型 Kaldi-ONNX 转换工具,助力移动端部署!

近日,小米开源Kaldi模型到ONNX模型的转换工具Kaldi-ONNX,促进Kaldi与深度学习生态互通。配合MACE框架,可降低语音模型离线部署门槛、提升推理效率。该工具用Python编写,有轻量化、易用等特点,还给出了项目地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

640?wx_fmt=gif

640?wx_fmt=jpeg

作者 | 小米开源团队

责编 | 胡巍巍

近日,小米对外开源了Kaldi模型到ONNX模型的转换工具Kaldi-ONNX,有望进一步促进Kaldi生态与深度学习生态间的互通。 

同时,配合移动端深度学习框架MACE,将极大降低语音模型在手机与智能设备上的离线部署门槛,并大幅提升推理效率。


640?wx_fmt=png

介绍


Kaldi是目前使用广泛的开发语音识别应用的框架,利用Kaldi,研究开发人员可以训练出语音识别神经网路模型,不过将训练得到的模型部署到移动端设备上往往需要大量的移植开发工作。

Kaldi-ONNX是一个开源的轻量化Python脚本工具,可以用来将Kaldi的神经网络模型文件转换为ONNX格式模型。 

而ONNX是一种开放神经网络交换格式(Open Nerual Network Exchange),它为神经网络模型提供了一种开源的格式, 目前已经有多个神经网络框架或工具支持ONNX格式模型,如Caffe2,PyTorch,Tensorflow,MACE, CoreML等。


640?wx_fmt=png

意义和优势


使用Kaldi-ONNX将Kaldi的神经网络模型转换成ONNX开源格式,一方面可以使用兼容ONNX的各种工具,如进行可视化检查或模型优化。 

另外转换得到的模型可以借助MACE或其他神经网络框架部署到Android,iOS,Linux/Windows或其他设备上, 为开发者部署语音识别神经网络模型提供了更多框架或工具的选择。

Kaldi-ONNX在设计中考虑了工具的轻量化、易用、灵活、高效等特点,主要从如下几个方面进行设计:

  • 使用Python脚本编写,跨平台,方便在Linux/Window/Mac系统下使用;

  • 体积小,除ONNX框架接口外无第三方依赖,易安装;

  • 广泛支持Kaldi的Nnet2和NNet3模型及常用的神经网络组件;

  • 可扩展及模块化设计,方便更新或添加新的组件;

  • 模型融合及优化,将Kaldi框架对神经网络的编译优化过程进行了简化, 并针对LSTM/TDNN等进行了融合,转换成有向无环网络模型,使模型的部署和推理计算更高效。

此外,MACE(移动端AI计算引擎)框架已支持ONNX格式模型文件和Kaldi模型中常用的算子, 因此推荐使用MACE来部署Kaldi的语音识别神经网络模型。同时MACE的Model Zoo项目里已经收录了数个转换好的Kaldi语音识别DNN模型。


640?wx_fmt=png

性能指标


下表是在小米MIX 2S(骁龙845)上的测试数据(单位: 毫秒):

Kaldi nnet3 模型

Nnet3 模型(chunk size=20)

arm64-v8a

armeabi-v7a

CVTE

99.1

88.694

SRE16

64.553

48.593

ASpIRE

8.165

8.499

Callhome

23.851

13.813

VoxCeleb Models

76.182

55.172

SITW Model

61.096

52.418

Kaldi nnet2 模型

Nnet2 模型(chunk size = 20)

arm64-v8a

armeabi-v7a

Fisher English

80.503

78.712

Librispeech

80.116

86.224

RM

23.197

25.228 

Tedlium

102.535

116.807

Timit

6.488

6.179


640?wx_fmt=png

项目地址


  • Kaldi-ONNX项目地址:

https://github.com/XiaoMi/kaldi-onnx

  • MACE项目地址:

https://github.com/XiaoMi/mace

  • 示例模型地址:

https://github.com/XiaoMi/mace-models/tree/master/kaldi-models

【END】

640?wx_fmt=png

作为码一代,想教码二代却无从下手:

听说少儿编程很火,可它有哪些好处呢?

孩子多大开始学习比较好呢?又该如何学习呢?

最新的编程教育政策又有哪些呢?

下面给大家介绍优快云新成员:极客宝宝(ID:geek_baby)

戳他了解更多↓↓↓

640?wx_fmt=jpeg

 热 文 推 荐 

开源需自立!Android、GitHub、Apache 全线告急!

☞任正非回应美国禁令推迟90天实施;小米无惧安卓系统禁用;苹果5G芯片有望2025年面世 | 极客头条

程序员过关斩将:小小的分页引发的加班血案

☞揭秘清华 AI 学堂班:姚期智担任首席教授,2019 年首批招收 30 人

程序员 520 脱单指南!

《使女的故事》大火,AI是背后最大推手?

☞十面九问的逆天异步神器-celery,你了解多少?

黑客亲述: "倾家荡产,是你们的事! "

Docker 系列学习文章 | 什么是容器云?

☞大神!这段代码让程序员躺赚200W,源码简单,你怎么看?

640?wx_fmt=gif点击阅读原文,输入关键词,即可搜索您想要的 优快云 文章。

640?wx_fmt=png 你点的每个“在看”,我都认真当成了喜欢
<think>我们正在讨论如何为KaldiSherpa-ONNX语音识别模型生成关键词文件(keyword.txt)。根据引用内容,Sherpa是一个基于下一代KaldiONNXRuntime的开源项目,支持离线语音识别。关键词文件通常用于在语音识别中提升特定词汇的识别准确率。在Kaldi和Sherpa-ONNX中,关键词文件(keyword.txt)通常包含需要被识别的关键词列表,每行一个词。这个文件用于构建有限状态转换器(FST)来增强关键词的识别。步骤:1.创建一个文本文件,每行一个关键词。2.文件名通常为`keywords.txt`(注意:用户问题中写的是keyword.txt,但通常使用复数形式keywords.txt,不过具体名称取决于实际使用)。但是,仅仅提供关键词列表是不够的,我们还需要将其转换模型可以使用的格式(通常是FST)。Sherpa-ONNX可能提供了工具来将关键词列表编译成所需的二进制格式。根据引用[2]中提到的sherpa-ncnn项目(虽然用户询问的是sherpa-onnx,但两者可能有相似之处),我们可能需要使用Sherpa提供的工具来生成关键词的FST。在Kaldi中,通常使用以下步骤生成关键词的FST:-创建一个词汇表文件(vocab),包含所有关键词。-使用fstmake命令生成FST。然而,在Sherpa-ONNX中,具体步骤可能有所不同。由于Sherpa-ONNX是较新的项目,我们需要参考其官方文档。根据Sherpa-ONNX的GitHub页面(https://github.com/k2-fsa/sherpa-onnx),我们可以找到相关工具。具体步骤(以Sherpa-ONNX为例):1.创建一个关键词列表文件,例如`keywords.txt`,内容如下(每行一个关键词):helloworldsherpa2.使用Sherpa-ONNX提供的工具`k2-fsa/onnx/bin/sherpa-onnx-keyword-spotter`(具体工具名称可能有所不同,请以实际为准)来生成关键词模型。但是,在Sherpa-ONNX中,关键词识别(KeywordSpotting)通常是在运行时加载关键词列表,而不是预先生成一个单独的文件。因此,我们可能需要直接提供关键词列表文件给识别程序。实际上,在Sherpa-ONNX的示例中,关键词识别是通过命令行参数直接指定关键词列表的。例如,在实时麦克风输入的示例中,我们可以这样运行:./bin/sherpa-onnx-keyword-spotter\--tokens=/path/to/tokens.txt\--encoder=/path/to/encoder.onnx\--decoder=/path/to/decoder.onnx\--joiner=/path/to/joiner.onnx\--keywords-file=keywords.txt\--num-threads=1其中,`--keywords-file`参数指定了关键词列表文件(每行一个词)。因此,生成关键词文件实际上就是创建一个文本文件,每行一个关键词。注意:关键词文件中的词必须在模型的词汇表中(即tokens.txt中)。如果关键词不在词汇表中,则无法识别。总结:1.创建一个文本文件,例如`keywords.txt`。2.每行写一个关键词。3.确保这些关键词在模型的词汇表(tokens.txt)中存在。4.在运行关键词识别程序时,通过`--keywords-file`参数指定这个文件。如果用户需要的是在构建语言模型时加入关键词(例如在解码图中加入关键词),那么可能需要更复杂的步骤(如构建一个包含关键词的FST)。但根据Sherpa-ONNX的示例,它支持直接通过关键词文件进行关键词识别,而无需重新编译整个模型。因此,对于Sherpa-ONNX,生成关键词文件非常简单:只需按格式创建文本文件即可。相关问题:1.如何确保关键词在模型的词汇表中?2.如果关键词不在词汇表中,有什么解决办法?3.如何测试关键词识别的效果?4.Sherpa-ONNX支持多少个关键词?5.关键词识别对识别准确率有什么影响?6.除了关键词文件,还需要其他配置吗?请注意:以上回答基于Sherpa-ONNX的一般使用方式,具体细节请参考其官方文档。</think>### 为 Kaldi Sherpa-ONNX 生成关键词文件 (keyword.txt) 在 Kaldi Sherpa-ONNX 中,`keyword.txt` 是用于**关键词唤醒**或**特定词识别**的配置文件,其生成步骤如下: #### 1. **创建关键词列表文件** 创建一个纯文本文件(如 `keywords.txt`),每行一个关键词: ``` 你好 打开灯光 停止 退出 ``` > ⚠️ 注意: > - 关键词需在语音模型的**词汇表范围内**(参考模型的 `tokens.txt`) > - 避免过长短语(建议 1-4 个词) > - 文件编码需为 **UTF-8 无 BOM** #### 2. **生成 keyword.txt 格式** Sherpa-ONNX 要求 `keyword.txt` 包含**关键词权重**(重要性系数),格式为: ``` 关键词1 权重值 关键词2 权重值 ``` 示例: ```txt 你好 1.5 打开灯光 2.0 停止 1.0 退出 1.0 ``` > 📌 权重说明: > - 默认权重 = 1.0 > - 更高权重(如 2.0)提升该词识别优先级 > - 权重范围建议 [0.5, 3.0] #### 3. **在 Sherpa-ONNX 中使用** 运行时通过参数加载关键词文件: ```bash ./sherpa-onnx \ --tokens=path/to/tokens.txt \ --encoder=path/to/encoder.onnx \ --decoder=path/to/decoder.onnx \ --joiner=path/to/joiner.onnx \ --keywords-file=path/to/keyword.txt \ # 加载关键词 --max-active-paths=4 \ # 并行解码路径数 ... ``` #### 4. **验证效果** - 测试命令(实时麦克风输入): ```bash ./sherpa-onnx-microphone \ --keywords-file=keyword.txt \ --keywords-threshold=0.25 \ # 触发阈值(需调整) ... ``` - 调整参数: - `--keywords-threshold`:降低阈值(如 0.1)提高敏感度 - `--keywords-score`:控制误触发率 #### 注意事项 1. **模型兼容性**:仅适用于支持**关键词唤醒**的 Sherpa-ONNX 模型(需确认模型训练方式)[^1] 2. **权重优化**:通过测试集调整权重,平衡召回率与误触发率 3. **实时性要求**:嵌入式设备需简化关键词数量(建议 ≤20 个词) 4. **非关键词处理**:通用语音识别仍需完整语言模型 > 💡 提示:Sherpa-ONNX 的**流式识别架构**特别适合关键词唤醒场景[^1],其 FST(有限状态转换器)会优先处理关键词路径。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

优快云资讯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值