Меня зовут Денис (tg: @chckdskeasfsd), и это история о том, почему в опенсурсе нет TTS с нормальными ударениями, и как я пытался это исправить.

Обзор проблемы

Одной из немаловажных задач в синтезе речи является подготовка текста, а именно расстановка ударений в словах. Если по ударениям в обычных словах все более менее понятно (можно решать с помощью словарей), то с некоторыми "особенными" словами все немного сложнее. Эти особенные слова - омографы (за́мок/замо́к, ду́хи/духи́), а также ё-омографы (не́бо/нё́бо, все/всё́, пе́ред/перё́д, бе́рег/берё́г). Буква Ё часто используется в речи, но всё реже в текстах, потому найти качественные данные становится непростой задачей.

Ранее на хабре уже была статья с обзором этой темы, были озвучены ключевые проблемы, но готовых решений представлено не было, поэтому я решил поделиться своим.

С этого и начинается история длиною в 2 месяца о том, как я пытался решать данную задачу.

Сравнение различных TTS

Хорошо, посмотрим, как дела с ударениями обстоят сегодня, а также как другие решают проблему омографов. Важно отметить, что в тестах я старался быть объективен и не преследовал целей выдать желаемое за действительное, тем не менее всё равно мог где-то ошибиться. Поэтому все результаты тестов залил сюда.

Протестированы были следующие TTS:

  1. Yandex TTS

  2. Silero TTS

  3. SberDevices TTS

  4. Ruaccent-big и Ruaccent-poetry. BIG училась только на прозе, а POETRY на поэзии и прозе. (Мои модели разрешения омографов)

Silerо-v4

Sber

Yandex

Ruaccent-big

Ruaccent-poetry

Обычные слова (30 предложений)

3

0

0

0

0

Омографы (30 предложений)

16

5

4

6

3

Стихи (13 предложений)

29

4

2

2

1

Итог

48

9

6

8

4

Хочу подметить, что в стихах ruaccent ошибся в слове, которого не было в словаре омографов (авторское ударение) и ударение проставлено было по словарю, но я честно засчитал это за ошибку.

Даже на таком небольшом тесте мы видим, как отстает силеро. Конечно, такое небольшое сравнение не сможет показать всей картины, но мы уже видим примерное качество. Да и размечать это все занятие очень трудоемкое, т.к. делать приходится все вручную из-за того, что у нас есть только аудио. Не совсем корректно, сравнивать акцентуатор и весь TTS, но я думаю было бы интересно узнать отставание опенсурса от прода больших компаний.

Силеро

Я не питаю к Silerо tts никакого негатива, но после слов про 100% решения ударений в этой статье, и убедившись в обратном на основании результатов теста, слегка разочарован.

Хорошо, в силеро вроде и не заявлялась интеллектуальная обработка омографов, только на основе частотности употребления, НО, во время работы с силеро я нашел и некоторые проблемы:

  1. Регулярное гудение, шипение и т.д

  2. Ошибки на обычных словах. Математикой 5-го класса мы высчитываем, что на каждое предложение в среднем у нас по 2.2 ошибки в слове (в стихах)

  3. Зачастую модель скатывается в месиво, где ещё попробуй разбери слова. Особенно это происходит в стихах (ссылка на пример)

  4. Модель часто игнорирует знаки препинания

Если вы хотите продолжать использовать силеро, то не используйте модель v4, v3_1 в разы лучше.

Искренне надеюсь, что у коммерческой модели качество лучше, нежели в бесплатном демо-боте и открытой модели.

Демо Silero TTS

Яндекс

В этой статье Яндекс говорили, что получают эмбеддинги от энкодера модели переводчика, но как это реализовано в их TTS сейчас, мне не известно.

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

  1. Ошибается меньше всех (за исключением RuAccent)

  2. Шипение замечено не было

  3. Хорошо соблюдает паузы в стихах

Демо Yandex TTS

Сбер

Статей или публикаций о решении от сбера я не нашел, но на сколько выяснил, они также как и я используют дообученный BERT, но с contrastive loss.

Общее впечатление по качеству ударений и в целом

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

  2. Иногда ставит ударения лучше, чем остальные (например в Седины´ не возвращают. Нам потерянных годов), когда другие ставят седи´ны

  3. Голос немного шипит

Демо SberDevices TTS

Ruaccent

Пакет состоит из 2-х нейросетей. Одна нейросеть отвечает за расстановку ударений в омографах, а другая в неизвестных словах или во всех словах, если использование словаря запрещено.

Блок схема работы:

Демо TeraTTS с RuAccent-poetry

Почему в opensource нет готовых решений?!

И так мы, протестировали TTS, поняли проблему с ударениями, но почему она все еще не решена, почему нет опенсурс решений?

  1. Открытые датасеты

Для обучения модели нужны датасеты, с их поисков я и решил начать. Но оказалось, что…

Их действительно нет, в смысле вообще. Хорошо, ну хоть что-то же есть, да?

Известно, что Яндекс постарались и сделали НКРЯ. Когда я впервые увидел, был несказанно рад, подумал "какая замечательная вещь", но оказалось к нему нельзя вот так просто взять и получить к нему доступ.

Как уже было озвучено ранее, данная проблема уже обсуждалась и ожидалось, что НКРЯ решит ее в какой-то мере, но сами НКРЯ делиться данными почему-то не хотят.

Одним прекрасным утром проснулся и понял, что мне приснился датасет. Сон я тщательно переписал и сел изучать, но изучив полученный датасет оказался слегка обескуражен. Подробнее об НКРЯ в роли датасета чуть позже, в отдельной главе.

Хорошо, пускай у нас нет НКРЯ, может есть еще что-то? С обычными ударениями мы можем еще что-то да поделать, у нас есть словарь Зализняка, а также Wiktionary, из которых я и взял словари для ударений. Из него же получил словарь омографов.

Но отсутствие уже готовых пакетов для расстановки ударений с обработкой омографов означает, что уже не выйдет расставить ударения для обучения своей нейронной сети.

  1. Компании не хотят публиковать свои наработки в открытый доступ, а также все проприетарные ударяторы работают в совокупности с TTS, что не дает “спарсить” результаты их работы и использовать в целях обучения нейросети.

  2. В интернете нет ни одного открытого пакета для разрешения омографов, по крайнем мере, я таковых не нашел. Был только mashapo/russtress, который учился на данных НКРЯ, но на данный момент он или просто игнорирует омографы или выдает неверные предсказания.

Что не так с НКРЯ?

Были озвучены сомнения в качестве НКРЯ, наверняка это какая-то ошибка… или нет? Давайте разбираться

На данной диаграмме видно, что большую часть НКРЯ составляют стихи.

Всего 134 млн предложений:

  1. Наивная поэзия - 1 236 966

  2. Поэзия - 97 702

  3. Устная публичная речь - 860

  4. Речь кино - 690

  5. Устная непубличная речь - 441

  6. Художественное чтение - 42

  7. Авторское чтение - 22

  8. Театральная речь – 16

На этой диаграмме показано сколько данных получилось у меня. Даже с учетом того, что наивной поэзии собрано примерно половина (больше не получалось по неизвестным причинам) и прозы здесь намного больше (около 112000 документов, против 2071 по данным НКРЯ)

Что же это за стихи?

Пример текста раздела “Наивная поэзия”, который составляет большую всего объема датасета.

Помимо неправильных ударений, в НКРЯ много и просто странных предложений, где в нескольких местах стоят ударения.

Вот данный стих на сайте НКРЯ

На этом рисунке мы видим неправильно расставленные ударения. Слово седины в викисловаре. Нет ни одной реальной ситуации, где было бы на Е, помимо стихов, но даже учитывая это, тут явно ошибка.

Еще битые примеры

Тогда я решил прочитать историю НКРЯ и сначала показалось, что Яндекс на свои деньги сделал себе библиотеку, а потому не удивительно, что ей и не хотят делиться.

“Еще в 1980-е годы первые отечественные корпусные лингвисты задались вопросом, каким должен быть «машинный фонд» русского языка. Все началось в Центре лингвистической документации (кружок московских лингвистов на базе МЦНМО); РАН и ОТиПЛ МГУ тоже работали над Корпусом. А программно-техническую и финансовую поддержку НКРЯ оказала компания Яндекс.”

Также

“По мнению Ивана, данные и исходный код проекта должны стать открытыми. В ответ на это представитель Яндекса заявил, что выложить код в opensource сейчас невозможно, поскольку проект содержит большое количество внутренних инструментов, открывать которые Яндекс не готов.”

