Skip to content

Latest commit

 

History

History
204 lines (151 loc) · 12.4 KB

README_ru.md

File metadata and controls

204 lines (151 loc) · 12.4 KB

GigaAM: семейство акустических моделей для обработки звучащей речи

plot

Последние Обновления


Содержание


Обзор

GigaAM (Giga Acoustic Model) - семейство акустических моделей для обработки звучащей речи на русском языке. Среди решаемых задач - задачи распознавания речи, распознавания эмоций и извлечения эмбеддингов из аудио. Модели построены на основе архитектуры Conformer с использованием методов self-supervised learning (wav2vec2-подход для GigaAM-v1 и HuBERT-подход для GigaAM-v2).

Модели GigaAM с отрывом являются лучшими по качеству моделями в открытом доступе для соответствующих задач.

Репозиторий включает:

  • GigaAM: фундаментальная акустическая модель, обученная на большом объеме неразмеченных русскоязычных аудиозаписей.
  • GigaAM-CTC и GigaAM-RNNT: модели, дообученные на задачу автоматического распознавания речи.
  • GigaAM-Emo: модель, дообученная на задачу распознавания эмоций.

Установка

Требования

  • Python ≥ 3.8
  • установленный и добавленный в PATH ffmpeg

Установка пакета GigaAM

  1. Скачивание репозитория:
 git clone https://github.com/salute-developers/GigaAM.git
 cd GigaAM
  1. Установка пакета:
 pip install -e .
  1. Проверка установленного пакета:
 import gigaam
 model = gigaam.load_model("ctc")
 print(model)

GigaAM

GigaAM (Giga Acoustic Model) — фундаментальная акустическая модель, основанная на Conformer-энкодере (около 240M параметров) и обученная на 50 тысячах часов разнообразных русскоязычных данных.

Доступны 2 версии модели, отличающиеся алгоритмом предобучения:

  • GigaAM-v1 была обучена на основе подхода wav2vec2. Версия модели для использования - v1_ssl.
  • GigaAM-v2 была обучена на основе подхода HuBERT и позволила улучшить качество распознавания речи. Версия модели для использования - v2_ssl или ssl.

Больше информации про обучение GigaAM-v1 можно найти в нашей статье на Хабре.

Пример использования GigaAM

import gigaam
model = gigaam.load_model('ssl') # Options: "ssl", "v1_ssl"
embedding, _ = model.embed_audio(audio_path)

GigaAM для распознавания речи (GigaAM-ASR)

Мы дообучали GigaAM энкодер для задачи распознавания речи с двумя разными декодерами:

  • Модели GigaAM-CTC были дообучены с CTC функцией потерь.
  • Модели GigaAM-RNNT была дообучена с RNN-T функцией потерь.

Мы проводили дообучения моделей с обеих версий GigaAM: v1 и v2, таким образом для каждой из GigaAM-CTC и GigaAM-RNNT моделей доступны 2 версии: v1 и v2.

Данные для обучения

dataset size, hours weight
Golos 1227 0.6
SOVA 369 0.2
Russian Common Voice 207 0.1
Russian LibriSpeech 93 0.1

Метрики качества (Word Error Rate)

Model Parameters Golos Crowd Golos Farfield OpenSTT YouTube OpenSTT Phone Calls OpenSTT Audiobooks Mozilla Common Voice 12 Mozilla Common Voice 19 Russian LibriSpeech
Whisper-large-v3 1.5B 13.9 16.6 18.0 28.0 14.4 5.7 5.5 9.5
NVIDIA FastConformer 115M 2.2 6.6 21.2 30.0 13.9 2.7 5.7 11.3
GigaAM-CTC-v1 242M 3.0 5.7 16.0 23.2 12.5 2.0 10.5 7.5
GigaAM-RNNT-v1 243M 2.3 5.0 14.0 21.7 11.7 1.9 9.9 7.7
GigaAM-CTC-v2 242M 2.5 4.3 14.1 21.1 10.7 2.1 3.1 5.5
GigaAM-RNNT-v2 243M 2.2 3.9 13.3 20.0 10.2 1.8 2.7 5.5

Использование моделей распознавания речи (GigaAM-ASR)

Базовое использование - распознование речи на коротких аудиозаписях (до 30 секунд)

 import gigaam
 model_name = "rnnt"  # Options: "v2_ctc" or "ctc", "v2_rnnt" or "rnnt", "v1_ctc", "v1_rnnt"
 model = gigaam.load_model(model_name)
 transcription = model.transcribe(audio_path)

Распознавание речи на длинных аудиозаписях

  1. Установите зависимости для внешней VAD-модели (pyannote.audio library):

    pip install gigaam[longform]
  2. Используйте метод model.transcribe_longform:

    import os
    import gigaam
    
    os.environ["HF_TOKEN"] = "<HF_TOKEN>"
    
    model = gigaam.load_model("ctc")
    recognition_result = model.transcribe_longform("long_example.wav")
    
    for utterance in recognition_result:
       transcription = utterance["transcription"]
       start, end = utterance["boundaries"]
       print(f"[{gigaam.format_time(start)} - {gigaam.format_time(end)}]: {transcription}")

Пример распознавания с помощью ONNX

  1. Экспортируйте модель в onnx-формат с помощью метода model.to_onnx:
    onnx_dir = "onnx"
    model_type = "rnnt" # or "ctc"
    
    model = gigaam.load_model(
       model_type,
       fp16_encoder=False,  # only fp32 tensors
       use_flash=False,  # disable flash attention
    )
    model.to_onnx(dir_path=onnx_dir)
  2. Используйте полученную модель для транскрибации:
    from gigaam.onnx_utils import load_onnx_sessions, transcribe_sample
    
    sessions = load_onnx_sessions(onnx_dir, model_type)
    transcribe_sample("example.wav", model_type, sessions)

Все приведенные примеры также могут быть найдены в jupyter-ноутбуке inference_example.ipynb.


GigaAM-Emo

GigaAM-Emo — акустическая модель для определения эмоций. Мы доучивали GigaAM на датасете Dusha.

В таблице ниже приведены метрики качества открытых моделей на датасете Dusha:

Crowd Podcast
Unweighted Accuracy Weighted Accuracy Macro F1-score Unweighted Accuracy Weighted Accuracy Macro F1-score
DUSHA baseline
(MobileNetV2 + Self-Attention)
0.83 0.76 0.77 0.89 0.53 0.54
АБК (TIM-Net) 0.84 0.77 0.78 0.90 0.50 0.55
GigaAM-Emo 0.90 0.87 0.84 0.90 0.76 0.67

Пример использвания GigaAM-Emo для распознавания эмоций

import gigaam
model = gigaam.load_model('emo')
emotion2prob: Dict[str, int] = model.get_probs("example.wav")

print(", ".join([f"{emotion}: {prob:.3f}" for emotion, prob in emotion2prob.items()]))

Лицензия

Код и веса моделей семества GigaAM доступны для использования с MIT-лицензией.

Ссылки