Files
whisper-api-server/tools/whisper_merge_guide.md
T
2025-03-04 22:10:20 +03:00

16 KiB

Полное руководство по объединению моделей Whisper

Содержание

  1. Введение
  2. Установка и подготовка
  3. Базовое использование
  4. Детальные настройки
  5. Практические рекомендации
  6. Тестирование и оценка
  7. Устранение неполадок

Введение

Скрипт whisper_merge.sh позволяет объединять две модели Whisper, обученные на разных датасетах, для получения комбинированной модели с улучшенными характеристиками. Особенно полезно для моделей, обученных на разных типах данных одного языка (например, разные диалекты русского языка, формальная/неформальная речь и т.д.).

Установка и подготовка

  1. Убедитесь, что Conda установлена в вашей системе.

  2. Скачайте скрипт whisper_merge.sh и сделайте его исполняемым:

    chmod +x whisper_merge.sh
    
  3. Подготовьте модели для слияния. По умолчанию скрипт ищет модели по следующим путям:

    • Модель A: /mnt/cloud/llm/whisper/whisper-large-v3-russian
    • Модель B: /mnt/cloud/llm/whisper/whisper-large-v3-ru-podlodka
    • Директория для результатов: /mnt/cloud/llm/whisper/whisper-large-v3-russian+podlodka

    Пути можно изменить, отредактировав переменные MODEL_A, MODEL_B и OUTPUT_DIR в начале скрипта.

Базовое использование

Первый запуск

Для первого запуска рекомендуется использовать флаг --update для установки всех зависимостей:

./whisper_merge.sh --update

Это создаст окружение conda с именем whisper-merge и установит необходимые пакеты.

Стандартное слияние

Для выполнения слияния с настройками по умолчанию:

./whisper_merge.sh

По умолчанию будут использованы следующие параметры:

  • Метод слияния: all (все методы)
  • SLERP t: 0.5
  • TIES density: 0.8
  • Encoder weights: 0.6,0.4
  • Decoder weights: 0.4,0.6
  • Direct alpha: 0.5

Детальные настройки

Методы слияния

Скрипт поддерживает три метода слияния моделей:

  1. Direct (--method direct) — простое линейное смешивание весов:

    ./whisper_merge.sh --method direct
    
    • Преимущества: простота, надежность, меньшие вычислительные требования
    • Недостатки: может не сохранять геометрию пространства весов
    • Когда использовать: для быстрого тестирования или когда модели очень близки
  2. SLERP (--method slerp) — сферическая линейная интерполяция:

    ./whisper_merge.sh --method slerp
    
    • Преимущества: лучше сохраняет геометрию пространства весов
    • Недостатки: требует больше вычислений, может не работать корректно для некоторых моделей
    • Когда использовать: для моделей, где важно сохранение пространственных отношений между параметрами
  3. TIES (--method ties) — алгоритм Task Induced Expert Selection:

    ./whisper_merge.sh --method ties
    
    • Преимущества: позволяет индивидуально настраивать веса для кодировщика и декодера
    • Недостатки: более сложный, требует тонкой настройки параметров
    • Когда использовать: для продвинутого слияния, когда известно, что одна модель лучше работает с определенными аспектами (например, фонетикой или грамматикой)
  4. All (--method all) — применяет все три метода и сохраняет результаты в отдельные подпапки:

    ./whisper_merge.sh --method all
    
    • Преимущества: позволяет сравнить результаты всех методов
    • Недостатки: требует больше времени и дискового пространства
    • Когда использовать: при первоначальном тестировании для выбора оптимального метода

Параметры для метода Direct

Direct Alpha (--direct-alpha)

Определяет вес первой модели в процессе слияния:

./whisper_merge.sh --method direct --direct-alpha 0.7
  • Диапазон: от 0.0 до 1.0
  • По умолчанию: 0.5 (равный вес обеих моделей)
  • Влияние:
    • 0.0 — полностью использует веса второй модели (MODEL_B)
    • 0.5 — равный вклад обеих моделей
    • 1.0 — полностью использует веса первой модели (MODEL_A)
  • Рекомендации:
    • Если MODEL_A лучше справляется с задачей: увеличьте alpha (0.60.8)
    • Если MODEL_B лучше справляется с задачей: уменьшите alpha (0.20.4)
    • Для тонкой настройки изменяйте значение с шагом 0.05

Параметры для метода SLERP

SLERP t (--slerp-t)

Определяет соотношение весов при сферической интерполяции:

./whisper_merge.sh --method slerp --slerp-t 0.3
  • Диапазон: от 0.0 до 1.0
  • По умолчанию: 0.5 (равный вклад)
  • Влияние:
    • 0.0 — полностью вес на MODEL_A
    • 1.0 — полностью вес на MODEL_B
    • Промежуточные значения дают нелинейную интерполяцию между моделями
  • Рекомендации:
    • В отличие от direct alpha, здесь значение 0 соответствует MODEL_A, а 1 соответствует MODEL_B
    • SLERP обычно дает более гладкое слияние, чем direct
    • Для русских моделей обычно хорошо работают значения 0.40.6

Параметры для метода TIES

TIES Density (--ties-density)

Определяет долю параметров, которые будут смешаны индивидуально, а не усреднены:

