OpenAI 开源的语音技术 Whisper 真棒!!!

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。

针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。

合集:

《大模型面试宝典》(2024版) 正式发布!
《AIGC 面试宝典》已圈粉无数!


在处理音频识别和翻译时,我们经常面临多样化的音频数据和处理多种语言的难题。传统的音频处理方法通常步骤繁杂,各个处理阶段的结果往往需要手动衔接和微调。

一个高效的自动语音识别(ASR)系统对于全球通讯和语言支持工具是极其关键的,尤其是在智能语音助手和电话语音翻译等领域。

然而,开发一个适用于广泛任务的模型,比如能够处理多种语言、进行语音翻译和语言识别,这仍是一个挑战。本篇文章Whisper,可能就是针对这些问题的新答案。

什么是 Whisper?

Whisper 是一个多功能的语音识别模型,通过从网络上收集了 68 万小时的多语言(98 种语言)和多任务(multitask)监督数据对 Whisper 进行了训练,能够执行包括多种语言的语音识别、语音翻译以及语言辨识等多项任务。

该项目的核心之处在于使用了一种基于Transformer架构的序列到序列模型来训练处理不同的语音任务,并通过解码器来预测代表各种任务的特定标记(token),这一过程有望取代传统音频处理中的多个步骤,并实现对多任务的同时训练。

Whisper 提供5种模型以及英文单一版本来实现速度和精度的权衡,适应不同的需求。

开源项目地址:https://github.com/openai/whisper

如何使用

在 Python 3.9.9 和 PyTorch 1.10.1 环境下进行操作,同时需要依赖openAI’s tiktoken 包来进行快速的标记(tokenize)处理。安装方式如下命令:

pip install -U openai-whisper

更新到最新版本的命令如下:

pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git

需要注意的是,这个项目还要求在系统上安装了命令行工具 ffmpeg,如果在安装过程中出现错误,可能需要安装 Rust 开发环境。安装好以后,以下是一个最简单的使用示例:

import whisper
model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])

在实际应用中我们可以把它封装成API的接口通过HTTP的方式来调用,我们可以使用python的高性能的框架Fast API。

我们可以通过FastAPI的UPload File来实现上传音频文件

# FastAPI使用async/await提升并发性能
async def api_recognition(audio: UploadFile = File(..., description="audio file")):
    content = await audio.read()

模型默认使用的wav的音频格式,这个时候就需要使用到FFmpeg来对音频进行转换。可以使用到pydub库中的AudioSegment方法对音频进行转换,也是通过调用FFmpeg来进行实现的,感兴趣的同学可以自行了解。

sound = AudioSegment.from_file(io.BytesIO(content))
# 将音频导出为wav格式,参数为FFmpeg对应的参数
# -ar rate        set audio sampling rate (in Hz) 
# -ac channels    set number of audio channels
wav  = sound.export(format="wav",parameters=["-ac","1","-ar","16000"]) 

该模型支持的输入格式为:str, np.ndarray, torch.Tensor三种

audio: Union[str, np.ndarray, torch.Tensor]

这时我们需要将刚刚的音频字节流转换为np.ndarray格式,这里可以使用soundfile的read方法

我们可以使用curl来进行测试:

# curl -X POST -F "audio=@test.wav" http://127.0.0.1:8000/recognition
{"results":"支付宝到账 100万元","code":0}

完整示例代码

import whisper
from pydub import AudioSegment
import soundfile
import io

model = whisper.load_model("base",download_root="./.cache/whisper")

import uvicorn
from fastapi import FastAPI, File, UploadFile
app = FastAPI(title="whisper")

@app.post("/recognition")
async def api_recognition(audio: UploadFile = File(..., description="audio file")):
    content = await audio.read()
    sound = AudioSegment.from_file(io.BytesIO(content))
    wav  = sound.export(format="wav",parameters=["-ac","1","-ar","16000"])
    speech, _ = soundfile.read(wav,dtype="float32")
    rec_result = model.transcribe(speech)
    ret = {"results": rec_result['text'], "code": 0}
    return ret

if __name__ == '__main__':
    uvicorn.run("example-whisper:app",host="0.0.0.0",workers=1)

总结

Whisper是OpenAI 发布的语音处理系统,在github拥有众多的追随者,此项目基于大规模弱监督的方法进行训练,为研究人员提供重要的研究工具,同时也为行业开发者提供了实用的开发工具,可以广泛应用于各种语音识别需求。

Whisper在处理不同语言方面展现出了卓越的性能,这与当前多样化和多任务处理的趋势相契合。该项目目前正处于积极开发阶段,并持续吸纳社区的意见和贡献,这使得它非常值得我们关注和尝试。

  • 25
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值