·

【机器学习】Whisper:开源语音转文本(speech-to-text)大模型实战

Published at 2024-08-27 23:20:35Viewed 188 times
Professional article
Please reprint with source link

一、引言

上一篇对​​​​​​​ChatTTS文本转语音模型原理和实战进行了讲解,第6次拿到了热榜第一🏆。今天,分享其对称功能(语音转文本)模型:Whisper。Whisper由OpenAI研发并开源,参数量最小39M,最大1550M,支持包含中文在内的多种语言。由于其低资源成本、优质的生存效果,被广泛应用于音乐识别、私信聊天、同声传译、人机交互等各种语音转文本场景,且商业化后价格不菲。今天免费分享给大家,不要再去花钱买语音识别服务啦!

二、Whisper 模型原理

2.1 模型架构

Whisper是一个典型的transformer Encoder-Decoder结构,针对语音和文本分别进行多任务(Multitask)处理。

2.2 语音处理

Whisper语音处理:基于680000小时音频数据进行训练,包含英文、其他语言转英文、非英文等多种语言。将音频数据转换成梅尔频谱图,再经过两个卷积层后送入 Transformer 模型。

2.3 文本处理

Whisper文本处理:文本token包含3类:special tokens(标记tokens)、text tokens(文本tokens)、timestamp tokens(时间戳),基于标记tokens控制文本的开始和结束,基于timestamp tokens让语音时间与文本对其。

仅用通俗易懂的语言描述了下Whisper的原理,如果想更深入的了解,请参考OpenAI官方Whisper论文。

三、Whisper 模型实战

3.1 环境安装

本文基于HuggingFace的transfomers库,采用pipeline方式进行极简单的模型实用实战,具体的pipeline以及其他transformers模型使用方式可以参考我之前的文章。

所以,您仅需要安装transformers库。

pip install transformers

当前,语音经常会和视频等其他媒介联系起来,所以我建议您顺带安装多媒体处理工具ffmpeg,没有提供pip库,仅能依靠apt-get安装。

sudo apt-get update && apt-get install ffmpeg

3.2 模型下载

基于pipeline会自动进行模型下载,当然,如果您的网速不行,请替换HF_ENDPOINT为国内镜像。

os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"

transcriber = pipeline(task="automatic-speech-recognition", model="openai/whisper-medium")

不同尺寸模型参数量、多语言支持情况、需要现存大小以及推理速度如下

3.3 模型推理

推理函数仅需2行,非常简单,基于pipeline实例化1个模型对象,将要转换的音频文件传至模型对象中即可:


def speech2text(speech_file):
    transcriber = pipeline(task="automatic-speech-recognition", model="openai/whisper-medium")
    text_dict = transcriber(speech_file)
    return text_dict

3.4 完整代码

运行完整代码:

python run_whisper.py -a output_video_enhanced.mp3 

完整代码如下:

import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
os.environ["CUDA_VISIBLE_DEVICES"] = "2"
os.environ["TF_ENABLE_ONEDNN_OPTS"] = "0"
 
from transformers import pipeline
import subprocess
 
def speech2text(speech_file):
    transcriber = pipeline(task="automatic-speech-recognition", model="openai/whisper-medium")
    text_dict = transcriber(speech_file)
    return text_dict
 
import argparse
import json
def main():
    parser = argparse.ArgumentParser(description="语音转文本")
    parser.add_argument("--audio","-a", type=str, help="输出音频文件路径")
 
    args = parser.parse_args()
    print(args) 
 
    text_dict = speech2text(args.audio)
    #print("视频内的文本是:\n" +  text_dict["text"])
    print("视频内的文本是:\n"+ json.dumps(text_dict,indent=4))
 
if __name__=="__main__":
    main()

这里采用argparse处理命令行参数,将mp3音频文件输入后,经过speech2text语音转文本函数处理,返回对应的文本,结果如下:

3.5 模型部署

如果想将该服务部署成语音识别API服务,可以参考之前的FastAPI相关文章。

四、总结

本文是上一篇chatTTS文章的夫妻篇,既然教了大家如何将文本转语音,就一定要教大家如何将语音转成文本,这样技术体系才完整。首先简要概述了Whisper的模型原理,然后基于transformers的pipeline库2行代码实现了Whisper模型推理,希望可以帮助到大家。码字不易,如果喜欢期待您的关注+3连+投票。


原文链接:https://blog.csdn.net/weixin_48007632/article/details/140046145

0 人喜欢

Comments

There is no comment, let's add the first one.

弦圈热门内容

大一上挂科后果严重吗?

知乎提问:大一上挂科后果严重吗?我的回答:还真问题不大,我大一的时候身边就有不少同学挂科了,结果无非是补考,或者严重点的重修,最后都能过。我大一大二的时候也是对挂科害怕不已,每次考前复习都十分紧张。直到后来快毕业的时候,我得知自己居然缺了通识课学分不能发毕业证,而我身边那些挂过科的同学全都学分修够了。那时候我才明白没啥好怕的。。。当然最后那个学分还是补上了,虚惊一场。后面我打算在 数学故事天地 写一篇因为沉迷数学导致挂科而大学无法毕业的小说,虽然我文笔不行,但是我有足够的想象力,只要我把逻辑、故事线、设定全写出来,一样会是丰富的故事内容,只不过细节描写没那么动人、生动。希尔伯特也曾经说过,数学家拥有足够丰富的想象力,完全可以当一个作家。原话我现在在网上已经找不着了,只找到了下面这句话"You know, for a mathematician, he did not have enough imagination. But he has become a poet and now he is fine."  ——David Hilbert“他曾没有足够的想象力来当数学家。不过 ...

洛必达法则为何成为禁术?

知乎提问:如题,高考用会扣分,大学微积分考试还明令禁止使用洛必达法则(我个人还是好喜欢洛必达法则)疑惑产生于大一半期考试之前,刚刚学极限没多久的时候。为了让学生更好地理解“极限”这个概念,学校用心良苦,在半期考试中ban了洛必达,仅此而已。我的回答:因为洛必达法则并不是洛必达发现的,而是洛必达买下来的😇。说到洛必达法则,我的回忆就倒回到初三和高中时期,当时做高等数学的极限题我都喜欢直接洛必达法则,我不太想考虑除了洛必达还有什么别的计算方法,没必要。因为洛必达法则明显更加友好,反而更加容易让学生熟练掌握极限,我初三乃至高中的时候,学高等数学能学懂,其中就少不了洛必达法则的功劳。其实多用几次洛必达法则感觉上来了,再去理解极限的本质,也不是不可以。只能说国内的这种教育模式非常的按部就班,就必须你按照学校指定的路径来学习,真的就流水线工厂一样,教育被整成这样,教育出来的人自然也很难有创新思维。这只是普通的通过性考试,完全没必要考虑所谓的公平性问题。就好比,初三的时候自学了高中的正弦定理、余弦定理,或者,高三的时候自学了洛必达法则、级数等微积分的东西,可以很轻松的解决某些题目。这种还勉强能狡辩一 ...

今天晚上弦圈服务器发生崩溃情况,已一切正常莫慌,目前判断是腾讯云的问题

之前我对弦圈进行了优化最近有人反馈网站卡、打不开,我自己也试过这种情况,已再次对弦圈进行优化,接着弦圈基本上就没有再出现过问题,网站浏览也很流畅。不过今天晚上前端服务器突然崩了,我发现后马上对服务器进行了重启,重启过程持续了5-10分钟左右吧,真慢。然后又发现了一点问题,就暂时用后端服务器顶替了,之后前端弄好了又重新用回原来的服务器。在这个过程中因为重启了(edge one)CDN,导致https访问会弹出证书不安全的情况,现在也全部正常了。根据我跟其他人的交流得知,他在东京的服务器前几天也突然崩了,崩的原因也是摸不着头脑的IO读写,然后我咨询客服他也没看到异常。我就一个前端服务器,2核4G就放前端代码,怎么可能会是业务问题。然后网站被黑客疯狂扫描,一直都有但也不至于弄崩服务器,目前判断可能是腾讯云自己的问题。