./whisper_merge.sh --method ties --ties-density 0.85
  • Диапазон: от 0.0 до 1.0
  • По умолчанию: 0.8
  • Влияние:
    • 0.0 — все параметры усредняются
    • 1.0 — все параметры смешиваются индивидуально по заданным весам
    • Промежуточные значения определяют процент параметров с наибольшей разницей, которые будут смешаны индивидуально
  • Рекомендации:
    • Более высокие значения (0.80.9) лучше сохраняют индивидуальные особенности каждой модели
    • Более низкие значения (0.50.7) дают более стабильный результат
    • Для русских моделей рекомендуется 0.85, что позволяет сохранить уникальные особенности обеих моделей

Encoder Weights (--encoder-weights)

Определяет веса моделей для кодировщика (отвечает за обработку аудиосигнала):

./whisper_merge.sh --method ties --encoder-weights "0.7,0.3"
  • Формат: два числа, разделенные запятой, сумма должна равняться 1.0
  • По умолчанию: "0.6,0.4"
  • Влияние:
    • Первое число — вес MODEL_A для кодировщика
    • Второе число — вес MODEL_B для кодировщика
  • Рекомендации:
    • Если MODEL_A лучше распознает фонетические особенности речи: увеличьте её вес (e.g., "0.7,0.3")
    • Если MODEL_B лучше распознает акценты или диалекты: увеличьте её вес (e.g., "0.4,0.6")
    • Для русских моделей, если одна из них лучше обрабатывает различные диалекты, дайте ей больший вес в кодировщике

Decoder Weights (--decoder-weights)

Определяет веса моделей для декодера (отвечает за формирование текста):

./whisper_merge.sh --method ties --decoder-weights "0.3,0.7"
  • Формат: два числа, разделенные запятой, сумма должна равняться 1.0
  • По умолчанию: "0.4,0.6"
  • Влияние:
    • Первое число — вес MODEL_A для декодера
    • Второе число — вес MODEL_B для декодера
  • Рекомендации:
    • Если MODEL_A лучше справляется с грамматикой: увеличьте её вес (e.g., "0.6,0.4")
    • Если MODEL_B имеет лучший языковой контекст: увеличьте её вес (e.g., "0.3,0.7")
    • Для русских моделей, если одна модель лучше обрабатывает грамматические конструкции, дайте ей больший вес в декодере

Практические рекомендации

Для слияния русских моделей

  1. Общее правило: начинайте с метода TIES с близкими к равным весами.

  2. Если модели обучены на разных типах данных:

    ./whisper_merge.sh --method ties --ties-density 0.85 --encoder-weights "0.6,0.4" --decoder-weights "0.5,0.5"
    

    Это даст больший приоритет первой модели в распознавании звуков, но обе модели будут равно влиять на грамматику.

  3. Если одна модель лучше с формальной речью, а другая с разговорной:

    ./whisper_merge.sh --method ties --ties-density 0.9 --encoder-weights "0.5,0.5" --decoder-weights "0.6,0.4"
    

    Высокая плотность (0.9) позволит сохранить уникальные особенности обеих моделей.

  4. Для моделей, где первая модель имеет высокое качество, но вторая содержит специфичные улучшения:

    ./whisper_merge.sh --method slerp --slerp-t 0.3
    

    Это сохранит основу первой модели (70%) и добавит 30% особенностей второй.

Для наилучших результатов

Рекомендуется выполнить несколько экспериментов с разными настройками и сравнить результаты:

# Эксперимент 1: TIES с приоритетом первой модели
./whisper_merge.sh --method ties --ties-density 0.85 --encoder-weights "0.65,0.35" --decoder-weights "0.6,0.4"

# Эксперимент 2: SLERP с уклоном к первой модели
./whisper_merge.sh --method slerp --slerp-t 0.4

# Эксперимент 3: Прямое слияние
./whisper_merge.sh --method direct --direct-alpha 0.6

Тестирование и оценка

После слияния моделей важно оценить результаты:

  1. Подготовьте тестовый набор данных, включающий:

    • Формальную речь
    • Разговорную речь
    • Различные диалекты
    • Различные шумовые условия
    • Различные темпы речи
  2. Выполните транскрипцию с помощью объединенной модели и сравните с исходными моделями.

  3. Оцените результаты по следующим критериям:

    • Word Error Rate (WER)
    • Character Error Rate (CER)
    • Обработка специфичных для русского языка особенностей (падежи, ударения)
    • Скорость обработки

Устранение неполадок

Проблемы со слиянием SLERP или TIES

Если возникают ошибки при использовании методов SLERP или TIES, скрипт автоматически откатывается к методу Direct. Для решения проблем:

  1. Проверьте совместимость моделей:

    • Модели должны иметь одинаковую архитектуру
    • Версии Whisper должны быть совместимы
  2. Увеличьте объем памяти:

    • SLERP и TIES требуют больше оперативной памяти
    • Попробуйте запустить на машине с большим объемом RAM
  3. Проверьте логи для определения конкретной проблемы

Проблемы с окружением Conda

Если возникают проблемы с созданием или активацией окружения:

  1. Обновите Conda:

    conda update -n base conda
    
  2. Удалите и пересоздайте окружение:

    conda env remove -n whisper-merge
    ./whisper_merge.sh --update
    
  3. Проверьте пути к моделям и убедитесь, что они корректны