Русский
Русский
English
Статистика
Реклама

Распознавание речи

Прослушка с помощью лидаров пылесоса новая угроза частной жизни. Делаем лазерный микрофон в домашних условиях

22.11.2020 20:18:28 | Автор: admin


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

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

Звуки это волны давления, которые распространяются через колебания среды. Следовательно, звуковая энергия в окружающей среде частично индуцируется на близлежащие объекты, создавая тонкие физические вибрации внутри этих твёрдых сред. Фундаментальная концепция LidarPhone заключается в том, чтобы воспринимать такие индуцированные вибрации в бытовых предметах с помощью лидарного датчика робота-пылесоса, а затем обрабатывать записанный вибрационный сигнал для восстановления следов звуков. Этот метод зондирования вдохновлён принципом работы лазерных микрофонов, которые используют отражённые лазерные лучи для восприятия звуков от вибрирующих объектов.


Принцип работы недорогого лидара

Хотя лазерные микрофоны требуют сложных настроек, вращающиеся лидарные датчики оснащены, по крайней мере, лазерным передатчиком и датчиком отражений. Это обеспечивает ключевые возможности для преобразования лидара в микрофон. Конечно, практическая реализация этой идеи требует преодоления ряда трудностей.

Одной из основных проблем при использовании лидара в качестве лазерного микрофона является чрезвычайно низкое отношение сигнал/шум (SNR) отражённых сигналов. Отчасти это связано с тем, что LidarPhone опирается на другие физические принципы, чем лазерные микрофоны, несмотря на их очевидное сходство на высоком уровне. Лазерные микрофоны нацелены на высокоотражающие материалы (т. е. производящие зеркальные отражения), такие как стеклянные окна с высоким SNR. В отличие от них, аппаратные усилители лидара и аналого-цифровой преобразователь (АЦП) настроены так, чтобы быть чувствительными только к сигналам низкой интенсивности, которые в основном отражаются от шероховатых поверхностей, таких как стены, тем самым производя рассеянные отражения. Следовательно, даже если лидар получает сигналы высокой интенсивности от стеклянного окна, он не получит полезной информации.


Разница между направленным зеркальным отражением для лазерного микрофона (слева) и рассеянным отражением с меньшим SNR, которое получает LidarPhone

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

Другая серьёзная проблема при разработке атаки LidarPhone была связана с низкой частотой дискретизации лидара. Учитывая его вращательное движение, частота дискретизации для одной точки на целевом объекте эквивалентна частоте вращения лидара. Учёные увеличили частоту выборки за счёт умножения частоты вращения лидара (5Гц) на количество сэмплов за один оборот (360). Таким образом, частота выборки выросла с 5Гц до 1,8кГц, а это важный показатель при обучении нейросети.

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

В этой научной работе в качестве эксперимента атака была проверена на роботе-пылесосе Xiaomi Roborock. Прототип LidarPhone обучался на цифрах из компьютерных колонок и на музыки из динамика телевизора: всего более 30 тысяч звуковых отрывков общей продолжительностью более 19 часов записанного звука. В итоге LidarPhone показал среднюю точность примерно 91% и 90% при классификации цифр и музыки, соответственно.

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


Фигура соответствует звукам в слове девять, полученным от а) оригинального аудио; b) микрофонной записи с расстояния 3 метра; с) обработанным записям лидара с отражения от мусорной корзины; d) пакета IKEA. Соответствующие звуковые файлы опубликованы по адресу bit.ly/lidarphone-sensys

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

Исследователи пишут, что в качестве микрофонов теоретически можно использовать и многие другие световые сенсоры, в том числе на смартфонах. Недавно в ряде научных работ были обнаружены варианты использования неакустических датчиков смартфонов, которые потенциально позволяют записывать разговоры без разрешения. Речь идёт об использовании акселерометра, гироскопа и вибромотора (1, 2, 3, 4).

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

Научная статья обнародована 16 ноября 2020 года на виртуальной конференции SenSys20 в Японии.



Подробнее..

Предсказание будущего нейрокомпьютерная модель распознавания речи

01.07.2020 10:24:00 | Автор: admin


Что есть речь человека? Это слова, комбинации которых позволяют выразить ту или иную информацию. Возникает вопрос, откуда мы знаем, когда заканчивается одно слово и начинается другое? Вопрос довольно странный, подумают многие, ведь мы с рождения слышим речь окружающих людей, учимся говорить, писать и читать. Накопленный багаж лингвистических знаний, конечно, играет важную роль, но помимо этого есть и нейронные сети головного мозга, разделяющие поток речи на составляющие слова и/или слоги. Сегодня мы с вами познакомимся с исследованием, в котором ученые из Женевского университета (Швейцария) создали нейрокомпьютерную модель расшифровки речи за счет предсказания слов и слогов. Какие мозговые процессы стали основой модели, что подразумевается под громким словом предсказание, и насколько эффективна созданная модель? Ответы на эти вопросы ждут нас в докладе ученых. Поехали.

Основа исследования


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

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

В частности распознавание речи связывают с комбинацией тета и гамма колебаний, поскольку она позволяет иерархически координировать кодирование фонем в слогах без предварительного знания их длительности и временного возникновения, т.е. восходящая обработка* в реальном времени.
Восходящая обработка* (bottom-up) тип обработки информации, основанный на поступлении данных из среды для формирования восприятия.
Естественное распознавание речи также сильно зависит от контекстных сигналов, которые позволяют предвидеть содержание и временную структуру речевого сигнала. Ранее проведенные исследования показали, что во время восприятия непрерывной речи важную роль играет именно механизм прогнозирования. Этот процесс связывают с бета колебаниями.

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

Другими словами, мозг всегда учится чему-то новому, постоянно обновляя модель окружающего мира. Этот процесс считается критически важным в обработке речевых сигналов.

Ученые отмечают, что во многих теоретических исследованиях поддерживаются как восходящий, так и нисходящий* подходы к обработке речи.
Нисходящая обработка* (top-down) разбор системы на составляющие для получения представления о ее композиционных подсистемах способом обратной инженерии.
Разработанная ранее нейрокомпьютерная модель, включающая соединение реалистичных тета- и гамма- возбуждающих/тормозных сетей, была способна предварительно обрабатывать речь таким образом, чтобы затем ее можно было правильно декодировать.

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

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

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

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

Они разработали нейрокомпьютерную модель Precoss (от predictive coding and oscillations for speech), основанную на структуре предиктивного кодирования, в которую добавили тета- и гамма-колебательные функции, чтобы справиться с непрерывной природой естественной речи.

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

