Допустим у вас есть тысячи аудио файлов со звонками менеджеров отдела продаж или службы поддержки, а может в архиве сотник записей лекций и т.п. Как в таком большом массиве данных понять какое содержание этих файлов и желательно быстро? Не слушать же всё это! Одно из решений – это код на python и модель Vosk для перевода звука в текст.
Vosk – это бесплатная open source модель для расшифровывания (транскрибации) речи из аудиофайлов в текст. Библиотека включает в себя несколько языков, в том числе и русский язык. А ещё:
- китайский,
- турецкий,
- арабский,
- вьетнамский,
- итальянский,
- голландский,
- каталанский,
- греческий,
- фарси,
- филиппинский,
- казахский,
- эсперанто,
- хинди,
- узбекский,
- корейский,
- бретонский,
- гуджарати,
- английский,
- таджикский и другие.
Софт на компьютере
В начале нужно установить библиотеку FFmpeg для работы со звуком. Как это сделать, описано здесь.
Следующее, что необходимо сделать – скачать подходящую модель Vosk. Ссылки на все модели расположены на странице проекта. Для русского языка, на момент написания этой статьи, доступно четыре модели:
- vosk-model-ru-0.42
- vosk-model-small-ru-0.22
- vosk-model-ru-0.22
- vosk-model-ru-0.10
Скачиваем архив и распаковываем в папку проекта или в любую другую папку.
Также предполагаем, что на компьютере уже есть массив звуковых файлов. Как получить данные по всем звонкам и скачать эти звонки например из CRM Битрикс24 описано здесь и тут.
Библиотеки
Открываем Jupyter Notebook и пишем код:
pip install ffmpeg --quiet
pip install pydub --quiet
pip install vosk --quiet
from vosk import Model, KaldiRecognizer, SetLogLevel
from pydub import AudioSegment
import os
import pandas as pd
df = pd.read_excel('income_data.xlsx')
df['text'] = '' FOLDER_MP3 = 'D:/audio'
SetLogLevel(0)
FRAME_RATE = 16000
CHANNELS = 1
Переменные для python-кода
Цикл перебора аудио-файлов, транскрибация и сохранение текста в таблицу
Сохранение результатов в excel-файл
Полученный текст можно использовать в дальнейшей аналитике. Например:
- можно определить состоялся ли разговор человека с человеком,
- определить рабочий телефон или нет,
- какая организация отвечает по телефону,
- что говорят менеджеры, следуют ли скрипту разговора и т.п.
Весь код на GitHub-e.
P.S.№1 Модель Vosk справляется с расшифровкой речи на среднем уровне с заметным уровнем ошибок, особенно если качество звука низкое. Если нужен более точный текст, необходимо использовать более продвинутые модели, например бесплатную Whisper от OpenAi.
P.S.№2 В коде используется изначальный датафрейм с информацией о звонках, собранной ранее. Если у вас нет такого датасета, то можно просто разбирать аудио-файлы с помощью библиотеки Glob и записывать тексты в новую таблицу.