Источник: ссылка

Но когда я увидел это (новость от августа 2020 года), был сильно удивлен, узнав, что ныне оно спонсировалось государством объемом в 236 млн рублей:

“В Минобрнауки России подведены итоги конкурса, победители которого получат гранты на реализацию крупных научных проектов…

Объем финансирования на три года составит 236 млн рублей.

Грант выделен на комплексную работу, связанную с обновлением платформы Национального корпуса русского языка - информационно-справочной системы, основанной на собрании русских текстов разных типов и жанров в электронной форме..”

Источник: новость

236 миллионов рублей на такой криво размеченный датасет... либо я просто чего-то не понимаю.

Как я датасет готовил

  1. Обычные слова и омографы

Разработка началась не с НКРЯ, сначала я пробовал собрать корпус используя датасет mc4, а также искал корпуса на форумах.

Получилось около 100 тысяч предложений (больше даже словосочетаний). Результат на выходе, мягко говоря, не очень. Модель работала, если в предложении была пара-тройка слов, но на реальных предложениях качество оставляло желать лучшего.

Также было ещё несколько экспериментов по обучению:

Самый первый я уже описал, вышло плохо. Потому что в датасете были неправильные примеры, да и сами данные были далеки от нормальных текстов (предложения в 2-3 слова).

В качестве базовой модели использовал ai-forever/Rubert-base

  1. Добавил весь НКРЯ + старый датасет

Итог: Вышло плохо. Лучше, чем без НКРЯ, но все равно плохо

  1. Эксперимент только с НКРЯ

Качество выросло сильнее, но стихи опять же портили метрики. Также я только потом узнал о проблеме, что мой обработчик данных работает не совсем так, как нужно.

Модель на одном НКРЯ также путалась из-за стихов в обучающих данных, еще кривая подготовка данных портила метрики (наверное). Об ошибках при подготовке данных в следующем разделе.

  1. Модель, которая используется сейчас.

Также переработал скрипт подготовки данных таким образом, что если в тексте больше одного омографа, то этот текст трансформируется в такое количество примеров, сколько омографов в этом тексте.

Гистограмма точности моделей на 100 размеченных примерах.

Ошибки во время подготовки данных

  1. Я не предусмотрел момент, что в предложении может быть несколько омографов и они все одновременно помечались, из-за чего модель путалась. я повесил замки на двери -> я повесил <w>замки</w> на <w>двери</w>

Здесь все очевидно, останавливаться не будем.

  1. При фильтрации данных я совершил не самую очевидную, но фатальную ошибку, которая по итогу значительно испортила качество.

Попробуйте найти её в этом коде:

def  replace_accents(input_str):
	return input_str.replace('\u0300', '+').replace('\u0301','+')
def  rotate_stress(word):
	replacements = {'а+': '+а', 'е+': '+е', 'ё+': '+ё', 'и+': '+и', 'о+': '+о',
	'у+': '+у', 'ы+': '+ы', 'э+': '+э', 'ю+': '+ю', 'я+': '+я', 'А+': '+А', 'Е+': '+Е', 'Ё+': '+Ё', 'И+': '+И', 'О+': '+О',
	'У+': '+У', 'Ы+': '+Ы', 'Э+': '+Э', 'Ю+': '+Ю', 'Я+': '+Я'}
	for old, new in replacements.items():
		word = word.replace(old, new)
	return word

Не выходит?) А проблема в том, что заменяться ударение будет более одного раза. Например, в слове стои+т -> сто+ит (правильный формат), а потом ст+оит, т.к эта буква стоит сразу после И. Ошибка тупая и для меня с ходу не очевидная.

Небольшой обзор модуля

Установить пакет можно командой:

pip install ruaccent
from ruaccent import RUAccent

accentizer = RUAccent()

accentizer.load(omograph_model_size='big_poetry', use_dictionary=True)
text = 'на двери висит замок.'
print(accentizer.process_all(text))
  • На данный момент доступно 6 моделей. big (рекомендуется к использованию), medium и small. Рекомендуются к использованию модели версии poetry. Их названия big_poetry, medium_poetry, small_poetry.

  • Модель big имеет 178 миллионов параметров, medium 85 миллионов, а small 42 миллиона

  • Переменная use_dictionary отвечает за загрузку всего словаря (требуется больше ОЗУ), иначе все ударения расставляет нейросеть.

  • custom_dict отвечает за добавление своих вариантов ударений в словарь. Формат такой: {'слово': 'сл+ово с удар+ением'}