Архитектура Precoss модели


Важной функцией модели является то, что она должна быть в состоянии использовать временные сигналы/информацию, присутствующие в непрерывной речи, для определения границ слога. Ученые предположили, что внутренние генеративные модели, включая временные предсказания, должны извлечь выгоду из таких сигналов. Чтобы учесть эту гипотезу, а также повторяющиеся процессы, происходящие во время распознавания речи, была использована модель кодирования с непрерывным предсказанием.

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

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


Изображение 1

Precoss извлекает сенсорный сигнал из внутренних представлений о его источнике путем обращения к порождающей модели. В этом случае сенсорный ввод соответствует медленной амплитудной модуляции речевого сигнала и 6-канальной слуховой спектрограмме полного натурального предложения, которые модель внутренне генерирует из четырех компонентов:

  • тета-колебание;
  • блок медленной амплитудной модуляции в тета-модуле;
  • пул слоговых единиц (столько слогов, сколько присутствует в естественном вводном предложении, т.е. от 4 до 25);
  • банк из восьми гамма-единиц в спектротемпоральном модуле.

Вместе единицы слогов и гамма-колебания генерируют нисходящие прогнозы относительно входной спектрограммы. Каждая из восьми гамма-единиц представляет собой фазу в слоге; они активируются последовательно, и вся последовательность активации повторяется. Следовательно, каждая единица слога связана с последовательностью из восьми векторов (по одному на гамма-единицу) с шестью компонентами каждый (по одному на частотный канал). Акустическая спектрограмма отдельного слога генерируется путем активации соответствующей единицы слога на протяжении всей продолжительности слога.

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

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


Изображение 2

Производительность модели зависит от того, совпадает ли гамма-последовательность с началом слога, и соответствует ли ее длительность продолжительности слога (50600 мс, среднее = 182 мс).

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

Результаты моделирования


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

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


Изображение 3

Для оценки релевантности синхронизации слогов на основе медленной амплитудной модуляции было проведено сравнение модели А с вариантом В, в котором тета-активность не моделируется колебаниями, а возникает из самоповторения гамма-последовательности.

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

Чтобы более точно оценить специфические эффекты тета-гаммы соединения и сброса накопленных данных в слоговых единицах, были сделаны дополнительные варианты предыдущих моделей A и B.

Варианты C и D отличались отсутствием предпочтительной скорости гамма-излучения. Варианты E и F дополнительно отличались от вариантов C и D отсутствием сброса накопленных данных о слогах.

Из всех вариантов модели только A имеет истинную тета-гамма связь, где гамма-активность определяется тета-модулем, тогда как в В модели гамма-скорость устанавливается эндогенно.

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

Между вариантами присутствовали значительные отличия. По сравнению с моделями A и B, производительность была значительно ниже в моделях E и F (в среднем на 23%) и C и D (на 15%). Это указывает на то, что стирание накопленных данных о предыдущем слоге перед обработкой нового слога является критически важным фактором кодирования слогового потока в естественной речи.

Сравнение вариантов A и B с вариантами C и D показало, что тета-гамма связь, будь то стимульная (A) или эндогенная (B), значительно улучшает производительность модели (в среднем на 8.6%).

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

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

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

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

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


Изображение 4

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

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

Способность модели точно распознавать слоги во входном предложении не учитывает переменную сложность различных сравниваемых моделей. Потому была проведена оценка байесовского информационного критерия (BIC) для каждой модели. Данный критерий количественно определяет компромисс между точностью и сложностью модели (изображение 5).


Изображение 5

Вариант А показал самые высокие значения BIC. Ранее проведенное сравнение моделей А и В не могло точно различить их производительность. Однако благодаря критерию BIC стало очевидно, что вариант A обеспечивает более уверенное распознавание слогов, чем модель без тета-колебаний, управляемых стимулом (модель В).

Для более детального ознакомления с нюансами исследования рекомендую заглянуть в доклад ученых и дополнительные материалы к нему.

Эпилог


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

По сути своей, разработанная модель имитировала работу мозга человека. Звук, поступающий в систему, модулировался тета волной, напоминающей активность нейронов. Это позволяет определить границы слогов. Далее более быстрые гамма-волны помогают кодировать слог. В процессе система предлагает возможные варианты слогов и корректирует выбор при необходимости. Перескакивая между первым и вторым уровнями (тета и гамма), система обнаруживает правильный вариант слога, а потом обнуляется, чтобы начать процесс заново для следующего слога.

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

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

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

Благодарю за внимание, оставайтесь любопытствующими и хорошей всем рабочей недели, ребята. :)

Немного рекламы


Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас, оформив заказ или порекомендовав знакомым, облачные VPS для разработчиков от $4.99, уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps от $19 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

Dell R730xd в 2 раза дешевле в дата-центре Equinix Tier IV в Амстердаме? Только у нас 2 х Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТВ от $199 в Нидерландах! Dell R420 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB от $99! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?
Подробнее..

Я сделаю свою умную колонку with blackjack and hookers!

23.01.2021 22:04:46 | Автор: admin

Привет всем. В данной статье я расскажу историю как мы с двоюродным братом сделали свою умную колонку.

На самом деле никакая она неумная, грубая и не особо полезная, но зато весёлая и с характером.

За мной сама идея, программирование, железо (подбор и настройка).

От брата 3D-модель, 3D-печать, железо (подбор и электромонтаж).

Статья по-большей части описывает то, что делал я, лишь немного касаясь 3D-модели.

"Ты на самом деле хочешь дружить с роботом?"

Будучи большим фанатом известного мультсериала Футурама, однажды (где-то в 2018 году)мне захотелось заиметь самодельную голову робота Бендера Родригеса. В голове, в том числе крутились дурацкие варианты сделать её из какой-нибудь кастрюли. В силу своей глупости идея была забыта и заброшена ровно до того момента пока у одного хорошего человека, моего брата, товарища xbostа не появился 3D-принтер (весна 2019 года). И тут эта идея снова ожила

Обсудив эту идею за пивом, принялись за работу. Брат начал делать 3D-модель, а я искать, что из электронного хлама в ящике стола можно задействовать в проекте.

К тому моменту, у меня уже несколько лет валялась без дела плата Intel Galileo Gen2. И было желание задействовать её в этом проекте. Изначально никаких умных функций не планировалась, просто запихнуть её в корпус вместе с динамиком и светодиодами, вытащить кнопочку, при нажатии на которую воспроизводились бы цитаты из серий и светились диоды.

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

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

