Распознавание телефонных звонков с помощью речевых технологий Yandex SpeechKit
Постановка задачи
Необходимо телефонные переговоры менеджеров преобразовать в текст и подгрузить в 1С в карточку клиента. Настроить поиск по ключевым словам. Создать отчет для сбора статистики работы менеджера (количества звонков, длительность).
Реализация
-
SpRecord
Телефонные звонки записываются с аналоговых линий с помощью системы регистрации и записи телефонных разговоров SpRecord (https://sprecord.ru/). В среднем в день получается около 500 Мбайт информации. Телефонные аппараты - самые простые Panasonic TS2350
SpRecord можно устанавливать в файловом или в серверном режиме. В серверном удобнее вытаскивать дополнительную информацию из SQL сервера по данным звонка. Таблица dbo_Records содержит все необходимые данные:
- Номер линии
- Дата звонка
- Имя файла звонка
- Телефон кому звоним
- Внутренний номер
- Входящий/Исходящий
Прямым запросом к SQL получаем эти данные и заполняем справочник Звонки в 1С.
-
SOX
Для распознавания файлы отправляются по 1 Мб - получается 500 запросов в день. Чтобы нарезать файл на кусочки используется утилита для работы с аудиофайлами SoX (http://sox.sourceforge.net/). Кроссплатформенная утилита для работы через командную строку. Утилита имеет огромные возможности для работы со звуком. Я использовал только:
- Получить длительность файла
sox --i -d 1.wav > res.txt
- Получить частоту дискретизации файла
sox --i -r 1.wav > res.txt
- Нарезка файла по 45 секунд
sox " + ПутьКФайлу + " """ + ПутьКSox + "converted\" + ТекСек + ".wav"" trim " + ТекСек*45 + " 45
-
Распознавание звуковых файлов в текст Yandex SpeechKit Cloud.
Необходимо зарегистрироваться и получить ключ (https://developer.tech.yandex.ru). Первый месяц бесплатно. Можно получить несколько ключей и когда заканчиваются количество обращений на одном, то переходить на другой ключ. Я у себя использую 3 ключа, пока хватает объема. Скорее всего Яндекс обучает свою систему распознавания и ему необходимо больше звуковых файлов для анализа. Поэтому дают бесплатные ключи.
Качество распознавания очень зависит от телефонной гарнитуры и произношения менеджера. Дикторскую речь, которая записана на приветствии в АТС преобразовывает 100% правильно. Речь менеджера, который жует или пьет чай может преобразовывать с ошибками.
Для примера вот в таком виде вы получите текст разговора:
«але але добрый день добрый да половину оплатили оплатили так что сегодня увидите директор закончил говорить нет но вы сейчас на месте просто директор хотел поговорить а у него занято ну да скорее всего да ладно»
Общий смысл разговора понятен, но много ошибок. Менеджерам предложил сформировать список слов «заказ, счет, перезвонить» который нужно проговаривать медленнее и хорошо выговаривая при разговоре с клиентом. Тогда в дальнейшем можно делать поиск по этим ключевым словам.
-
Доработки в 1С
В 1С создаем справочник Звонки. В нем храним ссылку на *.wav файл разговора, дату, номера кому звонили и с какого внутреннего телефона, а также текст расшифровки звонка. К карточке звонка я подключил проигрывание телефонных разговоров. (//1c-soft.it-terminal.ru/public/518955/)
В обработке Yandex speech реализована обработка ожидания. Каждые 2,5 часа запускает пакет заданий. Он содержит проверку новых звуковых *.wav файлов в каталоге SpRecord , загрузка их в 1С, далее получение доп. информации о длительности и номерах из SpRecord и далее нарезка файлов по 1 МБ и распознавание их в Yandex SpeechKit Cloud.
-
Скорость работы. Анализ накопленной информации. Проблемы при разработке
- Самое большое время тратится на отправку файла размером 1 Мб в Yandex SpeechKit Cloud и ожидание ответа(несколько секунд на каждый файл). Нарезка программой SOX занимает много меньше секунды. Загрузка дополнительных данных с SpRecord еще меньше. В дальнейшем распаралелить работу с SOX на одном сервере будет проблематично. Будут подвисать файлы. Лучше использовать несколько серверов или виртуальных машин.
- Обнаружил, что в SpRecord файлы писались с частотой дискретизации 44100 Гц, при этом файл занимает довольно много места. Сейчас пишутся с частотой 11025Гц. На распознавание это никак не влияет. В первом случае в 1 Мб помещается 11 секунд разговора, а во втором 45 секунд. Лучше экономить место на диске. В начале каждого файла до 30 секунд занимает дозвон. Можно отрезать его у всех файлов. Пока не придумал, как программно понять, что начался разговор и нужно начинать преобразовывать.
- Поиграл с настройками языковой модели. Лучший вариант получился у «queries».
-
Queries (Короткие запросы(queries) — фразы (3—5 слов) на различные темы, в том числе запросы в поисковых системах (на сайтах).)
-
Maps (Адреса (maps) — адреса, названия организаций и географических объектов.)
-
Dates (Даты(dates) — названия месяцев, порядковые и количественные числительные.)
-
Names (Имена(names) — имена и фамилии, просьбы соединить по телефону.)
-
Numbers(Числа(numbers) — количественные числительные от 1 до 999 и разделители — точка, запятая, тире. Модель подходит для диктовки номеров телефонов, счетов, документов.)
-
Music (Музыка(music) — названия музыкальных произведений и исполнителей. Модель не предназначена для распознавания музыкальных фрагментов. Подходит только для распознавания названий, имен авторов и исполнителей песен.)
-
Buying (Заказы(buying) — фразы, связанные с оформлением заказов в интернет-магазинах (подтверждение заказа и форма доставки).)
- Иногда на сервере подвисала работа с файлами с утилитой SQX. Утилита консольная и все общение с 1С происходит через файлы. То есть запустил SOX и результат читаешь из файла. Бывает, что файл блокируется. В случае плохого результата этот файл будет пропущен и распознается при следующей итерации.
На данный момент накоплено 125 Гб телефонных переговоров. За 3 месяца работы распознано и загружено в 1С 28400 звонков – это около 298 часов переговоров.
После Нового года Яндекс заблокировал один ключ, который я зарегистрировал в ноябре и написал "Необходимо заключить лицензионный договор. Пожалуйста, обратитесь на почту voice@support.yandex.ru." Скорее всего скоро придется платить за пользование сервисом.
Если нужна доп. информация - пишите в комментариях. Отвечу на вопросы.
Достоинства
Во вложении обработка Yandex speech в которой реализована функция проверки новых звуковых wav файлов в каталоге SpRecord , подгрузка их в 1С, далее получение доп. информации о длительности и номерах из SpRecord и далее нарезка файлов по 1 МБ и распознавание их в Yandex SpeechKit Cloud.
В обработке нужно:
- задать ключи Yandex SpeechKit Cloud (SpechApiKey1,SpechApiKey2,SpechApiKey3)
- путь к программе SOX.
- В функции ПолучитьМенеджера необходимо задать соответствие номера линии SpRecord и номера телефона менеджера.
- КаталогСФайлами путь к звуковым файлам разговоров программы SpRecord.
- GUID сформировать свое уникальное значение
- СтрокаСоединения задать свои параметры подключения к SQl серверу