SenseVoice-small语音识别实操手册:ITN逆文本正则化对数字/单位的精准转换

语音识别技术已经深入到我们工作和生活的方方面面,但你是否遇到过这样的尴尬场景?——会议录音转文字后,报告里的“第三季度营收增长百分之十五点三”变成了“第三季度营收增长百分之十五点三”,财务同事需要手动把中文数字和百分比一个个改成“3”和“15.3%”。这种看似微小的差异,在数据分析和报告撰写中却会带来巨大的不便。

今天,我要带你深度体验的SenseVoice-small语音识别模型,就专门解决了这个问题。它内置的ITN(逆文本正则化)功能,能够智能地将识别出的口语化数字、单位、日期等,自动转换成书面标准格式。更重要的是,这是一个基于ONNX量化、开箱即用的服务,部署简单,效果惊艳。

无论你是开发者想要集成语音能力,还是业务人员希望提升办公效率,这篇实操手册都将手把手带你从零开始,掌握这个强大的工具。

1. 快速理解SenseVoice与ITN的价值

在深入技术细节之前,我们先搞清楚两个核心概念:SenseVoice-small是什么?ITN又为何如此重要?

1.1 SenseVoice-small:一个高效的多语言识别引擎

SenseVoice-small是一个轻量级的语音识别模型,它的最大特点是“小而强”。通过ONNX量化技术,模型体积被压缩到仅约230MB,但识别精度却保持在高水平。它支持超过50种语言的自动检测,对中文、粤语、英语、日语、韩语等都有很好的支持。

对于开发者来说,它的优势很明显:

  • 部署简单:提供完整的Docker镜像和Python包,几条命令就能跑起来。
  • 速度快:官方数据显示,10秒的音频,推理时间仅需70毫秒左右。
  • 功能全:不仅转写文字,还能识别语音中的情感(如高兴、生气)和音频事件(如笑声、掌声)。

1.2 ITN逆文本正则化:让机器输出更“像人写”的文本

ITN是“Inverse Text Normalization”的缩写,你可以把它理解为一个“文本格式化清洁工”。

我们的口语习惯和书面写作习惯有很大不同。说话时,我们会说“明天下午三点”、“一百二十块钱”、“增长百分之二十”。但在书面记录或数据输入时,我们期望的格式是“明天15:00”、“120元”、“增长20%”。

没有ITN的识别结果“请帮我预约明天下午三点的会议室,预算大概一百二十块钱。” 有ITN的识别结果“请帮我预约明天15:00的会议室,预算大概120元。”

后者显然更干净、更专业,也更容易被后续的数据处理程序(如日历系统、报销系统)直接使用。ITN模块就是自动完成这种转换的魔法棒,它尤其擅长处理:

  • 数字转换:中文数字、阿拉伯数字、罗马数字之间的转换。
  • 单位标准化:将口语化的单位(如“斤”、“里”)转换为标准单位(如“kg”、“km”),或补充完整(“一百二” -> “120元”)。
  • 日期时间格式化:“下礼拜一” -> “2024-XX-XX(下周一日期)”。
  • 标点符号与缩写:“医生” -> “Dr.”,“有限公司” -> “Ltd.”。

接下来,我们就从零开始,让这个“清洁工”为你工作。

2. 从零开始:环境部署与快速启动

看到“模型”、“量化”、“ONNX”这些词别发怵。SenseVoice-small的服务封装得非常好,我们只需要跟着步骤操作,就像安装一个普通软件一样简单。

2.1 准备工作:一分钟检查清单

在开始之前,请确保你的电脑或服务器满足以下最基本的要求:

  • 操作系统:Linux (Ubuntu/CentOS推荐), macOS,或 Windows (WSL2环境下)。
  • Python版本:Python 3.8 到 3.11 均可。建议使用3.8或3.9,兼容性最好。
  • 内存:至少2GB可用内存。模型本身很小,但运行时需要一些空间。
  • 磁盘空间:预留约500MB空间用于存放模型和依赖包。

2.2 三步启动语音识别服务

整个过程就像泡一碗方便面一样简单:放料、加水、等待。打开你的终端(命令行),跟着我一步步来。

第一步:安装必要的工具包 我们使用pip这个Python包管理工具来安装所有依赖。一条命令搞定:

pip install funasr-onnx gradio fastapi uvicorn soundfile jieba

这条命令安装了语音识别核心库、网页界面库和Web服务框架。

第二步:下载并运行服务脚本 你需要一个启动服务的Python脚本。通常,模型提供方会给出一个app.py文件。假设你已经拿到了这个文件,并放在了当前目录下,那么直接运行:

python3 app.py --host 0.0.0.0 --port 7860

参数解释:

  • --host 0.0.0.0:让服务可以被网络内的其他设备访问(如果只本机用,可改为127.0.0.1)。
  • --port 7860:指定服务运行的端口号,7860是Gradio框架的常用端口。

第三步:访问服务,验证成功 当你在终端看到类似“Running on local URL: http://0.0.0.0:7860”的输出时,恭喜你,服务启动成功了!

现在,打开你的浏览器,访问以下两个地址之一:

  • 网页可视化界面http://你的服务器IP:7860 (本机就是 http://localhost:7860)
  • API交互文档http://你的服务器IP:7860/docs

你应该能看到一个简洁的上传音频文件的网页,或者一个详细的API说明页面。这意味着你的语音识别服务已经整装待发。

3. 核心实操:体验ITN的精准转换魔法

服务跑起来了,是时候检验ITN的成色了。我们将通过网页界面和代码调用两种方式,感受它对数字和单位的转换能力。

3.1 通过网页界面快速体验

