Вивід завжди обривається після 127 токенів, а частини тексту, що починаються з цифр, читаються неправильно

#1
by alertua - opened

Привіт! Дякую за модель вербалізації.

Штучка-інтеллект трохи покращень знайшов. Пропоную їх отуто:

Я використовую m2m100-ukr-verbalization (збірку CTranslate2) в українському TTS-сервері для Home Assistant: https://github.com/ALERTua/ha-holos-tts. Я знайшов дві межі, про які не сказано в описі моделі.

  1. Кожен вивід закінчується після 127 токенів (128 разом з ). Так буває і з int8, і з float32, і навіть з max_decoding_length=512. Якщо примусово подовжити вивід (min_decoding_length=200), він вироджується в «двадддд…». Схоже, модель навчали з максимальною довжиною цілі 128. Речення з багатьма числами втрачає кінець без жодного попередження: наприклад, «1, 2, …, 30» закінчується на «…двадцять пʼять, двад».

  2. Частину тексту, що починається з цифр, модель читає без контексту. «1333, 1370,» стає 13 333 370, «16, 17,» стають порядковими числівниками, а після «о 06:15, 07:15,» частина «08:15, 08:45» виходить у називному відмінку («вісім годин п'ятнадцять хвилин»).

Мій обхідний шлях: коли вивід досягає 127 токенів, я ділю текст навпіл по межі речення біля середини і вербалізую кожну половину окремо. Перед другою половиною, якщо вона починається з числа, я ставлю прийменник її списку чисел (наприклад, «о»), а якщо його немає, то «і». Потім я прибираю це слово з виводу. На 43 реченнях, які модель обрізає, це дало 37 слів з неправильним відмінком або числом проти 163 з одним лише «і».
Код: https://github.com/ALERTua/ha-holos-tts/blob/deb0847/src/holos_tts/verbalizer.py#L100-L137

Допомогло б перенавчання з довшими цілями або хоча б згадка про обидві межі в описі моделі.

Sign up or log in to comment