Всем привет!  Меня зовут Евгений Торчинский, практически всю свою жизнь я работаю с технологиями. Сейчас я руковожу Movix Lab — мы уже много лет занимаемся железом, софтом и работаем с искусственным интеллектом. Я руковожу большой командой, наши продукты — результат совместной работы сотен человек и нескольких отделов. Сегодня я хочу подсветить направление голосового ассистента: ребята делают помощника, который будет жить во всех b2c - продуктах Дом.ру. Это будет единый ассистент для всех платформ и каналов связи, в том числе и для техподдержки. Другими словами, что-то понятное и знакомое во всех точках контакта.  В числе прочих, над проектом работает Антон Неверов, специалист по машинному обучению. Сегодня я хочу поделиться результатами его научного исследования. Итак, поехали. У любого голосового ассистента есть споттер — это то самое ключевое слово, благодаря которому ассистент понимает, что человек обращается именно к нему. «Алиса», «Салют» или ‘Hey, Siri’ — это все споттеры. Голосового ассистента нужно научить вылавливать «свое» слово из звукового потока и как можно скорее среагировать на него. Для этого обучения мы используем нейросетевые модели.  Один из ключевых вопросов при работе с нейросетевыми моделями — это оценка качества обучения модели. На эту тему есть немало исследований, авторы которых практически всегда основывают оценку качество обучения нейронной сети на базовых понятиях: количестве успешных и ложных детектирований. Причем совсем не важно, каким именно вопросом занимаются авторы — детектированием изображений, звука или работой со статистическими данными — метод оценки остается тем же.  В своей работе Антон рассмотрел возможные варианты повышения качества работы уже обученной нейросети с помощью применения алгоритма тестирования с автоматическим подбором гиперпараметров. Работает это следующим образом:  Допустим, у нас есть готовая нейронная сеть, обученная на разных звуках, и способная распознавать N ключевых слов из аудиопотока, где N > 2. При отправке аудиофрагмента на распознавание, мы получаем от нейросети вектор X, где каждый компонент представляет вероятность присутствия соответствующего ключевого слова в аудиофрагменте. Например, компонент X1 означает вероятность обнаружения первого ключевого слова, которое может быть наиболее важным для нас. Теперь возникает вопрос: как мы можем определить, присутствует ли в аудиофрагменте первое ключевое слово? Для этого можно задать гиперпараметр, назовем его порог вероятности. Он будет определять, какое значение X1 будет означать присутствие ключевого слова в аудиофрагменте. Допустим, что порог вероятности равен 0.5. Если значение вероятности X1 больше или равно этому порогу, мы понимаем, что нейросеть определила слово как ключевое. В таком случае, некий тестовый аудиофайл можно разбить на аудиофрагменты, а затем посчитать количество ложных и успешных срабатываний. Это можно сделать автоматически, но при этом возникает сразу 2 проблемы:  Проблема №1: Каким образом сравнивать две нейросетевые модели? Допустим, у одной из них 32 положительных срабатывания и 46 ложных, а у другой — 35 и 47 соответственно. Как понять, какую из них считать лучше обученной?  Проблема №2: Допустим, что в другом компоненте вектора X есть значение с той вероятностью равной или большей X1. Можно ли при этом быть уверенным, что, несмотря на достижение X1 порога вероятности, первое ключевое слово содержится в аудиофрагменте?  Начнем с проблемы №2. При обучении нейронной сети вероятности компонента вектора X будут разными в каждой модели. Поэтому мы не можем ввести гиперпараметр, который бы определял пороговое соотношение между компонентами вектора X. Однако мы можем использовать введеный нами ранее порог вероятности как гиперпараметр и применить алгоритм, разработанный Антоном. Мы считаем, что первое ключевое слово в аудиофрагменте обнаружено, если одновременно выполняется два условия:  Мы фиксируем компоненты вектора и видим, что X1 является самым большим по абсолютному значению. Вероятность X1 выше пороговой вероятности. При невыполнении одного из этих условий мы считаем, что интересующего нас первого ключевого слова в аудиофрагменте нет. Использование данного алгоритма помогло снизить ложные активации на 70% по сравнению с работой нейросетевой модели до него. Перейдем к проблеме №1. Чтобы не запутаться в количестве ложных и успешных срабатываний, нам нужны способы сравнения их производительности. Часто используются два показателя: точность и полнота. Но эти два показателя не дают нам одного числового значения для сравнения моделей. Чтобы иметь единый параметр для сравнения, можно использовать F-меру. Чем ближе F-мера к 1.0, тем лучше работает модель. F-мера основана на точности и полноте модели, которые, в свою очередь, зависят от количества успешных и ложных срабатываний. Количество таких срабатываний определяет порог вероятностей, задаваемых человеком. Если мы изменим порог вероятности, количество срабатываний также изменится, что приведет к другой F-мере. Кроме того, порог вероятности влияет на решение проблемы №2. Здесь возникает закономерный вопрос: каким образом можно задать этот порог так, чтобы модель показала лучшую F-меру? В ходе исследования было найдено решение: нужно идти в обратную сторону. Новый вопрос звучит так: какой порог вероятности должен быть, если нам известно лучшее значение F-меры? Чтобы получить однозначный ответ, модель нужно протестировать на аудиофайле с разными порогами вероятности, с полным перебором от 0 до 1 с шагом 0.05.  В рамках исследования проблемы №1 было записано несколько тестовых аудиофайлов: Аудио с произношением ключевого слова 385 раз Двухчасовой файл с бытовыми шумами: тишиной, работой кондиционера, звуками машин на улице и так далее Аудио с произношением случайных слов, кроме ключевого.  Мы проверили, как наша нейросетевая модель распознает произношение ключевого слова и обнаруживает ложные активации на тестовых аудиофайлах. Результаты представлены на рисунке 1, где показана зависимость количества успешных срабатываний на аудиофайле с ключевыми словами от порога вероятности. Рисунок 1 Зависимость успешных срабатываний от порога вероятности После анализа графика можно сделать вывод, что значение порога вероятности в диапазоне от 0 до 0.5 не влияет на процент распознавания. Это косвенно указывает на достаточно хорошую обученность модели. Однако, после достижения порога вероятности 0.8, процент распознавания начинает резко снижаться.  Чтобы оценить качество обучения модели более полно, была проведена попытка распознавания ключевых слов на двух других аудиофайлах, в результате которых было выявлено количество ложных срабатываний. График с результатами представлен на рисунке 2. Рисунок 2 Зависимость ложных срабатываний от порога вероятности Из представленного выше рисунка можно сделать вывод, что порог вероятности от 0 до 0.5 включительно не оказывает влияния на работу нейросетевой модели, однако уже после 0.55 количество ложных срабатываний начинает резко сокращаться.  Совместив два графика на одном, мы увидим картину, представленную на рисунке 3: Рисунок 3 График положительных и ложных срабатываний Аналогичным образом можно построить график F-меры и рассмотреть зависимость ее значений от выбранного порога вероятности: Судя по графикам на рисунках 1 и 2, можно сделать вывод, что F-мера остается постоянной при пороге вероятности от 0 до 0.5. При увеличении порога вероятности, F-мера начинает падать, за исключением значения порога 0.6, где F-мера почти достигает прежнего лучшего значения. Стоит отметить, что описанные выводы относятся только к равнозначной F-мере. Однако в реальных приложениях может быть более важным снижение ложных срабатываний, чем повышение точности распознавания. Например, уменьшение числа ложных срабатываний в два раза может существенно улучшить пользовательский опыт, даже если это приведет к снижению числа успешных распознаваний с 270 до 240. В таких случаях формула F-меры может иметь иной вид. Благодаря этому исследованию, мы можем применять нейросетевую модель более эфеективно, без дополнительного переобучения. Теперь во время обучениям на сервере мы можем создавать несколько различных моделей и автоматически сравнивать их по лучшей F-мере, используя автоматический подбор порога срабатывания и исключая при этом человеческий фактор. Оставайтесь с нами, впереди еще очень много интересного!