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

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

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

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


  1. priwelec
    25.05.2022 23:12
    +1

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

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


    1. iwram Автор
      26.05.2022 08:39

      Спасибо за замечание. Это правда поток мыслей.


  1. AigizK
    26.05.2022 08:37

    Пока статья слишком вводная, но посмотрим что будет в следующий части.

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


    1. iwram Автор
      26.05.2022 08:48

      В целом хотел универсальное решение. Также хотел сразу предусмотреть систему телефонии работающую в кластере kubernetes с включенной аналитикой, но думаю что один такое не потяну (уже пробовал запустить решение на основе доклада https://www.youtube.com/watch?v=xgx61YGSS54).

      Задача в целом простая, это возможность сделать софт, который легко внедрить в существующие системы и быстро анализировать поток данных. Как и сказал, это вводная часть. И в статье указал то, что основная программная часть работы будет связана в основном с аналитикой полученного текста. С speech to text уже есть много хороших, открытых решений, поэтому хочется все правильно скомпоновать и сделать хорошее, доступное решение.


      1. AigizK
        26.05.2022 11:30
        +1

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

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


        1. iwram Автор
          26.05.2022 12:17

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


  1. Enterboy
    26.05.2022 08:48

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


    1. iwram Автор
      26.05.2022 09:10

      200*60*8= 96000, это усредненная формула call centr, где 200 это количество звонков в минуту и 8 часовой рабочий день. Даже если фрилансер будет брать 10 рублей за минуту распознавания, получится довольно кругленькая сумма в день. Тут решают масштабы бизнеса.


      1. Enterboy
        26.05.2022 09:14

        Давайте будем повнимательнее. Я написал рубль минута, а не 10.

        И второе: 200 звонков в минуту это нереально. На один звонок в среднем (сильно зависит от бизнеса) отводится около полутора минут. Обычно количество "голов" в колл-центре далеко не 200 или 100, а на порядок меньше.


        1. iwram Автор
          26.05.2022 09:35

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


          1. Enterboy
            26.05.2022 10:10

            Да, про конфиденциальность совершенно не подумал, каюсь. Тут вы совершенно правы.