GTM023 W.H.Greub线性代数经典教材:Linear Algebra

这本教材是我高中时期入门线性代数的主要教材,我的很多基础知识都来源于这本书,如今看回这本书可以说满满的回忆。这本书可以说,是我读过的内容最为全面且完备的线性代数教材了。而且它的语言风格非常的代数化,没有什么直观可言,以抽象为主,表述简练、知识密度高。总之,真的太对我的胃口了,我当时是挺喜欢看这本书。这本教材跟其他线性代数教材一样,先从最基本的向量空间开始讲起,但不同的是,它这里还应用了群论的知识。紧接着这本书以代数抽象的形式讲矩阵和行列式,尤其是行列式,书中的描述直达其代数本质,这是我当时印象挺深刻的。接着书本还继续往外拓展,讲到与向量空间相关的一些概念,如泛函分析中的内积空间,同调代数中的代数和同调。总之,这本书对初学者有一点小门槛,适合喜欢挑战难度、喜欢看高水平读物的初学者看。PS:作者不再提供附件下载。

QQ频道AI视频泛滥?未来互联网上会充斥着AI生成的垃圾视频吗?

QQ这段时间感觉AI视频比以前多了,而且更主要是现在QQ还给AI视频推流了,可以说举措完全跟其他平台不同。以往QQ上的AI视频,基本上都是没流量的,现在给流量扶持,势必会导致AI视频进一步泛滥。其他平台像知乎、公众号、推特,发AI生成的内容,其实是会直接限流的。昨天我在知乎上发一篇AI生成的小说,创作声明了AI写的,结果直接零流量,阅读量1应该就是我自己吧。而在推特上发东西,如果用Gemini修改你自己写的语句,发上去也会被限流。小红书我没试过,之前看那种AI美女的笔记也挺泛滥的,不过后来我举报过以后就基本没看到了,也不知道是不是算法问题,还是小红书算法更新了。总之,小红书也是不鼓励AI生成的。说实话就没几个平台真的会鼓励AI生成的内容,只有极少数幸运儿会得到流量,毕竟说实话绝大多数AI内容都惨不忍睹,我其中最讨厌的就是那种AI美女图片,现在还多了视频,真的恶心,关键是居然还有人会看?尤其是QQ视频,之前还不给AI内容推流,现在直接开始推流了,更加惨不忍睹,关键是还不少人评论互动。如果是我,肯定直接不点,流量都懒得给它。AI视频如果仅仅只是整活那种,那还勉强能接受,但是我更喜欢那种混剪 ...

我开发的宇宙级APP竟然成为了其他世界的系统

陈木是弦圈一名默默无闻的全栈程序员,他每天身兼多职,任劳任怨地工作,既负责网站前端的开发与维护,又得兼顾后端的开发与维护。前段时间,陈木又接到了新的任务,要求他负责弦圈APP相关的开发工作 计划开发弦圈的桌面端版和APP版。于是,陈木在挑选了众多技术与框架后,选择了使用Universal React Native Pro Max进行APP的开发,这是一个近期在全世界都很火的框架。Universal React Native是基于传统的React Native通过最新的universal技术[1]进一步迭代升级,从而能达到用React Native语言开发任何东西原生的一个技术框架,而Pro Max则是它的超级升级版,你甚至能用它编程纳米机器人和可控核聚变引擎。开发的日子时间总是过得飞快,眨眼间就过了几万年,陈木头发都秃了,才终于从工作中缓过来。这时陈木也收到放假的通知 弦圈APP先开发到这里......,他松了口气,终于可以放松一下,并开始着手考虑自己一直以来的设想——开发一个宇宙级APP。所谓的宇宙级APP数亿年以来,一直都是各大星域争相竞争的研究对象,指的是通过开发宇宙级API接口 ...