Первые попытки

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

В силу своей природной хм невнимательности, я упустил существование более подходящей для моей задачи версии pocketsphinx, и начал с большого CMU Sphinx на Java.

Создал простенькие JSGF-грамматику и программу на Яве. Взял несколько наиболее известных цитат для проигрывания(with blackjack and hookers, bite my shiny metal ass, kill all humans и т.п.). Пробовал изначально на достаточно мощном компьютере(MacBook Pro 13-го года), был доволен результатом производительности, но понимал, что на Галилео меня ждёт нечто другое. Но дело оказалось совсем плохо.

Вообще Галилео уже давно заброшен Интелом. Стандартный Линукс, шедший с ним мне в принципе особенно не нравился. Поэтому попробовал с последней доступной для него сборкой Дебиан.

Туда с проблемами(подробности уже честно не вспомню) был поставлен JRE. В качестве устройства ввода/вывода аудио была использована USB-гарнитура. И Результат был крайне печален в плане производительности. Сейчас опять же не вспомню, возможно неправильную акустическую модель использовал на ней, но на реакции уходило 30-60 секунд. Плюс брат начал разрабатывать 3D-модель, и сказал, что габариты Галилео большеваты. Плюс отсутствие встроенного Wi-Fi. В общем Галилео опять отправилась в стол.

Решено было попробовать на гораздо более популярной Малинке, и выбор пал на слабую, но самую компактную версию Raspberry Pi Zero W. А также, прокачав внимательность, узнал о pocketsphinx (отличная статья для старта), перешёл на него, и переписал программу на Питоне.

При переходе на Малину, с подачи xbostа, родилось название для проекта Pinder (Raspberry Pi + Bender). Да, я прекрасно помню историю с Pidora в русскоязычном сегменте, но в данном случае намеренно выбрал такое лулзовое для русского уха название.

И так предыстория завершена, можно переходить непосредственно к описанию Пиндера.

Внутренняя железная часть

Перечень использованных компонентов:

  • Raspberry Pi Zero W собственно основа всего.

  • UPS-Lite for Raspberry Pi Zero

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

  • RGB адресная светодиодная лента на WS2812B, 60 светодиодов на 1 метр

    Для подсветки и анимации зубов(18 штук) и глаз(2 штуки).

  • USB-аудиокарта

    В принципе подойдёт любая, работающая в Линуксе. Подключается через OTG-кабель в единственный доступный для этого порт на Малине Зеро.

  • Усилитель и один динамик от таких колонок

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

  • Микрофон HBC10A

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

  • Микропереключатель с лапкой KLS7-KW10

    Замыкается/размыкается при вставлении/вынимании "антенны" Бендера. Включает/выключает питание от UPS к Малине.

  • 3,5мм разъём и гнездо jack. Для подключения микрофона к аудиокарте (микрофон находится наверху Бендера, в антенне).

В общем внутри всё достаточно колхозно.

Схема подключений очень простая:

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

3D-модель, корпус

Здесь я не смогу рассказать многого, так как эта часть работы полностью брата.

3D-модель и небольшая инструкция доступны здесь.

Зубы и глаза напечатаны фотополимерной смолой на Anycubic Photon. Все остальные части PLA на Creality Ender 3.

Если будут какие-то вопросы по 3D-модели и печати можно задать мне, я их передам, либо попробовать напрямую спросить у xbostа на thingiverse (но не уверен будет ли он на них отвечать).

Краткая схема сборки:

Фото

Фото в процессе сборки и полностью собранном виде:

Программная часть 1

В качестве ОС используется штатный Raspbian (теперь Raspberry Pi OS).

За распознавание, как уже писалось выше, отвечает pocketsphinx. В качестве аудиоподсистемы используется Alsa (Pulseaudio выпилен).

Подсветка управляется с помощью библиотеки Adafruit_Blinka.

Данные о заряде/напряжении читаются из UPS-Lite посредством SMBus.

При разработке никакими лучшими практиками не руководствовался, поэтому код попахивает.

Код лежит здесь.

Поддерживается два языка: английский и русский. Для каждого языка своя JSGF-грамматика, набор аудио-сэмплов(сэмплов в репозитории нет, по соображениям авторских прав) и синтез речи. Русский дорабатывался(и дорабатывается) с некоторым опозданием.

Основной целью была просто возможность отвечать фановыми фразами из серий. Задаешь ему вопросы типа Как дела?, Где ты родился?, Что думаешь о Сири?. Ищется и воспроизводится ответ из сэмплов (в случае отсутствия сэмпла используется синтез речи, но об этом чуть позже).

Изначально скорость ответов на Малине была не очень шустрой (4-6 секунд до ответа):

Покопавшись у себя в коде, были найдены и уничтожены необязательные паузы. То же самое касалось и сэмплов (были пустые места вплоть до 1 секунды в начале файлов). А также прочитана информация о параметрах оптимизации pocketsphinx. Получилось уже получше:

Далее начал добавлять кое-какие полезные функции. Первой стала проигрывание музыки с локальной ФС или интернет-радио с помощью MPD. При этом докричаться до Бендера при проигрывании музыки на приличной громкости сложновато:

После достаточно долгого перерыва, живя на даче, была добавлена первая функция умного дома- управление освещением в своём углу через ModBusTCP. Вот только Бендера недостаточно иногда просто попросить включить свет, нужно обязательно сказать "пожалуйста". Работает достаточно шустро:

Программная часть 2

Потом однажды захотелось добавить читалку RSS-новостей. Это уже было невозможно без синтеза речи, но при этом хотелось, чтобы синтезатор звучал как, или хотя бы похоже на голос Бендера. Такой синтез речи на Малине Зеро представляется малореальным и поэтому в этом моменте пришлось сдаться и задействовать онлайн-сервис.

Почитав информацию и попробовав разные варианты остановился на Microsoft Azure Custom Speech.

При создании пользовательского голоса на выбор есть три варианта:

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

  • Concatenative высокое качество, нужно 6000 сэмплов для обучения.

  • Neural премиум-качество. По факту недоступно(доступно из США, при написании челобитной в Майкрософт зачем тебе это нужно и выкладывании 100000$).

Более подробно по технологиям синтеза речи можно почитать например на Википедии.

У меня не было большого количества сэмплов, поэтому сначала поигрался со Statistical Parametric. Результат был неплох, голос конечно не был похож(такой тип синтеза для сильной похожести и не предназначен), но интонации передавал сносно. В итоге на основе набора данных созданного с помощью этой модели я создал оффлайновую модель для CMU Flite, используемую в случае отсутствия связи с MS Azure.

