Как стать автором
Обновить

Аналитика содержимого аудиоразговоров (пробуем, пытаемся)

Время на прочтение6 мин
Количество просмотров3.5K

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

Итак, у нас есть куча аудиозаписей и пишется ещё и ещё. Мы нанимаем новых работников, которые будут анализировать аудиозаписи с целью «повышения качества обслуживания» (того самого качества, о котором говорят в начале разговора) — но обычно данное качество проверяется только после жалобы клиента на несоответствие работы оператора, либо клиент всегда любит жаловаться. В современном мире, не должно быть вопросов - «что делать», а какие технологии будем использовать и какой бюджет. Да, простите меня за долгое и нудное вступление. Перехожу к схемам, определению данных, что и как будем смотреть, а также покажу свое mvp выложенное в общий доступ для последующего использования (и даже инструкция есть!). По технологиям, которыми будем пользоваться для преобразования речи в текст, тесты и кто победит — это отдельная статья т. к. тут ваш выбор, либо использовать готовые сервисы, с хорошим распознаванием, либо развивать свои — тут все на ваш выбор, все зависит от уровня вашей организации и требований, которые предъявляют. Как правило организации выбирают готовый сервис для преобразования аудиоречи в читаемый текст.

Есть прекрасный доклад, где поэтапно рассказывают, как создать свой speech-to-text своими руками https://www.youtube.com/watch?v=eke2h9fGtu0 к сожалению последние коммиты 4х летней давности, но для понимания как работает и на какие моменты стоит обратить внимание — очень хорошо рассказано.

Мой проект делится на 2 части — это непосредственно сам аудиоанализатор и система, которая будет складывать и анализировать полученные данные. Аналитика содержимого и как интерпретировать данные, как их можно использовать, какие плюсы это принесет бизнесу…. Можно долго рассуждать, а можно выделить время и попробовать сделать хороший проект, который поможет людям. Скорее всего я ничего нового не скажу, но хочется перечислить пункты, где данная аналитика и будущий проект могут применяться:

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

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

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

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


Как и написал выше, не успел сделать практически работающих чартов для запуска в кластерах.

Будут следующие этапы:

1. Установка приложения.

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

1.2. Анализа данных.

2. Смотрим графики нагрузки и анализируем.

2. Установка баз данных для приложения

2.1. Elasticsearch.

2.2. Clckhouse.

2.3. Kafka.


1. Поговорим про речь

Думаю, что все кто искал информацию по определению аудио в текст, уже встречал статьи по сравнению открытых систем распознования, например тут http://suendermann.com/su/pdf/oasis2014.pdf, а также сравнения с облачными провайдерами — но тут тесты могут быть противоречивые т. к. авторы используют уже ранее выложенные датасеты, поэтому в рамках данной статьи мы просто запустим одно из открытых решений и не будем слишком зацикливаться на фонемах, корпусировании, обучение моделей и других элементов системы, которые важны для определения речи в текст.


В качестве системы для определения голоса выбрал vosk https://github.com/alphacep/vosk-server — конечно, я как и все прочитал про сравнительные анализы, тесты, но у данного продукта есть много готовых интеграций с открытыми системами телефонии и не только, а также порог входа ниже, поэтому прошу не критиковать по выбору данного продукта.

Запускаю vosk-server для этого взял последний датасет и собрал образ используя данный Dockerfile https://github.com/alphacep/vosk-server/blob/master/docker/Dockerfile.kaldi-ru — образ загрузил itforever/vosk-server:0.0-ru. Для запуска данного контейнера требуется достаточное количество ОЗУ, в моем случа потребление контейнера выглядит так:

CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 035fd2e639f9 vosk-server 0.00% 6.524GiB / 19.59GiB 33.30% 9.02MB / 146kB 2.61GB / 0B 2

и сразу протестировал работу — запустил ./vosk-server/websocket/test_ffmpeg.py test.ac3 (использовал для записи audacity, с wav форматом почему то отдавал пустые значения)

Вывод получился таким (тут записал последний абзац):

{ "partial" : "запускаю воск сервер для этого взял последний сет и собрал образ используя данный докер"

}

{

"partial" : "запускаю воск сервер для этого взял последний сет и собрал образ используя данный докер файл"

}

.....

{

"conf" : 1.000000,

"end" : 9.180000,

"start" : 8.700000,

"word" : "работу"

}],

"text" : "образ загрузил все равно протестировал работу"

}


Как видим работает. У нас есть ws сервер, куда будем направлять данные для анализа, значит наш концепт будет выглядеть примерно так:




Теперь переходим к этапу анализа данных.

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

./test_ffmpeg.py ./test_ssud.ac3 | grep "суд"

"partial" : "я суд"

"partial" : "я суд на вас"

"partial" : "я суд на вас"

"partial" : "я суд на вас подам в суд"

"partial" : "я суд на вас подам в суд"

"partial" : "я суд на вас подам в суд"

"partial" : "я суд на вас подам в суд суд"

"partial" : "я суд на вас подам в суд суд"

"partial" : "я суд на вас подам в суд суд"

"partial" : "я суд на вас подам в суд суд в"

"partial" : "я суд на вас подам в суд суд суд"

"partial" : "я суд на вас подам в суд суд суд"

"partial" : "я суд на вас подам в суд суд суд"

"partial" : "я суд на вас подам в суд суд суд суд"

"partial" : "я суд на вас подам в суд суд суд суд"

"partial" : "я суд на вас подам в суд суд суд суд"

"word" : "суд"

"word" : "суд"

"word" : "суд"

"word" : "суд"

"word" : "суд"

"word" : "суд"

"text" : "я суд на вас подам в суд суд суд суд все суд"


Думаю нам этого будет достаточно. Также дополнительно, есть очень хороший проект по определению эмоций на основе набора данных https://github.com/MITESHPUTHRANNEU/Speech-Emotion-Analyzer, поэтому в нашу систему при наличии желания и ресурсов, можно встроить дополнительные проверки.

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


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

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

https://github.com/explosion/spaCy — хороший проект, честно говоря искал по альтернативам LIWC, методика обладающая собственными словарями представляющими собой пространство для оценки того, в какой степени испытуемые используют слова тех или иных категорий (например, позитивные и негативные слова).

Отдельно стоит рассказать про морфологический анализ, реализован в большинстве методик, так как является основой для других видов анализа текста, например яндекс, сделал хорошую документацию, https://yandex.ru/dev/mystem/doc/index.html. Как видите, я решил использовать технологии на основе словарей и подробнее рассмотрю вариант с морфологическим анализом.

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

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+6
Комментарии12

Публикации

Истории

Работа

Data Scientist
62 вакансии
Python разработчик
135 вакансий

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн