16 KiB
Полное руководство по объединению моделей Whisper
Содержание
- Введение
- Установка и подготовка
- Базовое использование
- Детальные настройки
- Практические рекомендации
- Тестирование и оценка
- Устранение неполадок
Введение
Скрипт whisper_merge.sh позволяет объединять две модели Whisper, обученные на разных датасетах, для получения комбинированной модели с улучшенными характеристиками. Особенно полезно для моделей, обученных на разных типах данных одного языка (например, разные диалекты русского языка, формальная/неформальная речь и т.д.).
Установка и подготовка
-
Убедитесь, что Conda установлена в вашей системе.
-
Скачайте скрипт
whisper_merge.shи сделайте его исполняемым:chmod +x whisper_merge.sh -
Подготовьте модели для слияния. По умолчанию скрипт ищет модели по следующим путям:
- Модель 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в начале скрипта. - Модель A:
Базовое использование
Первый запуск
Для первого запуска рекомендуется использовать флаг --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
Детальные настройки
Методы слияния
Скрипт поддерживает три метода слияния моделей:
-
Direct (
--method direct) — простое линейное смешивание весов:./whisper_merge.sh --method direct- Преимущества: простота, надежность, меньшие вычислительные требования
- Недостатки: может не сохранять геометрию пространства весов
- Когда использовать: для быстрого тестирования или когда модели очень близки
-
SLERP (
--method slerp) — сферическая линейная интерполяция:./whisper_merge.sh --method slerp- Преимущества: лучше сохраняет геометрию пространства весов
- Недостатки: требует больше вычислений, может не работать корректно для некоторых моделей
- Когда использовать: для моделей, где важно сохранение пространственных отношений между параметрами
-
TIES (
--method ties) — алгоритм Task Induced Expert Selection:./whisper_merge.sh --method ties- Преимущества: позволяет индивидуально настраивать веса для кодировщика и декодера
- Недостатки: более сложный, требует тонкой настройки параметров
- Когда использовать: для продвинутого слияния, когда известно, что одна модель лучше работает с определенными аспектами (например, фонетикой или грамматикой)
-
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.6—0.8) - Если MODEL_B лучше справляется с задачей: уменьшите alpha (
0.2—0.4) - Для тонкой настройки изменяйте значение с шагом 0.05
- Если MODEL_A лучше справляется с задачей: увеличьте alpha (
Параметры для метода SLERP
SLERP t (--slerp-t)
Определяет соотношение весов при сферической интерполяции:
./whisper_merge.sh --method slerp --slerp-t 0.3
- Диапазон: от 0.0 до 1.0
- По умолчанию: 0.5 (равный вклад)
- Влияние:
0.0— полностью вес на MODEL_A1.0— полностью вес на MODEL_B- Промежуточные значения дают нелинейную интерполяцию между моделями
- Рекомендации:
- В отличие от direct alpha, здесь значение
0соответствует MODEL_A, а1соответствует MODEL_B - SLERP обычно дает более гладкое слияние, чем direct
- Для русских моделей обычно хорошо работают значения
0.4—0.6
- В отличие от direct alpha, здесь значение
Параметры для метода 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.8—0.9) лучше сохраняют индивидуальные особенности каждой модели - Более низкие значения (
0.5—0.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")
- Для русских моделей, если одна модель лучше обрабатывает грамматические конструкции, дайте ей больший вес в декодере
Практические рекомендации
Для слияния русских моделей
-
Общее правило: начинайте с метода TIES с близкими к равным весами.
-
Если модели обучены на разных типах данных:
./whisper_merge.sh --method ties --ties-density 0.85 --encoder-weights "0.6,0.4" --decoder-weights "0.5,0.5"Это даст больший приоритет первой модели в распознавании звуков, но обе модели будут равно влиять на грамматику.
-
Если одна модель лучше с формальной речью, а другая с разговорной:
./whisper_merge.sh --method ties --ties-density 0.9 --encoder-weights "0.5,0.5" --decoder-weights "0.6,0.4"Высокая плотность (0.9) позволит сохранить уникальные особенности обеих моделей.
-
Для моделей, где первая модель имеет высокое качество, но вторая содержит специфичные улучшения:
./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
Тестирование и оценка
После слияния моделей важно оценить результаты:
-
Подготовьте тестовый набор данных, включающий:
- Формальную речь
- Разговорную речь
- Различные диалекты
- Различные шумовые условия
- Различные темпы речи
-
Выполните транскрипцию с помощью объединенной модели и сравните с исходными моделями.
-
Оцените результаты по следующим критериям:
- Word Error Rate (WER)
- Character Error Rate (CER)
- Обработка специфичных для русского языка особенностей (падежи, ударения)
- Скорость обработки
Устранение неполадок
Проблемы со слиянием SLERP или TIES
Если возникают ошибки при использовании методов SLERP или TIES, скрипт автоматически откатывается к методу Direct. Для решения проблем:
-
Проверьте совместимость моделей:
- Модели должны иметь одинаковую архитектуру
- Версии Whisper должны быть совместимы
-
Увеличьте объем памяти:
- SLERP и TIES требуют больше оперативной памяти
- Попробуйте запустить на машине с большим объемом RAM
-
Проверьте логи для определения конкретной проблемы
Проблемы с окружением Conda
Если возникают проблемы с созданием или активацией окружения:
-
Обновите Conda:
conda update -n base conda -
Удалите и пересоздайте окружение:
conda env remove -n whisper-merge ./whisper_merge.sh --update -
Проверьте пути к моделям и убедитесь, что они корректны