Asterisk + UniMRCP + VoiceNavigator. Синтез и распознавание речи в Asterisk. Часть 1

    Часть 2
    Часть 3
    Часть 4

    Учитывая, возросший интерес сообщества к Asterisk решил внести и свою лепту и рассказать о построении голосовых меню с использованием синтеза и распознавания речи.

    Статья рассчитана на специалистов, имеющих опыт работы с построением IVR в Asterisk и имеющих представление о системах голосового самообслуживания.

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




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

    Синтез и распознавание русской речи в Asterisk


    Принятым в индустрии стандартом для реализации функционала синтеза и распознавания является использование протокола MRCP.

    В Asterisk для этого используется библиотека UniMRCP.
    UniMRCP – это кроссплатформенное ПО с открытым исходным кодом, включающее необходимые средства для реализации функций MRCP-клиента и MRCP-сервера.
    Проект неспешно развивается и, насколько мне известно, это единственное на сегодня OpenSource решение для работы с MRCP-протоколом. Поддерживает Asterisk(все версии, начиная с 1.4) и FreeSWITCH.

    VoiceNavigator


    VoiceNavigator является программным комплексом, который устанавливается на отдельную машину с Windows и предоставляет доступ к движкам синтеза и распознавания посредством протокола MRCP.
    Включает в себя STC MRCP Server, комплекс синтеза речи STC TTS и комплекс распознавания речи STC ASR.

    MRCP-сервер

    MRCP-сервер управляет взаимодействием между используемой голосовой платформой и модулями ASR и TTS. STC MRCP Server поддерживает следующие голосовые платформы: Asterisk, FreeSWITCH, Avaya Voice Portal, Genesys Voice Platform, Cisco Unified CCX, Siemens OpenScape.

    MRCP-запросы передаются командами протокола RTSP.
    Для передачи звуковых данных используется протокол RTP.
    Голосовая платформа через MRCP-сервер запрашивает доступ к модулям распознавания и синтеза речи, в зависимости от этого используются различные схемы взаимодействия.

    ASR

    Модуль ASR занимается распознаванием речи. Ключевым понятием для ASR является SRGS-грамматика.
    SRGS (speech recognition grammar specification) – стандарт, который описывает структуру грамматики, используемой в распознавании речи. SRGS позволяет задавать слова или словосочетания, которые могут быть распознаны речевым движком.
    Создание грамматик – это отдельная наука и при наличии интереса, готов написать отдельную статью.

    TTS

    Модуль TTS использует язык разметки SSML (Speech Synthesis Markup Language) основанный на XML для применения в приложениях синтеза речи.
    Управление синтезом происходит с помощью тегов. С их помощью можно определить произношение, управлять интонацией, скоростью, громкостью, длиной пауз, правилами чтения и т.д.
    Пример синтеза речи от ЦРТ можно послушать здесь vitalvoice.ru/demo

    Схема работы

    Звонок поступает на голосовую платформу.
    Голосовая платформа активирует сценарий голосового меню, по которому происходит дальнейшее взаимодействие с абонентом.
    Сценарий голосового меню определяет: когда система должна прочитать абоненту инструкцию, задать вопрос и как обработать его ответ.
    VoiceNavigator принимает от голосовой платформы запросы на распознавание и синтез речи, выполняют их и возвращают результат выполнения по протоколу MRCP.
    При распознавании речи, голосовая платформа передает SRGS-грамматику и оцифрованную речь и получает ответ в виде NLSML.
    При синтезе речи, голосовая платформа передает plain-текст или SSML и получает в ответ синтезированную речь.

    Установка и настройка UniMRCP


    Перейдем к практической части.
    Ниже описана установка UniMRCP на родную для Asterisk CentOS. При установке на другие ОС могут быть незначительные отличия.

    Скачиваем с официального сайта последнюю версию uni-ast-package-0.3.2.
    Пакет содержит:
    Asterisk версии 1.6.2.9 – работа с этой версией проверена разработчиком UniMRCP;
    Asterisk-UniMRCP-Bridge 0.1.0 – мост для сопряжения Asterisk и UniMRCP модуля;
    UniMRCP – Модуль UniMRCP 1.0.0;
    APR – Apache Portable Runtime 1.4.2;
    APR-Util – Apache Portable Runtime Utility Library 1.3.9;
    Sofia-SIP – SIP User-Agent library 1.12.10.

    Для установки требует autoconf, libtool, gcc, pkg-config.
    После распаковки видим в корне папки три скрипта:
    ast-install.sh – устанавливает идущий в поставке Asterisk, если он не установлен в системе.
    uni-install.sh – устанавливает UniMRCP
    connector-install.sh – устанавливает бридж между Asterisk и UniMRCP.

    Запускаем их именно в таком порядке (если Asterisk установлен — ast-install.sh не надо) и отвечаем на все вопросы утвердительно.
    Смотрим, чтобы все установилось без ошибок.
    По моему опыту ошибки бывают только при неудовлетворении зависимостей. Если Asterisk ранее собирался из исходников, то все зависимости уже должны быть удовлетворены и установка пройдет легко и быстро.

    После установки у Asterisk появилось 2 новых модуля res_speech_unimrcp.so и app_unimrcp.so, а диалплан обзавелся командами MRCPSynth и MRCPRecog. В корректности установки можно убедиться, введя в консоли Asterisk:
    *CLI> module show like mrcp
    Module Description Use Count
    res_speech_unimrcp.so UniMRCP Speech Engine 0
    app_unimrcp.so MRCP suite of applications 0
    2 modules loaded


    Прежде чем получить возможность работать с ресурсами синтеза и распознавания, необходимо подключить их. Для подключения к MRCP-серверу используется файл /etc/asterisk/mrcp.conf. Можно отредактировать его содержимое или заменить следующим (комментарии добавлены для пояснения наиболее важных параметров):
    [general]
    ;Профили для ASR и TTS, используемые по умолчанию.
    ;Возможна работа одновременно с несколькими MRCP-серверами
    default-asr-profile = vn-internal
    default-tts-profile = vn-internal
    ; UniMRCP logging level to appear in Asterisk logs. Options are:
    ; EMERGENCY|ALERT|CRITICAL|ERROR|WARNING|NOTICE|INFO|DEBUG -->
    log-level = DEBUG
    max-connection-count = 100
    offer-new-connection = 1
    ; rx-buffer-size = 1024
    ; tx-buffer-size = 1024
    ; request-timeout = 60

    ;Имя профиля
    [vn-internal]
    ; +++ MRCP settings +++
    ;Версия MRCP-протокола
    version = 1
    ;
    ; +++ RTSP +++
    ; === RSTP settings ===
    ; Адрес MRCP-сервера
    server-ip = 192.168.2.106

    ;Порт, по которому VoiceNavigator принимает запросы на синтез и распознавание
    server-port = 8000
    ; force-destination = 1

    ;Расположение ресурсов синтеза и распознавания на MRCP-сервере
    ;(для VoiceNavigator – пустое значение)
    resource-location =

    ;Имена ресурсов синтеза и распознавания в VoiceNavigator
    speechsynth = tts
    speechrecog = asr
    ;
    ; +++ RTP +++
    ; === RTP factory ===
    ;IP-адрес компьютера, на котором установлен Asterisk и с которого будет сниматься RTP-трафик.
    rtp-ip = 192.168.2.104
    ; rtp-ext-ip = auto

    ;Диапазон RTP-портов
    rtp-port-min = 32768
    rtp-port-max = 32888
    ; === RTP settings ===
    ; --- Jitter buffer settings ---
    playout-delay = 50
    ; min-playout-delay = 20
    max-playout-delay = 200
    ; --- RTP settings ---
    ptime = 20
    codecs = PCMU PCMA L16/96/8000
    ; --- RTCP settings ---
    rtcp = 1
    rtcp-bye = 2
    rtcp-tx-interval = 5000
    rtcp-rx-resolution = 1000


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

    Как было описано ранее, Asterisk для работы использует функции MRCPSynth и MRCPRecog библиотеки app_unimrcp.so:
    image

    MRCPSynth


    Функция MRCPSynth имеет следующий формат:
    MRCPSynth(text, options), где
    text — текст для синтеза (текст \ SSML),
    options — параметры синтеза.

    Параметры синтеза:
    p — Профиль подключения к ресурсу синтеза, содержащийся в файле mrcp.conf
    i — Цифры, по нажатию которых на телефоне, синтез будет прерван
    f — Имя файла для записи синтезированной речи (запись производится в raw, запись не производится, если параметр или имя файла не заданы)
    v — Голос, которым требуется осуществить синтез, например, «Мария8000».

    Пример использования функции в диалплане

    plain-text:
    exten => 7577,n,MRCPSynth(Произнесите имя и фамилию сотрудника)

    SSML:
    exten => 7577,MRCPSynth(<?xml version=\"1.0\"?><speak version=\"1.0\" xml:lang=\"ru-ru\" xmlns=\"http://www.w3.org/2001/10/synthesis\"><voice name=\"Мария8000\">Произнесите имя и фамилию сотрудника.</voice></speak>)

    Преимуществом применения SSML по сравнению с plain-text является возможность использования различных тегов (голос, скорость и выразительность речи, паузы, интерпретация текста и т.д.).

    MRCPRecog


    Функция MRCPRecog имеет следующий формат:
    MRCPRecog(grammar,options), где
    grammar – грамматика (URL \ SRGS), задается ссылкой на файл, расположенный на http-сервере или непосредственно в теле функции.
    options — параметры распознавания.

    Параметры распознавания:
    p — Профиль подключения к ресурсу распознавания, содержащийся в файле mrcp.conf
    i — Цифры кода DTMF, при получении которых распознавание будет прервано.
    При значении «any» или других символах, распознавание будет прерываться при их получении, а символ будет возвращаться в план набора.
    f — Имя файла для проигрывания в качестве приглашения
    b — Возможность прервать проигрываемый файл (режим barge-in) и начать распознавание (нельзя перебить=0, можно перебить и обнаружение речи осуществляет ASR движок=1, можно перебить и обнаружение речи осуществляет Asterisk=2)
    t — Время, по истечении которого система распознавания может прервать процедуру распознавания с кодом recognition-timeout (003), в случае, если распознавание началось, и нет ни одного варианта распознавания. Значение задается в миллисекундах в диапазоне [0..MAXTIMEOUT].
    ct — Порог уверенного распознавания (0.0 – 1.0).
    Если confidence-level, возвращаемый при распознавании, меньше confidence-threshold, то результат распознавания no match.
    sl — Чувствительность к несловарным командам. (0.0 — 1.0). Чем больше значение, тем выше чувствительность к шуму.
    nb — Определяет количество возвращаемых результатов распознавания. Возвращается N результатов распознавания, с уровнем достоверности больше confidence-threshold. Значение по умолчанию = 1.
    nit — Время, по истечении которого система распознавания может прервать процедуру распознавания, с кодом no-input-timeout (002), в случае, если распознавание началось и не найдено речи. Значение задается в миллисекундах, в диапазоне [0..MAXTIMEOUT].

    Пример использования функции в диалплане

    Задание грамматики в теле функции:
    exten => 7577,n,MRCPRecog(<?xml version=\"1.0\"?><grammar xmlns=\"http://www.w3.org/2001/06/grammar\" xml:lang=\"ru-ru\" version=\"1.0\" mode=\"voice\" root=\"test\"><rule id=\"test\"><one-of><item>один</item><item>два</item><item>три</item><item>четыре</item><item>пять</item><item>шесть</item><item>семь</item><item>восемь</item><item>девять</item></one-of></rule></grammar>,f=hello&b=1)

    Указание ссылки на грамматику:
    exten => 7577,n,MRCPRecog(http://192.168.1.1/digits.xml,f=hello&b=1)

    Параметры f=hello&b=1 обеспечивают озвучивание звукового файла, например, «Произнести число от 1 до 100», который можно прервать с помощью barge-in, т.е. начать говорить, не дослушав сообщение до конца и тем самым запустить процесс распознавания.

    Результат распознавания возвращается в Asterisk в виде NLSML в переменную ${RECOG_RESULT}.
    Пример ответа:
    <?xml version="1.0"?><result grammar="C:\Documents and Settings\All Users\Application Data\Speech Technology Center\Voice Digger\temp\e856d208-7794-43b0-bb89-01947e37e655.slf"><interpretation confidence="90" grammar="C:\Documents and Settings\All Users\Application Data\Speech Technology Center\Voice Digger\temp\e856d208-7794-43b0-bb89-01947e37e655.slf"><input mode="speech" confidence="90" timestamp-start="2011-07-04T0-00-00" timestamp-stop="2011-07-04T0-00-00">восемь</input><instance confidence="90"><SWI_literal>восемь</SWI_literal><SWI_grammarName>C:\Documents and Settings\All Users\Application Data\Speech Technology Center\Voice Digger\temp\e856d208-7794-43b0-bb89-01947e37e655.slf</SWI_grammarName><SWI_meaning>8</SWI_meaning></instance></interpretation></result>

    Наиболее важными параметрами в данном выводе являются:
    Результат распознавания = «восемь»
    Confidence Level = 90
    Семантический тег: 8

    На начальном этапе логику приложения можно строить с использованием REGEX, например
    exten => 8800,5,GotoIf(${REGEX("восемь" ${RECOG_RESULT})}?100:10)

    Более правильным является использование парсера NLSML.
    Парсер, который идет в комплекте с VoiceNavigator, является AGI-скриптом на Perl. Ему можно передать значение переменной exten => s,n,AGI(NLSML.agi,${QUOTE(${RECOG_RESULT})}) и в результате получить переменные ${RECOG_UTR0} = восемь, ${RECOG_INT0} = 8, ${RECOG_CNF0} = 90.

    Пример простого голосового приложения для распознавания чисел

    exten => 7577,1,Answer
    exten => 7577,n,MRCPSynth(Назовите число от одного до трех. Говорите после сигнала)
    exten => 7577,n,MRCPRecog(<?xml version=\"1.0\"?><grammar xmlns=\"http://www.w3.org/2001/06/grammar\" xml:lang=\"ru-ru\" version=\"1.0\" mode=\"voice\" root=\"test\"><rule id=\"test\"><one-of><item>один</item><item>два</item><item>три</item></one-of></rule></grammar>,f=beep&b=1)
    
    exten => 7577,n,GotoIf(${REGEX("один" ${RECOG_RESULT})}?one:if_2) 
    exten => 7577,n(if_2),GotoIf(${REGEX("два" ${RECOG_RESULT})}?two:if_3) 
    exten => 7577,n(if_3),GotoIf(${REGEX("три" ${RECOG_RESULT})}?three:error) 
    
    exten => 7577,n(one),MRCPSynth(Вы назвали число один)
    exten => 7577,n,Hangup
    exten => 7577,n(two),MRCPSynth(Вы назвали число два)
    exten => 7577,n,Hangup
    exten => 7577,n(three),MRCPSynth(Вы назвали число три)
    exten => 7577,n,Hangup
    exten => 7577,n(error),MRCPSynth(Извините не удалось распознать речь)
    exten => 7577,n,Hangup


    В следующей серии будет подробнее рассказано об используемых тегах синтеза и построении грамматик распознавания.

    Жду ваших вопросов и комментариев.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 22

      +1
      Очень интересно, как раз нужно было подобное решение!
      Даже не ожидал, что есть готовый продукт.
      Скажите пожалуйста, какова погрешность при распознавании ключевых слов и стоимость (хотя бы примерно) продукта?
        0
        Точность распознавания во многом зависит от грамматики, ее размера и сложности. На каких-то грамматиках точность будет 98%, на каких-то 85.
        Стоимость зависит от количества одновременных каналов синтеза и распознавания. Информации по стоимости, думаю, лучше узнавать в ЦРТ:))
          0
          Да там по запросу. Конечно мы всё узнаем, просто хотелось бы предварительно ориентироваться, сможет ли такое решение затратам заменить (частично) call центр :)
          +1
          Класс!!! Не думал, что такое решение существует для Asteriska'a. Обязательно попробую реализовать по вашим примерам и с нетерпением жду следующих серий
            0
            Круто, это можно ему надиктовать '; DROP TABLE «Students»
              0
              А нет, неполучится, он же транслитом это все напишет :)
              +1
              Напишите пожалуйста о максимальном количестве итемов в грамматике, передаваемой mrcp серверу (применительно к VoiceNavigator). С какой цифры задержки по обработке грамматики становятся неприемлемыми? Слышал о цифре в 300-400 слов/фраз. Существует ли возможность преодоления этих значений?
                0
                Как такового ограничения нет. При соответствующем тюнинге система может работать и с несколькими тысячами айтемов в грамматике.
                Ограничение, о котором вы говорите, это возможность работать с xml-грамматикой налету. Да, действительно, при размере грамматики более 300-400 айтемов ее необходимо вручную конвертировать во внутренний формат VjiceNavigator и использовать уже отконвертированную грамматику. Конвертация ускоряет запуск процесса распознавания.
                  0
                  Сейчас конвертация осуществляется запуском соответствующей команды в командной строке.
                  В ближайшее время и эта необходимость отпадет, т.к. конвертер грамматик будет встроен в систему и они будут конвертироваться автоматически.
                  0
                  А как дела обстоят с английской речью, что есть из доступного?
                    0
                    VoiceNavigator поддерживает только русскую речь. Для английской есть множество других решений)
                    0
                    Все опять же упирается в грамматику. Т.е. чтобы слово было распознано, оно должно быть предварительно описано. Это накладывает очень серьезные ограничения на систему. Ну вот объясните вы мне как так получается. У вас мега-сложная система, которая еще и требует серьезных вычислительных ресурсов для работы. А у меня в машине Hyundai штатная магнитола, которая без всяких обучений и описаний скачивает по bluetooth записную книжку с телефона и распознает фамилию и имя из телефонной книги, позволяя набрать его номер, не прикасаясь к телефону. Вот как там работает? Там ведь нет никакого описания грамматики. И точность распознавания, думаю, процентов 95. Да и мощности вычислительные более чем скромные. Так может вы не той дорогой идете, товарищи?
                      +1
                      Мне кажется, вы не совсем понимаете о чем идет речь. Чтобы слово было распознано, его всегда надо предварительно описать. Я не знаю точно, как это сделано у вас в машине, но вашей программе ни что не мешает автоматически создавать собственную грамматику, получив записи из записной книжки, и проводить распознавание по этой грамматике. Вот если бы она все распознавала без скачивания информации из записной книжки;)

                      Распознавание слитной речи сейчас, конечно, популярный тренд, но до бытовых устройств оно дойдет очень не скоро.

                      Вообще, сравнивание данных решений, как минимум, некорректно. Это примерно как мопед и товарный поезд)). Распознавание голосовых команд для ПК и КПК давно есть, но с промышленными решениями их никто не сравнивает.
                        0
                        Как по-вашему можно распознать без скачивания телефонной книги? Как тогда связать распознанную фамилию и имя с телефоном? Откуда-то ведь нужно узнать телефоны.
                        Я клоню к тому, что ЦРТ просто снимает сливки с растущего тренда, при этом явно не предлагая лучшие технологии, но за достаточно серьезные деньги. В любом случае, есть примеры, которые показывают, что есть системы, с которыми можно работать достаточно просто, загружая обычные текстовые данные и которые не требуют высоких вычислительных мощностей. В магнитоле явно процессор стоит не выше 600 Мгц. При этом он вполне корректно производит как распознавание, так и синтезирование речи. И это без всякого обучения или каких-то дополнительных ручных манипуляций.
                        Причем, вариант с заранее якобы забитым словарем фамилий не катит, ибо даже сложные не очевидные фамилии распознаются корректно.
                        Все же, не хочу бросать камень в огород ЦРТ. С точки зрения бизнеса они делают все правильно. Как говорят: «Стоя в речке только дурак не напьется». Если есть спрос и люди готовы платить столько, то почему бы не продавать. Реальных конкурентов, которые на слуху у них особо нет. К тому же они делают еще кучу очень серьезных продуктов, которые действительно стоят своих денег.
                        Со временем технология популяризируется, станет дешевле. Думаю, что сейчас цена на VoiceNavigator сильно завышена.
                        И зря Вы говорите, что технология распознавания в бытовые приборы придет не скоро. Она уже идет. Пример — штатные головные устройства автомобилей, как минимум новых Hyundai и Kia (просто я с ними столкнулся). Apple заключила договор с Naumen о внедрении их технологий в iPhone. В iOs 5 уже будет голосовое управление и можно будет человеческим языком говорить какое приложение запустить, какой трек проиграть или кому позвонить. Технологии развиваются гораздо быстрее, чем Вы думаете. Опять же, как альтернативу можно рассмотреть распознавание речи движком Гугла. Сейчас API официально не открыт, но пользоваться им можно как для распознавания, так и для синтезирования.
                        В любом случае, кто хочет поддержки и готов заплатить приличную сумму за (пусть и не самое прогрессивное), но зато готовое решение, тот обратиться к ЦРТ. Кто с руками и не готов платить за амбиции компании и псевдо-новизну технологии, явно сможет найти более дешевое и не обязательно худшее по качеству решение.
                        Последний абзац сугубо мое мнение.
                          0
                          И все таки мы говорим на разных языках и о решениях совершенно разного класса. Не надо сравнивать велосипед с поездом;)
                          Это разговор в стиле «Зачем покупать AVP, GVP или Cisco за такие огромные деньги, если есть Asterisk?»
                          Конкуренты есть и цена у них значительно выше, но, видимо, их имена вам ничего не скажут.
                          –1
                          Забыл добавить, что напрягает лично меня в решении ЦРТ не цена. А именно технология. То, что перечень ключевых слов изначально ограничен и они должны быть предварительно описаны. Поэтому я и называю это псевдо-распознаванием. Потому и привожу пример автомагнитолы, которая работает просто и нативно.
                          Возможно сейчас что-то изменилось, но когда я разговаривал с сотрудником ЦРТ мне сказали, что перечень слов, который будет распознавать система должен быть забит заранее. И что если я захочу этот перечень расширить, должен буду вновь обращаться к ЦРТ и платить денюжку. Либо, может и сам, но с большим геморроем. А у меня планировалось, что перечень ключевых слов должен был несколько раз в день меняться. Поэтому решение от ЦРТ подходит только для узкоспецифичных систем с небольшим и постоянным количеством ключевых слов. Если же перечень слов меняется часто, надо искать более прогрессивные технологии.
                            0
                            Еще раз, это стандарт индустрии, а не выдумка ЦРТ.
                            Прежде чем продолжать диалог, пожалуйста, ознакомьтесь со стандартами и имеющимися решениями по построению голосовых меню.
                            Если вы найдете решение для call-центров, построенное на других принципах и технологиях я у вас его с удовольствием куплю))
                              0
                              Я и сам куплю :) Есть интересные задумки, но вот с технологиями сложновато. И дело тут далеко не в деньгах. Наверное, Вы правы. Как говорят: «На каждый товар есть свой покупатель». Просто я хотел использовать технологию ЦРТ под свой проект, а они несколько разные задачи призваны решать. Я же не говорю, что ЦРТ делает плохой продукт. Для определенных целей он хорош. Что касается денег, не хочешь покупать продукт, покупай сервис, благо они его предоставляют.
                              Просто мне нужно было решение, которое не будет накладывать такие технологические ограничения.
                              0
                              Распознавание слитной речи только начинает развиваться и технология пока очень сырая для использования в enterprise-решениях.
                                0
                                >>А у меня планировалось, что перечень ключевых слов должен был несколько раз в день меняться.
                                Вы легко можете генерировать грамматики автоматически и их использовать. Перечень слов вносится в грамматику, но ничто вам не мешает этот перечень менять. Грамматика — это просто текстовый файл. Не надо ни к кому обращаться и нет никакого геммороя. Нужен любой текстовый редактор;)
                                  0
                                  Некоторое время назад сотрудник ЦРТ мне представлял информацию несколько в ином ключе. От нее я и отталкивался. Возможно, уже многое изменилось. Возможно, сотрудник был не совсем в теме. Всякое бывает.
                                  +1
                                  Уважаемый poison361!
                                  Вы путаете мягкое с теплым. Никогда не задумывались, почему Google производит свое распознавание на сервере, а Ваш автомобиль распознает список контактов на встроенном ПК?
                                  Сколько у вас фамилий в списке? 100? 200? И это даже не чисто фамилии, а пары Фамилия+Имя. Соответственно набор признаков для повышения достоверности распознавания увеличивается.
                                  А это резко снижает потребность в вычислительных ресурсах.

                                  Теперь по поводу того, что Вас напрягает. Мне сложно сказать, с кем Вы общались и как шел разговор. Тем не менее. Существует два типа грамматик. Закрытые и Открытые.
                                  Закрытые грамматики характеризуются дословным распознаванием — то есть система будет требовать четкого произношения того, что заложено в меню.
                                  Открытые грамматики создаются для более непринужденного разговора с роботом. Задача таких грамматик определить по содержанию фраз звонящего, что он хочет и вести звонящего в правильном направлении по веткам меню.

                                  Теперь по поводу грамматик и распознавания в целом. Все распознавание строится на общих моделях русского языка. То есть в теории они распознают всю речь. Это то, что называется распознаванием слитной речи. Примером такого решения может служить продукт Nuance Dragon Naturally Speaking для английского языка.
                                  Однако нужно понимать, что такое распознавание влечет за собой снижение достоверности и скорости работы из-за увеличивающегося объема словаря. Решается это только размещением сервисов распознавания на больший серверах в режиме SaaS. Чудес не бывает.

                                  Чем правильней Вы построите с помощью грамматик ветки меню, сузив при этом словарь — тем достоверней будет результат и тем быстрее потребитель будет обслужен. А это прямая заинтересованность бизнеса в повышении доступности своего сервиса и качества предоставляемых услуг.

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

                            Only users with full accounts can post comments. Log in, please.