Бондаренко Дмитрий Алексеевич (bondarenkoda) wrote,
Бондаренко Дмитрий Алексеевич
bondarenkoda

Применение CMU Sphinx для создания SIP приложения связи

  Проскитавшись по ИТ рынку полжизни в поисках зарплаты что позволила бы купить квартиру решил уйти в продавцы. На новом поприще столкнулся с жестокой реальностью Холодных звонков — это когда ты к людям со всей душой, а они тебя посылают куда подальше и чтобы больше не звонил. Ранимая душа не выдержала и я решил всё это дело автоматизировать чтобы общался за меня мой компьютер — у него вместо нервов медные провода.

 Поставил себе такую задачу: программа должна уметь звонить и общаться по телефону.

 За вопросом как научить компьютер понимать человеческую речь обратился к просторам Интернета и первым делом меня прибило к системам распознавания речи от Google и Yandex. Распознаёт у них всё замечательно, но через Web сервисы.. Я попробовал применить http запросы для распознавания речи в реальном разговоре — это неудобоваримо: из -за задержек разговор не клеится.

 Следующим шагом стал CMUSphinx (http://cmusphinx.sourceforge.net/wiki/about) - как раз этот продукт закончили переводить с Java на C, и выложили исходники на http://sourceforge.net/projects/cmusphinx/, за что им земной поклон. Я творчески переработал их приложение и вот что получилось:

 Программа "Менеджер холодных звонков": https://sites.google.com/site/coldcallsales/.



 Написал на C++, под эти цели купил MS Visual Studio 2013 Prof. На сайте есть Руководство пользователя по настройке программы и подключению SIP от Мегафона, программа в данный момент бесплатна - если кому пригодится замечательно (предполагал монетизировать исходящие звонки через техподдержку, но пока всё сырое до монетизации ещё далеко — программе месяц отроду, во что вырастет сам не знаю).

 Пока понимает только русский язык - для достижения требуемой скорости код оптимизировал под акустическую модель PTM (http://cmusphinx.sourceforge.net/wiki/acousticmodeltypes) и сделал несколько лайфхаков чтобы сразу выходить на результат, а не сравнивать распознанные слова с искомыми предложениями уже после распознавания. Результат для меня — это тот узел/ветка алгоритма куда должен шагнуть процесс когда услышит искомое слово/предложение (это многое упрощает так как мне нет необходимости анализировать весь словарь). Минус этого подхода — если человек выходит в общении за рамки шаблона диалога, алгоритм продолжает выбирать только из своего набора вариантов и общаться согласно выбранному маршруту (иногда срабатывает и собеседник начинает подстраиваться под ход разговора, а иногда трубку гневно бросает так как его перебивают). Столкнулся с границами PTM — если что-то распознаёт плохо, то после тренировки акустической модели начинает распознавать замечательно..но может разучиться распознавать что-то иное. Также обнаружил что качество распознавания зависит от кодеков которые используют телефоны и SIP.

 Как тренировать акустическую модель подробно описал в руководстве пользователя, кроме этого собрал все необходимые утилиты в архив ACMOD.train.zip с cmd-шниками что запускают утилиты с правильными ключами. Думаю, что обычных пользователей обучать всем этим премудростям это что-то из области садизма, поэтому возникла идея монетизации через техподдержку: деньги бы собирали партнёры что ходят к пользователям компьютеры настраивать, а разработчику бы перечисляли с этих денег небольшой процент (основные доходы у партнёрской сети чтобы экосистема росла, а разработчикам с миру по нитке голому миллиард). Под эти цели переписал Lighttpd (http://www.lighttpd.net/) - теперь это грозный сервер лицензий, который отслеживает MAC адреса компьютеров на которых запущена программа, срок действий сертификатов OpenSSL клиентов и продавцов сертификатов клиентов (сейчас на CentOS на хостинге живёт и добрый — разрешает исходящие звонки всем ибо тестовый период). Там же планировал интеграцию с системами инцидент-менеджмента — пользователи бы жаловались прямо в интерфейсе программы и отслеживали процесс решений своих обращений. Этот вектор развития пока заморозил на этапе реализации регистрации заявок в службу инцидент менеджмента будущих партнёров по техподдержке (во размечтался, да?)

 С программы пока ещё не убраны строительные леса — ограничители массивов сверху и снизу, метки целостности объектов и др. структуры для ASSERT проверок == это потенциал для ускорения в 1,5-2 раза. Но уже мысли что надо всё переделать и начать с системы распознавания речи — есть у кого движок чтобы на лету и любую дикцию переваривал? (с меня полцарства за Google качество распознавания)

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


На программирование недр программы ушёл год и ещё несколько месяцев на интерфейс. Чтобы понять стоит ли дальше тратить на эту затею ресурсы и время я начал искать будущих пользователей этого стартапа.

Предполагаемые сферы применения:


  1. Автоответчик-секретарь для дома или в компании


  2. Соцопросы


  3. Поиск клиентов


  4. Поиск товаров или услуг


  5. Приём заказов и автоматизация служб доставки


  6. Информационная поддержка, справочная служба


  7. Первая линия техподдержки/call центр.


  8. Обеспечение безопасности, автоматизация анализа телефонных разговоров и прослушки


  9. Умный дом, наблюдение за престарелыми (не всегда хватает сил доползти до трубки телефона, но может хватить на крик «Помогите!» - распознав который программа сможет вызвать помощь и связаться с близкими)


  10. Агитация (вместо того чтобы платить сумасшедшие деньги за минуты в телевизоре: каждый компьютер может делать по 60 звонков в час — за 16 часов компьютер обзвонит 960 человек.. 100 компьютеров обзвонят 96000 человек в день — это население маленького города.. за месяц можно сагитировать город-миллионник.. Если звонить с городского телефона через FXO шлюз — звонки будут бесплатные.. К выборам в ГосДуму 2016 года возможность бесплатно прогрузить мозг электората целой страны может кому-нибудь да пригодиться )


  11. Можно добавить ещё одно приложение в пакет Microsoft Office или Open Office – будет ещё одно расширение офисного документа ".nlp": Нейро-лингвистические программы.


  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 1 comment