[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-yeyupiaoling--Whisper-Finetune":3,"tool-yeyupiaoling--Whisper-Finetune":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",160411,2,"2026-04-18T23:33:24",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",109154,"2026-04-18T11:18:24",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":76,"owner_twitter":76,"owner_website":76,"owner_url":77,"languages":78,"stars":113,"forks":114,"last_commit_at":115,"license":116,"difficulty_score":10,"env_os":117,"env_gpu":118,"env_ram":119,"env_deps":120,"category_tags":131,"github_topics":133,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":143,"updated_at":144,"faqs":145,"releases":186},9495,"yeyupiaoling\u002FWhisper-Finetune","Whisper-Finetune","Fine-tune the Whisper speech recognition model to support training without timestamp data, training with timestamp data, and training without speech data. Accelerate inference and support Web deployment, Windows desktop deployment, and Android deployment","Whisper-Finetune 是一个专为优化 OpenAI Whisper 语音识别模型而设计的开源工具包。它核心解决了原生模型在特定场景下适应性不足的问题，支持用户利用 LoRA 技术对模型进行高效微调。其独特之处在于灵活的数据训练策略：既支持带时间戳的标准训练，也兼容无时间戳数据甚至无语音数据（仅文本）的训练模式，极大降低了高质量标注数据的获取门槛。\n\n除了训练功能，Whisper-Finetune 还专注于推理加速与多端部署。它集成了 CTranslate2 和 GGML 加速方案，显著提升识别速度并降低资源消耗，同时提供完善的 Web 服务、Windows 桌面应用及 Android 移动端部署支持，让模型能轻松落地到各类实际场景中。\n\n这款工具非常适合 AI 开发者、研究人员以及希望定制专属语音识别能力的技术团队使用。无论是需要提升中文方言识别准确率，还是希望在本地设备或服务器上快速搭建高性能语音服务，Whisper-Finetune 都提供了一站式的解决方案，让强大的语音识别技术更易于定制和应用。","# 微调Whisper语音识别模型和加速推理\n\n简体中文 | [English](.\u002FREADME_en.md)\n\n![python version](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.8+-orange.svg)\n![GitHub forks](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002Fyeyupiaoling\u002FWhisper-Finetune)\n![GitHub Repo stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fyeyupiaoling\u002FWhisper-Finetune)\n![GitHub](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fyeyupiaoling\u002FWhisper-Finetune)\n![支持系统](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F支持系统-Win\u002FLinux\u002FMAC-9cf)\n\n## 前言\n\nOpenAI在开源了号称其英文语音辨识能力已达到人类水准的Whisper项目，且它亦支持其它98种语言的自动语音辨识。Whisper所提供的自动语音识与翻译任务，它们能将各种语言的语音变成文本，也能将这些文本翻译成英文。本项目主要的目的是为了对Whisper模型使用Lora进行微调，**支持无时间戳数据训练，有时间戳数据训练、无语音数据训练**。目前开源了好几个模型，具体可以在[openai](https:\u002F\u002Fhuggingface.co\u002Fopenai)查看，下面列出了常用的几个模型。另外项目最后还支持CTranslate2加速推理和GGML加速推理，提示一下，加速推理支持直接使用Whisper原模型转换，并不一定需要微调。支持Windows桌面应用，Android应用和服务器部署。\n\n## 在线试用\n\n使用whisper-small微调后的模型：[在线演示](https:\u002F\u002Ftools.yeyupiaoling.cn\u002Fspeech\u002Fwhisper)\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_d2f79d9f3671.jpg\" alt=\"微信小程序\" width=\"200\">\u003Cbr\u002F>\n  微信小程序(whisper-small微调后的模型)\n\u003C\u002Fdiv>\n\n\n\n## 支持模型\n\n - openai\u002Fwhisper-tiny\n - openai\u002Fwhisper-base\n - openai\u002Fwhisper-small\n - openai\u002Fwhisper-medium\n - openai\u002Fwhisper-large\n - openai\u002Fwhisper-large-v2\n - openai\u002Fwhisper-large-v3\n - openai\u002Fwhisper-large-v3-turbo\n\n**欢迎大家扫码入知识星球（左）或者QQ群（右）讨论，知识星球里面提供项目的模型文件和博主其他相关项目的模型文件，也包括其他一些资源。**\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_d4ba433d3d87.jpg\" alt=\"知识星球\" width=\"400\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_645bdcaba681.jpg\" alt=\"QQ群\" width=\"400\">\n\u003C\u002Fdiv>\n\n\n**使用环境：**\n\n- Anaconda 3\n- Python 3.11\n- Pytorch 2.4.0\n- Ubuntu 18.04\n- GPU A100-PCIE-40GB*1\n\n\n### 视频讲解：[哔哩哔哩](https:\u002F\u002Fwww.bilibili.com\u002Fvideo\u002FBV1S8411o7rm\u002F)\n\n### 演示地址：[Web部署](https:\u002F\u002Fwhisper.yeyupiaoling.cn:8082\u002F)\n\n## 目录\n - [项目主要程序介绍](#项目主要程序介绍)\n - [模型测试表](#模型测试表)\n - [安装环境](#安装环境)\n - [准备数据](#准备数据)\n - [微调模型](#微调模型)\n   - [单卡训练](#单卡训练)\n   - [多卡训练](#多卡训练)\n - [合并模型](#合并模型)\n - [评估模型](#评估模型)\n - [预测](#预测)\n - [GUI界面预测](#GUI界面预测)\n- [Web部署](#Web部署)\n    - [接口文档](#接口文档)\n- [使用Ctranslate2格式模型预测](#使用Ctranslate2格式模型预测)\n- [Android部署](#Android部署)\n - [Windows桌面应用](#Windows桌面应用)\n - [打赏作者](#打赏作者)\n\n\u003Ca name='项目主要程序介绍'>\u003C\u002Fa>\n\n## 项目主要程序介绍\n\n1. `aishell.py`：制作AIShell训练数据。\n2. `finetune.py`：微调模型。\n3. `merge_lora.py`：合并Whisper和Lora的模型。\n4. `evaluation.py`：评估使用微调后的模型或者Whisper原模型。\n5. `infer.py`：使用调用微调后的模型或者transformers上的Whisper模型预测。\n6. `infer_ct2.py`：使用转换为CTranslate2的模型预测，主要参考这个程序用法。\n7. `infer_gui.py`：有GUI界面操作，使用调用微调后的模型或者transformers上的Whisper模型预测。\n8. `infer_server.py`：使用调用微调后的模型或者transformers上的Whisper模型部署到服务器端，提供给客户端调用。\n9. `convert-ggml.py`：转换模型为GGML格式模型，给Android应用或者Windows应用使用。\n10. `AndroidDemo`：该目录存放的是部署模型到Android的源码。\n11. `WhisperDesktop`：该目录存放的是Windows桌面应用的程序。\n\n\n\u003Ca name='模型测试表'>\u003C\u002Fa>\n\n## 模型测试表\n\n1. 原始模型字错率测试表。\n\n|          使用模型          |  指定语言   | aishell_test | test_net | test_meeting |  粤语测试集  |   模型获取   | \n|:----------------------:|:-------:|:------------:|:--------:|:------------:|:-------:|:--------:|\n|      whisper-tiny      | Chinese |   0.31898    | 0.40482  |   0.75332    |   N\u002FA   | 加入知识星球获取 |\n|      whisper-base      | Chinese |   0.22196    | 0.30404  |   0.50378    |   N\u002FA   | 加入知识星球获取 |\n|     whisper-small      | Chinese |   0.13897    | 0.18417  |   0.31154    |   N\u002FA   | 加入知识星球获取 |\n|     whisper-medium     | Chinese |   0.09538    | 0.13591  |   0.26669    |   N\u002FA   | 加入知识星球获取 |\n|     whisper-large      | Chinese |   0.08969    | 0.12933  |   0.23439    |   N\u002FA   | 加入知识星球获取 |\n|    whisper-large-v2    | Chinese |   0.08817    | 0.12332  |   0.26547    |   N\u002FA   | 加入知识星球获取 |\n|    whisper-large-v3    | Chinese |   0.08086    | 0.11452  |   0.19878    | 0.35301 | 加入知识星球获取 |\n| whisper-large-v3-turbo | Chinese |   0.08647    | 0.21225  |   0.20390    | 0.38069 | 加入知识星球获取 |\n\n\n2. 微调数据集后字错率测试表。\n\n|          使用模型          |   指定语言    |                            数据集                             | aishell_test | test_net | test_meeting |  粤语测试集  |   模型获取   |  \n|:----------------------:|:---------:|:----------------------------------------------------------:|:------------:|:--------:|:------------:|:-------:|:--------:|\n|      whisper-tiny      |  Chinese  | [AIShell](https:\u002F\u002Fopenslr.magicdatatech.com\u002Fresources\u002F33\u002F) |   0.13043    |  0.4463  |   0.57728    |   N\u002FA   | 加入知识星球获取 |\n|      whisper-base      |  Chinese  | [AIShell](https:\u002F\u002Fopenslr.magicdatatech.com\u002Fresources\u002F33\u002F) |   0.08999    | 0.33089  |   0.40713    |   N\u002FA   | 加入知识星球获取 |\n|     whisper-small      |  Chinese  | [AIShell](https:\u002F\u002Fopenslr.magicdatatech.com\u002Fresources\u002F33\u002F) |   0.05452    | 0.19831  |   0.24229    |   N\u002FA   | 加入知识星球获取 |\n|     whisper-medium     |  Chinese  | [AIShell](https:\u002F\u002Fopenslr.magicdatatech.com\u002Fresources\u002F33\u002F) |   0.03681    | 0.13073  |   0.16939    |   N\u002FA   | 加入知识星球获取 |\n|    whisper-large-v2    |  Chinese  | [AIShell](https:\u002F\u002Fopenslr.magicdatatech.com\u002Fresources\u002F33\u002F) |   0.03139    | 0.12201  |   0.15776    |   N\u002FA   | 加入知识星球获取 |\n|    whisper-large-v3    |  Chinese  | [AIShell](https:\u002F\u002Fopenslr.magicdatatech.com\u002Fresources\u002F33\u002F) |   0.03660    | 0.09835  |   0.13706    | 0.33464 | 加入知识星球获取 |\n| whisper-large-v3-turbo |  Chinese  | [AIShell](https:\u002F\u002Fopenslr.magicdatatech.com\u002Fresources\u002F33\u002F) |   0.03607    | 0.23038  |   0.35697    | 0.35697 | 加入知识星球获取 |\n|    whisper-large-v3    | Cantonese |                         粤语(含港式粤语)                          |   0.12443    | 0.32365  |   0.35911    | 0.02106 | 加入知识星球获取 |\n| whisper-large-v3-turbo | Cantonese |                         粤语(含港式粤语)                          |   0.14028    | 0.34483  |   0.38682    | 0.03255 | 加入知识星球获取 |\n|      whisper-tiny      |  Chinese  |     [WenetSpeech](.\u002Ftools\u002Fcreate_wenetspeech_data.py)      |   0.17711    | 0.24783  |   0.39226    |   N\u002FA   | 加入知识星球获取 |\n|      whisper-base      |  Chinese  |     [WenetSpeech](.\u002Ftools\u002Fcreate_wenetspeech_data.py)      |   0.14548    | 0.17747  |   0.30590    |   N\u002FA   | 加入知识星球获取 |\n|     whisper-small      |  Chinese  |     [WenetSpeech](.\u002Ftools\u002Fcreate_wenetspeech_data.py)      |   0.08484    | 0.11801  |   0.23471    |   N\u002FA   | 加入知识星球获取 |\n|     whisper-medium     |  Chinese  |     [WenetSpeech](.\u002Ftools\u002Fcreate_wenetspeech_data.py)      |   0.05861    | 0.08794  |   0.19486    |   N\u002FA   | 加入知识星球获取 |\n|    whisper-large-v2    |  Chinese  |     [WenetSpeech](.\u002Ftools\u002Fcreate_wenetspeech_data.py)      |   0.05443    | 0.08367  |   0.19087    |   N\u002FA   | 加入知识星球获取 |\n|    whisper-large-v3    |  Chinese  |     [WenetSpeech](.\u002Ftools\u002Fcreate_wenetspeech_data.py)      |   0.04947    | 0.10711  |   0.17429    | 0.60919 | 加入知识星球获取 |\n\n\n3. 微调其他语言数据集后字错率测试表。\n\n|          使用模型          | 实际语言 |  指定语言   |             数据集              |   测试集   |   模型获取   |  \n|:----------------------:|:----:|:-------:|:----------------------------:|:-------:|:--------:|\n|      whisper-tiny      | 维吾尔语 | Chinese | CommonVoice-Uyghur + THUYG20 | 0.06798 | 加入知识星球获取 |\n|      whisper-base      | 维吾尔语 | Chinese | CommonVoice-Uyghur + THUYG20 | 0.04690 | 加入知识星球获取 |\n|     whisper-small      | 维吾尔语 | Chinese | CommonVoice-Uyghur + THUYG20 | 0.02855 | 加入知识星球获取 |\n|     whisper-medium     | 维吾尔语 | Chinese | CommonVoice-Uyghur + THUYG20 | 0.01669 | 加入知识星球获取 |\n|    whisper-large-v2    | 维吾尔语 | Chinese | CommonVoice-Uyghur + THUYG20 | 0.01480 | 加入知识星球获取 |\n| whisper-large-v3-turbo | 维吾尔语 | Chinese | CommonVoice-Uyghur + THUYG20 | 0.01744 | 加入知识星球获取 |\n\n**说明：**\n1. 测试过指定语音为`Chinese`和`uzbek`，训练tiny模型的字错率分别是：0.06798和0.0685，它们差距不大，所上面使用都是指定语言为`Chinese`。\n2. 使用`CommonVoice-Uyghur`的测试集作为本项目测试集，其余的和THUYG20全部作为训练集。\n\n\n4. 推理速度测试表，使用GPU为GTX3090（24G），音频为`test_long.wav`，时长为3分钟整，测试程序在`tools\u002Frun_compute.sh`。\n\n|                                   加速方式                                    |  tiny  |  base  | small  | medium  | large-v2 | large-v3 | large-v3-turbo |\n|:-------------------------------------------------------------------------:|:------:|:------:|:------:|:-------:|:--------:|:--------:|:--------------:|\n|                  Transformers (`fp16` + `batch_size=16`)                  | 1.458s | 1.671s | 2.331s | 11.071s |  4.779s  | 12.826s  |     1.594s     |\n|            Transformers (`fp16` + `batch_size=16` + `Compile`)            | 1.477s | 1.675s | 2.357s | 11.003s |  4.799s  | 12.643s  |     1.581s     |\n|       Transformers (`fp16` + `batch_size=16` + `BetterTransformer`)       | 1.461s | 1.676s | 2.301s | 11.062s |  4.608s  | 12.505s  |     1.809s     |\n|       Transformers (`fp16` + `batch_size=16` + `Flash Attention 2`)       | 1.436s | 1.630s | 2.258s | 10.533s |  4.344s  | 11.651s  |     1.651s     |\n| Transformers (`fp16` + `batch_size=16` + `Compile` + `BetterTransformer`) | 1.442s | 1.686s | 2.277s | 11.000s |  4.543s  | 12.592s  |     1.816s     |\n| Transformers (`fp16` + `batch_size=16` + `Compile` + `Flash Attention 2`) | 1.409s | 1.643s | 2.220s | 10.390s |  4.377s  | 11.703s  |     1.657s     |\n|                 Faster Whisper (`fp16` + `beam_size=1` )                  | 2.179s | 1.492s | 2.327s | 3.752s  |  5.677s  | 31.541s  |       \u002F        |\n|                 Faster Whisper (`8-bit` + `beam_size=1` )                 | 2.609s | 1.728s | 2.744s | 4.688s  |  6.571s  | 29.307s  |       \u002F        |\n\n5. 经过处理的数据列表。\n\n|  数据列表处理方式  | AiShell  | WenetSpeech | \n|:----------:|:--------:|:-----------:|\n|   添加标点符号   | 加入知识星球获取 |  加入知识星球获取   |\n| 添加标点符号和时间戳 | 加入知识星球获取 |  加入知识星球获取   |\n\n**重要说明：**\n1. 在评估的时候移除模型输出的标点符号，并把繁体中文转成简体中文。\n2. `aishell_test`为AIShell的测试集，`test_net`和`test_meeting`为WenetSpeech的测试集。\n3. 测试速度的音频为`dataset\u002Ftest_long.wav`，时长为3分钟整。\n4. 训练数据使用的是带标点符号的数据，字错率高一点。\n5. 微调AiShell数据不带时间戳，微调WenetSpeech带时间戳。\n\n\u003Ca name='安装环境'>\u003C\u002Fa>\n\n## 安装环境\n\n1. 首先安装的是Pytorch的GPU版本，如果已经安装过了，请跳过。\n```shell\npip3 install torch torchvision --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n```\n\n2. 安装所需的依赖库。\n\n```shell\npython -m pip install -r requirements.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n\u003Ca name='准备数据'>\u003C\u002Fa>\n\n## 准备数据\n\n训练的数据集如下，是一个jsonlines的数据列表，也就是每一行都是一个JSON数据，数据格式如下。本项目提供了一个制作AIShell数据集的程序`aishell.py`，执行这个程序可以自动下载并生成如下列格式的训练集和测试集，**注意：** 这个程序可以通过指定AIShell的压缩文件来跳过下载过程的，如果直接下载会非常慢，可以使用一些如迅雷等下载器下载该数据集，然后通过参数`--filepath`指定下载的压缩文件路径，如`\u002Fhome\u002Ftest\u002Fdata_aishell.tgz`。\n\n**小提示：**\n1. 如果不使用时间戳训练，可以不包含`sentences`字段的数据。\n2. 如果只有一种语言的数据，可以不包含`language`字段数据。\n3. 如果训练空语音数据，`sentences`字段为`[]`，`sentence`字段为`\"\"`，`language`字段可以不存在。\n4. 数据可以不包含标点符号，但微调的模型会损失添加符号能力。\n\n```json\n{\n   \"audio\": {\n      \"path\": \"dataset\u002F0.wav\"\n   },\n   \"sentence\": \"近几年，不但我用书给女儿压岁，也劝说亲朋不要给女儿压岁钱，而改送压岁书。\",\n   \"language\": \"Chinese\",\n   \"sentences\": [\n      {\n         \"start\": 0,\n         \"end\": 1.4,\n         \"text\": \"近几年，\"\n      },\n      {\n         \"start\": 1.42,\n         \"end\": 8.4,\n         \"text\": \"不但我用书给女儿压岁，也劝说亲朋不要给女儿压岁钱，而改送压岁书。\"\n      }\n   ],\n   \"duration\": 7.37\n}\n```\n\n\u003Ca name='微调模型'>\u003C\u002Fa>\n\n## 微调模型\n\n准备好数据之后，就可以开始微调模型了。训练最重要的两个参数分别是，`--base_model`指定微调的Whisper模型，这个参数值需要在[HuggingFace](https:\u002F\u002Fhuggingface.co\u002Fopenai)存在的，这个不需要提前下载，启动训练时可以自动下载，当然也可以提前下载，那么`--base_model`指定就是路径，同时`--local_files_only`设置为True。第二个`--output_path`是是训练时保存的Lora检查点路径，因为我们使用Lora来微调模型。如果想存足够的话，最好将`--use_8bit`设置为False，这样训练速度快很多。其他更多的参数请查看这个程序。\n\n\u003Ca name='单卡训练'>\u003C\u002Fa>\n\n### 单卡训练\n\n单卡训练命令如下，Windows系统可以不添加`CUDA_VISIBLE_DEVICES`参数。\n```shell\nCUDA_VISIBLE_DEVICES=0 python finetune.py --base_model=openai\u002Fwhisper-tiny --output_dir=output\u002F\n```\n\n\u003Ca name='多卡训练'>\u003C\u002Fa>\n\n### 多卡训练\n\n多卡训练有两种方法，分别是torchrun和accelerate，开发者可以根据自己的习惯使用对应的方式。\n\n1. 使用torchrun启动多卡训练，命令如下，通过`--nproc_per_node`指定使用的显卡数量。\n```shell\ntorchrun --nproc_per_node=2 finetune.py --base_model=openai\u002Fwhisper-tiny --output_dir=output\u002F\n```\n\n2. 使用accelerate启动多卡训练，如果是第一次使用accelerate，要配置训练参数，方式如下。\n\n首先配置训练参数，过程是让开发者回答几个问题，基本都是默认就可以，但有几个参数需要看实际情况设置。\n```shell\naccelerate config\n```\n\n大概过程就是这样：\n```\n--------------------------------------------------------------------In which compute environment are you running?\nThis machine\n--------------------------------------------------------------------Which type of machine are you using?\nmulti-GPU\nHow many different machines will you use (use more than 1 for multi-node training)? [1]:\nDo you wish to optimize your script with torch dynamo?[yes\u002FNO]:\nDo you want to use DeepSpeed? [yes\u002FNO]:\nDo you want to use FullyShardedDataParallel? [yes\u002FNO]:\nDo you want to use Megatron-LM ? [yes\u002FNO]: \nHow many GPU(s) should be used for distributed training? [1]:2\nWhat GPU(s) (by id) should be used for training on this machine as a comma-seperated list? [all]:\n--------------------------------------------------------------------Do you wish to use FP16 or BF16 (mixed precision)?\nfp16\naccelerate configuration saved at \u002Fhome\u002Ftest\u002F.cache\u002Fhuggingface\u002Faccelerate\u002Fdefault_config.yaml\n```\n\n配置完成之后，可以使用以下命令查看配置。\n```shell\naccelerate env\n```\n\n开始训练命令如下。\n```shell\naccelerate launch finetune.py --base_model=openai\u002Fwhisper-tiny --output_dir=output\u002F\n```\n\n\n输出日志如下：\n```shell\n{'loss': 0.9098, 'learning_rate': 0.000999046843662503, 'epoch': 0.01}                                                     \n{'loss': 0.5898, 'learning_rate': 0.0009970611012927184, 'epoch': 0.01}                                                    \n{'loss': 0.5583, 'learning_rate': 0.0009950753589229333, 'epoch': 0.02}                                                  \n{'loss': 0.5469, 'learning_rate': 0.0009930896165531485, 'epoch': 0.02}                                          \n{'loss': 0.5959, 'learning_rate': 0.0009911038741833634, 'epoch': 0.03}\n```\n\n\u003Ca name='合并模型'>\u003C\u002Fa>\n\n## 合并模型\n\n微调完成之后会有两个模型，第一个是Whisper基础模型，第二个是Lora模型，需要把这两个模型合并之后才能之后的操作。这个程序只需要传递两个参数，`--lora_model`指定的是训练结束后保存的Lora模型路径，其实就是检查点文件夹路径，第二个`--output_dir`是合并后模型的保存目录。\n```shell\npython merge_lora.py --lora_model=output\u002Fwhisper-tiny\u002Fcheckpoint-best\u002F --output_dir=models\u002F\n```\n\n\u003Ca name='评估模型'>\u003C\u002Fa>\n\n## 评估模型\n\n执行以下程序进行评估模型，最重要的两个参数分别是。第一个`--model_path`指定的是合并后的模型路径，同时也支持直接使用Whisper原模型，例如直接指定`openai\u002Fwhisper-large-v2`，第二个是`--metric`指定的是评估方法，例如有字错率`cer`和词错率`wer`。**提示：** 没有微调的模型，可能输出带有标点符号，影响准确率。其他更多的参数请查看这个程序。\n```shell\npython evaluation.py --model_path=models\u002Fwhisper-tiny-finetune --metric=cer\n```\n\n\u003Ca name='预测'>\u003C\u002Fa>\n\n## 预测\n\n执行以下程序进行语音识别，这个使用transformers直接调用微调后的模型或者Whisper原模型预测，支持Pytorch2.0的编译器加速、FlashAttention2加速、BetterTransformer加速。第一个`--audio_path`参数指定的是要预测的音频路径。第二个`--model_path`指定的是合并后的模型路径，同时也支持直接使用Whisper原模型，例如直接指定`openai\u002Fwhisper-large-v2`。其他更多的参数请查看这个程序。\n```shell\npython infer.py --audio_path=dataset\u002Ftest.wav --model_path=models\u002Fwhisper-tiny-finetune\n```\n\n\u003Ca name='GUI界面预测'>\u003C\u002Fa>\n\n## GUI界面预测\n\n`--model_path`指定Transformers模型。其他更多的参数请查看这个程序。\n\n```shell\npython infer_gui.py --model_path=models\u002Fwhisper-tiny-finetune\n```\n\n启动后界面如下：\n\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_f62ed786f762.jpg\" alt=\"GUI界面\" width=\"600\"\u002F>\n\u003C\u002Fdiv>\n\n\u003Ca name='Web部署'>\u003C\u002Fa>\n\n## Web部署\n\n`--host`指定服务启动的地址，这里设置为`0.0.0.0`，即任何地址都可以访问。`--port`指定使用的端口号。`--model_path`指定的Transformers模型。`--num_workers`指定是使用多少个线程并发推理，这在Web部署上很重要，当有多个并发访问是可以同时推理。其他更多的参数请查看这个程序。\n\n```shell\npython infer_server.py --host=0.0.0.0 --port=5000 --model_path=models\u002Fwhisper-tiny-finetune --num_workers=2\n```\n\n### 接口文档\n\n目前提供识别接口`\u002Frecognition`，接口参数如下。\n\n|     字段     | 是否必须 |   类型   |    默认值     |              说明               |\n|:----------:|:----:|:------:|:----------:|:-----------------------------:|\n|   audio    |  是   |  File  |            |           要识别的音频文件            |\n| to_simple  |  否   |  int   |     1      |            是否繁体转简体            |\n| remove_pun |  否   |  int   |     0      |           是否移除标点符号            |\n|    task    |  否   | String | transcribe | 识别任务类型，支持transcribe和translate |\n|  language  |  否   | String |     zh     |    设置语言，简写，如果为None则自动检测语言     |\n\n\n返回结果：\n\n|   字段    |  类型  |      说明       |\n|:-------:|:----:|:-------------:|\n| results | list |    分割的识别结果    |\n| +result | str  |   每片分隔的文本结果   |\n| +start  | int  | 每片分隔的开始时间，单位秒 |\n|  +end   | int  | 每片分隔的结束时间，单位秒 |\n|  code   | int  |  错误码，0即为成功识别  |\n\n示例如下：\n```json\n{\n  \"results\": [\n    {\n      \"result\": \"近几年,不但我用书给女儿压碎,也全说亲朋不要给女儿压碎钱,而改送压碎书。\",\n      \"start\": 0,\n      \"end\": 8\n    }\n  ],\n  \"code\": 0\n}\n```\n\n为了方便理解，这里提供了调用Web接口的Python代码，下面的是`\u002Frecognition`的调用方式。\n```python\nimport requests\n\nresponse = requests.post(url=\"http:\u002F\u002F127.0.0.1:5000\u002Frecognition\", \n                         files=[(\"audio\", (\"test.wav\", open(\"dataset\u002Ftest.wav\", 'rb'), 'audio\u002Fwav'))],\n                         json={\"to_simple\": 1, \"remove_pun\": 0, \"language\": \"zh\", \"task\": \"transcribe\"}, timeout=20)\nprint(response.text)\n```\n\n提供的测试页面如下：\n\n首页`http:\u002F\u002F127.0.0.1:5000\u002F` 的页面如下：\n\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_8338deb67dd7.jpg\" alt=\"首页\" width=\"600\"\u002F>\n\u003C\u002Fdiv>\n\n文档页面`http:\u002F\u002F127.0.0.1:5000\u002Fdocs` 的页面如下：\n\n\n\u003Ca name='使用Ctranslate2格式模型预测'>\u003C\u002Fa>\n\n## 使用Ctranslate2格式模型预测\n\n这里提供了一个CTranslate2加速的方式，尽管使用Transformers的pipeline推理速度已经很快了，首先要转换模型，把合并后的模型转换为CTranslate2模型。如下命令，`--model`参数指定的是合并后的模型路径，同时也支持直接使用Whisper原模型，例如直接指定`openai\u002Fwhisper-large-v2`。`--output_dir`参数指定的是转换后的CTranslate2模型路径，`--quantization`参数指定的是量化模型大小，不希望量化模型的可以直接去掉这个参数。\n```shell\nct2-transformers-converter --model models\u002Fwhisper-tiny-finetune --output_dir models\u002Fwhisper-tiny-finetune-ct2 --copy_files tokenizer.json preprocessor_config.json --quantization float16\n```\n\n执行以下程序进行语音识别，`--audio_path`参数指定的是要预测的音频路径。`--model_path`指定的是转换后的CTranslate2模型。其他更多的参数请查看这个程序。\n```shell\npython infer_ct2.py --audio_path=dataset\u002Ftest.wav --model_path=models\u002Fwhisper-tiny-finetune-ct2\n```\n\n输出结果如下：\n```shell\n-----------  Configuration Arguments -----------\naudio_path: dataset\u002Ftest.wav\nmodel_path: models\u002Fwhisper-tiny-finetune-ct2\nlanguage: zh\nuse_gpu: True\nuse_int8: False\nbeam_size: 10\nnum_workers: 1\nvad_filter: False\nlocal_files_only: True\n------------------------------------------------\n[0.0 - 8.0]：近几年,不但我用书给女儿压碎,也全说亲朋不要给女儿压碎钱,而改送压碎书。\n```\n\n\n\u003Ca name='Android部署'>\u003C\u002Fa>\n## Android部署\n\n安装部署的源码在[AndroidDemo](.\u002FAndroidDemo)目录下，具体文档可以到该目录下的[README.md](AndroidDemo\u002FREADME.md)查看。\n\u003Cbr\u002F>\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_69382974f36b.jpg\" alt=\"Android效果图\" width=\"200\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_2bdee171d0e0.jpg\" alt=\"Android效果图\" width=\"200\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_cb0f29398dbe.jpg\" alt=\"Android效果图\" width=\"200\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_0b6b4315c42a.jpg\" alt=\"Android效果图\" width=\"200\">\n\u003C\u002Fdiv>\n\n\n\u003Ca name='Windows桌面应用'>\u003C\u002Fa>\n## Windows桌面应用\n\n程序在[WhisperDesktop](.\u002FWhisperDesktop)目录下，具体文档可以到该目录下的[README.md](WhisperDesktop\u002FREADME.md)查看。\n\n\u003Cbr\u002F>\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_d19e0ca67f94.jpg\" alt=\"Windows桌面应用效果图\">\n\u003C\u002Fdiv>\n\n\n\u003Ca name='打赏作者'>\u003C\u002Fa>\n## 打赏作者\n\n\u003Cbr\u002F>\n\u003Cdiv align=\"center\">\n\u003Cp>打赏一块钱支持一下作者\u003C\u002Fp>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_8fee2eae2436.jpg\" alt=\"打赏作者\" width=\"400\">\n\u003C\u002Fdiv>\n\n## 参考资料\n\n1. https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Fpeft\n2. https:\u002F\u002Fgithub.com\u002Fguillaumekln\u002Ffaster-whisper\n3. https:\u002F\u002Fgithub.com\u002Fggerganov\u002Fwhisper.cpp\n4. https:\u002F\u002Fgithub.com\u002FConst-me\u002FWhisper\n","# 微调Whisper语音识别模型和加速推理\n\n简体中文 | [English](.\u002FREADME_en.md)\n\n![python version](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.8+-orange.svg)\n![GitHub forks](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002Fyeyupiaoling\u002FWhisper-Finetune)\n![GitHub Repo stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fyeyupiaoling\u002FWhisper-Finetune)\n![GitHub](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fyeyupiaoling\u002FWhisper-Finetune)\n![支持系统](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F支持系统-Win\u002FLinux\u002FMAC-9cf)\n\n## 前言\n\nOpenAI在开源了号称其英文语音辨识能力已达到人类水准的Whisper项目，且它亦支持其它98种语言的自动语音辨识。Whisper所提供的自动语音识与翻译任务，它们能将各种语言的语音变成文本，也能将这些文本翻译成英文。本项目主要的目的是为了对Whisper模型使用Lora进行微调，**支持无时间戳数据训练，有时间戳数据训练、无语音数据训练**。目前开源了好几个模型，具体可以在[openai](https:\u002F\u002Fhuggingface.co\u002Fopenai)查看，下面列出了常用的几个模型。另外项目最后还支持CTranslate2加速推理和GGML加速推理，提示一下，加速推理支持直接使用Whisper原模型转换，并不一定需要微调。支持Windows桌面应用，Android应用和服务器部署。\n\n## 在线试用\n\n使用whisper-small微调后的模型：[在线演示](https:\u002F\u002Ftools.yeyupiaoling.cn\u002Fspeech\u002Fwhisper)\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_d2f79d9f3671.jpg\" alt=\"微信小程序\" width=\"200\">\u003Cbr\u002F>\n  微信小程序(whisper-small微调后的模型)\n\u003C\u002Fdiv>\n\n\n\n## 支持模型\n\n - openai\u002Fwhisper-tiny\n - openai\u002Fwhisper-base\n - openai\u002Fwhisper-small\n - openai\u002Fwhisper-medium\n - openai\u002Fwhisper-large\n - openai\u002Fwhisper-large-v2\n - openai\u002Fwhisper-large-v3\n - openai\u002Fwhisper-large-v3-turbo\n\n**欢迎大家扫码入知识星球（左）或者QQ群（右）讨论，知识星球里面提供项目的模型文件和博主其他相关项目的模型文件，也包括其他一些资源。**\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_d4ba433d3d87.jpg\" alt=\"知识星球\" width=\"400\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_645bdcaba681.jpg\" alt=\"QQ群\" width=\"400\">\n\u003C\u002Fdiv>\n\n\n**使用环境：**\n\n- Anaconda 3\n- Python 3.11\n- Pytorch 2.4.0\n- Ubuntu 18.04\n- GPU A100-PCIE-40GB*1\n\n\n### 视频讲解：[哔哩哔哩](https:\u002F\u002Fwww.bilibili.com\u002Fvideo\u002FBV1S8411o7rm\u002F)\n\n### 演示地址：[Web部署](https:\u002F\u002Fwhisper.yeyupiaoling.cn:8082\u002F)\n\n## 目录\n - [项目主要程序介绍](#项目主要程序介绍)\n - [模型测试表](#模型测试表)\n - [安装环境](#安装环境)\n - [准备数据](#准备数据)\n - [微调模型](#微调模型)\n   - [单卡训练](#单卡训练)\n   - [多卡训练](#多卡训练)\n - [合并模型](#合并模型)\n - [评估模型](#评估模型)\n - [预测](#预测)\n - [GUI界面预测](#GUI界面预测)\n- [Web部署](#Web部署)\n    - [接口文档](#接口文档)\n- [使用Ctranslate2格式模型预测](#使用Ctranslate2格式模型预测)\n- [Android部署](#Android部署)\n - [Windows桌面应用](#Windows桌面应用)\n - [打赏作者](#打赏作者)\n\n\u003Ca name='项目主要程序介绍'>\u003C\u002Fa>\n\n## 项目主要程序介绍\n\n1. `aishell.py`：制作AIShell训练数据。\n2. `finetune.py`：微调模型。\n3. `merge_lora.py`：合并Whisper和Lora的模型。\n4. `evaluation.py`：评估使用微调后的模型或者Whisper原模型。\n5. `infer.py`：使用调用微调后的模型或者transformers上的Whisper模型预测。\n6. `infer_ct2.py`：使用转换为CTranslate2的模型预测，主要参考这个程序用法。\n7. `infer_gui.py`：有GUI界面操作，使用调用微调后的模型或者transformers上的Whisper模型预测。\n8. `infer_server.py`：使用调用微调后的模型或者transformers上的Whisper模型部署到服务器端，提供给客户端调用。\n9. `convert-ggml.py`：转换模型为GGML格式模型，给Android应用或者Windows应用使用。\n10. `AndroidDemo`：该目录存放的是部署模型到Android的源码。\n11. `WhisperDesktop`：该目录存放的是Windows桌面应用的程序。\n\n\n\u003Ca name='模型测试表'>\u003C\u002Fa>\n\n## 模型测试表\n\n1. 原始模型字错率测试表。\n\n|          使用模型          |  指定语言   | aishell_test | test_net | test_meeting |  粤语测试集  |   模型获取   | \n|:----------------------:|:-------:|:------------:|:--------:|:------------:|:-------:|:--------:|\n|      whisper-tiny      | Chinese |   0.31898    | 0.40482  |   0.75332    |   N\u002FA   | 加入知识星球获取 |\n|      whisper-base      | Chinese |   0.22196    | 0.30404  |   0.50378    |   N\u002FA   | 加入知识星球获取 |\n|     whisper-small      | Chinese |   0.13897    | 0.18417  |   0.31154    |   N\u002FA   | 加入知识星球获取 |\n|     whisper-medium     | Chinese |   0.09538    | 0.13591  |   0.26669    |   N\u002FA   | 加入知识星球获取 |\n|     whisper-large      | Chinese |   0.08969    | 0.12933  |   0.23439    |   N\u002FA   | 加入知识星球获取 |\n|    whisper-large-v2    | Chinese |   0.08817    | 0.12332  |   0.26547    |   N\u002FA   | 加入知识星球获取 |\n|    whisper-large-v3    | Chinese |   0.08086    | 0.11452  |   0.19878    | 0.35301 | 加入知识星球获取 |\n| whisper-large-v3-turbo | Chinese |   0.08647    | 0.21225  |   0.20390    | 0.38069 | 加入知识星球获取 |\n\n\n2. 微调数据集后字错率测试表。\n\n|          使用模型          |   指定语言    |                            数据集                             | aishell_test | test_net | test_meeting |  粤语测试集  |   模型获取   |  \n|:----------------------:|:---------:|:----------------------------------------------------------:|:------------:|:--------:|:------------:|:-------:|:--------:|\n|      whisper-tiny      |  Chinese  | [AIShell](https:\u002F\u002Fopenslr.magicdatatech.com\u002Fresources\u002F33\u002F) |   0.13043    |  0.4463  |   0.57728    |   N\u002FA   | 加入知识星球获取 |\n|      whisper-base      |  Chinese  | [AIShell](https:\u002F\u002Fopenslr.magicdatatech.com\u002Fresources\u002F33\u002F) |   0.08999    | 0.33089  |   0.40713    |   N\u002FA   | 加入知识星球获取 |\n|     whisper-small      |  Chinese  | [AIShell](https:\u002F\u002Fopenslr.magicdatatech.com\u002Fresources\u002F33\u002F) |   0.05452    | 0.19831  |   0.24229    |   N\u002FA   | 加入知识星球获取 |\n|     whisper-medium     |  Chinese  | [AIShell](https:\u002F\u002Fopenslr.magicdatatech.com\u002Fresources\u002F33\u002F) |   0.03681    | 0.13073  |   0.16939    |   N\u002FA   | 加入知识星球获取 |\n|    whisper-large-v2    |  Chinese  | [AIShell](https:\u002F\u002Fopenslr.magicdatatech.com\u002Fresources\u002F33\u002F) |   0.03139    | 0.12201  |   0.15776    |   N\u002FA   | 加入知识星球获取 |\n|    whisper-large-v3    |  Chinese  | [AIShell](https:\u002F\u002Fopenslr.magicdatatech.com\u002Fresources\u002F33\u002F) |   0.03660    | 0.09835  |   0.13706    | 0.33464 | 加入知识星球获取 |\n| whisper-large-v3-turbo |  Chinese  | [AIShell](https:\u002F\u002Fopenslr.magicdatatech.com\u002Fresources\u002F33\u002F) |   0.03607    | 0.23038  |   0.35697    | 0.35697 | 加入知识星球获取 |\n|    whisper-large-v3    | Cantonese |                         粤语(含港式粤语)                          |   0.12443    | 0.32365  |   0.35911    | 0.02106 | 加入知识星球获取 |\n| whisper-large-v3-turbo | Cantonese |                         粤语(含港式粤语)                          |   0.14028    | 0.34483  |   0.38682    | 0.03255 | 加入知识星球获取 |\n|      whisper-tiny      |  Chinese  |     [WenetSpeech](.\u002Ftools\u002Fcreate_wenetspeech_data.py)      |   0.17711    | 0.24783  |   0.39226    |   N\u002FA   | 加入知识星球获取 |\n|      whisper-base      |  Chinese  |     [WenetSpeech](.\u002Ftools\u002Fcreate_wenetspeech_data.py)      |   0.14548    | 0.17747  |   0.30590    |   N\u002FA   | 加入知识星球获取 |\n|     whisper-small      |  Chinese  |     [WenetSpeech](.\u002Ftools\u002Fcreate_wenetspeech_data.py)      |   0.08484    | 0.11801  |   0.23471    |   N\u002FA   | 加入知识星球获取 |\n|     whisper-medium     |  Chinese  |     [WenetSpeech](.\u002Ftools\u002Fcreate_wenetspeech_data.py)      |   0.05861    | 0.08794  |   0.19486    |   N\u002FA   | 加入知识星球获取 |\n|    whisper-large-v2    |  Chinese  |     [WenetSpeech](.\u002Ftools\u002Fcreate_wenetspeech_data.py)      |   0.05443    | 0.08367  |   0.19087    |   N\u002FA   | 加入知识星球获取 |\n|    whisper-large-v3    |  Chinese  |     [WenetSpeech](.\u002Ftools\u002Fcreate_wenetspeech_data.py)      |   0.04947    | 0.10711  |   0.17429    | 0.60919 | 加入知识星球获取 |\n\n\n3. 微调其他语言数据集后字错率测试表。\n\n|          使用模型          | 实际语言 |  指定语言   |             数据集              |   测试集   |   模型获取   |  \n|:----------------------:|:----:|:-------:|:----------------------------:|:-------:|:--------:|\n|      whisper-tiny      | 维吾尔语 | Chinese | CommonVoice-Uyghur + THUYG20 | 0.06798 | 加入知识星球获取 |\n|      whisper-base      | 维吾尔语 | Chinese | CommonVoice-Uyghur + THUYG20 | 0.04690 | 加入知识星球获取 |\n|     whisper-small      | 维吾尔语 | Chinese | CommonVoice-Uyghur + THUYG20 | 0.02855 | 加入知识星球获取 |\n|     whisper-medium     | 维吾尔语 | Chinese | CommonVoice-Uyghur + THUYG20 | 0.01669 | 加入知识星球获取 |\n|    whisper-large-v2    | 维吾尔语 | Chinese | CommonVoice-Uyghur + THUYG20 | 0.01480 | 加入知识星球获取 |\n| whisper-large-v3-turbo | 维吾尔语 | Chinese | CommonVoice-Uyghur + THUYG20 | 0.01744 | 加入知识星球获取 |\n\n**说明：**\n1. 测试过指定语音为`Chinese`和`uzbek`，训练tiny模型的字错率分别是：0.06798和0.0685，它们差距不大，所上面使用都是指定语言为`Chinese`。\n2. 使用`CommonVoice-Uyghur`的测试集作为本项目测试集，其余的和THUYG20全部作为训练集。\n\n\n4. 推理速度测试表，使用GPU为GTX3090（24G），音频为`test_long.wav`，时长为3分钟整，测试程序在`tools\u002Frun_compute.sh`。\n\n|                                   加速方式                                    |  tiny  |  base  | small  | medium  | large-v2 | large-v3 | large-v3-turbo |\n|:-------------------------------------------------------------------------:|:------:|:------:|:------:|:-------:|:--------:|:--------:|:--------------:|\n|                  Transformers (`fp16` + `batch_size=16`)                  | 1.458s | 1.671s | 2.331s | 11.071s |  4.779s  | 12.826s  |     1.594s     |\n|            Transformers (`fp16` + `batch_size=16` + `Compile`)            | 1.477s | 1.675s | 2.357s | 11.003s |  4.799s  | 12.643s  |     1.581s     |\n|       Transformers (`fp16` + `batch_size=16` + `BetterTransformer`)       | 1.461s | 1.676s | 2.301s | 11.062s |  4.608s  | 12.505s  |     1.809s     |\n|       Transformers (`fp16` + `batch_size=16` + `Flash Attention 2`)       | 1.436s | 1.630s | 2.258s | 10.533s |  4.344s  | 11.651s  |     1.651s     |\n| Transformers (`fp16` + `batch_size=16` + `Compile` + `BetterTransformer`) | 1.442s | 1.686s | 2.277s | 11.000s |  4.543s  | 12.592s  |     1.816s     |\n| Transformers (`fp16` + `batch_size=16` + `Compile` + `Flash Attention 2`) | 1.409s | 1.643s | 2.220s | 10.390s |  4.377s  | 11.703s  |     1.657s     |\n|                 Faster Whisper (`fp16` + `beam_size=1` )                  | 2.179s | 1.492s | 2.327s | 3.752s  |  5.677s  | 31.541s  |       \u002F        |\n|                 Faster Whisper (`8-bit` + `beam_size=1` )                 | 2.609s | 1.728s | 2.744s | 4.688s  |  6.571s  | 29.307s  |       \u002F        |\n\n5. 经过处理的数据列表。\n\n|  数据列表处理方式  | AiShell  | WenetSpeech | \n|:----------:|:--------:|:-----------:|\n|   添加标点符号   | 加入知识星球获取 |  加入知识星球获取   |\n| 添加标点符号和时间戳 | 加入知识星球获取 |  加入知识星球获取   |\n\n**重要说明：**\n1. 在评估的时候移除模型输出的标点符号，并把繁体中文转成简体中文。\n2. `aishell_test`为AIShell的测试集，`test_net`和`test_meeting`为WenetSpeech的测试集。\n3. 测试速度的音频为`dataset\u002Ftest_long.wav`，时长为3分钟整。\n4. 训练数据使用的是带标点符号的数据，字错率高一点。\n5. 微调AiShell数据不带时间戳，微调WenetSpeech带时间戳。\n\n\u003Ca name='安装环境'>\u003C\u002Fa>\n\n## 安装环境\n\n1. 首先安装的是Pytorch的GPU版本，如果已经安装过了，请跳过。\n```shell\npip3 install torch torchvision --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n```\n\n2. 安装所需的依赖库。\n\n```shell\npython -m pip install -r requirements.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n\u003Ca name='准备数据'>\u003C\u002Fa>\n\n## 准备数据\n\n训练的数据集如下，是一个jsonlines的数据列表，也就是每一行都是一个JSON数据，数据格式如下。本项目提供了一个制作AIShell数据集的程序`aishell.py`，执行这个程序可以自动下载并生成如下列格式的训练集和测试集，**注意：** 这个程序可以通过指定AIShell的压缩文件来跳过下载过程的，如果直接下载会非常慢，可以使用一些如迅雷等下载器下载该数据集，然后通过参数`--filepath`指定下载的压缩文件路径，如`\u002Fhome\u002Ftest\u002Fdata_aishell.tgz`。\n\n**小提示：**\n1. 如果不使用时间戳训练，可以不包含`sentences`字段的数据。\n2. 如果只有一种语言的数据，可以不包含`language`字段数据。\n3. 如果训练空语音数据，`sentences`字段为`[]`，`sentence`字段为`\"\"`，`language`字段可以不存在。\n4. 数据可以不包含标点符号，但微调的模型会损失添加符号能力。\n\n```json\n{\n   \"audio\": {\n      \"path\": \"dataset\u002F0.wav\"\n   },\n   \"sentence\": \"近几年，不但我用书给女儿压岁，也劝说亲朋不要给女儿压岁钱，而改送压岁书。\",\n   \"language\": \"Chinese\",\n   \"sentences\": [\n      {\n         \"start\": 0,\n         \"end\": 1.4,\n         \"text\": \"近几年，\"\n      },\n      {\n         \"start\": 1.42,\n         \"end\": 8.4,\n         \"text\": \"不但我用书给女儿压岁，也劝说亲朋不要给女儿压岁钱，而改送压岁书。\"\n      }\n   ],\n   \"duration\": 7.37\n}\n```\n\n\u003Ca name='微调模型'>\u003C\u002Fa>\n\n## 微调模型\n\n准备好数据之后，就可以开始微调模型了。训练最重要的两个参数分别是，`--base_model`指定微调的Whisper模型，这个参数值需要在[HuggingFace](https:\u002F\u002Fhuggingface.co\u002Fopenai)存在的，这个不需要提前下载，启动训练时可以自动下载，当然也可以提前下载，那么`--base_model`指定就是路径，同时`--local_files_only`设置为True。第二个`--output_path`是是训练时保存的Lora检查点路径，因为我们使用Lora来微调模型。如果想存足够的话，最好将`--use_8bit`设置为False，这样训练速度快很多。其他更多的参数请查看这个程序。\n\n\u003Ca name='单卡训练'>\u003C\u002Fa>\n\n### 单卡训练\n\n单卡训练命令如下，Windows系统可以不添加`CUDA_VISIBLE_DEVICES`参数。\n```shell\nCUDA_VISIBLE_DEVICES=0 python finetune.py --base_model=openai\u002Fwhisper-tiny --output_dir=output\u002F\n```\n\n\u003Ca name='多卡训练'>\u003C\u002Fa>\n\n### 多卡训练\n\n多卡训练有两种方法，分别是torchrun和accelerate，开发者可以根据自己的习惯使用对应的方式。\n\n1. 使用torchrun启动多卡训练，命令如下，通过`--nproc_per_node`指定使用的显卡数量。\n```shell\ntorchrun --nproc_per_node=2 finetune.py --base_model=openai\u002Fwhisper-tiny --output_dir=output\u002F\n```\n\n2. 使用accelerate启动多卡训练，如果是第一次使用accelerate，要配置训练参数，方式如下。\n\n首先配置训练参数，过程是让开发者回答几个问题，基本都是默认就可以，但有几个参数需要看实际情况设置。\n```shell\naccelerate config\n```\n\n大概过程就是这样：\n```\n--------------------------------------------------------------------In which compute environment are you running?\nThis machine\n--------------------------------------------------------------------Which type of machine are you using?\nmulti-GPU\nHow many different machines will you use (use more than 1 for multi-node training)? [1]:\nDo you wish to optimize your script with torch dynamo?[yes\u002FNO]:\nDo you want to use DeepSpeed? [yes\u002FNO]:\nDo you want to use FullyShardedDataParallel? [yes\u002FNO]:\nDo you want to use Megatron-LM ? [yes\u002FNO]: \nHow many GPU(s) should be used for distributed training? [1]:2\nWhat GPU(s) (by id) should be used for training on this machine as a comma-seperated list? [all]:\n--------------------------------------------------------------------Do you wish to use FP16 or BF16 (mixed precision)?\nfp16\naccelerate configuration saved at \u002Fhome\u002Ftest\u002F.cache\u002Fhuggingface\u002Faccelerate\u002Fdefault_config.yaml\n```\n\n配置完成之后，可以使用以下命令查看配置。\n```shell\naccelerate env\n```\n\n开始训练命令如下。\n```shell\naccelerate launch finetune.py --base_model=openai\u002Fwhisper-tiny --output_dir=output\u002F\n```\n\n\n输出日志如下：\n```shell\n{'loss': 0.9098, 'learning_rate': 0.000999046843662503, 'epoch': 0.01}                                                     \n{'loss': 0.5898, 'learning_rate': 0.0009970611012927184, 'epoch': 0.01}                                                    \n{'loss': 0.5583, 'learning_rate': 0.0009950753589229333, 'epoch': 0.02}                                                  \n{'loss': 0.5469, 'learning_rate': 0.0009930896165531485, 'epoch': 0.02}                                          \n{'loss': 0.5959, 'learning_rate': 0.0009911038741833634, 'epoch': 0.03}\n```\n\n\u003Ca name='合并模型'>\u003C\u002Fa>\n\n## 合并模型\n\n微调完成之后会有两个模型，第一个是Whisper基础模型，第二个是Lora模型，需要把这两个模型合并之后才能之后的操作。这个程序只需要传递两个参数，`--lora_model`指定的是训练结束后保存的Lora模型路径，其实就是检查点文件夹路径，第二个`--output_dir`是合并后模型的保存目录。\n```shell\npython merge_lora.py --lora_model=output\u002Fwhisper-tiny\u002Fcheckpoint-best\u002F --output_dir=models\u002F\n```\n\n\u003Ca name='评估模型'>\u003C\u002Fa>\n\n## 评估模型\n\n执行以下程序进行评估模型，最重要的两个参数分别是。第一个`--model_path`指定的是合并后的模型路径，同时也支持直接使用Whisper原模型，例如直接指定`openai\u002Fwhisper-large-v2`，第二个是`--metric`指定的是评估方法，例如有字错率`cer`和词错率`wer`。**提示：** M没有微调的模型，可能输出带有标点符号，影响准确率。其他更多的参数请查看这个程序。\n```shell\npython evaluation.py --model_path=models\u002Fwhisper-tiny-finetune --metric=cer\n```\n\n\u003Ca name='预测'>\u003C\u002Fa>\n\n## 预测\n\n执行以下程序进行语音识别，这个使用transformers直接调用微调后的模型或者Whisper原模型预测，支持Pytorch2.0的编译器加速、FlashAttention2加速、BetterTransformer加速。第一个`--audio_path`参数指定的是要预测的音频路径。第二个`--model_path`指定的是合并后的模型路径，同时也支持直接使用Whisper原模型，例如直接指定`openai\u002Fwhisper-large-v2`。其他更多的参数请查看这个程序。\n```shell\npython infer.py --audio_path=dataset\u002Ftest.wav --model_path=models\u002Fwhisper-tiny-finetune\n```\n\n\u003Ca name='GUI界面预测'>\u003C\u002Fa>\n\n## GUI界面预测\n\n`--model_path`指定Transformers模型。其他更多的参数请查看这个程序。\n\n```shell\npython infer_gui.py --model_path=models\u002Fwhisper-tiny-finetune\n```\n\n启动后界面如下：\n\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_f62ed786f762.jpg\" alt=\"GUI界面\" width=\"600\"\u002F>\n\u003C\u002Fdiv>\n\n\u003Ca name='Web部署'>\u003C\u002Fa>\n\n## Web部署\n\n`--host`指定服务启动的地址，这里设置为`0.0.0.0`，即任何地址都可以访问。`--port`指定使用的端口号。`--model_path`指定的Transformers模型。`--num_workers`指定是使用多少个线程并发推理，这在Web部署上很重要，当有多个并发访问是可以同时推理。其他更多的参数请查看这个程序。\n\n```shell\npython infer_server.py --host=0.0.0.0 --port=5000 --model_path=models\u002Fwhisper-tiny-finetune --num_workers=2\n```\n\n### 接口文档\n\n目前提供识别接口`\u002Frecognition`，接口参数如下。\n\n|     字段     | 是否必须 |   类型   |    默认值     |              说明               |\n|:----------:|:----:|:------:|:----------:|:-----------------------------:|\n|   audio    |  是   |  File  |            |           要识别的音频文件            |\n| to_simple  |  否   |  int   |     1      |            是否繁体转简体            |\n| remove_pun |  否   |  int   |     0      |           是否移除标点符号            |\n|    task    |  否   | String | transcribe | 识别任务类型，支持transcribe和translate |\n|  language  |  否   | String |     zh     |    设置语言，简写，如果为None则自动检测语言     |\n\n\n返回结果：\n\n|   字段    |  类型  |      说明       |\n|:-------:|:----:|:-------------:|\n| results | list |    分割的识别结果    |\n| +result | str  |   每片分隔的文本结果   |\n| +start  | int  | 每片分隔的开始时间，单位秒 |\n|  +end   | int  | 每片分隔的结束时间，单位秒 |\n|  code   | int  |  错误码，0即为成功识别  |\n\n示例如下：\n```json\n{\n  \"results\": [\n    {\n      \"result\": \"近几年,不但我用书给女儿压碎,也全说亲朋不要给女儿压碎钱,而改送压碎书。\",\n      \"start\": 0,\n      \"end\": 8\n    }\n  ],\n  \"code\": 0\n}\n```\n\n为了方便理解，这里提供了调用Web接口的Python代码，下面的是`\u002Frecognition`的调用方式。\n```python\nimport requests\n\nresponse = requests.post(url=\"http:\u002F\u002F127.0.0.1:5000\u002Frecognition\", \n                         files=[(\"audio\", (\"test.wav\", open(\"dataset\u002Ftest.wav\", 'rb'), 'audio\u002Fwav'))],\n                         json={\"to_simple\": 1, \"remove_pun\": 0, \"language\": \"zh\", \"task\": \"transcribe\"}, timeout=20)\nprint(response.text)\n```\n\n提供的测试页面如下：\n\n首页`http:\u002F\u002F127.0.0.1:5000\u002F` 的页面如下：\n\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_8338deb67dd7.jpg\" alt=\"首页\" width=\"600\"\u002F>\n\u003C\u002Fdiv>\n\n文档页面`http:\u002F\u002F127.0.0.1:5000\u002Fdocs` 的页面如下：\n\n\n\u003Ca name='使用Ctranslate2格式模型预测'>\u003C\u002Fa>\n\n## 使用Ctranslate2格式模型预测\n\n这里提供了一个CTranslate2加速的方式，尽管使用Transformers的pipeline推理速度已经很快了，首先要转换模型，把合并后的模型转换为CTranslate2模型。如下命令，`--model`参数指定的是合并后的模型路径，同时也支持直接使用Whisper原模型，例如直接指定`openai\u002Fwhisper-large-v2`。`--output_dir`参数指定的是转换后的CTranslate2模型路径，`--quantization`参数指定的是量化模型大小，不希望量化模型的可以直接去掉这个参数。\n```shell\nct2-transformers-converter --model models\u002Fwhisper-tiny-finetune --output_dir models\u002Fwhisper-tiny-finetune-ct2 --copy_files tokenizer.json preprocessor_config.json --quantization float16\n```\n\n执行以下程序进行语音识别，`--audio_path`参数指定的是要预测的音频路径。`--model_path`指定的是转换后的CTranslate2模型。其他更多的参数请查看这个程序。\n```shell\npython infer_ct2.py --audio_path=dataset\u002Ftest.wav --model_path=models\u002Fwhisper-tiny-finetune-ct2\n```\n\n输出结果如下：\n```shell\n-----------  Configuration Arguments -----------\naudio_path: dataset\u002Ftest.wav\nmodel_path: models\u002Fwhisper-tiny-finetune-ct2\nlanguage: zh\nuse_gpu: True\nuse_int8: False\nbeam_size: 10\nnum_workers: 1\nvad_filter: False\nlocal_files_only: True\n------------------------------------------------\n[0.0 - 8.0]：近几年,不但我用书给女儿压碎,也全说亲朋不要给女儿压碎钱,而改送压碎书。\n```\n\n\n\u003Ca name='Android部署'>\u003C\u002Fa>\n## 安卓部署\n\n安装部署的源码在[AndroidDemo](.\u002FAndroidDemo)目录下，具体文档可以到该目录下的[README.md](AndroidDemo\u002FREADME.md)查看。\n\u003Cbr\u002F>\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_69382974f36b.jpg\" alt=\"安卓效果图\" width=\"200\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_2bdee171d0e0.jpg\" alt=\"安卓效果图\" width=\"200\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_cb0f29398dbe.jpg\" alt=\"安卓效果图\" width=\"200\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_0b6b4315c42a.jpg\" alt=\"安卓效果图\" width=\"200\">\n\u003C\u002Fdiv>\n\n\n\u003Ca name='Windows桌面应用'>\u003C\u002Fa>\n## Windows桌面应用\n\n程序在[WhisperDesktop](.\u002FWhisperDesktop)目录下，具体文档可以到该目录下的[README.md](WhisperDesktop\u002FREADME.md)查看。\n\n\u003Cbr\u002F>\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_d19e0ca67f94.jpg\" alt=\"Windows桌面应用效果图\">\n\u003C\u002Fdiv>\n\n\n\u003Ca name='打赏作者'>\u003C\u002Fa>\n## 捐赠作者\n\n\u003Cbr\u002F>\n\u003Cdiv align=\"center\">\n\u003Cp>捐赠一块钱支持一下作者\u003C\u002Fp>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_readme_8fee2eae2436.jpg\" alt=\"捐赠作者\" width=\"400\">\n\u003C\u002Fdiv>\n\n## 参考资料\n\n1. https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Fpeft\n2. https:\u002F\u002Fgithub.com\u002Fguillaumekln\u002Ffaster-whisper\n3. https:\u002F\u002Fgithub.com\u002Fggerganov\u002Fwhisper.cpp\n4. https:\u002F\u002Fgithub.com\u002FConst-me\u002FWhisper","# Whisper-Finetune 快速上手指南\n\nWhisper-Finetune 是一个基于 OpenAI Whisper 模型的微调工具，支持使用 LoRA 技术对语音识别模型进行高效微调（支持无时间戳、有时间戳及无语音数据训练），并提供 CTranslate2 和 GGML 加速推理方案。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**: Windows \u002F Linux \u002F macOS\n- **Python**: 3.8+ (推荐 3.11)\n- **GPU**: 支持 CUDA 的 NVIDIA 显卡 (可选，用于加速训练和推理)\n- **显存建议**: 微调大模型建议 16GB+ 显存 (如 A100, RTX 3090\u002F4090)\n\n### 前置依赖\n本项目依赖 PyTorch GPU 版本。请确保已安装适配你 CUDA 版本的 PyTorch。\n\n## 安装步骤\n\n### 1. 安装 PyTorch (GPU 版本)\n如果尚未安装 PyTorch，请使用以下命令安装（以 CUDA 12.8 为例，其他版本请参考 PyTorch 官网）：\n```shell\npip3 install torch torchvision --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n```\n\n### 2. 安装项目依赖\n克隆项目后，进入目录并使用国内镜像源安装依赖：\n```shell\npython -m pip install -r requirements.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n## 基本使用\n\n### 1. 准备数据\n训练数据需整理为 `jsonlines` 格式（每行一个 JSON 对象）。项目提供了 `aishell.py` 脚本可自动下载并转换 AIShell 数据集。\n\n**数据格式示例 (`data.jsonl`)：**\n```json\n{\n   \"audio\": {\"path\": \"dataset\u002F0.wav\"},\n   \"sentence\": \"近几年，不但我用书给女儿压岁，也劝说亲朋不要给女儿压岁钱，而改送压岁书。\",\n   \"language\": \"Chinese\",\n   \"sentences\": [\n      {\"start\": 0, \"end\": 1.4, \"text\": \"近几年，\"},\n      {\"start\": 1.42, \"end\": 8.4, \"text\": \"不但我用书给女儿压岁，也劝说亲朋不要给女儿压岁钱，而改送压岁书。\"}\n   ],\n   \"duration\": 7.37\n}\n```\n> **提示**：若不使用时间戳训练，可省略 `sentences` 字段；若仅单语言，可省略 `language` 字段。\n\n### 2. 开始微调 (单卡)\n使用 `finetune.py` 启动训练。以下命令以微调 `whisper-tiny` 模型为例，结果保存在 `output\u002F` 目录：\n\n```shell\nCUDA_VISIBLE_DEVICES=0 python finetune.py --base_model=openai\u002Fwhisper-tiny --output_dir=output\u002F\n```\n\n*   `--base_model`: 指定 HuggingFace 上的模型名称或本地路径。\n*   `--output_dir`: LoRA 权重保存路径。\n*   **多卡训练**: 可使用 `torchrun --nproc_per_node=2 finetune.py ...` 或配置 `accelerate config` 后使用 `accelerate launch`。\n\n### 3. 模型预测\n微调完成后，可直接使用 `infer.py` 进行推理测试：\n\n```shell\npython infer.py --model_path=output\u002Fcheckpoint-xxx --audio_path=dataset\u002Ftest.wav\n```\n\n### 4. 加速推理 (可选)\n为了获得更快的推理速度，可将模型转换为 CTranslate2 格式：\n```shell\npython convert_ct2.py --model_path=output\u002Fcheckpoint-xxx --output_dir=ct2_model\npython infer_ct2.py --model_path=ct2_model --audio_path=dataset\u002Ftest.wav\n```","某智能客服团队需要将大量带有浓厚地方口音和特定行业术语的会议录音，快速转化为可检索的结构化文本档案。\n\n### 没有 Whisper-Finetune 时\n- **识别准确率低下**：原生 Whisper 模型对非标准普通话及垂直领域专有名词（如“算力调度”、“边缘节点”）识别错误率高，后期人工校对耗时极长。\n- **数据准备门槛高**：团队手头仅有大量无时间戳的纯文本转录稿，因缺乏对齐的时间轴数据，无法直接用于主流模型的监督微调训练。\n- **部署灵活性差**：训练好的模型体积大、推理慢，难以集成到离线环境的 Windows 坐席桌面端或移动巡检设备上，必须依赖高成本云端 API。\n- **资源浪费严重**：全量微调需要巨大的显存开销，普通单卡服务器难以负荷，导致迭代周期被拉长。\n\n### 使用 Whisper-Finetune 后\n- **定制识别精度跃升**：利用 LoRA 技术针对行业语料进行微调，即使在没有时间戳数据的情况下也能成功训练，使特定术语和口音的字错率显著降低。\n- **数据利用最大化**：直接支持使用无时间戳的旧有文本数据进行训练，盘活了历史积累的非结构化资料，无需额外投入人力标注时间轴。\n- **多端高效部署**：通过内置的 CTranslate2 和 GGML 加速功能，将模型压缩并转换为轻量格式，顺利部署至 Windows 桌面应用和 Android 手持终端，实现低延迟离线识别。\n- **训练成本大幅降低**：支持单卡甚至消费级显卡进行高效微调，大幅降低了硬件门槛，让模型迭代从“周级”缩短为“小时级”。\n\nWhisper-Finetune 通过降低数据门槛和加速多端部署，让企业能以极低成本低门槛地拥有懂业务、跑得快的专属语音识别模型。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fyeyupiaoling_Whisper-Finetune_f62ed786.jpg","yeyupiaoling","夜雨飘零","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fyeyupiaoling_4a486346.png","博客：https:\u002F\u002Fyeyupiaoling.cn",null,"https:\u002F\u002Fgithub.com\u002Fyeyupiaoling",[79,83,87,91,95,99,103,106,110],{"name":80,"color":81,"percentage":82},"C","#555555",73.6,{"name":84,"color":85,"percentage":86},"C++","#f34b7d",14.7,{"name":88,"color":89,"percentage":90},"Python","#3572A5",7.7,{"name":92,"color":93,"percentage":94},"Kotlin","#A97BFF",2.5,{"name":96,"color":97,"percentage":98},"JavaScript","#f1e05a",0.6,{"name":100,"color":101,"percentage":102},"Shell","#89e051",0.4,{"name":104,"color":105,"percentage":102},"HTML","#e34c26",{"name":107,"color":108,"percentage":109},"Makefile","#427819",0.1,{"name":111,"color":112,"percentage":109},"CSS","#663399",1209,216,"2026-04-18T06:57:18","Apache-2.0","Windows, Linux, macOS","必需（训练阶段）。作者测试环境为 NVIDIA A100 (40GB)，推理测试使用 GTX 3090 (24GB)。安装命令示例指定 CUDA 12.8 (cu128)。显存需求取决于模型大小：Tiny\u002FBase 模型需较少显存，Large 系列模型建议 24GB+ 显存以支持批量训练或高效推理。","未说明",{"notes":121,"python":122,"dependencies":123},"1. 项目支持单卡和多卡（torchrun\u002Faccelerate）训练。2. 核心功能是基于 LoRA 微调 Whisper 模型，支持无时间戳、有时间戳及无语音数据训练。3. 推理阶段支持多种加速方式，包括 CTranslate2、GGML、Flash Attention 2 和 BetterTransformer。4. 提供 Windows 桌面应用、Android 部署及 Web 服务器部署方案。5. 首次运行会自动从 HuggingFace 下载模型，也可配置本地路径离线运行。","3.8+ (作者测试环境为 Python 3.11)",[124,125,126,127,128,129,130],"torch>=2.4.0","transformers","accelerate","datasets","peft","ctranslate2","faster-whisper",[132,14,15,35],"音频",[134,129,135,136,137,138,125,139,140,141,142],"asr","huggingface","whisper","lora","speech-recognition","chinese","pytorch","android","web","2026-03-27T02:49:30.150509","2026-04-19T15:41:26.770489",[146,151,156,161,166,171,176,181],{"id":147,"question_zh":148,"answer_zh":149,"source_url":150},42589,"微调 Whisper Large v3 模型后识别效果变差怎么办？","目前该项目中只有微调 Large v3 模型会出现识别效果变差的问题，其他模型（如 Large v2）微调均正常。建议暂时使用 Large v2 模型进行微调，直到该问题得到修复。","https:\u002F\u002Fgithub.com\u002Fyeyupiaoling\u002FWhisper-Finetune\u002Fissues\u002F43",{"id":152,"question_zh":153,"answer_zh":154,"source_url":155},42590,"微调后的模型在推理长音频时只输出前几句话或截断，如何解决？","这是因为旧版本代码对长音频分割支持不完善。目前项目已支持微调带时间戳的数据，使用最新代码进行微调后，模型应该不会出现只分割 30 秒或丢失后续内容的问题。请确保使用最新版本的代码库。","https:\u002F\u002Fgithub.com\u002Fyeyupiaoling\u002FWhisper-Finetune\u002Fissues\u002F5",{"id":157,"question_zh":158,"answer_zh":159,"source_url":160},42591,"微调后模型语言检测不准（如中文音频被识别为英文），如何处理？","微调特定语言数据集后，模型的语言 ID 识别能力可能会下降。解决方案是在推理（infer）时手动指定语言参数（例如设置 `language='zh'`）。如果场景中包含多种未知语言，可能需要尝试不指定语言或使用原始未微调模型进行语言检测，但这取决于具体应用场景。另外，确认是否误用了翻译任务而非转录任务。","https:\u002F\u002Fgithub.com\u002Fyeyupiaoling\u002FWhisper-Finetune\u002Fissues\u002F88",{"id":162,"question_zh":163,"answer_zh":164,"source_url":165},42592,"如何通过微调让模型支持特定领域的专有名词？需要多少数据？","可以通过将包含专有名词的领域数据添加到现有的开源数据集中构成新数据集进行微调来实现。关于数据量，虽然没有固定标准，但通常需要根据领域复杂度调整。对于数据加载过程中出现的 `zipfile.BadZipFile` 错误，尝试将数据加载器的 `num_workers` 参数设置为 0 可以解决多进程导致的文件读取异常问题。","https:\u002F\u002Fgithub.com\u002Fyeyupiaoling\u002FWhisper-Finetune\u002Fissues\u002F7",{"id":167,"question_zh":168,"answer_zh":169,"source_url":170},42593,"训练数据中包含正常标注音频和空音频（背景音），JSON 格式应该如何编写？","正常标注音频格式保持不变。对于空音频或纯背景音数据，其对应的 `sentences` 字段应设置为空列表 `[]`，而不是空字符串。例如：`{\"audio\": {\"path\": \"dataset\u002Fsilence.wav\"}, \"sentences\": []}`。请参考项目文档中的具体示例。","https:\u002F\u002Fgithub.com\u002Fyeyupiaoling\u002FWhisper-Finetune\u002Fissues\u002F39",{"id":172,"question_zh":173,"answer_zh":174,"source_url":175},42594,"微调后模型输出出现大量重复词、语气词或结巴现象，原因是什么？","这可能与训练数据的清洗程度或模型过拟合有关。建议检查训练数据中是否包含过多的噪声或非规范文本。此外，可以尝试使用项目的最新代码重新运行，因为新版本可能包含了针对此类问题的优化或修复。如果问题依旧，考虑增加数据多样性或使用正则化手段。","https:\u002F\u002Fgithub.com\u002Fyeyupiaoling\u002FWhisper-Finetune\u002Fissues\u002F15",{"id":177,"question_zh":178,"answer_zh":179,"source_url":180},42595,"如何在 Ubuntu 20.04 环境下解决训练无法运行的问题？","首先检查模型文件是否下载完整且正确。其次，确认 PyTorch 和 Transformers 库的版本是否与项目要求兼容。如果是构建模型阶段出错，请尝试重新安装依赖包或创建一个新的虚拟环境，并确保显卡驱动和 CUDA 版本匹配。具体报错信息需结合截图进一步排查。","https:\u002F\u002Fgithub.com\u002Fyeyupiaoling\u002FWhisper-Finetune\u002Fissues\u002F66",{"id":182,"question_zh":183,"answer_zh":184,"source_url":185},42596,"使用该项目脚本训练时显存占用过高，Batch Size 只能设很小，如何优化？","可以通过启用量化技术来降低显存占用。例如，改用 8 位量化模型可以将显存占用降低 5-6 倍，从而允许更大的 Batch Size。虽然量化可能会对模型整体性能产生轻微影响，但在大多数场景下是可以接受的权衡。项目中提供了转换 GGML 模型格式的代码，也可考虑使用更高效的推理格式。","https:\u002F\u002Fgithub.com\u002Fyeyupiaoling\u002FWhisper-Finetune\u002Fissues\u002F30",[]]