Но всё же хотелось большей похожести и я решился попробовать собрать 6000 сэмплов для Concatenative модели, использующей отрывки из сэмплов настоящего голоса. Очень помог некий хороший человек, выложивший на YouTube 7 видео The Best of Bender. Надёргав оттуда сэмплов, приплюсовав к ним те что уже были и натравив на них майкрософтовский же Text-to-Speech (здесь у меня набор тулзов вспомогательных), получил что-то около 2000 транскрибированных сэмплов. Было принято решение просто скопировать это всё три раза под разными именами, чтобы получить 6000.

В итоге всё это было залито на обучение модели, и результат получился следующим:

Да конечно не идеально, но меня результат трудов устроил.

В итоге синтез речи используется не только для чтения новостей, но и в случае отсутствия оригинального сэмпла. Сначала ищется сэмпл. Если его нет, проверяется связь с порталом MS Azure, если есть синтезируется с помощью него. Если же связи с Azure нет используется локальная модель Flite(а для русского языка роботизированный голос eSpeak).

В сумме периодическими волнами и рывками разработка шла с весны 2019-го по весну 2020-го, в свободное время(хорошо видно по коммитам на гитхабе). Далее уже даже не волнами, просто отдельными всплесками.

Будущее

Как таковых планов развития проекта нет. Если появляется желание и вдохновение, то добавляю что-нибудь. Так конечно напрашивается сделать режим просто болталки на нейронке, обученной на фразах Бендера. Ещё возможно добавить режим bluetooth-колонки(и чтобы зубы загорались синим в этом режиме) и приложение для смартфона, для активации схемы патриотизма.

Но для начала надо изобрести удлинитель пальца.

Заключение

Исходный код ПО и 3D-модель выложены под открытыми лицензиями, так что если у кого-то есть желание сделать своего Бендера, добавить свои функции и улучшить буду рад.

На этом статья подошла к концу. Спасибо, что прочитали!

Всем хороших новостей!

Подробнее..

Распознавание команд

03.06.2021 20:19:56 | Автор: admin

При разработке ботов для Telegram и других месенджеров, периодически возникает задача распознавания и выполнения запросов, высказанных человеческим языком. Именно эта "фишка", по некоторому мнению, и является главным отличием ботов от приложений командной строки. Под катом описан собственный фреймворк для исполнения произвольных речевых команд. Описания ключевых концепций сопровождены примерами на языке Kotlin.

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

/** Правило проверяет лексему на соответствие */typealias Rule = (String) -> Boolean/** Нормализованное семантическое представление */open class Semnorm(vararg val rules: Rule)/** Правило задает стемы для семантических представлений */fun stem(vararg stems: String): Rule = { stems.any(it::startsWith) }/** Правило задает точные соответствия для семантических представлений */fun word(vararg words: String): Rule = { words.any(it::equals) }/** Проверяем слово на соответствие семантике */fun String.matches(norm: Semnorm) = norm.rules.any { it(this) }

Теперь у нас появилась возможность задавать предопределенные нормализованные семантические представления в виде объектов:

object Day : Semnorm(stem("day", "суток", "сутк", "дня", "ден", "дне"))

Фреймворк ставит их в соответствие лексемам входящих фраз, и предложение начинает выглядеть, например так:

assertThat(  "забань васю на 5 минут".tokenize(),   equalTo(   listOf(     Token("забань", Ban),      Token("васю", null),     Token("на", null),      Token("5", Number),     Token("минут", Minute)   )  ))

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

object Help : ExecutableSemnorm(stem(  "помощ", "справк", "правил", "help",   "rule", "faq", "start", "старт",)) {  override fun execute(bot: Botm: Message) {    val faq = message.from.relatedFaq()    bot.sendMessage(m.chat.id, faq)  }}

Что насчет более сложного поведения, зависящего от различных слов в предложении? Оно тоже поддерживается, вот как, например, исполняется, уже известное из тестов предложение забанить Васю:

object Ban : DurableSemonrm(stem(  "ban", "block", "mute", "бан", "блок",  "забан", "завали", "замьют",)) {  override fun execute(    bot: Bot, attackerMessage: Message, duration: Duration) {    val victimMessage = attackerMessage.replyToMessage    val victimId = victimMessage.from.id    val untilSecond = now().epochSecond + duration.inWholeSeconds    bot.restrictChatMember(      attackerMessage.chat.id, victimId, untilSecond)  }}

Откуда это семантическое представление знает о своей продолжительности? Дело в том, что ему вовсе не обязательно парсить всю цепочку токенов целиком. Достаточно задать только минимально необходимое поведение для каждого представления, например для времени:

object Week : Semnorm(stem("week", "недел")) {  override fun toDuration(number: Long) =     days(number) * 7}

Или для любых команд, зависящих от времени:

class DurableSemnorm(vararg rules: Rule) : ExecutableSemnorm(*rules) {  final override fun execute(    token: Iterator<Token>, bot: Bot, m: Message) =       execute(bot, message, token.parseDuration())  abstract fun execute(bot: Bot, m: Message, duration: Duration)}

Благодаря такой архитектуре, нам больше не приходится думать о запутанной логике работы интерпретатора. Достаточно просто определить желаемые атрибуты для семантических представлений и наслаждаться результатом. Пример бота, использующего эту концепцию, можно посмотреть на Github: https://github.com/demidko/timecobot

Подробнее..

Ультимативное сравнение систем распознавания речи Ashmanov, Google, Sber, Silero, Tinkoff, Yandex

27.05.2021 16:21:56 | Автор: admin

sandwich_fake


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


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


  • Добавилось много валидационных сетов из разных реальных доменов;
  • На рынок вышел Сбер, в первую очередь интересно протестировать именно его;
  • Для чистоты эксперимента, мы не предупреждали разработчиков систем о доменах и факте проведения тестов;
  • Мы также попробовали немного протестировать пропускную способность сервисов (понятно, что мы не знаем какое железо и ограничения стоят в облаке);
  • Мы рассматриваем только коммерческие системы, к которым у нас получилось получить доступ и которые показали хоть какой-то намек на "всеядность", работу с холодного старта и "энтерпрайзность";

Методология


