ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

13 分钟音频 1 分钟出结果:faster-whisper 多语种语音识别上手记

13 分钟音频 1 分钟出结果:faster-whisper 多语种语音识别上手记 13 分钟音频 1 分钟出结果faster-whisper 多语种语音识别上手记【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper上周五组会四个人的讨论中英混着说录音转出来像天书。手动听写不现实丢给 openai/whisper 跑一遍又要等半天。faster-whisper 用 CTranslate2 重写了 Whisper 的推理部分同样的识别精度下速度提升最多 4 倍内存占用更低而且原生支持自动语言检测。下面记录一下从安装到调参的完整过程。装好并跑通安装一行命令搞定不依赖系统 FFmpeg音频解码走 PyAV库自带比原版省事pip install faster-whisper最小可运行代码30 秒能看到逐句带时间戳的输出from faster_whisper import WhisperModel model WhisperModel(medium, devicecpu, compute_typeint8) segments, info model.transcribe(meeting.mp3, beam_size5) print(info.language, info.language_probability) for seg in segments: print(f[{seg.start:.2f}s - {seg.end:.2f}s] {seg.text})模型名换成tiny到large-v3按需选择首次运行会自动从 Hugging Face 下载对应的 CTranslate2 权重。它快在哪三个点量化、批处理、VAD 过滤。量化把模型砍瘦一半compute_type支持int8、int8_float16、float16等组合INT8 量化后权重体积直接减半精度损失很小。README 里的 GPU 基准large-v2 模型转 13 分钟音频fp16 下 1 分 03 秒、占 4525MB 显存切到 int8 后 59 秒、只占 2926MB。# CPU 上用 int8 model WhisperModel(large-v3, devicecpu, compute_typeint8) # GPU 上推荐 int8_float16 model WhisperModel(large-v3, devicecuda, compute_typeint8_float16)CPU 上差距更夸张small 模型转同一段音频openai/whisper fp32 要 6 分 58 秒faster-whisper int8 只要 1 分 42 秒。批处理让 GPU 吃满单条推理时 GPU 经常吃不饱BatchedInferencePipeline 把多条音频或同一条音频的多个 30 秒窗口打包成 batch 送进去。README 数据GPU 上 large-v2 batch_size8转 13 分钟音频从 1 分 03 秒压到 17 秒是 fp16 单条的 4 倍多提速。from faster_whisper import WhisperModel, BatchedInferencePipeline model WhisperModel(medium, devicecuda, compute_typefloat16) batched BatchedInferencePipeline(modelmodel) segments, info batched.transcribe(audio.mp3, batch_size16)只录人声跳过静音内置了 Silero VAD转录前先扫描音频把无人声的片段直接扔掉模型只处理真正有声音的部分。长音频里夹杂大量静音时这一步能砍掉相当一部分计算量segments, _ model.transcribe( audio.mp3, vad_filterTrue, vad_parametersdict(min_silence_duration_ms500), )注意默认行为偏保守只过滤超过 2 秒的静音且每个语音段两侧保留 400ms 缓冲避免切掉句首句尾。三个真实场景的配置会议录音中英混说不指定language让模型自动检测开 VADbeam 拉满一点保精度。中英切换频繁的会议condition_on_previous_text关掉避免上一句的语境把下一句的语言带偏。beam_size5默认值精度速度均衡vad_filterTruecondition_on_previous_textFalse播客 / 长视频字幕核心是词级时间戳word_timestampsTrue后每个 segment 里多出一个words列表直接生成带时间轴的字幕文件。长音频记得开 VAD不然 2 小时的播客里十几分钟的背景音乐和停顿都会白算一遍。客服通话质检通话里高频出现公司名、产品名这些专有词hotwords参数可以注入偏置显著提升这类词的识别率仓库测试用例里就有一个专门的热词音频segments, _ model.transcribe(call.mp3, hotwords产品名 公司名 工单系统)踩坑与调参现象脚本跑了半天没输出。原因是segments是生成器model.transcribe()返回那一刻转录还没开始要开始遍历才会真正执行。要么for循环消费要么先segments list(segments)跑完。现象GPU 加载模型报错找不到 cuDNN。最新的 ctranslate2 只支持 CUDA 12 cuDNN 9。老机器是 CUDA 11 的话降ctranslate23.24.0就能跑或者直接用 NVIDIA 官方 CUDA 镜像cuBLAS 和 cuDNN 都是现成的。现象和 openai/whisper 对比时速度对不上号。别急着重开两边默认参数就不一样openai/whisper 的transcribe默认 beam size 为 1这里默认是 5结果更长、速度自然更慢。对比前把 beam size、线程数OMP_NUM_THREADS拉齐WER 也要接近才有可比性。现象多语种音频里某段语言被翻译腔带跑。语言频繁切换时上下文条件反而是干扰源condition_on_previous_textFalse通常能改善实在不行就按语种切成单语文件分别转。从个人用到团队用个人脚本跑通了之后往团队方向扩展基本是三条路Docker 部署仓库里 docker/Dockerfile 基于nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04镜像构建时已把 cuBLAS/cuDNN 装好docker build -t faster-whisper -f docker/Dockerfile .一行搞定适合直接当 GPU 服务跑。批量与高并发线上多路音频进来时换BatchedInferencePipelinebatch_size调大后 GPU 利用率明显上去实测同配置下吞吐能翻几倍。换更快的模型WhisperModel(distil-large-v3)直接用蒸馏版权重格式兼容精度损失很小对延迟敏感的场景据 README 基准同配置下比 transformers 推理快约一半值得试。当前局限实时流式转录官方没有内置社区里有 Whisper-Streaming、WhisperLive 这类项目补位另外大模型在纯 CPU 上依然偏慢低配机器建议 medium 以下 int8 组合。收尾装好就能跑pip install faster-whisper想复现速度数据看 benchmark/ 目录逐段转录的全部选项在 WhisperModel 的 docstring 里都有。【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表