这是最直观的方式,适合非开发人员或快速测试。

  1. 在浏览器打开 http://localhost:7860
  2. 你会看到一个简单的页面,通常有一个“上传音频”的按钮或拖拽区域。
  3. 准备一段测试音频。你可以自己用手机录一段,内容可以包含:
    • “我的电话是幺三九零一二三四五六七八。”
    • “会议定在二月二十八号下午两点半。”
    • “这个月的销售额是五万三千六百块钱,同比增长了百分之十八点五。”
  4. 上传音频文件,在语言选项中选择“auto”(自动检测)或“zh”(中文),并确保勾选或选择“使用ITN”use_itn=true)的选项。
  5. 点击提交或转录按钮。

几秒钟后,你就能看到转写结果。对比一下,如果ITN功能生效,你应该能看到:

  • “幺三九零一二三四五六七八” 被转换成了 “139012345678”。
  • “二月二十八号下午两点半” 可能被转换成 “2月28日14:30”。
  • “五万三千六百块钱” 转换成 “53600元”,“百分之十八点五” 转换成 “18.5%”。

3.2 通过代码API进行集成测试

对于开发者,通过API调用更便于集成到自己的系统中。SenseVoice-small提供了RESTful API,用curl命令或任何编程语言都能调用。

使用curl命令测试: 假设你有一个名为meeting.wav的音频文件。

curl -X POST "http://localhost:7860/api/transcribe" \
  -F "file=@meeting.wav" \
  -F "language=zh" \
  -F "use_itn=true"

命令解释:

  • -X POST:表示这是一个POST请求。
  • -F "file=@meeting.wav":上传本地的meeting.wav文件。
  • -F "language=zh":指定音频语言为中文。
  • -F "use_itn=true"最关键的一步,开启ITN功能。

执行后,你会收到一个JSON格式的响应,其中的text字段就是经过ITN处理后的转写文本。

使用Python代码集成: 如果你想在自己的Python程序里调用,代码也非常清晰:

from funasr_onnx import SenseVoiceSmall

# 1. 初始化模型,指定模型路径
# 注意:如果服务已启动,模型通常已加载。此处演示直接库调用方式。
model_dir = "/root/ai-models/danieldong/sensevoice-small-onnx-quant" # 这是镜像中的默认路径
model = SenseVoiceSmall(model_dir, quantize=True)

# 2. 准备音频文件路径列表
audio_files = ["meeting.wav", "interview.mp3"]

# 3. 执行识别,并启用ITN
results = model(audio_files, language="auto", use_itn=True)

# 4. 打印结果
for i, result in enumerate(results):
    print(f"文件 {audio_files[i]} 的识别结果:")
    print(result) # 这里就是转换好的文本
    print("-" * 30)

通过以上两种方式,你可以充分感受到ITN将口语化、模糊的表达,转化为精准、规范文本的强大能力。这对于生成会议纪要、整理访谈记录、转换客服录音等场景,价值巨大。

4. 进阶技巧与最佳实践

掌握了基本操作后,了解一些进阶技巧能让这个工具发挥更大威力。

4.1 处理多语言混合音频

SenseVoice-small支持语言自动检测(language="auto")。这对于中英混杂的会议或视频内容非常有用。ITN功能在不同语言下也会智能切换规则。

  • 中文:“买了three apples” 可能被转写为 “买了3个苹果”。
  • 英文:“meet at two p.m.” 可能被规范为 “meet at 2:00 PM”。

建议:对于语言混杂明显的音频,使用auto选项,让模型自己判断。

4.2 优化识别精度的小窍门

虽然模型很强大,但好的输入能带来更好的输出。

  • 音频质量:尽量使用清晰的音频。如果原始录音有噪音,可以先用简单的降噪工具处理一下。
  • 说话风格:虽然模型适应性强,但吐字清晰、避免过度口语化的吞音连读,有助于提升数字、专有名词的识别准确率。
  • 分段处理:对于超长音频(如1小时以上),可以考虑先将其分割成15-30分钟的小段,再分别识别,可以降低内存消耗并方便核对。

4.3 ITN的局限性认知

ITN不是万能的,了解它的边界能让你更好地使用它。

  • 上下文依赖:比如“一斤”和“一斤半”,ITN能很好处理。但像“他考了第一”中的“第一”,通常不应转换为“第1”,模型需要根据上下文判断,这有时会出错。
  • 领域专有名词:某些行业术语、公司内部缩写、产品代号,可能不在ITN的标准规则库内。
  • 自定义需求:如果你有特殊的格式要求(比如日期必须写成YYYY/MM/DD),可能需要后处理。

应对策略:对于关键信息(如合同金额、产品型号),在自动转换后进行一次人工复核是最稳妥的。

5. 总结

SenseVoice-small语音识别模型,结合其ITN逆文本正则化功能,为我们提供了一个从“听得对”到“写得好”的完整解决方案。它把我们从繁琐的文本格式整理工作中解放出来,让机器生成的文本真正达到了“可用、好用”的程度。

回顾一下我们的旅程:

  1. 理解了价值:ITN是将口语化数字、单位转换为标准书面格式的关键,是提升语音识别实用性的临门一脚。
  2. 完成了部署:利用ONNX量化模型,我们只需几条命令就搭建起一个高效的多语言语音识别服务。
  3. 体验了魔法:通过网页和代码两种方式,亲眼见证了“百分之十”变成“10%”的精准转换。
  4. 掌握了进阶:学会了处理多语言音频、优化识别效果,并理性看待ITN的能力边界。

技术的最终目的是服务于人。无论是用于构建智能会议系统、客服质检平台,还是简单地整理个人录音笔记,SenseVoice-small都是一个值得你放入工具箱的得力助手。现在,就去找一段音频试试吧,感受一下这份“精准”带来的效率提升。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