Pull to refresh

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

Reading time6 min
Views3.8K

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

Итак, у нас есть куча аудиозаписей и пишется ещё и ещё. Мы нанимаем новых работников, которые будут анализировать аудиозаписи с целью «повышения качества обслуживания» (того самого качества, о котором говорят в начале разговора) — но обычно данное качество проверяется только после жалобы клиента на несоответствие работы оператора, либо клиент всегда любит жаловаться. В современном мире, не должно быть вопросов - «что делать», а какие технологии будем использовать и какой бюджет. Да, простите меня за долгое и нудное вступление. Перехожу к схемам, определению данных, что и как будем смотреть, а также покажу свое 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. Как видите, я решил использовать технологии на основе словарей и подробнее рассмотрю вариант с морфологическим анализом.

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

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 6: ↑6 and ↓0+6
Comments12

Articles