KEN’S CAT LOG
▣

Сравнение 10, 5 и 3 часов данных для обучения синтеза речи: у трёхъязычной TTS почти нет разницы

Продолжение модели синтеза речи на хорватском языке. На этот раз одну небольшую модель научили говорить на трёх языках: хорватском, японском и английском. После этого я сравнил, насколько различается результат при 10, 5 и 3 часах обучающих данных для каждого языка.

Сначала выводы.

  • В конечном итоге разницы почти не было — ни при 10, ни при 5, ни при 3 часах данных на язык. Лучший показатель ошибок в тексте составил 0,7% во всех трёх случаях (28 из 32 предложений полностью совпали)
  • Ход обучения тоже был почти одинаковым. Во всех вариантах японский и английский почти полностью читались по сценарию уже на 3 000–5 000 шагах, а хорватский — на 10 000 шагах
  • Только в версии с 3 часами некоторое время сохранялась привычка ошибочно читать «Bok! (привет)» как «Blok». Ей потребовалось немного больше времени, чтобы прийти к наилучшему состоянию
  • Разницы не появилось и в предложениях, переполненных специальными терминами. Я проверил это, предполагая, что вариант с 10 часами лучше справится со словарём, но все три дали почти одинаковый результат
  • Ошибки в чтении специальных терминов у трёх моделей возникали на одних и тех же словах и одинаковым образом. В английском причина была не в модели, а в части, которая преобразует текст в фонетические символы (словаре)

Что было сделано

Модель: те же, что и в прошлый раз, Matcha-TTS (около 18,3 млн параметров) и Vocos (около 13,5 млн параметров), преобразующий результат обратно в волну. Говорящий — один мужчина около 20 лет.

Как реализованы три языка: входом модели стали общие для трёх языков фонетические символы (IPA). Одинаковые звуки в разных языках, такие как «ʦ» и «ʨ», используют один и тот же символ. Язык задаётся номером, который первоначально предназначался для переключения говорящих: он используется как «номер языка».

  • Хорватский: язык читается почти так, как пишется, поэтому достаточно заменить буквы фонетическими символами один к одному
  • Японский: с помощью OpenJTalk извлекались чтение и акцент, затем добавлялись отметки мест повышения и понижения высоты тона
  • Английский: фонетические символы получались с помощью g2p_en (словаря произношений CMU и небольшой модели, предсказывающей произношение слов, которых нет в словаре)

Обучающие данные: записи голоса одного и того же мужчины, читающего реплики из диалогов на трёх языках. После сверки со сценарием с помощью распознавания речи и удаления ошибок чтения осталось 9,4 часа хорватского, 9,7 часа японского и 8,3 часа английского (всего около 27 часов). Это названо «10-часовой версией».

Затем из каждого языка случайно были выбраны ровно по 5 часов (всего 15 часов) — это «5-часовая версия», а по 3 часа (всего 9 часов, около 5 800 записей) — «3-часовая версия». Все остальные настройки (размер модели, размер батча, 60 000 шагов) были одинаковыми. Число шагов одинаково, поэтому при меньшем объёме данных одна и та же запись встречается многократно (в 3-часовой версии — примерно в 3 раза чаще, чем в 10-часовой).

Обучение на одной RTX 4090 занимало от 6 до 8,5 часов за запуск.

Сравнение голосов в ходе обучения

Следующие предложения, которых не было в обучающих данных, были синтезированы моделями на разных этапах обучения.

  • Английский: Завтра мы поедем к морю, а послезавтра навестим мою бабушку в Сплите.
  • Японский: Завтра я поеду к морю, а послезавтра планирую сходить в гости к бабушке.
  • Хорватский: Завтра мы едем к морю, а послезавтра навестим бабушку в Сплите.

Слева направо: 10-часовая, 5-часовая и 3-часовая версии.

Шаг Версия на 10 часов Версия на 5 часов Версия на 3 часа
1 000 Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
2 000 Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
3 000 Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
4 000 Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
5 000 Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
10 000 Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
20 000 Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
30 000 Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
40 000 Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
50 000 Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский

По впечатлению на слух, на 1 000 шагов все варианты всё ещё звучат неразборчиво. Но по-английски уже в целом понятно, что говорится. В японском между версиями была разница: в 5-часовой версии уже на 1 000-м шаге это предложение было распознано дословно и верно. В то же время в 10-часовой версии получилось «Пожалуйста, попробуйте позаботиться», а в 3-часовой — «В медике до завтра…» — то есть совершенно другие предложения.