Мы старались следовать нашей стандартной методологии (см. ссылки выше) с небольшими изменениями:


  • Тестируем одни и те же данные в формате wav (или просто PCM);
  • Мы слали запросы во все системы в 8 параллельных потоков (если было очень много таймаутов или все было медленно, то снижали);
  • Расчет скорости делался отдельным небольшим прогоном без всяческой пред- или пост-обработки, чтобы не "загрязнять" метрики, допустим, нормализацией или ресемплингом;
  • Считаем основную метрику WER. Не пугайтесь высоких показателей в районе 20% WER, нужно понимать что в самой разметке заложено порядка 5% WER и что иногда система получает штраф за неверную форму слова (но корень сохраняется, подробнее писал по ссылке в начале статьи);
  • По причине большого количества доменов в этот раз на каждый домен случайно выбрали по 1 часу аудио. Стабильные результаты как правило получаются с 2-3 часов аудио (поэтому некоторые метрики могут визуально быть "хуже" прошлых тестов). За тесты в Гугле нам пришлось заплатить почти 500 долларов!;
  • Метрики считаются на нормализованных текстах (то есть без цифр, "как слышится так и пишется"), так как системы нормализации могут быть разными и строго говоря к качеству распознавания имеют непрямое отношение и зачастую делаются под домен;
  • Если у системы нет такого функционала, то мы нормализуем тексты самостоятельно. В любом случае это влияет в рамках 1 п.п. WER, мы проверяли;
  • Сначала мы пробовали слать ogg/opus в системы, которые его поддерживают, но потом отказались от такой идеи, потом что резко вырос процент "пустых" ответов;
  • Все данные по умолчанию отправляются с родной частотой дискретизации (8 или 16 kHz), но мы не записывали исходную частоту дискретизации всех оригинальных аудио до обработки;

Сухие метрики


Все модели, кроме Silero bleeding egde, это модели упакованные в production сервисы.


Датасет Ashmanov Google Google Sber Sber Silero Silero new Tinkoff Yandex
default enhanced IVR prod bleeding edge
Чтение 10 11 10 7 7 6 8 13
Умная колонка 35 24 6 30 27 27 14
Энергосбыт 24 39 41 20 16 11 15 13
Звонки (такси) 47 16 18 22 32 13 12 21 15
Публичные выступления 28 27 24 18 14 12 20 21
Финансы (оператор) 31 37 37 24 33 25 24 23 22
Аэропорт 31 36 37 26 21 22 25 21
Аудио книги 22 60 54 19 24 20 28 22
Радио 24 61 40 26 18 15 27 23
Умная колонка (далеко) 42 49 8 41 27 52 18
Банк 62 30 32 24 28 39 35 28 25
Звонки (e-commerce) 34 45 43 34 45 29 29 31 28
Заседания суда 34 29 29 31 20 20 31 29
Yellow pages 45 43 49 41 32 29 31 30
Финансы (клиент) 43 55 59 41 67 38 37 33 32
YouTube 32 50 41 34 28 25 38 32
Звонки (пранки) 44 72 66 46 41 35 38 35
Медицинские термины 50 37 40 50 35 33 42 38
Диспетчерская 61 68 68 54 41 32 43 42
Стихи, песни и рэп 54 70 60 61 43 41 56 54
Справочная 39 50 53 32 25 20 27

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


Ashmanov Google Google Sber Sber Silero Tinkoff Yandex
default enhanced IVR
Чтение 0% 0% 0% 0% 0% 5% 4%
Умная колонка 0% 2% 0% 0% 4% 0%
Энергосбыт 1% 12% 13% 6% 0% 2% 1%
Звонки (такси) 0% 0% 0% 1% 0% 0% 7% 0%
Публичные выступления 0% 1% 0% 0% 0% 2% 0%
Финансы (оператор) 0% 0% 0% 2% 0% 0% 6% 0%
Аэропорт 0% 8% 10% 4% 0% 4% 0%
Аудио книги 0% 22% 6% 2% 0% 1% 0%
Радио 0% 19% 2% 3% 1% 4% 0%
Умная колонка (далеко) 0% 12% 0% 0% 1% 0%
Банк 0% 2% 3% 1% 1% 0% 5% 1%
Звонки (e-commerce) 0% 0% 0% 7% 1% 0% 7% 0%
Заседания суда 0% 0% 0% 1% 0% 4% 0%
Yellow pages 1% 13% 9% 14% 0% 2% 2%
Финансы (клиент) 0% 0% 7% 35% 9% 0% 5% 0%
YouTube 0% 13% 1% 6% 0% 1% 0%
Звонки (пранки) 1% 33% 12% 17% 5% 1% 1%
Медицинские термины 0% 1% 0% 7% 0% 6% 1%
Диспетчерская 3% 26% 28% 25% 0% 2% 4%
Стихи, песни и рэп 2% 19% 3% 25% 0% 1% 1%
Справочная 1% 12% 14% 9% 0% 3% 0%

Качественный анализ и интерпретация метрик


Неудивительно, что каждый силен в том домене, на котором фокусируется. Tinkoff на звонках в банк, справочную, финансовые сервисы. Сбер имеет ультимативно лучшие результаты на своей "умной колонке" (спекулирую, что они поделились в лучшем случае 1/10 своих данных) и в среднем неплохие показатели. IVR модель Сбера на доменах, где оригинальные данные лежат у нас в 8 kHz, показывает себя достойно, но она не ультимативно лучшая. Приятно удивил Яндекс в прошлых рейтингах их модели были не в списке лидеров, а сейчас точно лучше, чем в среднем по больнице. Другой сюрприз Google, который является аутсайдером данного исследования вместе с Ашмановым.


Также интересно посчитать количество доменов, где production модели поставщика лучшие / худшие (допустим с неким "послаблением" в 10% от лучшего или худшего результата):


Сервис Лучше всех Хуже всех
Ashmanov 0 7
Google 1 13 (9 у enhanced)
Sber 2 0
Sber IVR 4 4
Silero 13 0
Tinkoff 6 2
Yandex 10 1

Как и ожидалось наша модель показывает в среднем неплохие показатели на всех доменах, заметно отставая на банках и финансах. Также если смотреть по формальной метрике "на каком числе доменов модель лучшая или почти лучшая" то наша модель как минимум лучше всех генерализуется. Если включить в забег нашу bleeding edge модель (мы пока не выкатили ее еще), то она отстает только на "умной колонке" и банковских датасетах, лидируя уже на 17 доменах из 21. Это логично, так как у нас нет своей колонки и банки очень неохотно делятся своими данными даже приватно.


Удобство использования


