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

Традиционные методы диагностики Covid-19, такие как ПЦР-тесты и анализы на антитела, обеспечивают точные результаты, но они требуют времени, ресурсов и инфраструктуры. Голосовая система распознавания, с другой стороны, основывается на анализе изменений в голосе и речи, которые могут быть связаны с присутствием вируса.

Учась в Университете ИТМО, в рамках проекта я создал систему распознавания COVID-19, которая анализирует способности голосовых биометрических признаков в выявлении заболевания. В статье разберу подробнее, какие методы я использовал и, как это вообще работает.

Идея проекта


Идея проекта системы распознавания COVID по голосу заключается в применении методов классического машинного обучения и выборе лучшего из них. Я попробовал использовать несколько подходов классического ML, такие как KNeighbors (Метод k-ближайших соседей), LogisticRegression (Логистическая регрессия), RandomForest (Метод случайного леса), а также DecisionTree (Дерево принятия решений). С помощью k-fold cross-validation я провел обучение всех моделей с разными параметрами и проверил их точность на валидационных данных. Это позволило выбрать лучшую модель c лучшими параметрами – DecisionTree, который в итоге дал наилучшую точность.

knn_clf = GridSearchCV(estimator=KNeighborsClassifier(), param_grid={'n_neighbors': range(2, 11)}, cv=5, scoring='accuracy')

logreg_clf = GridSearchCV(estimator=LogisticRegression(), param_grid={'tol': [1e-3, 1e-4, 1e-5],
                                                                      'C': [0.7, 1, 1.3]}, cv=5, scoring='accuracy')
d_tree_clf = GridSearchCV(estimator=DecisionTreeClassifier(), param_grid={'criterion': ['gini', 'entropy'],
                                                                          'max_depth': [5, 10, 20, 30, 40, 50, 100, None]
                                                                         }, cv=5, scoring='accuracy')
rf_clf = GridSearchCV(estimator=RandomForestClassifier(), param_grid={'n_estimators': [5, 10, 20, 50, 100, 150, 200],
                                                                     'criterion': ['gini', 'entropy']
                                                                      }, cv=5, scoring='accuracy')
knn_clf.fit(scaler.transform(x_train), y_train)
logreg_clf.fit(scaler.transform(x_train), y_train)
d_tree_clf.fit(x_train, y_train)
rf_clf.fit(x_train, y_train)
print('max knn score:', max(knn_clf.cv_results_['mean_test_score']))
print('max logreg score:', max(logreg_clf.cv_results_['mean_test_score']))
print('max dtree score:', max(d_tree_clf.cv_results_['mean_test_score']))
print('max random forest score:', max(rf_clf.cv_results_['mean_test_score']))


Используя подход DecisionTree, я брал dataset с аудиоданными и вычленял оттуда признаки. Потом использовал только наиболее значимые и некоррелирующие из них, и затем модель обучалась на этих признаках.

Модель «дерево принятия решений»


В чем заключается подход DecisionTree или «Дерево принятия решений». На рисунке представлена схема работы метода.



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

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

Алгоритм построения дерева решений:
  • Выбор признака. На каждом шаге алгоритма выбирается признак, который наилучшим образом разделяет данные на две (или более) подгруппы с точки зрения некоторого критерия. Различные критерии могут быть использованы для измерения качества разделения, такие как индекс Джини, энтропия или ошибка классификации.
  • Разделение данных. Данные разделяются на основе значения выбранного признака. Каждая ветвь дерева представляет одно из возможных значений признака.
  • Рекурсивный процесс. Шаги 1 и 2 повторяются для каждого полученного подмножества данных, пока не будет выполнено определенное условие остановки. Это может быть достижение определенной глубины дерева, достижение минимального количества образцов в листе или другие критерии.
  • Прогноз. В конечных листьях дерева содержится прогноз или вывод модели. Для задачи классификации это может быть метка класса, а для задачи регрессии – числовое значение.

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

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

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

Ансамблирование деревьев, такое как случайный лес, является методом, при котором строится несколько деревьев решений, а затем их прогнозы комбинируются для получения окончательного результата. Это улучшает устойчивость модели и способность к обобщению, так как разные деревья могут иметь разные ошибки и «голосовать» вместе.

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

Система распознавания COVID-19 по голосу


Система распознавания COVID по голосовым данным представляет собой программу, написанную, на языке программирования Python, она использует библиотеку OpenSMILE для анализа звуковых данных. Это библиотека для извлечения различных акустических признаков из звуковых сигналов, и она имеет связанный интерфейс на языке Python для ее использования.

Ссылка на проект на kaggle.

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



Звуковые данные


Для обучения модели использовался готовый набор данных, содержащий звуковые записи от здоровых людей и людей, инфицированных COVID-19. Из этих данных были выделены и отобраны наиболее важные и некоррелирующие признаки. Затем модель «дерева решений» была обучена на этих признаках.

Для обучения модели использовался набор данных, содержащий звуковые записи от здоровых людей и людей, инфицированных COVID-19. На входе имелось 2 файла с данными, один включает в себя записи речи здоровых людей, другой – записи речи людей с COVID-19. Каждый фрагмент записи составляет 4 секунды, а записи речи включают в себя в общей сложности 16554 фрагмента и 8853 фрагмента соответственно. Формат файла — WAV, преобразован с частотой дискретизации 44,1 кГц.

Важные признаки системы


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

Ниже представлено 10 наиболее важных признаков, которые позволяют более точно определить характеристики звука, связанные с COVID-19.

10 важных признаков:

  • F0semitoneFrom27.5Hz_sma3nz_pctlrange0-2: Описывает диапазон высоты звука в полутонах в диапазоне 0-2% от общего диапазона.
  • loudness_sma3_meanFallingSlope: Описывает средний уровень громкости звука и его падение со временем.
  • mfcc1V_sma3nz_stddevNorm: Описывает изменение первого коэффициента мел-частотных кепстральных коэффициентов (MFCC) со временем.
  • F0semitoneFrom27.5Hz_sma3nz_percentile80.0: Описывает 80-й процентиль диапазона высоты звука в полутонах.
  • slopeV0-500_sma3nz_amean: Описывает среднее значение наклона звука в диапазоне частот от 0 до 500 Гц.
  • spectralFluxV_sma3nz_amean: Описывает среднее значение спектрального потока звука.
  • loudness_sma3_stddevFallingSlope: Описывает стандартное отклонение уровня громкости звука и его падение со временем.
  • loudness_sma3_meanRisingSlope: Описывает средний уровень громкости звука и его возрастание со временем.
  • mfcc1_sma3_stddevNorm: Описывает стандартное отклонение первого коэффициента мел-частотных кепстральных коэффициентов (MFCC).
  • slopeUV0-500_sma3nz_amean: Описывает среднее значение наклона звука в диапазоне частот от 0 до 500 Гц.


Тестирование


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



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

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

Точность предсказания при тестировании составила 91,7%.

Для использования системы реальными пользователями планируется запуск Telegram-бота, который будет размещен на облачном сервере в Serverspace. Он позволит пользователям записывать голосовые аудиозаписи и получать предсказания о состоянии их здоровья в формате 0 или 1. 0 обозначает здорового человека, а 1 — человека, больного COVID-19. Это позволит распространить модель для широкой аудитории и предоставить людям возможность самостоятельного мониторинга своего здоровья на основе анализа голосовых данных.

INGV


При разработке системы распознавания COVID-19 по голосу, я ориентировался на популярный проект из другой доменной области – INGV (Volcanic Eruption Prediction или Прогнозирование извержений вулканов). Это исследование, которое ведется Итальянским национальным институтом геофизики и вулканологии (INGV). Его цель заключается в разработке и применении методов прогнозирования извержений вулканов для повышения безопасности и снижения рисков для населения, проживающего в зоне вулканической активности.


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

Как использовался проект для создания модели прогнозирования COVID?


  • Так же как в проекте INGV используются данные о колебании тектонических плит, в системе распознавания COVID по голосу берутся данные о колебании звука.
  • В обоих проектах применяется извлечение признаков из данных. В проекте INGV это может быть извлечение характеристик сейсмической активности, газовых выбросов, температуры и других параметров. В системе распознавания COVID по голосу извлекаются признаки из голосовых данных, такие как высота звука, громкость, спектральные параметры и другие.
  • Оба проекта используют модели машинного обучения для анализа данных и предсказаний. В системе распознавания COVID по голосу тестировались несколько методов, но в итоге использовалась модель «дерева решений». А в проекте INGV применяются различные модели, такие как нейронные сети, алгоритмы классификации и регрессии для прогнозирования извержений вулканов.
  • Оба проекта направлены на предсказание событий. Проект INGV стремится предсказывать извержения вулканов, чтобы уменьшить риски для населения. Система распознавания COVID по голосу направлена на предсказание наличия COVID-19, что может помочь в раннем выявлении и контроле распространения болезни.

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

Проекты, направленные на определение COVID по звуковым данным, уже были, например, Al Resp – приложение для определения COVID-19 по кашлю от «Сбер», где проверка состояла из 4 этапов. Сначала предлагалось указать наблюдаемые симптомы, следующие шаги подразумевали записи кашля, дыхания и голоса. В конце диагностики Al Resp делал вывод о вероятности наличия заболевания. Но сейчас оно недоступно.

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



Полезные материалы

Комментарии (7)


  1. agalakhov
    20.06.2023 12:50

    Точность 91.7%, а полнота сколько?


  1. Kergan88
    20.06.2023 12:50
    +1

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

    А что на счет людей с простудой, но без ковида?


    1. Arhammon
      20.06.2023 12:50
      +1

      И на счет "здоровых", но с ковидом?


  1. AlexVist
    20.06.2023 12:50

    Как я понял вы не медик и в статье отсылка к медицине лишь с той точки зрения, что это в помощь медикам. Ведь только они могут диагностировать. Тут уж нужно привести в пример бабушек, вернее медиков, которые просили о такой помощи. А то странно выглядит помощь тем кто её не просил. Ну, хотя бы можно было бы рассказать зачем вы решили помочь то? Ведь предметной областью вы не владеете. Не встретил понятия симптомов и синдромов. Как и учёта рисков исходных проявлений для целого ряда заболеваний, патологии и состояний. И как такая система должна это различать, если она заточена только на одно. Сомнительный проект и сомнительный результат. Который требует, опять же, медицинского подтверждения в виде тестов и анализов. То есть помощь сомнительная. Так как перед тестами требует ещё дополнительный шаг, который требует дополнительных вычислительных ресурсов. В свете модных зелёных тенденций... Это перерасход ресурсов и энергии с вероятным результатом и требованием медицинского подтверждения. Если только проект ради проекта на модную тему. Да и браться за человеческий организм это смело. Решили бы задачку проще - определение неполадок в двигателе машины по звуку...


  1. LaTeX_enjoyer
    20.06.2023 12:50
    +1

    Было бы круто сделать такое в 2019-м
    Лайк


  1. gleb_l
    20.06.2023 12:50

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


  1. Daddy_Cool
    20.06.2023 12:50

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