На 3 000–5 000 шагах все версии начинают читать японский и английский строго по сценарию. Хорватский немного отстаёт: первое «Sutra(завтра)」до примерно 5 000–10 000 шагов всё ещё распознавалось как «Sve», «Straj», «Satra» и так далее. После 20 000 шагов на слух различия между тремя версиями были почти неразличимы.

В цифрах

Тестовые предложения (14 на хорватском, 9 на японском и 9 на английском, все отсутствовали в обучающих данных) были распознаны с помощью Whisper large-v3, после чего измерялась посимвольная частота ошибок (CER) относительно сценария. Японский перед сравнением переводился в чтение катаканой, чтобы вариации записи кандзи (например, «あさって» и «明後日») не считались ошибками.

Сначала среднее по всем 32 предложениям на трёх языках. В скобках — число полных совпадений.

Шаги 10-часовая версия 5-часовая версия 3-часовая версия
1 000 43,8%(2) 41,9%(2) 43,8%(1)
2 000 16,6%(7) 17,7%(12) 17,6%(9)
3 000 7,7%(16) 6,2%(16) 9,9%(14)
4 000 5,9%(21) 3,7%(19) 2,7%(25)
5 000 2,1%(23) 3,3%(20) 4,5%(23)
10 000 1,4%(24) 1,1%(23) 1,7%(24)
15 000 0,8%(26) 0,7%(26) 2,0%(24)
20 000 0,7%(27) 0,8%(26) 0,9%(25)
30 000 0,7%(28) 0,8%(26) 1,7%(26)
40 000 1,2%(25) 1,7%(26) 0,7%(26)
45 000 3,9%(25) 0,7%(28) 0,7%(27)
50 000 0,7%(28) 0,7%(26) 0,7%(28)
60 000 1,8%(26) 0,8%(27) 1,9%(25)

Если посмотреть по языкам, получится следующее (хорватский / японский / английский).

Шаги 10-часовая версия 5-часовая версия 3-часовая версия
5 000 2,8 / 1,2 / 1,8% 6,5 / 1,2 / 0,3% 2,0 / 1,8 / 11,1%
10 000 2,2 / 1,2 / 0,3% 1,7 / 1,2 / 0,3% 2,9 / 1,2 / 0,3%
20 000 0,8 / 1,2 / 0,0% 0,9 / 1,2 / 0,0% 0,8 / 1,8 / 0,3%
30 000 0,7 / 1,2 / 0,0% 1,1 / 1,2 / 0,0% 3,2 / 1,2 / 0,0%
50 000 0,7 / 1,2 / 0,0% 0,9 / 1,2 / 0,0% 0,7 / 1,2 / 0,0%
  • Лучшие результаты: у 10-часовой версии — на 30 000 и 50 000 шагах, у 5-часовой — на 45 000 шагах, у 3-часовой — на 50 000 шагах. Во всех случаях общий показатель составил 0,7%, а 28 из 32 предложений полностью совпали — все три пришли к одному и тому же результату
  • Места, где показатели подскакивают по ходу обучения, почти всегда связаны с разницей в одном слове. Например, «Bok!(привет)」распознаётся как «Bog», а «Hi!» — как «Bye.»: в коротких предложениях из 1–2 слов ошибка всего в одном символе сильно повышает частоту ошибок
  • В 3-часовой версии на 15 000–35 000 шагах показатель для хорватского находится в районе 3%. Если посмотреть содержимое, почти всё приходится на одно предложение, где «Bok!» читается как «Blok». На 50 000 шагах это исправилось. По-видимому, при меньшем объёме данных требуется больше времени, чтобы избавиться от особенностей коротких предложений
  • Японские 1,2% каждый раз объясняются лишь одним предложением: в «しーっ、静かに。» «しーっ» распознаётся как «し». Это вопрос того, насколько длинный звук записывается на письме: на слух модель правильно говорит «しーっ»
  • Оставшиеся ошибки в хорватском почти все связаны с особенностями распознавания, например «prekosutra(послезавтра)」записывается как два слова — «preko sutra»

Разница между 10, 5 и 3 часами находилась в пределах погрешности. По крайней мере, для того, чтобы читать строго по сценарию, трёх часов на каждый язык оказалось достаточно. Однако 3-часовой версии потребовалось больше времени, чтобы стабилизироваться, поэтому лучше обучать её не менее 40 000 шагов.

Сравнение на предложениях, насыщенных специальной терминологией

Если для обычного разговора хватает и небольшого объёма данных, то, возможно, при сложных словах, почти не встречающихся в обучающих данных, большее количество данных даёт преимущество. Исходя из этого, были составлены 10 предложений с терминами из медицины, ИТ, права, химии, финансов и других областей, и модель прочитала их на трёх языках. Для всех моделей использовались варианты на 50 000 шагов.

  1. Поскольку есть подозрение на инфаркт миокарда, срочно подготовьте коронарную ангиографию и тромболитическую терапию.
    • Мы подозреваем инфаркт миокарда, поэтому немедленно подготовьте коронарную ангиографию и тромболитическую терапию.
    • Мы подозреваем инфаркт миокарда, поэтому немедленно подготовьте коронарную ангиографию и тромболитическую терапию.
  2. Этот алгоритм представляет собой структуру, сочетающую свёрточную нейронную сеть и рекуррентную сеть.
    • Этот алгоритм сочетает свёрточную нейронную сеть с рекуррентной архитектурой.
    • Этот алгоритм сочетает свёрточную нейронную сеть с рекуррентной архитектурой.
  3. Адвокат подсудимого потребовал оправдания в апелляционной инстанции, ссылаясь на незаконное получение доказательств.
    • Адвокат подсудимого выступил за оправдание в апелляции, сославшись на незаконное получение доказательств.
    • Защитник обвиняемого потребовал оправдательного приговора в апелляционном производстве из-за незаконно полученных доказательств.
  4. При фотосинтезе в тилакоидной мембране хлоропласта работает цепь переноса электронов, и синтезируется аденозинтрифосфат.
    • При фотосинтезе цепь переноса электронов в тилакоидной мембране хлоропласта производит аденозинтрифосфат.
    • При фотосинтезе цепь переноса электронов в тилакоидной мембране хлоропласта производит аденозинтрифосфат.
  5. Распределение криптографических ключей с использованием квантовой запутанности позволяет принципиально обнаружить любое прослушивание.
    • Распределение квантовых ключей на основе запутанности в принципе может обнаружить любое прослушивание.
    • Распределение квантовых ключей, основанное на запутанности, в принципе может обнаружить любое прослушивание.
  6. В ответ на рост инфляции центральный банк решил повысить ключевую ставку и начать количественное ужесточение.
    • В ответ на рост инфляции центральный банк решил повысить процентные ставки и начать количественное ужесточение.
    • Из-за роста инфляции центральный банк решил повысить процентные ставки и начать количественное ужесточение.
  7. Пациентам с остеоартритом коленного сустава назначают внутрисуставные инъекции гиалуроновой кислоты в сочетании с физиотерапией.
    • Пациенты с остеоартритом коленного сустава получают внутрисуставные инъекции гиалуроновой кислоты в сочетании с физиотерапией.
    • Пациенты с остеоартритом колена получают внутрисуставные инъекции гиалуроновой кислоты вместе с физиотерапией.
  8. В этом мосту железобетонная плита проезжей части опирается на балки из предварительно напряжённого бетона.
    • Этот мост поддерживает железобетонную плиту проезжей части на балках из предварительно напряжённого бетона.
    • Этот мост несёт железобетонную плиту на предварительно напряжённых бетонных балках.
  9. Криптовалютная биржа проверяет целостность распределённого реестра с помощью алгоритма достижения консенсуса.
    • Криптовалютная биржа проверяет целостность своего распределённого реестра с помощью алгоритма консенсуса.
    • Криптовалютная биржа проверяет целостность распределённой главной книги алгоритмом консенсуса.
  10. Чрезмерное применение антибиотиков приводит к появлению бактерий с множественной лекарственной устойчивостью и повышает риск внутрибольничных инфекций.
  • Чрезмерное использование антибиотиков приводит к появлению бактерий с множественной лекарственной устойчивостью и повышает риск внутрибольничных инфекций.
  • Чрезмерное применение антибиотиков приводит к появлению мультиустойчивых бактерий и повышает риск больничных инфекций.