У Сбера на момент тестирования было только gRPC API. Это не самое удачное решение для SMB клиентов с точки зрения удобства, имеющее более высокий порог на вход. Также в их реализации вообще не прокидываются важные ошибки (или отсутствуют в принципе, чем часто грешат корпоративные сервисы). Документация запрятана внутри портала их экосистемы, но в целом кроме лишней "сложности" проблем особо там нет, читать приятно. 40 страниц на два метода это конечно сильно (мы читали сначала в PDF), но документация хотя бы подробная и с примерами и пояснениями.


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


У Tinkoff само распознавание работает по умолчанию также через gRPC, а поверх написаны клиенты (в тех, которые мы разбирали было много лишнего). С учетом фокуса на enterprise (оставим за скобками этические, правовые и финансовые последствия монетизации банком ваших данных без явного согласия и возможности отказаться) это имеет больше смысла, чем то, что сделал Сбер. Это уже мои спекуляции, но скорее всего это в первую очередь артефакт разработки решения под свои нужды.


У сервиса Ашманова вообще нет документации, примеры не работают из коробки, пришлось немного позаниматься перебором для запуска. Отдельно отмечу, что обычно b2b сервисы не славятся читаемыми ошибками и читаемой документацией, но тут вообще не было ни ошибок, ни документации. Или 500-я ошибка или 200 с пустым ответом. Это создает легкий когнитивный диссонанс с учетом проработки анимации девушки-маскота, количества маркетинговых материалов и "успешных" кейсов.


ashmanov


У нашего сервиса само публичное АПИ весьма минималистичное и состоит из 2 методов (синтеза и gRPC нет еще в публичной документации) с примерами. Есть также gRPC АПИ, которое сейчас проходит обкатку. Наверное я тут не лучший судья, но основная ценность как мне кажется состоит в радикальной простоте для публичного АПИ и детальных инструкциях / сайзингах / опциях конфигурирования для более крупных клиентов.


Пропускная способность


Все АПИ, которые мы протестировали (кроме Ашманова) показали себя довольно бодро по скорости (это баг или фича решать вам). Для измерения пропускной способности мы считаем показатель секунд аудио в секунду на 1 поток распознавания (RTS = 1 / RTF):


Сервис RTS per Thread Threads Комментарий
Ashmanov 0.2 8
Ashmanov 1.7 1
Google 4.3 8
Google enhanced 2.9 8
Sber 13.6 8
Sber 14.1 1
Silero 2.5 8 4-core, 1080
Silero 3.8 4 4-core, 1080
Silero 6.0 8 12 cores, 2080 Ti
Silero 9.7 1 12 cores, 2080 Ti
Tinkoff 1.4 8
Tinkoff 2.2 1
Yandex 5.5 2 8 много пустых ответов

Поскольку никто не публикует сайзинги облачных и даже иногда коробочных (тут поправьте меня, если пропустил) версий своих систем публично (кстати прошлая версия нашего сайзинга например доступна по ссылке), то довольно сложно оценить адекватность работы систем по ресурсам. Ведь за АПИ может скрываться как одна VDS, так и сотни карт Nvidia Tesla, которыми любят хвастаться корпорации в своих пресс-релизах (что кстати частично подтверждается результатами Сбера пропускная способность там не падает от роста нагрузки совсем). Расчеты выше не являются заменой полноценным сайзингам.


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


Вообще меня очень приятно удивили результаты Сбера. На текущих версиях моделей у нас например сайзинг на 12 ядерном процессоре + GPU рассчитан на ~150 RTS. По идее это означает, что если мы поднимем тестовый и сервис на 12+ ядрах процессора на чуть более новой карточке, мы должны получить результаты более близкие к Сберу. У нас все равно не получается получить такие же высокие показатели без просадки от нагрузки, но какие-то выводы уже можно строить и получается все равно весьма достойно. Снимаем шляпу перед инженерами Сбера и ставим aspirational цель сделать наш сервис еще в 2-3 раза быстрее.


На цене мы останавливаться особо не будем (большая часть серьезных клиентов все равно не использует облако), но в очередной раз неприятный сюрприз преподнес Гугл выставив круглый счет за смешной (как нам кажется) объем. А ответ прост зачастую облачные корпоративные сервисы распознавания имеют не только крутой ценник (и в случае Гугла еще и в долларах), но и неочевидные системы округления вверх. В начале своего пути мы тестировали какой-то сервис из Великобритании который округлял до 60 секунд!


photo_2021-05-27_09-18-04


Небольшая ложка дегтя


Довольно приятно, что наш публичный некоммерческий датасет Open STT, неоднократно обсуждавшийся на Хабре, был предвестником релизов публичных данных, например от Сбера. Но долгосрочно все равно хотелось бы видеть хотя бы какую-то соразмерность вклада госкорпораций количеству вложенных в них публичных денег. В сравнении с похожими релизами на западе, мы пока сильно отстаем. Да и Яндекс традиционно не публикует ничего полезного в сфере распознавания речи, интересно почему.

Подробнее..

Распознавание эмоций в записях телефонных разговоров

21.06.2021 02:14:29 | Автор: admin

Технология распознавания эмоций в речи может может найти применение в огромном количестве задач. В частности, это позволит автоматизировать процесс мониторинга качества обслуживания клиентов call-центров.

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

1) Empath

В 2017 году был основан японский стартап Empath. Он создал платформу Web Empath, основанную на алгоритмах, обученных на десятках тысяч голосовых образцов японской медицинской технологической компании Smartmedical. Недостатком платформы является то, что она анализирует только голос и не пытается распознать речь.

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

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

2) Центр речевых технологий

В составе программного продукта Smart Logger II компании ЦРТ есть модуль речевой аналитики QM Analyzer, позволяющий в автоматическом режиме отслеживать события на телефонной линии, речевую активность дикторов, распознавать речь и анализировать эмоции. Для анализа эмоционального состояния QM Analyzer измеряет физические характеристики речевого сигнала: амплитуда, частотные и временные параметры, ищет ключевые слова и выражения, характеризующие отношение говорящего к теме [2]. При анализе голоса первые несколько секунд система накапливает данные и оценивает, какой тон разговора был нормальным, и далее, отталкиваясь от него, фиксирует изменения тона в положительную или отрицательную сторону [3].

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

3) Neurodata Lab

Компания Neurodata Lab разрабатывает решения, которые охватывают широкий спектр направлений в области исследований эмоций и их распознавания по аудио и видео, в том числе технологии по разделению голосов, послойного анализа и идентификации голоса в аудиопотоке, комплексного трекинга движений тела и рук, а также детекции и распознавания ключевых точек и движений мышц лица в видеопотоке в режиме реального времени. В качестве одного из своих первых проектов команда Neurodata Lab собрала русскоязычную мультимодальную базу данных RAMAS комплексный набор данных об испытываемых эмоциях, включающий параллельную запись 12 каналов: аудио, видео, окулографию, носимые датчики движения и другие о каждой из ситуаций межличностного взаимодействия. В создании базы данных приняли участие актеры, воссоздающие различные ситуации повседневного общения [4].

