Когда мы тестировали отдельные модели, то мы использовали известные открытые датасеты типа RuLibrispeech https://huggingface.co/datasets/bond005/rulibrispeech, Golos https://huggingface.co/datasets/bond005/sberdevices_golos_100h_farfield и т.п. общим объёмом более 10 часов тестовой речи, а когда тестировали весь "Писец" целиком, то собрали специальный датасет длинных звукозаписей (20-30 минут каждая) на различные темы - от политики до математики https://huggingface.co/datasets/dangrebenkin/long_audio_youtube_lectures. В этом датасете есть выступление известного корееведа Ланькова, лекция по философии, речь Жириновского на политическую тему, лекция врача-фтизиатра, лекция популяризатора математики Савватеева и др. - в общей сложности около трёх часов. И на основе этих данных мы делали выводы о качестве моделей и, в целом, "Писца". Кажется, что результаты распознавания на трёхминутной звукозаписи могут быть не сильно репрезентативными :-)
Вообще, результаты распознавания той или иной системы/модели могут сильно зависеть от уровня шумов и от предметной области (бытовая речь, звонки автодилерского колл-центра, профессиональное совещание врачей, голосовые команды управления "умным домом" и тому подобное). Поэтому для тестирования лучше собирать речевой корпус объёмом не менее часа звучащей речи (как минимум) и, желательно, на разные темы и в разных условиях.
Если же говорить не только о формализованном тестировании, а ещё и о практической эффективности, то я могу привести пример применения "Писца" сотрудниками пресс-службы Новосибирского государственного университета для расшифровки звукозаписей интервью на различные темы - от медицины до искусственного интеллекта. Коллеги-журналисты были очень довольны. Обычно у них 20-минутное интервью вручную обрабатывается около полутора часов, а часовое интервью - от четырёх часов (в зависимости от качества). После применения "Писца" они здорово сэкономили своё время, едва ли не на порядок.
Насчёт человеко-часов - признаться, не считал. Я начал работу над "Писцом" примерно с 2022 года, но в свободное от работы (преподавания в университете и других занятий) время. Соответственно, потраченные мной и коллегами человеко-часы "размазаны" по длительному периоду времени, и поскольку я их не фиксировал, то сейчас восстановить сложно.
Насчёт коммерциализации - мы сделали облачную версию "Писца" https://pisets.sibnn.ai для тех, кто не может или не хочет устанавливать себе опенсорсного "Писца" с гитхаба. После регистрации в личном кабинете можно загружать свои звукозаписи для распознавания с поминутной тарификацией.
А насчёт CER — да, надо и этот показатель привести, согласен на 100%.
Но, опять-таки, скудный словарь и маленькая LM в исходной модели KaldiRu — это штуки, которые легко фиксятся без дообучения на акустических данных, и это плюс, с моей точки зрения.
Для CMU Sphinx точно есть русская модель, и не одна. Для HTK (и, соответственно, для Julius) не помню уже (украинская вот есть, это я могу сказать). Для end2end-систем с русскоязычными предобученными моделями, по-моему, совсем беда. В частности, для той же DeepSpeech2 пока что нет русской модели (или я не нашёл). А проводить эксперименты по обучению собственных моделей не планировалось в объёме данной статьи — по сути дела, первой для автора. На это предполагается отдельная статья.
Насчёт примера с Kaldi и другой системой — могу предположить, что тут Kaldi сгенерировала первый вариант, а другая система — второй, раз у Kaldi оказался WER в два раза хуже на этом датасете :) Но, например, в моей практике были и обратные примеры, когда и Kaldi, и другая система показывали сопоставимые (при этом достаточно приемлемые) результаты на сложных предметно-ориентированных звукозаписях из области нефтехимии, со всякими там «полипропиленами» и т.п.
Опять-таки, у опенсорсной компонентной системы типа Kaldi больше «степеней свободы» в плане тюнинга, даже если сравнивать с опенсорсной end2end-системой, не говоря уже о коммерческом «чёрном ящике» в облаке. Мы же можем взять и перенастроить не только языковую модель, но и словарь Kaldi под новую предметную область, если у нас есть модуль автоматического транскрибирования. Т.е. мы не отдаём всё на откуп машинному обучению («вот тебе, алгоритм, звукозаписи, а вот их аннотации, и научись превращать звуки в буквы»), а вносим априорную информацию в модель, что, по идее, должно повышать робастность всей системы распознавания в целом. Я понимаю, что у Kaldi могут быть проблемы со скоростью (тот же wav2letter существенно круче в этом плане, достаточно вспомнить статью с его описанием), но с качеством в зависимости от датасета (решаемой задачи) и модели бывает по-разному — и хуже, и лучше. Мне, например, непонятно, почему авторы статьи про wav2letter опубликовали сравнение с Kaldi только по быстродействию, а не по качеству распознавания.
Вы читать умеете? Я не просил вас нагуглить мне меры качества. Я просил показать статьи, где используется одновременно 15 мер качества, а не стандартные WER и CER (ну или ещё PER, если эксперименты проводятся на чём-то типа TIMIT).
Хоть я и не автор, но позволю себе, во-первых, согласиться с ними, но, во-вторых, при этом некоторые из замечаний прокомментировать.
1. Эксперименты на валидационных сабсетах из open_stt автору следует провести и дополнить статью их результатами, это да.
2. Также имеет смысл аугментировать тестовые записи фоновым шумом, например, из датасета Freesound Audio Tagging, и посмотреть, какая система чего стоит на зашумлённых данных.
3. По поводу end2end — по идее, про это должен быть отдельный пост. Но лично я сейчас выскажу одну субъективную вещь. End2End — это, конечно, хорошая штука, но не всегда. В любом случае, end2end системы типа DeepSpeech, wav2letter и т.п. демонстрируют качество распознавания хуже человека. Для компонентных систем типа Kaldi, состоящих из акустико-фонетического блока и языковой модели, это тоже справедливо, но есть нюанс. Такие вот компонентные системы гораздо легче «тюнятся» под конкретную задачу, чем end2end — достаточно просто модифицировать языковую модель, для чего не нужны речевые корпуса, а хватит только текстовых. Соответственно, именно поэтому я считаю, что в практическом плане Kaldi выглядит не менее интересно, чем любая существующая end2end-система.
4. По поводу улучшенных фонемно-нейросетевых подходов — если я правильно понимаю, в Kaldi используется нейросеть типа TDNN — что-то в духе одномерных свёрточных сетей. Т.е. речь не идёт про GMM+HMM, пусть даже обученные дискриминативно, а именно про нейросети. В принципе, Kaldi поддерживает (или в Kaldi можно встроить) разные типы сетей — например, VAE для предобучения без учителя. Можно использовать LSTM или SRU. Но насколько оправдано это в одной небольшой научно-популярной публикации, для которой, к тому же, планируется продолжение? Цель конкретно этой публикации — показать, что Kaldi тоже можно использовать, и что для этого не обязательно брать какой-то «черный ящик» от корпораций. Качество при этом будет отличаться, но не в разы, а поскольку Kaldi позволяет «малой кровью» дотюнивать модель «под себя» без перестройки акустико-фонетического модуля, то эту разницу можно нивелировать и даже улучшить результаты для конкретного домена.
Да, с JSGF-грамматикой на ограниченном домене (например, при распознавании речевых геозапросов в не слишком шумных условиях) CMU Sphinx работает вообще неплохо.
А эксперименты по распознаванию произвольной речи с большим словарём (выше 800 тысяч словоформ) мы делали вот так (смотрите именно веточку ruscorpora-ngrams). Скрипт, который запускает эксперименты с вышеупомянутой 10-фолдовой кросс-валидацией, можно посмотреть вот тут
Если же вам не интересны эксперименты, а хочется потестить уже готовую модель, то можно использовать вот этот наш репозиторий. Но каких-то крутых результатов не ждите, это же CMU Sphinx и HMM :-)
Вкратце методика экспериментов была такая. Мы использовали наш словарь произношений voxforge_ru.dic, полученный на основе слов из НКРЯ, преобразовывали N-граммы оттуда же в ARPA-формат с помощью библиотеки SRILM и конвертировали в бинарный формат с помощью sphinx_lm_convert (так, как описано в этом туториале, потому что языковая модель в бинарном формате быстрее загружается и работает). Транскрипции для словаря произношений мы генерировали с помощью нашего russian_g2p
Сам VoxforgeRu мы били на десять фолдов так, чтобы звукозаписи одного и того же диктора не попадали в разные фолды. Дикторов мы различали по их именам (никам), при этом отдельная проблема заключалась в том, как разбить анонимных дикторов, которых была примерно треть корпуса. В итоге мы решили различать анонимусов по датам (если анонимус сделал два сеанса записей, отстоящие друг от друга на неделю, то это не один, а два разных анонимуса). Ну и получилось то, что получилось. К сожалению, VoxforgeRu до недавнего времени был единственным открытым корпусом русской речи. Очень здорово, что наши коллеги недавно сделали ещё один habr.com/ru/post/450760, и сейчас, конечно же, стоит экспериментировать на нём.
Насчёт того, что ваши цифры реальные, я глубоко сомневаюсь. Сам Гугл, например, в статье «Bytes are all you need» пишет, что у них речевой корпус достигал объёма меньше 100 тысяч часов (76 тысяч часов — это меньше 100 тысяч часов, и я надеюсь, что вы это понимаете) и при этом данный речевой корпус был мультиязычным, а не моноязычным. Объём корпуса речевых данных для экспериментов, проводившихся другим «гигантом», Байду, с его end-to-end-моделью достигал тоже порядка десяти тысяч часов. Так что про миллион часов «поздравляю вас соврамши». Такое впечатление, что вы не понимаете ни то, что пишете, ни то, что читаете.
Про 15 и более метрик — нигде, ни в одной научной работе нет оценки по 15 метрикам. Если вы приведёте мне публикацию в рецензируемом издании или на arxiv, где авторы оценивают алгоритм распознавания по 15 мерам качества, то и я, и другие люди, возможно, читающие нашу переписку, будут весьма признательны. А пока что это опять художественное фэнтези от сетевого анонимуса.
Ну и в завершение по поводу «ваших тусовок», на которых нас не видно. Я более или менее знаком с теми коллективами в России, которые занимаются исследованиями по распознаванию речи (но не со всеми людьми в них, разумеется). Возможно, где-то там тусуется некий неизвестный мне Wicron. Но, судя по вашему стилю общения, «ваша тусовка» — это «Серый, Зубастый и Дима Большой»
Учительница спрашивает Вовочку, знает ли он Циолковского, Кулибина, Попова.
– А вы знаете Серого, Зубастого и Диму Большого?
– Не знаю, – отвечает ошарашенная учительница.
– Ну так нечего меня своей бандой пугать.
CMU Sphinx довольно-таки плохо распознаёт зашумленную речь, поскольку его матаппарат (гауссовы смеси + скрытые марковские модели) нельзя назвать робастным. Всё-таки старые добрые скрытые марковские модели имеют свой предел. Но на относительно «чистых» звукозаписях да с хорошей языковой моделью (например, на основе НКРЯ) CMU Sphinx ещё что-то может! На упомянутом здесь VoxforgeRu нам удалось получить WER примерно 20% на 10-фолдовой кросс-валидации (с отклонением в 5%).
А вот Kaldi существенно более крут, чем CMU Sphinx, по ряду параметров и — по акустико-фонетической модели, и по реализации языковой модели тоже. Собственно, я немного удивился, почему у автора получился WER для всех сравниваемых систем хуже, чем у нас на CMU Sphinx, хотя, по идее, у нас на CMU Sphinx должно быть хуже всех. Возможно, что у нас была не совсем корректная постановка этого эксперимента. Например, языковую модель мы настраивали на базе N-грамм из НКРЯ, а тексты VoxforgeRu основаны, если я не ошибаюсь, на «Аэлите» Толстого, которая входит в НКРЯ. Ну и разбиение мы старались делать так, чтобы одни и те же дикторы не попали в несколько фолдов, но всё же могли где-то накосячить (там много анонимусов участвовало в записях, и корректно разнести их по фолдам — целая проблема).
А вообще, люди вот сделали большой открытый датасет русской речи, на порядки превышающий VoxforgeRu по размеру, и на нём будет интересно провести эксперименты: habr.com/ru/post/450760
Т.е. ваше утверждение про «миллион часов» было не художественной гиперболой, а вы всерьёз это тут пишите? У меня просто нет слов. И путать объём исходного датасета и процедуру аугментации этого датасета — просто прекрасно. Фейспалм.
Мне вот просто интересно, откуда вы взяли, что модель Николая Шмырёва обучена на Voxforge? По моим данным, там использовались только звукозаписи с Ютуба.
И ещё момент: утверждение, что модель гугла или яндекса лучше — это очень сильное утверждение. Оно требует доказательства. Модели что Яндекса, что Гугла имеют «под капотом» математику, во многом аналогичную той, что внутри Kaldi. Нигде нет никакого «секретного ингредиента». Более того, Гугл вообще публикует результаты своих исследований в открытом доступе ai.google/research/pubs/?team=perception А датасет в «миллион часов» — это даже не фантастика, это художественное фэнтези.
Привет! Действительно, секция получилась несколько смещённой в сторону NLP и компьютерной лингвистики. Но, по-моему, это не баг, а фича! И по собственному опыту, и по опыту моих коллег могу судить, что сейчас становится всё больше и больше прикладных задач, связанных с чат-ботами и компьютерной лингвистикой. Кроме того, есть исследовательские прорывы в этой области за 2018 год. И потому акцент на ML в обработке естественного языка получился довольно естественным (простите за каламбур!)
Спасибо! Буду признателен за обратную связь.
Спасибо за интересное замечание!
Когда мы тестировали отдельные модели, то мы использовали известные открытые датасеты типа RuLibrispeech https://huggingface.co/datasets/bond005/rulibrispeech, Golos https://huggingface.co/datasets/bond005/sberdevices_golos_100h_farfield и т.п. общим объёмом более 10 часов тестовой речи, а когда тестировали весь "Писец" целиком, то собрали специальный датасет длинных звукозаписей (20-30 минут каждая) на различные темы - от политики до математики https://huggingface.co/datasets/dangrebenkin/long_audio_youtube_lectures. В этом датасете есть выступление известного корееведа Ланькова, лекция по философии, речь Жириновского на политическую тему, лекция врача-фтизиатра, лекция популяризатора математики Савватеева и др. - в общей сложности около трёх часов. И на основе этих данных мы делали выводы о качестве моделей и, в целом, "Писца". Кажется, что результаты распознавания на трёхминутной звукозаписи могут быть не сильно репрезентативными :-)
Вообще, результаты распознавания той или иной системы/модели могут сильно зависеть от уровня шумов и от предметной области (бытовая речь, звонки автодилерского колл-центра, профессиональное совещание врачей, голосовые команды управления "умным домом" и тому подобное). Поэтому для тестирования лучше собирать речевой корпус объёмом не менее часа звучащей речи (как минимум) и, желательно, на разные темы и в разных условиях.
Если же говорить не только о формализованном тестировании, а ещё и о практической эффективности, то я могу привести пример применения "Писца" сотрудниками пресс-службы Новосибирского государственного университета для расшифровки звукозаписей интервью на различные темы - от медицины до искусственного интеллекта. Коллеги-журналисты были очень довольны. Обычно у них 20-минутное интервью вручную обрабатывается около полутора часов, а часовое интервью - от четырёх часов (в зависимости от качества). После применения "Писца" они здорово сэкономили своё время, едва ли не на порядок.
Насчёт человеко-часов - признаться, не считал. Я начал работу над "Писцом" примерно с 2022 года, но в свободное от работы (преподавания в университете и других занятий) время. Соответственно, потраченные мной и коллегами человеко-часы "размазаны" по длительному периоду времени, и поскольку я их не фиксировал, то сейчас восстановить сложно.
Насчёт коммерциализации - мы сделали облачную версию "Писца" https://pisets.sibnn.ai для тех, кто не может или не хочет устанавливать себе опенсорсного "Писца" с гитхаба. После регистрации в личном кабинете можно загружать свои звукозаписи для распознавания с поминутной тарификацией.
Но, опять-таки, скудный словарь и маленькая LM в исходной модели KaldiRu — это штуки, которые легко фиксятся без дообучения на акустических данных, и это плюс, с моей точки зрения.
Насчёт примера с Kaldi и другой системой — могу предположить, что тут Kaldi сгенерировала первый вариант, а другая система — второй, раз у Kaldi оказался WER в два раза хуже на этом датасете :) Но, например, в моей практике были и обратные примеры, когда и Kaldi, и другая система показывали сопоставимые (при этом достаточно приемлемые) результаты на сложных предметно-ориентированных звукозаписях из области нефтехимии, со всякими там «полипропиленами» и т.п.
Опять-таки, у опенсорсной компонентной системы типа Kaldi больше «степеней свободы» в плане тюнинга, даже если сравнивать с опенсорсной end2end-системой, не говоря уже о коммерческом «чёрном ящике» в облаке. Мы же можем взять и перенастроить не только языковую модель, но и словарь Kaldi под новую предметную область, если у нас есть модуль автоматического транскрибирования. Т.е. мы не отдаём всё на откуп машинному обучению («вот тебе, алгоритм, звукозаписи, а вот их аннотации, и научись превращать звуки в буквы»), а вносим априорную информацию в модель, что, по идее, должно повышать робастность всей системы распознавания в целом. Я понимаю, что у Kaldi могут быть проблемы со скоростью (тот же wav2letter существенно круче в этом плане, достаточно вспомнить статью с его описанием), но с качеством в зависимости от датасета (решаемой задачи) и модели бывает по-разному — и хуже, и лучше. Мне, например, непонятно, почему авторы статьи про wav2letter опубликовали сравнение с Kaldi только по быстродействию, а не по качеству распознавания.
Хоть я и не автор, но позволю себе, во-первых, согласиться с ними, но, во-вторых, при этом некоторые из замечаний прокомментировать.
1. Эксперименты на валидационных сабсетах из open_stt автору следует провести и дополнить статью их результатами, это да.
2. Также имеет смысл аугментировать тестовые записи фоновым шумом, например, из датасета Freesound Audio Tagging, и посмотреть, какая система чего стоит на зашумлённых данных.
3. По поводу end2end — по идее, про это должен быть отдельный пост. Но лично я сейчас выскажу одну субъективную вещь. End2End — это, конечно, хорошая штука, но не всегда. В любом случае, end2end системы типа DeepSpeech, wav2letter и т.п. демонстрируют качество распознавания хуже человека. Для компонентных систем типа Kaldi, состоящих из акустико-фонетического блока и языковой модели, это тоже справедливо, но есть нюанс. Такие вот компонентные системы гораздо легче «тюнятся» под конкретную задачу, чем end2end — достаточно просто модифицировать языковую модель, для чего не нужны речевые корпуса, а хватит только текстовых. Соответственно, именно поэтому я считаю, что в практическом плане Kaldi выглядит не менее интересно, чем любая существующая end2end-система.
4. По поводу улучшенных фонемно-нейросетевых подходов — если я правильно понимаю, в Kaldi используется нейросеть типа TDNN — что-то в духе одномерных свёрточных сетей. Т.е. речь не идёт про GMM+HMM, пусть даже обученные дискриминативно, а именно про нейросети. В принципе, Kaldi поддерживает (или в Kaldi можно встроить) разные типы сетей — например, VAE для предобучения без учителя. Можно использовать LSTM или SRU. Но насколько оправдано это в одной небольшой научно-популярной публикации, для которой, к тому же, планируется продолжение? Цель конкретно этой публикации — показать, что Kaldi тоже можно использовать, и что для этого не обязательно брать какой-то «черный ящик» от корпораций. Качество при этом будет отличаться, но не в разы, а поскольку Kaldi позволяет «малой кровью» дотюнивать модель «под себя» без перестройки акустико-фонетического модуля, то эту разницу можно нивелировать и даже улучшить результаты для конкретного домена.
А эксперименты по распознаванию произвольной речи с большим словарём (выше 800 тысяч словоформ) мы делали вот так (смотрите именно веточку ruscorpora-ngrams). Скрипт, который запускает эксперименты с вышеупомянутой 10-фолдовой кросс-валидацией, можно посмотреть вот тут
Если же вам не интересны эксперименты, а хочется потестить уже готовую модель, то можно использовать вот этот наш репозиторий. Но каких-то крутых результатов не ждите, это же CMU Sphinx и HMM :-)
Вкратце методика экспериментов была такая. Мы использовали наш словарь произношений voxforge_ru.dic, полученный на основе слов из НКРЯ, преобразовывали N-граммы оттуда же в ARPA-формат с помощью библиотеки SRILM и конвертировали в бинарный формат с помощью sphinx_lm_convert (так, как описано в этом туториале, потому что языковая модель в бинарном формате быстрее загружается и работает). Транскрипции для словаря произношений мы генерировали с помощью нашего russian_g2p
Сам VoxforgeRu мы били на десять фолдов так, чтобы звукозаписи одного и того же диктора не попадали в разные фолды. Дикторов мы различали по их именам (никам), при этом отдельная проблема заключалась в том, как разбить анонимных дикторов, которых была примерно треть корпуса. В итоге мы решили различать анонимусов по датам (если анонимус сделал два сеанса записей, отстоящие друг от друга на неделю, то это не один, а два разных анонимуса). Ну и получилось то, что получилось. К сожалению, VoxforgeRu до недавнего времени был единственным открытым корпусом русской речи. Очень здорово, что наши коллеги недавно сделали ещё один habr.com/ru/post/450760, и сейчас, конечно же, стоит экспериментировать на нём.
Насчёт того, что ваши цифры реальные, я глубоко сомневаюсь. Сам Гугл, например, в статье «Bytes are all you need» пишет, что у них речевой корпус достигал объёма меньше 100 тысяч часов (76 тысяч часов — это меньше 100 тысяч часов, и я надеюсь, что вы это понимаете) и при этом данный речевой корпус был мультиязычным, а не моноязычным. Объём корпуса речевых данных для экспериментов, проводившихся другим «гигантом», Байду, с его end-to-end-моделью достигал тоже порядка десяти тысяч часов. Так что про миллион часов «поздравляю вас соврамши». Такое впечатление, что вы не понимаете ни то, что пишете, ни то, что читаете.
Про 15 и более метрик — нигде, ни в одной научной работе нет оценки по 15 метрикам. Если вы приведёте мне публикацию в рецензируемом издании или на arxiv, где авторы оценивают алгоритм распознавания по 15 мерам качества, то и я, и другие люди, возможно, читающие нашу переписку, будут весьма признательны. А пока что это опять художественное фэнтези от сетевого анонимуса.
Ну и в завершение по поводу «ваших тусовок», на которых нас не видно. Я более или менее знаком с теми коллективами в России, которые занимаются исследованиями по распознаванию речи (но не со всеми людьми в них, разумеется). Возможно, где-то там тусуется некий неизвестный мне Wicron. Но, судя по вашему стилю общения, «ваша тусовка» — это «Серый, Зубастый и Дима Большой»
А вот Kaldi существенно более крут, чем CMU Sphinx, по ряду параметров и — по акустико-фонетической модели, и по реализации языковой модели тоже. Собственно, я немного удивился, почему у автора получился WER для всех сравниваемых систем хуже, чем у нас на CMU Sphinx, хотя, по идее, у нас на CMU Sphinx должно быть хуже всех. Возможно, что у нас была не совсем корректная постановка этого эксперимента. Например, языковую модель мы настраивали на базе N-грамм из НКРЯ, а тексты VoxforgeRu основаны, если я не ошибаюсь, на «Аэлите» Толстого, которая входит в НКРЯ. Ну и разбиение мы старались делать так, чтобы одни и те же дикторы не попали в несколько фолдов, но всё же могли где-то накосячить (там много анонимусов участвовало в записях, и корректно разнести их по фолдам — целая проблема).
А вообще, люди вот сделали большой открытый датасет русской речи, на порядки превышающий VoxforgeRu по размеру, и на нём будет интересно провести эксперименты: habr.com/ru/post/450760
А «ваша тусовка» — это кто, осмелюсь спросить?
И ещё момент: утверждение, что модель гугла или яндекса лучше — это очень сильное утверждение. Оно требует доказательства. Модели что Яндекса, что Гугла имеют «под капотом» математику, во многом аналогичную той, что внутри Kaldi. Нигде нет никакого «секретного ингредиента». Более того, Гугл вообще публикует результаты своих исследований в открытом доступе ai.google/research/pubs/?team=perception А датасет в «миллион часов» — это даже не фантастика, это художественное фэнтези.