Предложение Версия на 10 часов Версия на 5 часов Версия на 3 часа
1. Есть подозрение на инфаркт миокарда, поэтому срочно подготовьте коронарную ангиографию и тромболитическую терапию. Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
2. Этот алгоритм имеет структуру, объединяющую свёрточную нейронную сеть и рекуррентную сеть. Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
3. Адвокат обвиняемого в апелляционном суде добивался оправдания на основании незаконного сбора доказательств. Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
4. При фотосинтезе в тилакоидной мембране хлоропластов действует цепь переноса электронов, и синтезируется аденозинтрифосфат. Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
5. Распределение криптографических ключей с использованием квантовой запутанности позволяет принципиально обнаруживать прослушивание. Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
6. Центральный банк в связи с ростом инфляции принял решение повысить ключевую ставку и провести количественное ужесточение. Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
7. Пациентам с остеоартрозом коленного сустава назначают сочетание внутрисуставных инъекций гиалуроновой кислоты и физиотерапии. Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
8. В этом мосту железобетонная плита проезжей части опирается на балки из предварительно напряжённого бетона. Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
9. Криптовалютная биржа проверяет целостность распределённого реестра с помощью алгоритма достижения консенсуса. Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский
10. Чрезмерное применение антибиотиков приводит к появлению бактерий с множественной лекарственной устойчивостью и повышает риск внутрибольничных инфекций. Английский Японский Хорватский Английский Японский Хорватский Английский Японский Хорватский

Результаты.

Хорватский Японский Английский Полное совпадение из 30 предложений
Версия на 10 часов 0,6% 1,5% 4,6% 17
Версия на 5 часов 0,3% 1,0% 3,9% 20
Версия на 3 часа 0,5% 1,0% 4,1% 18

Не получилось так, что версия на 10 часов оказалась сильнее. Все три примерно одинаковы, а версия на 5 часов даже немного лучше. На всякий случай я также измерил версии на 10 и 5 часов на моделях с 60 000 шагов: у 10-часовой версии получилось 1,9%, а у 5-часовой — 2,0%, то есть результат поменялся местами. Иными словами, эта разница — случайное колебание, и нельзя сказать, какая из них лучше. Только для 3-часовой версии синтез и расшифровка выполнялись на CPU, потому что GPU был занят другой задачей. Поэтому условия немного отличаются.

Интересным оказалось содержание ошибок.

  • Английское «cryptocurrency» во всех трёх моделях распознавалось как нечто вроде «Kripke-Kunershi», «Kripke-Kinoshi» или «Kripik-Innershi»
  • «intra-articular», «multidrug-resistant» и «angiography» тоже все три модели искажали одинаковым образом
  • Японское «冠動脈造影» все три расшифровывали как «〜増え», а «床版» — как «障板»
  • Хорватское «pooštravanje (ужесточение)» все модели распознавали как «poštravanje»

Модели с разным объёмом данных одинаково ошибаются на одних и тех же словах. Для английского причина ясна: дело не в модели, а в части, преобразующей текст в фонетическую транскрипцию.

В этой модели текст читается не напрямую, а через фонетическую транскрипцию. В английском произношение слов, которых нет в словаре, предполагает g2p_en. При проверке выяснилось, что «cryptocurrency» преобразуется в фонетическую транскрипцию, близкую к произношению «крипакьюнарши», а «angiography» — в транскрипцию со вставленным в середине n. Модель лишь озвучивает переданную ей фонетическую транскрипцию, поэтому она ошибается в одних и тех же местах независимо от того, было в обучающих данных 10 часов или 3.

С японским ситуация немного иная. Чтения OpenJTalk для «床版(ショーバン)」 и «冠動脈造影(カンドーミャクゾーエー)」 были правильными. «床版» стало «障板» — это другие иероглифы с тем же чтением, так что с точки зрения произношения всё верно. Нельзя определить по методу измерения в этом эксперименте, стало ли «造影» словом «増え» потому, что Whisper подогнал редкое слово под привычное, или потому, что модель произносит его недостаточно чётко. Однако и здесь все три модели ошибались одинаково.

То есть в этой системе, по крайней мере устойчивость к английской специальной терминологии определяется не объёмом обучающих данных, а словарём произношений. Если хочется лучше работать со специальными терминами, быстрее добавить слова в словарь, чем увеличивать объём данных.

Итоги

  • Мне удалось заставить один небольшой модельный блок (всего около 32 миллионов параметров) говорить на трёх языках
  • Обучающие данные — по 10, 5 или 3 часа на каждый язык — в итоге дали почти одинаковую точность чтения. Версии на 3 часа требуется немного больше времени, чтобы стабилизироваться
  • Даже на специальной терминологии разницы не было. Ошибки возникают на стороне словаря произношений, и объёмом данных их не исправить

Создание данных требует времени и денег, поэтому, похоже, разумно сначала сделать по 3 часа на каждый язык, а затем добавлять данные, если их окажется недостаточно. Далее я планирую, опираясь на эти результаты, увеличить число языков до десяти. Однако в этот раз измерялось только то, «что говорится». В аспектах, которые нельзя измерить частотой ошибок в тексте, — например, естественности голоса или диапазоне эмоций — большее количество данных может давать преимущество. Это хочется проверить на слух.