На основе RAMAS с помощью нейросетевой технологии компания Neurodata Lab создала решение для контакт-центров, позволяющее распознавать эмоции в голосе клиентов и рассчитывать индекс удовлетворенности обслуживанием непосредственно во время разговора с оператором. При этом анализ осуществляется как на голосовом уровне, так и на семантическом, при переводе речи в текст. Система также учитывает дополнительные параметры: количество пауз в речи оператора, изменение громкости голоса и общее время разговора.

Однако стоит заметить, что база данных для обучения нейронной сети в данном решении была подготовлена специально с участием актеров. А, согласно исследованиям, переход от модельных эмоциональных баз к распознаванию эмоций в спонтанной речи ведет к заметному снижению эффективности работы алгоритмов [1].

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

Empath

ЦРТ

Neurodata Lab

Разрабатываемый сервис

семантический анализ

-

+

+

+

русский дата-сет

-

нет

+

+

дата-сет спонтанных эмоций

+

-

+

В качестве материалов для создания русскоязычного эмоционального дата-сета со спонтанной речью мне была предоставлена база записей телефонных разговоров от IT-компании Эм Си Арт.

Общий алгоритм работы разрабатываемого сервиса выглядит следующим образом.

Блок-схема алгоритма обработки звонкаБлок-схема алгоритма обработки звонка

При реализации были использованы следующие инструменты:

  1. Шумоочистка RNNoise_Wrapper

  2. Диаризация pyAudioAnalysis

  3. Транскрибация vosk-api

  4. Анализ эмоций текста dostoevsky

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

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

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

  • мел-частотные кепстральные коэффициенты (MFCC)

  • вектор цветности

  • мел-спектрограмма

  • спектральный контраст

  • тональный центроид (Tonnetz)

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

Сначала я попробовала обучить простые классификаторы библиотеки scikit-learn:

  • SVC

  • RandomForestClassifier

  • GradientBoostingClassifier

  • KNeighborsClassifier

  • MLPClassifier

  • BaggingClassifier

В результате обучения на дата-сете Emo-DB получилось достичь точности распознавания 79%. Однако при тестировании полученной модели на размеченных мной записях телефонных разговоров, точность оказалась равной всего 23%. Это подтверждает тезисы о том, что при многоязычной классификации и переходе от модельных эмоций к спонтанным точность распознавания значительно снижается.

На составленных мной дата-сетах получилось достичь точности 55%.

База данных

Количество классов

Количество записей

Модель

Точность

Emo-DB

4

408

MLPClassifier

79.268%/22.983%

MCartEmo-admntlf

7

324

KNeighborsClassifier

49.231%

MCartEmo-asnef

5

373

GradientBoostingClassifier

49.333%

MCartEmo-pnn

3

421

BaggingClassifier

55.294%

При увеличении количества выделяемых классов эмоций точность распознавания падала. Это так же может быть связано с уменьшением выборки ввиду сложности разметки по большому количеству классов.

Далее я попробовала обучить сверточную нейронную сеть на дата-сете MCartEmo-pnn. Оптимальной архитектурой оказалась следующая.

Точность распознавания такой сети составила 62.352%.

Далее я провела работу по расширению и фильтрации дата-сета, в результате чего количество записей увеличилось до 566. Модель заново была обучена на этих данных. По итогу точность распознавания увеличилась до 66.666%. Это говорит о необходимости дальнейшего расширения набора данных, что приведет к увеличению точности распознавания эмоций по голосу.

График истории обучения и матрица ошибок полученной CNNГрафик истории обучения и матрица ошибок полученной CNN

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

Сервис Gateway API производит аутентификацию пользователей по стандарту JSON Web Token и выполнять роль прокси-сервера, направляя запросы к функциональным микросервисам, находящимся в закрытом контуре.

Разработанный сервис был проинтегрирован с Битрикс24. Для этого было создано приложение Аналитика речи. В понятиях Битрикс24 это серверное приложение или приложение второго типа. Такие приложения могут обращаться к REST API Битрикс24, используя протокол OAuth 2.0, а также регистрировать свои обработчики событий. Поэтому достаточно было в сервере добавить роуты для установки приложения (по сути регистрация пользователя), удаления приложения (удаление аккаунта пользователя) и обработчик события OnVoximplantCallEnd, который сохраняет результаты анализа записей в карточках связанных со звонками CRM-сущностей. В качестве результатов приложение добавляет расшифровку записи к звонку и комментарий с оценкой успешности разговора по пятибалльной шкале с прикреплением графика изменения эмоционального состояния по каждому участнику разговора.

Заключение

В работе представлен результат исследования на тему распознавания эмоций в речи, в ходе которой на основе русскоязычных записей телефонных разговоров был создан дата-сет эмоциональной речи, на котором была обучена CNN. Точность распознавания составила 66.66%.
Был реализован веб-сервис, с помощью которого можно выполнять очистку аудиозаписей от шума, диаризацию, транскрибацию и анализ эмоций в аудиозаписи или текстовых сообщениях.
Сервис был доработан, чтобы его также можно было использовать как приложение Битрикс24.

Данная работа выполнялась по заказу компании Эм Си Арт в рамках ВКР бакалавра образовательной программы "Нейротехнологии и программирование" университета ИТМО. Также по этой теме у меня был доклад на X КМУ и была принята на публикацию в "Сборнике трудов Конгресса" статья.

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

Список источников

  1. Давыдов, А. Классификация эмоционального состояния диктора по голосу: проблемы и решения / А. Давыдов, В. Киселёв, Д. Кочетков // Труды международной конференции "Диалог 2011.". 2011. С. 178185.

  2. Smart Logger II. Эволюция систем многоканальной записи. От регистрации вызовов к речевой аналитике [Электронный ресурс]. Режим доступа: http://www.myshared.ru/slide/312083/.

  3. Smart logger-2 не дремлет. Эмоции операторов call-центров и клиентов под контролем [Электронный ресурс]. Режим доступа: https://piter.tv/event/_Smart_logger_2_ne_drem/.

  4. Perepelkina, O. RAMAS: Russian Multimodal Corpus of Dyadic Interaction for Studying Emotion Recognition / O. Perepelkina, E. Kazimirova, M. Konstantinova // PeerJ Preprints 6:e26688v1. 2018.

