сова скрипт что такое
Довольно автоматизации ― пора нарисовать сову на PowerShell и научить консоль говорить
Сегодня звездный час PowerShell: время странных скриптов и созданных при помощи «Мощной Оболочки» игр. Если серьезная рутина вам надоела и хочется посмотреть на иные таланты PowerShell ― приглашаю под кат.
Говорящая консоль
Проверим работу интерфейса следующим скриптом:
В системе может быть установлено несколько голосов ― есть варианты разных национальностей, возрастов и полов, каждый со своим именем. Посмотреть общий список можно командой:
Ирина и Зира готовы.
Дополнительных «воображаемых друзей» можно скачать вместе с языком ввода через стандартный интерфейс Windows, с сайта Microsoft или из внешних источников.
Выбрать подходящий голос можно командой:
Вооружившись этим знанием можно собрать мониторинг, который говорил бы о падении сервера, или удивить коллег с помощью любимого инструмента удаленного доступа к их машинам. На вооружение можно взять наш материал «1000++ способ запуска команд на удаленном компьютере».
В качестве готовых примеров оставлю несколько ссылок:
Но одной возможности говорить нам, конечно, недостаточно. Как насчет того, чтоб консоль еще приветствовала мелодией при открытии?
Привет, %USERNAME%
В PowerShell есть понятие профиля. Почитать об этом подробнее можно в материале Windows PowerShell Profiles на портале TechNet. Отмечу только, что при помощи профилей можно настраивать следующие сущности:
Последняя опция позволяет, например, проигрывать музыку каждый раз, когда некто открывает окно PowerShell. В качестве подготовки нужно создать профиль, если его до сих пор нет, следующей командой:
Теперь можно изменить профиль любым редактором – например, PowerShell ISE:
В качестве задачи можно использовать и материал из предыдущего раздела, чтобы консоль при запуске рассказывала сказку или важно приветствовала системного администратора по имени-отчеству. А можно банально открывать DVD-ROM (у кого такие еще остались) командой:
Здесь для открытия «подставки для кофе» используется объект WMPlayer.OCX.7. Его можно использовать и по назначению ― для проигрывания музыки.
Делаем консольный плеер
Если старый добрый mpd по каким-то причинам не нравится и хочется непременно изобрести велосипед ― а точнее посмотреть на готовый ― то инженер, разработчик и просто хороший человек Prateek Singh предложил в своем блоге интересный вариант применения возможностей системного объекта для управления Windows Media Player и PowerShell. Особенность скрипта в том, что он умеет перемешивать воспроизводимые треки.
Скрипт можно сразу добавить в профиль PowerShell, и дальше запускать плеер одной командой:
Запуск плеера.
Для управления воспроизведением команду можно запустить с параметрами Shuffle (перемешать), Loop (зациклить воспроизведение) и Stop (остановить воспроизведение), а при переходе к следующему треку в нижнем углу появится системное уведомление.
Уведомление о запуске нового трека.
Полный текст скрипта доступен в репозитории автора.
В блоге у Prateek Singh много скриптов разной степени полезности, поэтому дам ссылки лишь на некоторые из них:
Прогноз погоды на PowerShell. Потому что можем.
Раз уж мы ударились в мультимедиа, расскажу и про вариант создания объектов для 3D-печати, моделирования и прочей дополненной реальности.
Как нарисовать сову, теперь в 3D!
В январе Cosmos Darwin опубликовал в своем блоге материал Create mixed reality models in PowerShell, в котором рассматривается возможность формирования файлов 3D-моделей при помощи PowerShell.
Если сохранить получившийся файл и открыть его графическим просмотрщиком (например, «средством просмотра смешанной реальности»), то действительно будет отрисован куб.
Свежесозданный куб.
Создавать файлы с более сложными структурами вручную сложнее, поэтому на помощь приходят математика и PowerShell.
Например, можно создать бокал вина во славу Диониса или Бахуса. Поскольку бокал является фигурой вращения, достаточно создать лишь половину бокала. Тогда при вращении получится желаемый сосуд.
При вращении этой фигуры получится бокал.
Дальше добавим немного материалов, вспомним школьный курс математики, оформим в виде скрипта и получим прекрасный бокал.
Готовый бокал.
Готовые скрипты и текстуры доступны в аккаунте автора GitHub в проекте obj-in-powershell. Теперь перейдем к более практичному применению PowerShell и 3D.
Мониторинг на Unity
Только представьте: красивая карта на большом экране в кабинете IT, на которой отображаются объекты системы мониторинга и их состояние. А когда нет посторонних глаз, карту можно свернуть и смотреть «Симпсонов».
В качестве поставщика карты могут выступать те же Zabbix или Fpinger. Но несмотря на избыточную информативность, с красотой у них не очень. Исправить это упущение взялся Micky Balladelli, применив для визуализации возможности Unity в виде набора приложений PSUnity.
Идея проста ― на определенном порту запускается сервер, а для добавления объектов мониторинга или изменения их статусов используется набор командлетов PowerShell. Клиент подключается к серверу и отображает получившуюся картину. Статусы объектов можно брать из привычной системы мониторинга – например, из Zabbix или SCOM.
При старте сервера без объектов можно наблюдать одинокого R2D2 в чистом поле:
Дроид, которого мы ищем.
По кнопке View можно переключать режимы ― ЦОД, планета, космос. Довольно пустынно.
Незаселенная планета мониторинга.
Ситуация меняется, когда мы начинаем добавлять объекты при помощи PowerShell.
К самому серверу можно подключиться командой:
Добавлять объекты на карту с дроидом можно при помощи командлета Set-PSUnityServer:
Указанная выше команда добавит сервер со зловещим описанием.
Добавили сервер на карту, и R2D2 начинает его изучать.
Для добавления города на планету и изменения его статуса можно использовать следующие команды:
Два города добавлены.
Еще один интересный вид ― это два ЦОДа с виртуальными машинами и их статусами. Добавим пару:
Теперь создадим множество виртуальных машин в основном датацентре:
На выходе будет такой результат:
Виртуалки крутятся. Красота!
Скачать сам сервер с клиентом, набор командлетов и примеры скриптов можно в разделе releases проекта PSUnity. Раз мы уже добрались до Unity – самое время для пары незамысловатых игр на PowerShell.
Gamedev и PowerShell
Несколько лет назад мир «взорвала» игра под названием 2048. Изначально браузерный вариант получил множество адаптаций, в том числе и под мобильные устройства. Конечно же, нашелся и клон на PowerShell, созданный уже упомянутым Micky Balladelli. Скрипт доступен в блоге автора, в статье 2048 en Powershell.
Интерфейс игры.
В качестве второй популярной игры можно привести Flappy Bird, изначально созданную для мобильных устройств. Если вы уже успели в ярости разбить смартфон и забыть игру как страшный сон ― позвольте напомнить о ней клоном на PowerShell.
Сам клон доступен в репозитории Flappy Shell инженера Apoorv Verma.
Вспоминаем игру, собираем стены, получаем негатив.
В завершении статьи мне хотелось бы привести ссылку на адаптацию любимой игры детства ― Space Invaders. Решение на PowerShell доступно для загрузки в статье Adrian Milliner с говорящим названием Space Invaders. Скрипт – не просто скрипт, а полноценная игра со звуком. Осторожнее на работе.
Ностальгируем с PowerShell, борясь с инопланетными захватчиками.
Если у вас есть свои интересные и неординарные скрипты на PowerShell ― вы знаете что делать.
50 разных скриптов для ВКонтакте
Накрутка INSTAGRAM: http://goo.gl/U7B5nN
Популярное сообщение!
Всем привет) Знаю, есть люди, которые не доверяют программам свои данные, и им проще воспользоваться скриптом для тех или иных целей.
Сам очень долго искал скрипт для удаления друзей и наткнулся на целый список рабочих скриптов, решил поделиться с вами)
Надеюсь, все умеют ими пользоваться, ну а кто не умеет, вот кратка инструкция:
Открываете в любом блокноте нужный скрипт, вводите свои данные, где нужно ввести их (комментарии написаны в каждом скрипте), заливаете скрипт на хостинг с поддержкой PHP и CRON.
50 разных скриптов для ВКонтакте:
_____________________________________________________________________________________
Ссылка на скрипты в архиве (Яндекс-Диск): https://yadi.sk/d/xvbjOHAF37V3dj
_____________________________________________________________________________________
Если вам данная тема то жмите
SOVA V RE: Themes
Комментарии
Вы должный войти чтобый оставить комменатрий.
Похожие каналы
Последние сообщения
Для тех кто любит спокойствие
Для любителей Фиолетового. Темная, спокойная тема. Идеальное сочетание обой и фона сообщений.
Зелёная тема для ценителей прекрасного.
Черно-бело-серая тема. Есть некоторые нюансы: черные слова не видны на черном фоне. Для тех кто знает расположение меню, проблемы возникнуть не должно.
темный красно-розовый минимализм
Тёмная тема в оранжевых тонах, приятная глазу. Яркий цвет исходящих сообщений, так что кому-то может не понравиться.
Черно белая тема с отличным чатом
первая работа не судите строго, все в основном синее, текст красно-зелёный
Dracula-theme для Sova V RE. Основа на https://draculatheme.com/
Тема под стиль android 12 с пурпурным оттенком
Нежная розовая тема, с сиреневый оттенками
спокойная темная тема с синевато-серым оттенком в стиле UI дизайна Android 12
вирвиглазный зелёный + joji на фоне
By pepepizzzza via @SVThemesBot
не судите строго, первый раз решила тему попробовать склепать 👁 👅 👁
вся цветовая гамма чёрно-оранжевая, текст в основном белый, вроде всё отлично видно и ничего не сливается
Тема, которая использует цвета из зелёной темы android 12
милашная тема, нежнятина с сакурой
Актуальное обновление великолепной темы в праздничном оформлении в стиле Дня Всех Святых. Яркие элементы в смеси с темным фоном задают нужное настроение. Встречай Хеллоуин вместе с этой темой!
эⲧⲟ ⲟⳡⲉⲣⲉⲇⲏⲁя ⲧⲉⲙⲁ ⲟⲧ ⲙⲉⲏя :>
ⲏⲁⳅⲃⲁⲏυⲉ : эⲥⲧⲉⲧυⲕⲁ ⲗⲁⲙⲡⲟⳡⲉⲕ.
Лучшие скрипты аимбота Roblox для FPS
По мере того, как жанр FPS продолжает набирать популярность на платформе Roblox с динамичными и соревновательными играми, такими как Arsenal, Big Paintball и Phantom Forces, использование эксплойтов, меняющих правила игры, также набирает обороты. Один из самых популярных эксплойтов FPS, даже за пределами Roblox, — это использование прицельного бота или компьютеризированного программного обеспечения, которое позволяет пользователю уничтожать врагов, даже не прицеливаясь вручную — но разрешено ли это? В кратком руководстве ниже мы перечислим некоторые из самых популярных скриптов FPS прицеливания для Roblox, которые вы можете использовать на свой страх и риск.
Что такое скрипт и исполнитель скрипта?
Скрипты — это дополнительные строки кода, которые люди создают, чтобы добавить дополнительные преимущества для тех, кто их использует, например, возможность видеть сквозь стены, автоматический щелчок, иметь бесконечные боеприпасы или, в данном случае, автоматическое прицеливание. Эти скрипты можно довольно легко найти в Интернете, просто погуглив. Скрипты Roblox для, а затем любое преимущество, которое вы хотите получить. Чтобы использовать эти сценарии, вам также понадобится программа-исполнитель сценариев — компьютерная программа, которая позволяет пользователям вводить настраиваемые сценарии в любую игру, которую они пытаются использовать.
Разрешены скрипты?
Добавление дополнительных скриптов в любую игру часто является запрещенным преступлением, особенно в случае с Roblox. Если вас поймают на эксплуатации в любой форме, Roblox временно или полностью заблокирует вашу учетную запись от всех действий. Полную информацию о правилах эксплойтов Roblox можно найти на их странице ToS.
ПРИМЕЧАНИЕ: Pro Game Guides не одобряет использование скриптов любого типа..
Лучшие скрипты FPS aimbot
Импульс IY
Связанный: Коды Арсенала | Роблокс (декабрь 2021 г.)
Сова Хаб
FPS GUI AIMBOT
Связанный: Коды для взлома Roblox (декабрь 2021 г.)
Темный центр
Скрипт Lucid Universal Aimbot
Конец
На этом мы завершаем список пяти лучших скриптов FPS для прицеливания, которые можно использовать для использования в Roblox. Однако мы в Pro Game Guides хотим повторить, что обман на Roblox запрещен, и что участие в любой форме изменения или реализации сценария осуществляется на ваш страх и риск.
Ищете больше контента Roblox? Заходите в раздел Roblox Pro Game Guides почаще, чтобы узнать о новых обновлениях, включая руководства, новостные статьи и списки кодов!
Open Source распознавание речи SOVA
Мы в Наносемантике занимаемся виртуальными ассистентами (чат-ботами и голосовыми помощниками) для компаний с большими колл-центрами. Раньше мы использовали распознавание и синтез речи других компаний, а 1.5 года назад решили, что хотим быть самодостаточным вендором.
Если интересно, зачем нам это, что у нас получилось, а также для чего нам выкладывать ASR & TTS в Open Source – добро пожаловать под кат.
Делать ASR – интересно и сложно, но можно взять готовые Open Source ASR, в частности, наш SOVA ASR и датасеты для него. Ссылки см. в конце статьи.
Зачем нам нужен свой ASR
ASR (распознавание речи) мы используем для голосовых помощников. В основном, это проекты по роботам-консультантам и голосовым помощникам для крупных банков – для снижения нагрузки на колл-центры.
В наших проектах нам иногда приходится использовать решения Яндекса, ЦРТ и других вендоров: если у заказчика уже ASR внедрён, например, в IVR, и закуплен какой-то объём лицензий. В этом случае разработчик голосового робота (мы) сталкивается с довольно сложным процессом настройки бота, поскольку на чужой ASR тяжело повлиять.
NLU (движок анализа текстов) чат-бота всегда получает от ASR текст, который содержит ошибки распознавания, какой бы ASR ни был. Например, какие-то слова могут быть для ASR не знакомы. Не все движки/сервисы ASR позволяют проводить настройку, обучение языковой модели и прочее. Поэтому в NLU приходится закладываться на то, что могут прилететь «приколы» от ASR. Кроме того, качество поставленных в крупные компании годы назад ASR (с бессрочной лицензией) – ужасное.
Поэтому нам хотелось иметь в своём распоряжении собственный ASR. И TTS, аналогично.
Из чего состоит система распознавания речи?
Для приготовления ASR нужны два ингредиента – алгоритмы и обучающие данные.
ASR – это целый комплекс алгоритмов обработки сигналов и текстов. Традиционно системы распознавания речи состояли из нескольких компонентов:
Эти данные (примеры) «показываются» алгоритму, обучающему акустическую и языковую модели. Механика процесса – классическое машинное обучение.
С чего мы начинали
Мы начали делать свой ASR зимой 2019 года. В начале нашей работы мы рассматривали готовые Open Source наборы инструментов и библиотек, которые можно было бы попробовать пощупать и сравнить между собой. Среди них были как древние системы, которые не использовали нейронные сети – решения, основанные на скрытых марковских моделях (HMM), так и проекты, использующие нейронные сети.
Сейчас уже можно найти end-to-end сети, которые преобразуют входной сигнал в слова, это attention-based сети, рекуррентные нейронные сети, LSTM, полностью сверточные нейронные сети – сразу очень сложно понять, что даст наилучший результат как с точки зрения качества распознавания речи, так и с точки зрения производительности системы и ресурсов, которые будет необходимо заложить на подготовку такой системы.
Среди прочего можно упомянуть наиболее на наш взгляд интересные разработки:
Метрики качества
Сразу необходимо заметить, что ни одно из бесплатных или платных решений, существующих на данный момент, не дает 100% точность распознавания. Чего уж там, даже человек иногда не может однозначно понять, что было сказано другим, особенно, если второй человек произносит слова из тематики, с которой первый не знаком. Самый простой пример – вы наверняка слышали, как во время звонка кого-нибудь просят продиктовать фамилию по слогам, а то и по буквам, потому что фамилии достаточно разнообразны, и ни у кого в голове попросту не может находиться полный список всех фамилий и их написаний.
Здесь также можно привести пример про профессиональные термины: когда мы уже начали размечать данные из колл-центров отдела продаж SEO-услуг, мы даже составили для разметчиков небольшой словарь терминов поисковой оптимизации, так как люди просто не знали некоторых слов и поначалу неправильно отекстовывали или просто браковали непонятные им записи. Слова “аудит”, “пагинация”, “сео”, “сниппет”, “фавикон” и так далее – заимствованы из других языков и незнакомы большинству людей.
Добавлю, что даже если вы сможете прочитать по буквам новое незнакомое слово, оно все равно будет вызывать первое время заминку при прочтении, потому что вы его не ожидаете увидеть. Точно так же, если в лексиконе и языковой модели нет каких-то слов или словосочетаний, то система ASR попросту не сможет правильно распознать сказанное, и выдаст что-то близкое по звучанию. Если же кто-то скажет очень тихо и неразборчиво даже знакомое вам слово – вы, скорее всего, переспросите.
Для оценки качества распознавания существуют определенные метрики. Одна из наиболее популярных – WER (Word Error Rate) – мера оценки ошибки на уровне слов. Эта метрика – отношение суммы количества вставок лишних слов, удалений и замен слов к количеству слов в референсе (то есть к ручной отекстовке). По некоторым оценкам, на большом наборе произвольных аудиозаписей с речью даже человек допускает ошибки вплоть до WER = 0.05. Также можно рассматривать метрику CER (или LER, Character Error Rate/Letter Error Rate), которая рассчитывается аналогично, но на уровне букв, и по сути своей является расстоянием по Левенштейну.
Пример:
Оригинальная фраза: «жили у бабуси два весёлых гуся»
Предсказание: «пили у бабуси весёлых гуся да»
Посчитаем метрики качества: на уровне слов имеем «пили» вместо «жили» – замена, исчезло слово «два» – удаление, в конце появилось слово «да» – вставка. На уровне букв: «пили» вместо «жили» – замена буквы «ж» на «п», удаление букв «д», «в», «а» и одного пробельного символа из-за исчезнувшего слова «два», вставка букв «д» и «а» и пробельного символа из-за добавления слова «да» в конце. В оригинале 5 слов и 30 букв (вместе с пробелами), у нас всего 1 замена, 1 удаление и 1 вставка на уровне букв и 1 замена, 4 удаления и 3 вставки на уровне букв. Считаем WER = (1 + 1 + 1) / 5 = 0.6, считаем CER = (1 + 4 + 3) / 30 = 0.27. Пример искусственный и приведен для демонстрации подсчета метрик. Для понимания – чем ближе к нулю показатели WER и CER, тем лучше работает система.
Сейчас даже у всех игроков на рынке систем распознавания речи (Яндекс, Google, ЦРТ, Azure, Tinkoff, Наносемантика) метрика WER держится на одних наших тестовых датасетах не ниже 0.1-0.15, на других данных – не ниже 0.15-0.25, а есть коммерческие системы, которые доходят аж до 0.35-0.5. Это означает, что мы, грубо говоря, в лучшем случае получаем ошибку в каждом седьмом-десятом слове, в системах похуже – в каждом четвертом, а то и втором.
Типы ошибок тоже бывают разные, где-то просто перепуталось окончание, а где-то оказалось совершенно другое слово, полностью меняющее смысл. Так, для дальнейшей подачи распознанного предложения в движок чат-бота гораздо хуже, если пришло сообщение “мама рыла раму”, нежели “мама мыла рама”, поскольку в одном случае просто допущена грамматическая ошибка, а во втором – мы получаем совершенно иное действие. Замеры качества мы проводим на довольно суровых датасетах из телефонии и голосовых сообщениях из Telegram, и они предельно не лабораторные, ниже будет приведена таблица сравнения систем распознавания речи разных вендоров.
Поговорим подробнее про данные, на которых мы алгоритмы ASR учили и тестировали.
Сбор и разметка данных
Пожалуй, самая важная часть создания технологии распознавания речи — это подготовка данных. Если вы спросите разработчиков, сколько данных нужно для обучения – никто вам не ответит. Данных никогда не бывает слишком много. Нужны тысячи часов, чтобы получить хорошее распознавание. При этом, источники данных нужны именно такие, какие требуются для вашего продукта. Конечно, решения вроде уже упомянутого выше Wav2Vec позволяют значительно уменьшить потребность в аннотированных данных для обучения итоговой системы, но, как показала практика, с ростом количества этих данных качество всё равно растёт, и 10 минут размеченных аудио может и хватит для получения хороших результатов на довольно искусственном корпусе на английском языке, но этого совершенно недостаточно для промышленной системы. Стоит упомянуть, что, когда собираются датасеты – не все данные, которые вы получаете, например, от колл-центров, получится использовать для дообучения модели. Это могут быть какие-то мусорные данные, шумы, когда даже человеку невозможно распознать, что было сказано. Моделям на вход лучше подавать только те данные, в которых вы абсолютно уверены.
Итак, первый датасет, с которым мы начали работать – открытый 46-часовой датасет M-AILABS. Неплохой вариант для начала, содержащий очень чистые отрывки из аудиокниг, на нём мы проводили первые сравнения различных архитектур и фреймворков. Однако, в реальных условиях обученные на нём модели работали из рук вон плохо. Добавление аугментаций лишь немного спасало ситуацию. Также, конечно, стоит упомянуть проект Mozilla Common Voice, данные в котором уже менее лабораторные, и они периодически пополняются. Относительно недавно был опубликован датасет Open STT для русского языка, но перед использованием важно обратить внимание на происхождение данных в этом датасете + ограничения лицензии.
Отмечу, что если у вас есть конкретные алгоритмы на все компоненты ASR и датасет, то совершенно не гарантировано хорошее распознавание на новых целевых данных, сильно отличающихся от тех, на которых вы обучали нейронную сеть. Если вы собрали большое количество аудиокниг, и построили модели на них, то не факт, что ваш ASR будет успешно справляться с телефонными разговорами. Там, помимо сильно искаженного и сжатого сигнала аудио, сплошная живая человеческая речь, содержащая слова-паразиты, мычание, запинания и прочие моменты, которые совершенно не присущи речи профессиональных дикторов.
На подготовку своих собственных датасетов в достаточном для более-менее адекватного распознавания речи (не аудиокниг!) у нас ушло порядка 6 месяцев, и мы продолжаем подготовку данных, именно поэтому в начале для экспериментов мы рекомендуем брать уже готовые датасеты (тем более что сейчас в открытом доступе их стало значительно больше), и на них сравнивать различные решения.
В итоге на открытых датасетах мы сравнили качество, скорость обучения, простоту интерфейсов различных технологий, и остановились на wav2letter в качестве архитектуры для акустической модели системы, которую мы планировали дальше развивать. В дальнейшем мы переписали её архитектуру и код обучения на наш собственный нейросетевой фреймворк – PuzzleLib, стали подключать разные языковые модели, декодеры и прочее. Это заняло у нас несколько месяцев. Пример кода обучения базовой модели на нашем фреймворке можно найти в документации.
Новость. Недавно мы выложили свою нейросетевую библиотеку в Open Source. Всем, кому интересно пощупать, вот Github, а вот документация.
Для последующего обучения перед нами стояла задача собрать максимальный объем аудио, однако изначально у нас не было возможности скооперироваться с крупным колл-центром, как это делают другие крупные вендоры, поэтому следующим этапом стал сбор аудиокниг из открытых источников, лицензия которых позволяла использование. Так, мы нарезали и отекстовали аудио фрагментов на 1600+ часов. С книгами дополнительно было проще в плане текстов, они уже были подготовлены, и достаточно было лишь сравнивать после нарезки, что нарезанные кусочки не обрезаны, не содержат лишних призвуков и вообще соответствуют тексту. Сейчас инструменты для такого forced alignment можно без труда найти в интернете на свой вкус.
Чтобы повысить качество распознавания в телефонном тракте, а также повысить качество распознавания при работе с микрофонами конечных пользовательских устройств (смартфонов, ноутбуков и тд), мы в ходе обучения случайным образом добавляли различные аугментации, такие как вставка шумов окружения, добавление эффекта реверберации в аудио (имитация отражений звука от поверхностей), эквализация (в телефонных записях задраны средние частоты), замедление, ускорение, изменение высоты тона и многие другие.
Качество распознавания выросло, но из-за того, что сама речь в аудиокнигах записывалась в “лабораторных” условиях, модель, которую мы обучили на них, плохо себя показывала на живых разговорах. То есть дикторы в аудиокнигах зачитывали произвольные тексты, но обычные люди в жизни так не говорят. Также ошибочным шагом будет сбор данных, которые “начитывают” по листу, пусть даже непрофессиональные дикторы, пусть даже это записи из телефонного канала. Стало понятно, что нужно учиться самим добывать, нарезать и размечать данные (та же телефония и т. д.). Мы начали с внутренней телефонии компании, начали переговоры с потенциальными партнёрами, заинтересованными в автоматизации колл-центров. Абсолютно непригодна для сбора качественнго датасета Яндекс.Толока: добиться качественной работы с разметчиками Толоки не получится, нужна плотная работа с разметчиками.
Поэтому мы также начали разработку своего инструмента для разметки аудиозаписей – Маркера. Так у нас появился свой отдел разметки и качественный сервис, генерирующий нам датасеты.
Разметчики, которые отекстовывают аудио, могут допускать ошибки. Это все нужно валидировать, контролировать, организовывать коллективные проверки одного и того же аудио, и т. д. В Маркере есть механика распределения заданий по людям так, чтобы каждая запись попадала к несколькими специалистам, а потом – к эксперту в случае разрозненных мнений. Мы это называем “экспертной оценкой”. Еще в работе с разметчиками мы применяем логику honeypots. Её смысл заключается в том, что мы даем человеку 100 заданий на разметку, при этом, на самом деле, из этих ста заданий мы и так знаем правильный ответ на 10 заданий. И если человек путается даже в этих десяти заданиях, то мы принимаем решение что, вероятно, либо человек ленится, либо просто он неопытный, и стоит с ним еще провести тренинг. Разметчиков у нас сейчас порядка 100 человек, мы с ними постоянно ведем работу, учим их, разбираем ошибки, ввели рейтинговую систему, систему экспертов – это в итоге позволяет получать очень хорошее качество (менее 3% WER).
Параллельно со сбором данных к августу 2019 года у нас сформировалось понимание того, что делать с этими данными, автоматизировались процессы передачи данных в обучение, тестирования.
Сложности, которые мы преодолели
Поняв, что у нас большие проблемы с реальными данными, с аудиокниг мы переключились на альтернативные способы сбора данных. Так мы разработали свою систему для сбора аудио. Человек зачитывает то, что написано на экране, это сохраняется и попадает к нам. Таким образом у нас накопилась база в 1700+ часов. Большим плюсом такого подхода было то, что люди зачитывали текст с абсолютно разных устройств и микрофонов соответственно. Как уже было упомянуто, большой минус здесь – люди читают текст, а не общаются вживую. Однако, суммарно всех собранных на тот момент данных хватило, чтобы подготовить неплохой демонстрационный стенд, с которым уже, во-первых, не стыдно было ходить к потенциальным партнёрам из колл-центров, во вторых, предлагать бесплатно пользоваться распознаванием в обмен на данные, которые через этот стенд проходят и далее используются для обучения моделей.
Что касается разработки, как мы уже упомянули, мы перенесли всю архитектуру wav2letter на свой фреймворк PuzzleLib. Изначально весь пайплайн не отличался высоким качеством распознавания фраз, поскольку мы использовали Greedy Decoder. Далее, разобравшись с подключением языковых моделей, мы реализовали Beam Search. В итоге мы пришли к выводу, что самое лучшее качество можно достигнуть с помощью CTC (Connectionist Temporal Classification) Decoder. На нем и остановились, часть кода для него позаимствована из оригинального репозитория wav2letter++, написана на C++ и подключается при помощи Python-обвязки.
Существенно ускорило подготовку моделей появление компьютеров с несколькими GPU. Мы распараллелили код для обучения на нескольких видеокартах и смогли запускать обучение и быстро что-то сравнивать, проводить эксперименты. Например, мы сравнивали модели, работающие с разными признаками: спектрограммами, MF фичами, MFCC фичами. В итоге мы остановились на спектрограммах, потому что при одинаковых условиях мы могли получить модель с лучшим качеством за фиксированное количество эпох.
Мы поддержали обучение с данными в формате float16, что уменьшило расход памяти и увеличило скорость обучения. Если в двух словах, можно обучать на стандартных тензорах, в которых типы данных float32, а можно обучать на float16 — это числа с половинной точностью. Если всё правильно настроить, то, в целом, без сильной потери точности, можно уменьшить расход памяти в два раза. И, соответственно, можно увеличить размер батча и занять больше места на видеокарте. Все это приводит к ускорению обучения.
В октябре 2019 года мы собрали первую версию собственного демонстрационного стенда с REST API, который мы уже могли показывать партнёрам и подключать для бесплатного пользования. Помимо прочего, наше API подключили к телеграм-боту @voicybot, наряду с распознаванием от Google и Wit.ai, за что отдельное спасибо Никите Колмогорову. Бот позволяет распознавать голосовые сообщения и продолжает работать с нашим публичным API.
Как устроена NLab Speech
Получив ядро, которое может переводить аудио в текст, мы начали добавлять в него различные косметические и функциональные улучшения. Во-первых, мы реализовали потоковое распознавание, изначально на web-сокетах, а затем занялись поддержкой протоколов gRPC и MRCP, поскольку на них был спрос у партнёров. В потоковом распознавании нужно учитывать, что использовать декодер с языковой моделью нужно по оконченным фразам, поэтому возникает потребность в определении тишины для выделения реплик, после которых наступают паузы. Для определения кусков с тишиной и голосом при потоковом распознавании мы используем Voice Activity Detector. Тут мы решили взять готовое решение WebRTC VAD. Наши внутренние тесты альтернативных решений подтвердили, что даже на наименее чувствительном уровне WebRTC VAD показывает лучшие результаты с определением кусков аудио, содержащих голос, как по точности, так и по полноте.
Есть несколько подходов по работе с потоковым распознаванием, можно либо после нарезки VAD прогонять собранные окна спектрограмм через акустическую модель, извлеченные из кусков аудио с речью, либо прогонять их постоянно небольшими батчами и выдавать результаты промежуточного распознавания (с жадным декодером), а по наступлению паузы прогонять всю фразу через CTC декодер и языковую модель. На выходе из акустической модели мы получаем набор наиболее вероятных с фонемной точки зрения кандидатов текста того, что было сказано, и дальше декодер при помощи заранее подготовленной языковой модели определяет, какие варианты наиболее вероятны из того, что было предсказано.
Языковая модель у нас в данный момент строится при помощи KenLM. Для её подготовки нужно собрать большой корпус разговорных неразмеченных текстов (гигабайты текстов): по предложению на строку в одном большом текстовом файле. Учимся мы на десятках гигабайтов текстов. В такой корпус мы подмешивали те данные, которые у нас были размечены из реальных аудио. В итоге получили достаточно неплохие результаты, однако здесь надо понимать, что данные надо также валидировать и очищать от различного мусора. Хороший буст качества для конкретного заказчика можно получить просто расширив языковую модель под его тематику.
Дальше к получаемым от ASR текстам мы применяем различные варианты улучшения внешнего вида. Например, мы обучили BERT восстанавливать пунктуацию. Он расставляет запятые, точки, вопросительные знаки просто по текстовому представлению. Также мы добавили перевод чисел, представленных словами, в цифры по словарю. В планах добавить аббревиатуры, зарубежные названия, имена, названия городов и компаний.
Бенчмарк
Вот к таким результатам нам удалось прийти на сегодняшний день (сортировка по столбцу WER, меньше – лучше):
Пример аудио колл-центра компании-партнёра в тестовом датасете: