Пошук звукових аномалій

Спробуємо вирішити завдання пошуку аномалій у звуці.

Приклади аномалій звуку:

  • Несправності в роботі двигуна.
  • Зміни в погоді: дощ, град, вітер.
  • Аномалії робота серця, шлунка, суглобів.
  • Незвичайний трафік на дорозі.
  • Несправності колісних пар у поїзда.
  • Несправності при посадці і зльоті літака.
  • Аномалії руху рідини в трубі, каналі.
  • Аномалії руху повітря в системах кондиціонування, на крилі літака.
  • Несправності автомобіля, велосипеда.
  • Несправності верстата, обладнання.
  • Засмучений музичний інструмент.
  • Неправильно взяті ноти пісні.
  • Ехолокація кораблів і підводних човнів.

Розгляд завдання

вихідні дані
Звук являє собою тимчасову послідовність.
У найпростішому вигляді це — амплітуда сигналу по тимчасовій осі.
Сигнал можна конвертувати в спектральну область. Тоді сигнал буде представляти із себе спектр частот, змінний у часі.
Звук являє собою безперервний потік даних. Це дуже важливо, так як ми не можемо переглядати дані далеко вперед по часу і після цього будувати або коригувати наш алгоритм.
Крім того сигнал з плином часу може змінюватися, і ці зміни вже не будуть аномаліями. Бажано, щоб система сама підлаштовувалася до змін сигналу, щоб вона не вважала повторювані зміни сигналу аномаліями.
У загальному випадку наше завдання поширюється на будь-які тимчасові послідовності, не тільки на звук.
Supervised or unsupervised?
В одному випадку ми обробляємо сигнал без всякого апріорне знання про те, які можливі аномалії. Відхилення поведінки від звичайного вважається аномалією. Це — unsupervised моделі.
В іншому випадку ми знаємо, як можуть виглядати аномалії. У нас є зразки звуку аномалій. Ми використовуємо ці зразки в алгоритмах пошуку аномалій. Це — supervised моделі.
Вихідні дані та прийняття рішень
У найпростішому випадку ми будемо детектувати тільки сам факт аномалії з прив'язкою до часу. У більш складному випадку ми ще будемо класифікувати аномалії. Приміром, аномалія може бути слабка, сильна або катастрофічна.
Ми можемо визначати тільки час початку аномалії, або визначати тимчасове вікно від початку до завершення аномалії.

Методи рішення

Огляд методів
Методи виявлення аномалій в звуці відносяться до підкласу методів виявлення аномалій. Відмінність в тому, що вхідні дані, звук, подаються безперервним потоком.
Найпростіші методи це — детектори зміни сигналу. Пороговий детектор реагує на зміни амплітуди сигналу або на зміни спектру. Подібні методи дуже прості і в багатьох випадках самі надійні. Вони працюють в умовах, коли вхідний сигнал стабільний і його поведінка ніяк не змінюється за часом. Будь-яка зміна вважається аномалією.
Наступна група методів відноситься до методам обробки сигналів. Ці методи глибоко вивчені обробки радіосигналів. Для прикладу наведемо радіолокатори та мобільний зв'язок. Методи відмінно працюють, коли ми знаємо, що саме ми шукаємо. Ми заздалегідь повинні знати звук або спектр аномалії. Методи обробки сигналів володіють потужним апаратом фільтрації потрібних сигналів. Не зовсім зрозуміло, як нам використовувати ці методи для пошуку аномалій.
І остання група методів це — методи Machine Learning. Вона включає в себе як класичні методи, наприклад методи лінійної регресії або класифікації, так і новітні нейронні мережі. Методи Machine Learning гарні там, де система повинна підлаштовуватися під різну поведінку вхідних сигналів. Вхідний сигнал може змінюватися досить складним залежностями, а методи навчаються по ходу справи і підлаштовуються під ці залежності. Будь-які закономірності сигналу не вважаються аномаліями. Запрограмувати щось подібне звичайними методами складно, а іноді і неможливо, тому що нам доведеться вручну підлаштовувати нашу систему під зміну сигналу. Методи ж Machine Learning не вимагають ручного підстроювання, вони самі навчаються на наявних даних. Основна проблема з методами Machine Learning в тому, що вхідні дані, тимчасові послідовності, подаються безперервним потоком. Для подібних даних розроблені спеціалізовані моделі. В якості прикладу можна вказати рекурентні нейронні мережі (RNN). Одне з його вдалих описів можна прочитати тут.
Приклади реалізації
спочатку Я проведу короткий дослідження наявних прикладів, щоб потім вибрати найбільш підходящі для мого завдання.
З підготовки даних: на сайті KDNuggets є хороший приклад використання спектральної послідовності.
Тепер спробую пошукати приклади коду.
Microsoft Anomaly Detection Service — один з найбільш простих сервісів. На жаль на нього не можна подавати безперервний потік даних. В його документації досить просто і докладно описані типові аномалії у тимчасових послідовностей.
Компанія Numenta створила тестову майданчик для випробування систем і алгоритмів для виявлення аномалій у часових послідовностей. Numenta — дуже цікава компанія, що займається алгоритмами Machine Learning і намагається наблизитися до розуміння роботи мозку. Зацікавленим рекомендую подивитися захоплюючі відео, зокрема доповідь щодо виявлення аномалій. Алгоритми Numenta дуже добре підходять для нашої задачі. Numenta в лідерах на тестової майданчику. На жаль їх реалізація досить складна. Пара алгоритмів, представлені на другому і третьому місці (на листопад 2016 р.), ненабагато відстають від Numenta, але значно простіше в реалізації.
На GitHub можна виявити багато Open Source систем, зокрема систему від Twitter.
Якщо звернутися до теорії виявлення аномалій з використанням класичного Machine Learning, один з найпопулярніших і повних джерел інформації по цій темі, це scikit-learn проект.
Azure Machine Learning розпорядженні багатьма прикладами реалізації. Природно, нам доведеться використовувати Microsoft Azure ML. Поекспериментувати і побудувати моделі можна буде безкоштовно, але потім треба буде платити за хостинг моделі на Azure серверах. Що може бути і плюсом, а може бути і мінусом.
Microsoft розробила один з кращих пакетів по нейронних мереж, CNTK, і виклала його у відкритому вигляді. Є кілька прикладів з використання пакету для обробки часових послідовностей.
Один з найбільш популярних пакетів по нейронних мереж, це Google Tensorflow.
Keras — досить популярний пакет, що працює поверх TensofFlow або Theano і сильно спрощує створення моделей. Тут один з прикладів його використання для RNN.
Почнемо вибір дизайну?
Інтерфейс
Для початку визначуся з інтерфейсом. Незалежно від дизайну нутрощів самого сервісу, інтерфейс до нього не буде сильно відрізнятися, так як він залежить насамперед від завдання, а не від її реалізації.
Отже, на вході або великий файл зі звуком, або порт для потоку (stream), за яким дані подаються безперервно.
вихід теж або файл, або потік. Формат виходу: час появи аномалії. Додатково ще можуть видаватися: час завершення аномалії; клас аномалії.
Додаткові налаштування — це параметри, різні для різних дизайнів сервісу. Наприклад:
  • параметри для встановлення режиму «помилкові спрацьовування краще/гірше хибних виявлень»;
  • «швидкість підстроювання під нові закономірності»;
  • поріг аномалії.
Custom дизайн
якщо вже я почав з трьох підходів, то логічно опрацювати саме три дизайну.
Перший, на основі детектування зміни сигналу без використання методів Machine Learning. У найпростішому варіанті вхідний сигнал усереднюється, щоб випадкові шуми не створювали дуже багато помилкових спрацьовувань. Потім перевіряється на функції «якщо амплітуда більше порога, то це аномалія».
Трохи складніше, але набагато більш практично, якщо ми додамо логіку по виявленню закономірностей сигналу. Наприклад, аномалії будуть зберігатися в кеші, і нові аномалії будуть перевірятися на повторення. Якщо в кеші знайдена подібна аномалія, і вона відзначена «не аномалія», то це — «не аномалія». Доведеться додати і метод визначення «аномалія/не аномалія». Це буде або додатковий інтерфейс користувача, або якийсь алгоритм.
Використання:
  • підходить для простих сигналів, не змінюються з плином часу.
  • краще підходить для сигналів, про яких багато відомо. Тобто ми маємо зразки сигналу без аномалій і зразки самих аномалій.
  • швидке створення прототипу.
Переваги:
  • найпростіша реалізація.
  • найлегші вимоги до обладнання.
Недоліки:
  • недостатньо розумний, щоб проводити точне детектування та класифікацію аномалій.
Дизайн класичного Machine Learning
Найпростіший варіант — використання Azure ML. В якості прикладу можу взяти ось цей простий экспериментабо сложный.
В іншому варіанті, якщо я хочу мати повний контроль над додатком, можу взяти за зразок цей проект і цей. Обидва зроблені на Python.
Використання:
  • підходить для сигналів, що змінюються з плином часу.
Переваги:
  • легкі вимоги до обладнання.
  • точне виявлення аномалій.
Недоліки:
  • необхідні зусилля для підготовки вхідних параметрів.
Дизайн, який базується на нейронних мережах
Швидше за все підійде готовий зразок на базі Kerasабо можна використовувати CNTK. Але до нього я не знайшов готового прикладу, тому доведеться дописувати код.
Використання:
  • дизайн підходить для складний сигналів, що змінюються з плином часу.
Переваги:
  • не вимагається підготовка вхідних параметрів.
  • саме якісно визначення аномалій.
Недоліки:
  • найбільші вимоги до обладнання
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.