Итог

Конечно, даже с помощью довольно больших нейросетей не получится полностью решить акцентуацию, например, банально из-за того, что корпус НКРЯ покрывает не все омографы (а их больше 10000). Также, пока не получилось достичь приемлемого качества на Ё-омографах, но даже модель обученная на TTS датасете Natasha (а он не очень хороший, мягко говоря) уже сносно расставляет Ё. В планах эксперименты с дистилляцией моделей в более маленькие, чтобы увеличить скорость работы.

GitHub: RuAccent. Буду благодарен фидбеку.
Демо на HF с TeraTTS: ссылка
Телеграм бот с TeraTTS и RuAccent: ссылка

Комментарии (17)


  1. kovserg
    15.10.2023 18:27
    +6

    image


    1. ShashkovS
      15.10.2023 18:27
      +4

      Слово должно быть другое. Например, «Передохнуть»


  1. Shokoladkasoreshkami
    15.10.2023 18:27
    +2

    В английском, небось, всё давно решено с ударениями.


  1. Spokeepfat
    15.10.2023 18:27

    Вопрос банальный. Но насколько различаются ошибки при использовании разных моделей?


  1. AigizK
    15.10.2023 18:27
    +6

    Закрытые данные - это беда для всех языков. Особенно бесит, когда институт выиграл под это дело грант государственный, а потом не делится.
    На Силеро зря ругаетесь. Так то частная компания, которая давала возможность пользоваться бесплатно своими продуктами(не для ком пользования конечно).
    То что у вас лучше и открыто(сам пользуюсь вашей библиотекой, спасибо огромное!) позволит создавать еще качественнее TTS-ки. А всякие институты пусть и дальше сидят со своими данными.


  1. HepoH
    15.10.2023 18:27
    +4

    Статья хорошая, и проблема актуальная. Но было бы здорово увидеть в тексте расшифровку аббревиатуры, которая используется больше 20 раз. Например, через тэг abbr.


  1. snakers4
    15.10.2023 18:27
    +5

    Я не питаю к Silerо tts никакого негатива, но после слов про 100% решения ударений в этой статье, и убедившись в обратном на основании результатов теста, слегка разочарован.

    Пиар не имеет цвета, поэтому большое спасибо за бесплатную рекламу на Хабре. Но из того как делался тест очевидно, что задачей было скорее набросить на вентилятор (или какие-то иные цели) не разобравшись в вопросе, нежели чем делать какой-то даже квази-научный обзор.

    Я же разочарован, что человек, который хочет поднять ударения с колен, банально не умеет в анализ (или слишком умеет и подгоняет примеры под свою цель).

    но после слов про 100% решения ударений в этой статье

    Зачем говорить неправду? Мы никогда не говорили, что решили омографы или научили модели читать стихи.

    Модель со 99%+ точностью расставляет ударения для 4М слов, плюс есть некий небольшой словарь исключений, для случаев, когда модель ставит ударение неверно. Омографы "решены" просто выбором более популярного, что дает точность где-то в районе 30-40%.

    От себя отмечу, что наша модель расстановки ударений потребляет на 4-5 порядков меньше ресурсов чем ваша. И это решение было сделано намеренно. Но этого вы предпочли тоже не видеть.

    Регулярное гудение, шипение и т.д

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

    Ошибки на обычных словах. Математикой 5-го класса мы высчитываем, что на каждое предложение в среднем у нас по 2.2 ошибки в слове (в стихах)

    3 ошибки в словах

    Ошибки в текстах мы отдельно проанализируем и напишем, но скорее всего это - скрытые омографы.

    Хотя стоп, автор их не выложил (интересно почему):

    29 в стихах

    Мы перепроверим все стихи и напишем отдельный комментарий, но скорее всего см. ниже.

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

    Автор статьи подавал тексты без пунктуации, а точнее символ переноса строки у него использовался в качестве знака пунктуации. Но автор предпочёл не видеть этого. В боте мы это пофиксим (благо несложно), а публичные модели скорее являются движком для озвучки, нежели чем коммерческим продуктом

    Модель часто игнорирует знаки препинания

    Причина такая же как в пункте выше.

    Отсюда получается, что в 3.5 случаев из 4 автор банально даже не разобрался как правильно использовать модель.

    Плюс отмечу, что скорее всего его модель ударений потребляет на порядок больше ресурсов, чем вся наша модель синтеза. И на два порядка больше, чем наши новые коммерческие модели синтеза:

    На графике - число сгенерированных синтезом аудио в секунду. Например на 4 потоках процессора 113 секунд аудио в секунду. Метрики задержки считаются обратным счетом легко.
    На графике - число сгенерированных синтезом аудио в секунду. Например на 4 потоках процессора 113 секунд аудио в секунду. Метрики задержки считаются обратным счетом легко.


  1. snakers4
    15.10.2023 18:27
    +3

    И чтобы окончательно поставить точку в таком "детальном" разборе приведу примеры.

    Вот такой текст подавался на вход:

    Не жалею, не зову, не плачу,
    Все пройдет, как с белых яблонь дым.
    Увяданья золотом охваченный,
    Я не буду больше молодым.
    Ты теперь не так уж будешь биться,
    Сердце, тронутое холодком,
    И страна березового ситца
    Не заманит шляться босиком.

    И постулируется, что всё жует и ломает. Но если подать вот такой текст, то всё работает нормально более менее даже с авторской пунктуацией:

    Не жалею, не зову, не плачу, Все пройдет, как с белых яблонь дым. Увяданья золотом охваченный, Я не буду больше молодым. Ты теперь не так уж будешь биться, Сердце, тронутое холодком, И страна березового ситца Не заманит шляться босиком.

    С остальными стихами такая же фигня. Репостить "неправильные" смысла нет, просто вбейте "правильный" текст в бота и убедитесь сами.

    Поэтому мой комментарий насчет уровня критического анализа в статье: он или отсутствует как класс, или это специально сделано (я не готов верить, что человек этого не увидел), для черного пиара. Но вот что-то не вышло почему-то.

    Багулю с переносом строки в боте мы конечно поправим.


  1. snakers4
    15.10.2023 18:27
    +2

    Багулю с переносом строки в боте мы конечно поправим.

    Фикс в бота накатили.


  1. snakers4
    15.10.2023 18:27
    +2

    На данный момент доступно 6 моделей. big (рекомендуется к использованию)

    Модель big имеет 178 миллионов параметров

    В статье нет банальных понятных метрик:

    • Как быстро модель работает на 1 (4, 6) потоке процессора и какая у нее пропускная способность;

    • Размер самой модели, размер модели со словарём, всего пакета;

    • Размер словаря, количество решаемых омографов, количество решаемых омографов с буквой ё;

    • Какие-то вменяемые метрики точности на всех словах, омографах на сотнях тысяч или миллионах употреблений или слов (30 - 100 предложений можно зачеррипикать);

    И если это конечно "опенсорс", а не банальный пиар, то в статье не вижу ссылок на датасеты, вы же критикуете Яндекс за это. Хотя стоп какая-то ссылка нашлась, но уже показывает 404.

    Еще скажу например, что наша модель на 2 порядка меньше вашей, работает менее 1 мс на 1 потоке процессора и занимает менее 1 мегабайта места.

    В качестве примера статьи с метриками приведу опять же нашу статью, на которую вы ссылались, но ваш анализ статьи закончился вырыванием из контекста 1 предложения.


    1. den4ik_084720 Автор
      15.10.2023 18:27

      Но из того как делался тест очевидно, что задачей было скорее набросить на вентилятор (или какие-то иные цели) не разобравшись в вопросе, нежели чем делать какой-то даже квази-научный обзор.

      Тут не было критики, была небольшая демонстрация, дополнением к информации о публикации модели, поэтому не нужно раздувать тут свои теории заговора.

      Зачем говорить неправду? Мы никогда не говорили, что решили омографы или научили модели читать стихи.

      Модель со 99%+ точностью расставляет ударения для 4М слов, плюс есть некий небольшой словарь исключений, для случаев, когда модель ставит ударение неверно. Омографы "решены" просто выбором более популярного, что дает точность где-то в районе 30-40%.

      От себя отмечу, что наша модель расстановки ударений потребляет на 4-5 порядков меньше ресурсов чем ваша. И это решение было сделано намеренно. Но этого вы предпочли тоже не видеть

      1. Я тоже не сказал, что у вас решены были ударения в стихах. Я сказал, что от того, кто пишет "модель выдает 100% точность на нашем словаре" ожидал большего. Разочарованием было значительное отставание вашей модели от остальных, ведь она ошибалась в том числе в обычных словах, а не только стихах.

      2. Тест был простой и проводился в равных условиях, соответственно никаких поблажек из-за размера или чего-то ещё не будет.

      3. Довольно странно хвастаться скоростью, жертвуя при этом качеством.

      Ошибки в текстах мы отдельно проанализируем и напишем, но скорее всего это - скрытые омографы.

      Хотя стоп, автор их не выложил (интересно почему)

      Выложил, я считал ошибки в словах и омографах в одном и том же предложении. Действительно, здесь мой косяк.

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

      1. Ароматную (гул)

      2. голУбый

      3. вадУ

      4. собрАлись

      Также, прогнал эти примеры через вашего бота, и он ошибся на всех, кроме гудения (это не ошибка). От себя добавлю: скорее всего, вы используете seq2seq модель для простановки ударений, ведь слову “воду” в другом предложении оно читает правильно. Думаю, вы могли бы достичь большего качества, обрабатывая каждое слово отдельно. Не исключаю, что это могли быть и глюки ттс, с уверенностью сказать не могу, т.к. код отсутствует)

      По результатам перетеста, после фикса переносов строк, ошибок в стихах стало 8, вместо 29. Итого всего 27 ошибок, в основном на омографах.

      С остальными стихами такая же фигня. Репостить "неправильные" смысла нет, просто вбейте "правильный" текст в бота и убедитесь сами

      Поэтому мой комментарий насчет уровня критического анализа в статье: он или отсутствует как класс, или это специально сделано (я не готов верить, что человек этого не увидел), для черного пиара. Но вот что-то не вышло почему-то.

      Багулю с переносом строки в боте мы конечно поправим.

      То, что ваш синтез не обрабатывает переносы строк проблема ваша и только ваша. Я не эксплуатировал баг, т.к. в каждый синтезатор речи автоматически подавался текст такой, какой он был изначально. Опять же, условия равные. Кстати, несмотря на исправление ошибки модель все равно сильно шумит. (Зачем публиковать модель заведомо хуже, если люди будут пользовать 3-1 версией?)

      В статье нет банальных понятных метрик: 1) Как быстро модель работает на 1 (4, 6) потоке процессора и какая у нее пропускная способность; 2) Размер самой модели, размер модели со словарём, всего пакета; 3) Размер словаря, количество решаемых омографов, количество решаемых омографов с буквой ё; 4) Какие-то вменяемые метрики точности на всех словах, омографах на сотнях тысяч или миллионах употреблений или слов (30 - 100 предложений можно зачеррипикать);

      Насчет метрик вы правы, но

      1. У меня нет набора данных из тысяч размеченных предложений, все тесты были ручные

      2. Как вы представляете сравнение с остальными ттс? Были бы тысячи аудиозаписей, которые надо послушать. Если вы готовы поделиться таким набором данных, а потом помочь их прослушать, то я с удовольствием приведу это сравнение.

      И если это конечно "опенсорс", а не банальный пиар, то в статье не вижу ссылок на датасеты, вы же критикуете Яндекс за это. Хотя стоп какая-то ссылка нашлась, но уже показывает 404.

      Все ссылки на датасеты, на которых училась ruaccent, опубликованы в репе. Их всего 3. Забавно совпало, незадолго до публикации вашего коментария, представители нкря попросили скрыть датасет парса нкря. Вы проигнорировали оставшиеся 2 ссылки, уверен, это банальная невнимательность и ни в коем случае не манипуляция.

      Еще скажу например, что наша модель на 2 порядка меньше вашей, работает менее 1 мс на 1 потоке процессора и занимает менее 1 мегабайта места.

      Я уже понял, что ваша модель легче и быстрее, не нужно столько саморекламы) Все-таки я один (школьник-энтузиаст), а у вас большой прибыльный (надеюсь) бизнес и команда.

      Однако, я тоже работаю над уменьшением размера своих открытых моделей, но пока на все времени не хватает.

      Тем не менее, как я уже сказал, жертва качеством в угоду скорости не есть хорошо.

      В любом случае, спасибо за критику.


      1. snakers4
        15.10.2023 18:27
        +1

        В итоге, если убрать набросы и просуммировать то, что осталось в сухом остатке остается:

        • Слово голубой;

        • Блуждающая ошибка со словом вода;

        Всё остальное - это или следствие некачественного анализа, или наоборот, супер качественный точечный наброс.

        В любом случае, описанное в статье никак не отражает реальное состояние нашего синтеза речи. И я бы попросил вас сэкономить мне время на написание ответа и написать опровержение и хотя бы закрепить его в виде отдельного комментария сверху статьи.

        Тут не было критики, была небольшая демонстрация

        И по абсолютно случайному стечению обстоятельств все выбранные вами критерии оценки качества синтеза сразу "сломались", когда убрали переносы строк.

        И конечно я заметил иллюстрацию под этой "демонстрацией" и сделал соответствующие выводы.

        Довольно странно хвастаться скоростью, жертвуя при этом качеством.

        Довольно странно называть целенаправленную атаку через неподдерживаемый токен жертвой качеству.

        Никто качеством не жертвует. Мы заявляем точность 100% на некоем словаре. Словарь может быть неидеален, его довели до какого-то состояния, но работа по идее бесконечная априори.

        Всегда можно найти какой-то сабсет неправильных слов в словаре, собрать 30 предложений с ними, добавить "невидимых" токенов, и бац, скандал на пустом месте. Откровенно говоря, это скорее напоминает уже некоторые политтехнологии)

        Что же касается скорости, разница в 5 порядков - это не хвастовство, это следствие целенаправленной работы и заранее поставленных приоритетов. Еще мы умудрились простановку на 4М слов сжать в ~1 мегабайт, но если сам себя не похвалишь, то будешь читать вот такие статьи на Хабре.

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

        Гудения в боте я не услышал. Есть неидеальность разных голосов, но тут причины мало связанные с ударениями.

        "Голубой" - это косяк словаря, тут спасибо, сделаем еще одно просеивание нашего словаря против вашего. С "водой" - это косяк скорее всего акустической модели, такие баги возникают по весьма рандомным причинам.

        Остальное это омографы. "Cобрались" имеет 2 возможных прочтения, и мне лично неясно какое выбрать.

        По результатам перетеста, после фикса переносов строк, ошибок в стихах стало 8, вместо 29. Итого всего 27 ошибок, в основном на омографах.

        О чудо. И все 4 критерия оценки синтеза тоже испаряются - и не жуёт, и не гудит, и оказывается нормально читает.

        И да, о решении омографов мы в принципе не заявляли.

        То, что ваш синтез не обрабатывает переносы строк проблема ваша и только ваша.

        В каждый синтезатор речи автоматически подавался текст такой, какой он был изначально

        В боте мы эту нехитрую обработку уже добавили.

        Но с таким же успехом можно попробовать придумать другие "проблемы" - например не ставить пробелы после знаков препинания - и появится новая "только наша" проблема. Или заменять русские буквы на похожие латинские аналоги. Или заменять пробелы на другие пробельные символы. Ведь это же было в изначальном тексте.

        И внезапно пользователи миллион раз такое присылали, например копируя с сайтов с анекдотами (там люди так изголяются, видимо, чтобы отслеживать кто у кого копирует анекдоты).

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

        Если вы готовы поделиться таким набором данных, а потом помочь их прослушать, то я с удовольствием приведу это сравнение.

        Тут верну вопрос к вам, потому что вы автор статьи. Любой праздник за ваши деньги.

        От себя добавлю: скорее всего, вы используете seq2seq модель для простановки ударений, ведь слову “воду” в другом предложении оно читает правильно.

        Всегда интересно узнать много нового.

        Все-таки я один (школьник-энтузиаст). Однако, я тоже работаю над уменьшением размера своих открытых моделей, но пока на все времени не хватает.

        Есть поговорка - назвался груздем - полезай в кузовок.


  1. kraidiky
    15.10.2023 18:27
    +1

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


    1. den4ik_084720 Автор
      15.10.2023 18:27

      Я использовал корпус только для омографов, с ними все нормально там


  1. morozowdm
    15.10.2023 18:27
    +2

    Добрый день! На правах человека, имеющего к НКРЯ непосредственное отношение, отвечу на пост.

    Во-первых, не стоит краулить ресурсы, если при этом нарушается лицензия на использование сервиса. Наша лицензия расположена тут: https://ruscorpora.ru/page/terms/. Мы открыты к сотрудничеству и регулярно делимся имеющимися датасетами. Наиболее часто запрашиваемые перечислены на странице https://ruscorpora.ru/page/corpora-datasets/. Если вам необходим специфический датасет, об этом можно написать на почту, указанную на этой же странице. Для получения данных необходимо будет описать сценарии использования и заключить лицензионное соглашение на предоставление доступа к данным. Действительно, улаживание всех формальностей и подготовка датасета займёт какое-то время, но зато получившийся результат будет валиден с легальной точки зрения.

    Во-вторых, про критику качества разметки в Акцентологическом корпусе. Приведённые примеры из Наивной поэзии с ошибками не являются ни примерами из Наивной поэзии, ни примерами с ошибками. На скринах представлены стихотворения Муравьёва, относящиеся к 18-му веку. Как нетрудно проверить, в разделе Наивной поэзии нет ни одного текста, созданного ранее 1980 года (https://ruscorpora.ru/s/e0Y5N), и это неудивительно, так как этот раздел состоит из стихотворений, опубликованных на ресурсе stihi.ru. А ошибок на скринах нет, потому что в текстах Поэтического корпуса размеченные слоги (обозначенные иным, чем собственно ударения, знаком гравис над гласной буквой) — это далеко не всегда именно ударные слоги в речи автора. Например, в строке Когда̀ не в шу̀тку за̀немо̀г четыре сильных места (из них два в одном слове), а ударений только три.

    И, наконец, существенным недостатком подхода в целом является решение учиться на поэзии, причём всей, которая доступна в НКРЯ. Помимо специфичных ударений в поэтических текстах, ударения со временем нередко меняются. В корпус входят тексты начиная с XVIII века, и по нему можно проследить эволюцию русского ударения: когда люди вместо вёрсту, приклеи́л, Гамле́т, а́нглийский стали говорить версту́, прикле́ил, Га́млет, англи́йский, у каких авторов и дикторов сосуществует несколько вариантов, какие используют более архаичное ударение или, напротив, опережают время. Кроме того, раздел Наивной поэзии размечен в автоматическом режиме (подробнее об истории создания, составе корпуса и видах разметки в нём можно прочитать на странице описания корпуса: https://ruscorpora.ru/corpus/accent). Поэтому обучать на совокупности всех данных Акцентологического акцентуатор для обычного TTS — плохая затея.


    1. snakers4
      15.10.2023 18:27
      +8

      236 миллионов рублей на такой криво размеченный датасет... либо я просто чего-то не понимаю.

      Есть такая мировая практика - приватизация прибылей и национализация убытков.

      Яндекс по сути национализировал убыток от создания корпуса, по сути никуда его не выложил (то есть выложил для галочки), а лицензия краулить запрещает.

      А дальше коммерческая компания, получившая ~236м на корпус из наших с вами налогов и имеющая яркую анти-российскую позицию по сути приватизирует прибыль от русского национального корпуса, решая кому дать, а кому не дать корпус.

      Если вам необходим специфический датасет, об этом можно написать на почту, указанную на этой же странице.

      На почту можно не ответить, или отвечать 9 месяцев, или ответить по формальному признаку, или потерять письмо.

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

      Так больше людей будет обращаться к вам. Я пропиарю эту ветку по всех своих каналах, NLP получит сильный буст.

      заключить лицензионное соглашение на предоставление доступа к данным

      А лицензионное соглашение подписывается не с израильской или казахской компанией?

      Мы открыты к сотрудничеству и регулярно делимся имеющимися датасетами.

      Отлично! Тогда обращаюсь к вам от имени ООО Силеро и прошу выделить нам анонимизированную часть корпуса с правильно расставленными ударениями (в соответствии с современными нормами языка), если таковая имеется.

      Цель - добавление функционала расстановки ударений в омографах в наш публично доступный синтез речи.

      Для поддержания открытости диалога, ответить прошу мне публично под этим комментарием на Хабре и приложить ваш лицензионный договор и описать кратко типовые сроки / финансовые / юридические условия.

      Ответить прошу в течение 5 рабочих дней.


  1. snakers4
    15.10.2023 18:27

    del

    Не туда тыкнул.