2023-12-14 08:15:26 +08:00
# Whisper
2023-11-30 00:17:26 +08:00
2023-12-08 03:15:54 +08:00
Speech recognition with Whisper in MLX. Whisper is a set of open source speech
2023-12-14 08:15:26 +08:00
recognition models from OpenAI, ranging from 39 million to 1.5 billion
2024-01-08 02:01:29 +08:00
parameters.[^1]
2023-11-30 00:17:26 +08:00
2023-12-08 03:15:54 +08:00
### Setup
2023-11-30 00:17:26 +08:00
2023-12-30 02:22:15 +08:00
First, install the dependencies:
2023-11-30 00:17:26 +08:00
```
pip install -r requirements.txt
```
Install [`ffmpeg` ](https://ffmpeg.org/ ):
2023-12-08 03:15:54 +08:00
```
2023-12-14 08:15:26 +08:00
# on macOS using Homebrew (https://brew.sh/)
2023-11-30 00:17:26 +08:00
brew install ffmpeg
```
2024-01-11 08:13:06 +08:00
> [!TIP]
> Skip the conversion step by using pre-converted checkpoints from the Hugging
> Face Hub. There are a few available in the [MLX
> Community](https://huggingface.co/mlx-community) organization.
To convert a model, first download the Whisper PyTorch checkpoint and convert
the weights to the MLX format. For example, to convert the `tiny` model use:
2023-12-30 02:22:15 +08:00
```
python convert.py --torch-name-or-path tiny --mlx-path mlx_models/tiny
```
Note you can also convert a local PyTorch checkpoint which is in the original OpenAI format.
To generate a 4-bit quantized model, use `-q` . For a full list of options:
```
python convert.py --help
```
2024-03-07 22:23:43 +08:00
By default, the conversion script will make the directory `mlx_models`
and save the converted `weights.npz` and `config.json` there.
Each time it is run, `convert.py` will overwrite any model in the provided
path. To save different models, make sure to set `--mlx-path` to a unique
directory for each converted model. For example:
```bash
model="tiny"
python convert.py --torch-name-or-path ${model} --mlx-path mlx_models/${model}_fp16
python convert.py --torch-name-or-path ${model} --dtype float32 --mlx-path mlx_models/${model}_fp32
python convert.py --torch-name-or-path ${model} -q --q_bits 4 --mlx-path mlx_models/${model}_quantized_4bits
```
2023-12-30 02:22:15 +08:00
2023-12-08 03:15:54 +08:00
### Run
Transcribe audio with:
2023-11-30 00:17:26 +08:00
2024-01-08 02:01:29 +08:00
```python
2023-11-30 00:17:26 +08:00
import whisper
text = whisper.transcribe(speech_file)["text"]
```
2024-01-13 03:06:33 +08:00
Choose the model by setting `path_or_hf_repo` . For example:
2024-01-11 08:13:06 +08:00
```python
2024-01-13 03:06:33 +08:00
result = whisper.transcribe(speech_file, path_or_hf_repo="models/large")
2024-01-11 08:13:06 +08:00
```
2024-01-13 03:06:33 +08:00
This will load the model contained in `models/large` . The `path_or_hf_repo`
2024-01-11 08:13:06 +08:00
can also point to an MLX-style Whisper model on the Hugging Face Hub. In this
case, the model will be automatically downloaded.
2024-01-08 02:01:29 +08:00
The `transcribe` function also supports word-level timestamps. You can generate
these with:
```python
output = whisper.transcribe(speech_file, word_timestamps=True)
print(output["segments"][0]["words"])
```
To see more transcription options use:
```
>>> help(whisper.transcribe)
```
2023-12-08 03:15:54 +08:00
[^1]: Refer to the [arXiv paper ](https://arxiv.org/abs/2212.04356 ), [blog post ](https://openai.com/research/whisper ), and [code ](https://github.com/openai/whisper ) for more details.