Подробнее..

Запись разговоров на астериск и их распознавание на Yandex.Speech

14.12.2020 14:08:42 | Автор: admin

Небольшой проект. Простая реализация. Заметка по диалплану астериск, командам консоли и АПИ распознавания Яндекса. Вы прочитаете и не наступите на мои грабли, я прочитаю через полгода-год и вспомню, что делал.

Задача: получать текстовое представление разговоров, записанных на астериске.

Сначала запись разговора

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

Также используется параметр b - для начала записи в момент начала разговора.

С 16 астериска была опция S - для синхронизации t и r файлов, (в тот, который позже начался записываться добавлялась тишина в начало файла). С 18 астериска опцию S убрали, т.к. это стало поведением по умолчанию, а добавили контр-опцию n. Но я использую b, поэтому эти дополнительные пляски мне не потребовались.

MixMonitor(record-o.wav,br(record-r.wav)t(record-t.wav),command)

Затем также в команде MixMonitor'а мы укажем команду для выполнения после записи. В рамках этой команды мы нормализуем каждую запись - выровняем по уровню и затем смерджим две записи в один двухканальный файл.

sox --norm record-t.wav record-t-norm.wav // нормализация записи одной стороны разговора

sox --norm record-r.wav record-r-norm.wav // нормализация записи второй стороны разговора

sox record-r-norm.wav record-t-norm.wav --channels 2 --combine merge record.wav // сливаем записи в один файл

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

Для прослушивания можно использовать файл record-o.wav - первый файл из MixMonitor'а, записан традиционным методом, привычным для уха.

Файлы в формате wav достаточно много места занимают. Поэтому для хранения я их конвертирую в mp3 и копирую на хранилище.

Еще пара вариантов как организовать раздельную запись каналов на астериске

https://howto.a17.su/asterisk/call-recording.html

https://voxlink.ru/kb/asterisk-configuration/integraciya-asterisk-so-speech-analytics/

Теперь распознавание

Для распознавания дальше использую сервис Яндекса.

У Яндекса есть несколько API для распознавания: короткие аудио, длинные аудио и потоковое. Короткие - это до 30 секунд, поэтому пользуюсь API для длинных аудио.

Длинные аудио - передать можно wav или ogg файлы. С wav файлами дело не пошло, и в самом API еще необходимо указывать дополнительные параметры для wav-формата, поэтому я прежде чем отправлять на распознавание переконвертирую в ogg. Яндекс определит, что ogg двухканальный и распознает его по двум каналам без дополнительных параметров

/usr/bin/ffmpeg -i record.wav -acodec libopus record.ogg // команда переконвертации в ogg

Также есть пара нюансов

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

Хранилище Яндекса является S3-совместимым, поэтому для закачивания подойдет любая утилита или библиотека работающая с S3-хранилищем Амазона. Для хранения файлов в хранилще используются buckets.

Документация на Яндекс.Storage

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

Документация на Яндекс.Облако Распознавание длинных аудио

Документация на Яндекс.Облако Отслеживание статуса операции

Так получилось, что мое тестирование было в августе 2020, и попало на какой-то факап очереди заданий. И поэтому распознавания производились очень долго - по 2 и более часов.

Т.к. в Яндекс.Облаке и поддержка платная, отдельной строкой, то на мой тикет не отвечали оперативно. В чате же Яндекс.Облака достаточно быстро сообщили, что есть проблемы. Ну, а позже и на тикет ответили. И очередь починили. в штатном режиме все работает вполне оперативно.

По тарификации распознавания

Хранилище: место и операции - это тарифицируется. Распознавание - тоже. Все понемногу. Использую корпоративный тариф.

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

Посчитать на Тарификаторе Яндекса (раздел SpeechKit)

Ключи доступа. Тут главное не запутаться, так как у вас будут ключи и от сервиса распознавания (API ключ), и от хранилища S3 (статический ключ). Оба вида ключа на сервисном аккаунте.

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

Подробнее..

Голосовая аналитика бесплатно. Что? Где? Когда?

22.12.2020 18:11:09 | Автор: admin
Большая часть продаж и поддержки все так же происходит по телефону, и во времена удаленки эта цифра только возрастает. Но как контролировать сотрудников колл-центра? Специально для этого и существует голосовая аналитика.
Как она работает, как пользоваться, и как попробовать бесплатно, мы расскажем ниже.




Что такое голосовая аналитика?


Голосовая аналитика комплексное решение анализа речи. Нейросети переводят разговоры из голоса в текст, затем текст анализируется по нескольким параметрам. В частности, инструмент умеет анализировать:

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


Кому пригодится?


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

Словари и ключевые слова


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

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

Слова оператора
Неуверенная работа оператора не знаю, не уверен, не могу помочь
Скрипты покупка совершена, ваш заказ принят в обработку, спасибо за покупку

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

Слова оператора и клиента
Упоминание конкурентов Кола, пепси, спрайт, миринда, вятский квас
Ошибки, баги сбой, не работает, техническая ошибка, неполадки, зависло

Также система может строить отчеты по дополнительным параметрам: молчание, перебивание (в % эквиваленте), скорость речи, соотношение речи оператора и клиента.
Пример такого отчета:



Сколько стоит и как попробовать?


Сам инструмент речевой аналитики абсолютно бесплатный. Это не первый наш бесплатный инструмент (например бесплатная АТС, коллтрекинг, CRM, виджеты). Платить нужно только за минуты распознавания речи.
Инструмент умеет работать с 50+ языками, и стоимость зависит от языка.
Стоимость распознавания популярных языков, в том числе и русского 90 копеек за минуту разговора.



До 15 января 2021 года мы добавили подарочные минуты для трех тарифов:
  • Стандарт 100 минут бесплатного распознавания (действует только до 15 января)
  • Офис 500 минут бесплатного распознавания (после акции 100 минут)
  • Корпорация 1000 минут бесплатного распознавания (после акции 200 минут)


Для того, чтобы протестировать речевую аналитику:
  1. зарегистрируйтесь в сервисе
  2. подключите бесплатную АТС и виртуальный номер
  3. активируйте распознавание всех разговоров на одном или нескольких внутренних номерах АТС.
  4. далее создайте параметры отчета разговора в разделе Распознавание речи.


P.S. Все должно совершенствоваться. Так как мы предложили голосовую аналитику лишь несколько дней назад, то активно наращиваем ее функционал. Все пожелания по развитию голосовой аналитики с радостью ждем в комментариях.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru