Распознавание телефонных звонков с помощью речевых технологий Yandex SpeechKit

Оборудование - Телефония, SIP

обработка SpRecord SOX Yandex SpeechKit Cloud wav

49
Обработка позволяет преобразовывать телефонный звонки формата wav в текст с помощью речевых технологий Яндекса. Дополнительно в обработке реализована нарезка телефонного звонка на кусочки по 1 Мб с помощью SOX. Загрузка дополнительных данных по звонку из программы SpRecord. Использовал на нетиповой конфигурации Управление торговлей 10.3.

Постановка задачи

Необходимо телефонные переговоры менеджеров преобразовать в текст и подгрузить в 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 файл разговора, дату, номера кому звонили и с какого внутреннего телефона, а также текст расшифровки звонка. К карточке звонка я подключил проигрывание телефонных разговоров. (//infostart.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 серверу

 

49

Скачать файлы

Наименование Файл Версия Размер
Распознавание телефонных звонков с помощью речевых технологии yandex SpeechKit:
.epf 11,78Kb
28.12.17
11
.epf 1.1 11,78Kb 11 Скачать

См. также

Комментарии
Избранное Подписка Сортировка: Древо
1. eskor 82 24.01.18 04:10 Сейчас в теме
Интересная идея. Плюсую.
2. krylovim 24.01.18 11:12 Сейчас в теме
Интересно! Сам тоже собирался реализовать подобную функциональность, но пока не дошли руки)
Не рассматривали варианты других движков по распознаванию речи?
Google Cloud Speech API и MS SAPI в частности?
3. zzhiraf_ 49 24.01.18 11:28 Сейчас в теме
Я тестировал вручную несколько файлов http://www.speechpro.ru/ (Voco.Professional). Там качество хуже получилось чем у яндекса. Google тестировал с android приложением. Там качество хорошее, но они матные слова отсекают. А у мне как раз хотелось в приложении наговорить текст и чтобы он в бегущей строке отобразился.
5. gubanoff 44 06.09.18 16:43 Сейчас в теме
(0) спасибо, работает. Взяли себе.
Оставьте свое сообщение