跳转到主要内容

介绍

转录服务在各种行业中被用来将音频或视频内容转换为文本。从转录服务中受益的一些行业包括:

医疗保健专业人员

医疗转录在医疗保健行业发挥着至关重要的作用,可以高精度地转录医生的记录并维护医疗记录。

法律/法律行业

律师事务所、律师助理、法庭记者和律师将转录服务用于法律目的,如转录证词和法庭听证会。

企业

企业使用转录服务将董事会会议、会议、采访和其他活动转录成无错误的转录本,以便更好地决策和将来参考。

媒体与大众传播

媒体专业人员,包括记者、视频制作人、电影制作人和文案,使用转录服务为文章、新闻稿和字幕转录采访和其他内容。

数字营销

数字营销人员和内容战略家使用转录师将播客、网络研讨会和其他材料转换为文本,用于博客文章和内容创作。

其他行业

其他受益于转录服务的行业包括市场研究人员、视频和音频播客、自由撰稿人、作家和主讲人。

正如我们所看到的,有相当多的领域使用转录技术。因此,提供快速转录速度的解决方案需求量很大。在这篇文章中,我们将研究OpenaAI的Whisper Large V3用于快速转录,我们还将通过修改变压器管道中的各种参数,逐步将转录速度提高到极高的极限。

在E2E Cloud上启动

GPU要求

由于我们将引入Flash Attention(一种旨在加快变压器管道速度的算法),我们将使用A100 GPU,因为它们与Flash Attention兼容。为此,我们将使用E2E提供的云计算服务。让我们在E2E平台上为NVIDIA A100 GPU创建一个GPU节点。

确保在启用CUDA-11的情况下选择第二个选项,因为我们的实验需要它。

下载所需的库

!pip install -q --upgrade torch torchvision torchaudio
!pip install -q git+https://github.com/huggingface/transformers
!pip install -q accelerate optimum
!pip install -q ipython-autotime

!sudo apt install ffmpeg

然后,让我们将扩展自动时间加载到Jupyter笔记本上,以跟踪我们细胞的运行时间。

%load_ext autotime

接下来,导入所需的库。

import torch
from transformers import pipeline

下载测试音频文件

在本文中,我们将使用Sam Altman和Lex Fridman之间的播客音频。音频长达2.5小时。它可以使用以下命令从我们创建的“拥抱脸”数据集中下载。

!wget https://huggingface.co/datasets/reach-vb/random-audios/resolve/main/sam_altman_lex_podcast_367.flac

案例1:使用基础变压器模型

对于第一种情况,我们将只使用我们的基本转换器模型,而不对参数进行任何调整,然后查看转录时间。

pipe = pipeline("automatic-speech-recognition",
                "openai/whisper-large-v2",
                device="cuda:0")

outputs = pipe("sam_altman_lex_podcast_367.flac",
               chunk_length_s=30)


所以这花了19分46秒来转录整个音频。

输出前200个单词进行质量检查:

outputs["text"][:200]

案例2:分批

transformer中的批处理是指将多个输入序列分组为一个批以供模型处理的过程。这样做是为了提高模型在训练和推理过程中的效率。

outputs = pipe("sam_altman_lex_podcast_367.flac",
               chunk_length_s=30,
               batch_size=8)


用这种方法,转录时间下降到5分32秒,大约是我们原始时间的28%。

输出[“文本”][:200]

案例3:半精度

pipe = pipeline("automatic-speech-recognition",
                "openai/whisper-large-v2",
                torch_dtype=torch.float16,
                device="cuda:0")

在上面的代码中,torch.foat16指的是半精度浮点格式,也称为FP16。与FP32或FP64等高精度格式相比,半精度减少了神经网络的内存使用,允许训练和部署更大的网络,并在更短的时间内传输数据。

outputs = pipe("sam_altman_lex_podcast_367.flac",
               chunk_length_s=30,
               batch_size=16,
               return_timestamps=True)


输出[“文本”][:200]

案例4:BetterTransformer

当使用to_betterttransformer()将模型转换为BetterTransformer时,它受益于Transformers注意力机制的加速实现,从而更快地进行推理并提高内存效率。

pipe = pipeline("automatic-speech-recognition",
                "openai/whisper-large-v2",
                torch_dtype=torch.float16,
                device="cuda:0")

pipe.model = pipe.model.to_bettertransformer()

outputs = pipe("sam_altman_lex_podcast_367.flac",
               chunk_length_s=30,
               batch_size=16,
               return_timestamps=True)
               


案例5:更好的变压器+更大的批量

较大的批量大小可以通过跨示例并行化操作来提供计算效率。这可以加快训练,因为同时执行更多的计算。


案例6:引起注意/Flash Attention     

Flash Attention是一种注意力算法,用于更有效地减少内存瓶颈和缩放基于转换器的模型,从而实现更快的训练和推理。它利用了平铺和重新计算等经典技术,显著提高了速度,大幅减少了内存使用。

首先安装以下库:

pip uninstall -y ninja && pip install ninja
pip install wheel setuptools
pip install flash-attn --no-build-isolation

在使用Flash Attention之前,您必须重新启动内核。所以请这样做。

pipe = pipeline("automatic-speech-recognition",
                "openai/whisper-large-v2",
                torch_dtype=torch.float16,
                model_kwargs={"use_flash_attention_2": True},
                device="cuda:0")

outputs = pipe("sam_altman_lex_podcast_367.flac",
               chunk_length_s=30,
               batch_size=24,
               return_timestamps=True)


输出[“文本”][:200]

结论

下表列出了我们使用的不同方法的转录时间:


正如我们所看到的,转录时间逐渐减少,直到我们达到2分2秒的疯狂快速转录时间。

工具书类

https://github.com/Vaibhavs10/insanely-fast-whisper/blob/main/notebooks/infer_transformers_whisper_large_v2.ipynb

文章链接