Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
04 дек 2024, 11:47

Предлагаю распознавание речи для продуктов на платформе 1С:Предприятие

Автор jkit, 07 ноя 2010, 13:01

0 Пользователей и 1 гость просматривают эту тему.

jkit

   Не все знают, что есть довольно простой способ ввести в программный продукт, построенный на платформе "1С:Предприятие" функции распознавания речи. Этим пока мало кто пользуется по двум причинам. Во-первых, пока не сложилась такая традиция, а большинство людей, как известно, мыслят по шаблону и действуют согласно моде. Во-вторых те, кто уже пытался использовать какие-либо технологии распознавания речи откровенно устал от бесконечного предварительного надиктовывания образцов слов, необходимого для обучения программы.
   С первой причиной способно справиться только время и люди, которые мыслят независимо от традиций. По второй причине скажу просто: метод, который я предлагаю, не потребует никаких предварительных надиктовок словаря. Если вы уже сталкивались раньше с подобной проблемой, не спешите покидать эту страницу, т.к. здесь этой проблемы просто нет.
   Теперь по порядку. Здравомыслящий человек, конечно, спросит, что ему это даст, какую пользу он сможет извлечь. Польза возможна либо в виде снижения затрат времени на выполнение того же объема работы за счет использования дополнительного и очень удобного средства ввода-вывода данных и команд, либо в виде сохранения здоровья (снижения утомляемости, уменьшения нагрузки для глаз). Возможно сочетание и того и другого. Но чтобы получить реальную пользу, нужен индивидуальный подход в каждом конкретном случае. Технология еще не настолько совершенна, чтобы можно было рекомендовать ее везде и всюду.
   Вы можете сами оценить, насколько перспективно применение речевого интерфейса на том или ином рабочем месте. Для этого необходимо учитывать следующее.
   1.На рабочем месте не должно быть шумно.
   2.Совсем не обязательно отказываться от привычных устройств ввода - мыши и клавиатуры. Но в некоторых случаях это может быть полезно. Например, когда сотрудник вынужден много перемещаться по складу и руки у него часто заняты, он может запрашивать и вводить данные голосом через гарнитуру, связанную с системой по радиоканалу. В большинстве же случаев, как правило, выгоднее комбинировать новый способ ввода-вывода с традиционными средствами.
   3.Объем словаря в принципе не ограничен и, как уже было сказано выше, словарь не нужно заранее надиктовывать.
   4.Во время работы программы текущий словарь (а это по сути просто список допустимых слов) можно быстро менять в соответствии с текущей потребностью, проделывая это неограниченное количество раз.
   5.Хотя размер текущего словаря не имеет жестких ограничений, при количестве слов от тысячи и более на не очень быстрых машинах начинает наблюдаться замедление в работе.
   6.В качестве слова в словаре на самом деле может быть и словосочетание.
   7.Обычно короткие слова распознаются менее надежно. В этом случае можно использовать словосочетания, как сказано в предыдущем пункте.
   8.Похожие по звучанию слова чаще путаются друг с другом.
   9.В некоторых случаях размер текущего словаря полезно сокращать до нескольких слов, чтобы максимально повысить надежность распознавания.
   10.Встречаются слова, которые система упрямо не хочет понимать, хотя большинство слов при четкой дикции и правильном подключении и настройке микрофона, а также отсутствии окружающих шумов, распознаются достаточно надежно.
   11.Если требуется очень большой словарь, как например ввод наименований из справочника номенклатуры, где десятки тысяч записей, можно использовать иерархию. То есть сначала загружать текущий словарь, где выбирается группа, затем подгруппа из этой группы и так далее с таким расчетом, чтобы в каждом случае размер текущего словаря не превышал несколько сотен слов.
   12.В словаре желательно использовать записи слов в соответствии с их звучанием. Это существенно повышает надежность распознавания. С этой целью полезно вводить, например в тот же справочник номенклатуры, дополнительное поле куда будет вводиться наименование данного пункта номенклатуры в соответствии с произношением.
   13.Предлагаемый метод нормально работает в режиме реального времени - с появлением в справочнике новой строки ее наименование сразу же можно вводить голосом без каких-либо перенастроек в системе (новое наименование автоматически подгрузится в текущий словарь).
   14.Если в справочнике (либо в другом источнике, по которому строится текущий словарь) не используется специальное поле, где буквами записывается звучание слова, можно с некоторым ухудшением качества использовать обычное наименование, предварительно программно обработанное. Дело в том, что посторонние символы будут проигнорированы, а посторонними считаются любые символы, кроме маленьких букв кириллицы. Это значит, к примеру, что наименование номенклатуры, содержащее множество цифр и/или латинских букв, а также прочих знаков, не очень подходит для качественного распознавания - оно будет сокращено до последовательности имеющихся русских букв.
   15.Вводить можно как данные, так и команды управления. В любом случае передача распознанной информации в систему "1С:Предприятие" будет происходить в режиме имитации клавиатуры. По-простому говоря, системе "1С:Предприятие" будет "казаться", что все команды и слова вы сами вводите, набирая их на клавиатуре.
   16.Требуется чуточку фантазии и творческого подхода.
   17.Требуется правильно подключить микрофон и настроить запись звука в системе.
   18.Можно не только вводить, но и выводить речь (из заранее надиктованных файлов). Но это тривиально и в данном тексте не рассматривается.

   Более подробную информацию можно посмотреть здесь http://jkit.narod.ru/prod.htm
   Если данное предложение вас заинтересовало, я помогу вам настроить такую систему. Обращаться можно по адресу, который вы найдете на сайте. Можете также попробовать самостоятельно все сделать. Для такого случая привожу здесь примеры программного кода, который потребуется для связывания программного продукта 1С и системы распознавания речи.

Вот как можно на лету сгенерировать простейший словарь из справочника номенклатуры:

Процедура ПередатьСловарьВПерпетуум()
  Словарь= Новый ТекстовыйДокумент();
  Выборка=Справочники.Номенклатура.Выбрать();
  Словарь.ДобавитьСтроку("DicClear();"); //эта строка обеспечит очистку словаря Перпетуум
  //просматриваем все записи справочника
  Пока Выборка.Следующий() Цикл
     Если Выборка.ЭтоГруппа=Ложь Тогда
          НаимОригинал=Выборка.Наименование;
        Наим=Нрег(НаимОригинал);
        //ликвидируем недопустимые символы
        НомСимв=1;
        Пока НомСимв<=СтрДлина(Наим) Цикл
              Симв=Сред(Наим,НомСимв,1);
           Если Найти("абвгдеёжзийклмнопрстуфхцчшщъьыэюя",Симв)=0
              Тогда Наим=СтрЗаменить(Наим,Симв,"");
              Иначе НомСимв=НомСимв+1;
           КонецЕсли;
        КонецЦикла;
        Если Наим="" Тогда Продолжить КонецЕсли;
          Словарь.ДобавитьСтроку("DicAdd('"+НаимОригинал+"{Enter\/\/\/\/}{Insert\/}~"+Наим+"');"); //эта строка добавит слово в словарь Перпетуум
     КонецЕсли;
  КонецЦикла;
  Словарь.ДобавитьСтроку("DicAdd('{Insert\/}~дабавить');"); //согласно произношению, но не правописанию (рекомендуется)
  Словарь.ДобавитьСтроку("DicAdd('{Escape\/}~атмена');");
  Словарь.Записать(Константы.ПапкаСловаряПерпетуум.Получить()+"pmdct.txt",КодировкаТекста.ANSI); //быстрозаменяемый словарь готов
КонецПроцедуры //ПередатьСловарьВПерпетуум

   Фрагмент {Enter\/\/\/\/}{Insert\/} представляет собой сочетание клавишных команд (4 нажатия Enter и одно - Insert). Добавляется по необходимости. Может изменяться опять-таки по необходимости с учетом особенностей ввода данных с клавиатуры в том или ином случае. Как уже было сказано, для "1С:Предприятия" данные и команды будут вводиться как бы традиционно с клавиатуры.
   Учтите, что хотя текст слова в словаре, который предназначен для ввода (не путать с текстом этого слова для распознавания) может быть любым, все же не должно быть слов, совмещающих в себе буквы кириллицы и латинницы, иначе они не будут вводиться корректно даже при правильном распознавании. Кроме того для некоторых случаев (это уже особенности 1С) не должно быть одинаковых наименований и наименований, частично входящих в другое наименование, начиная с первого символа другого наименования.

   Пример простейшего сценария для системы распознавания может быть таким:

###:StopEvent
//завершение работы
Gv.Stop=1;
###

###:Main
Title('ПЕРПЕТУУМ: Взаимодействие с 1С:Предприятие');
ClearScr('$FFFFFF');
Form.PerpForm.Create('TLabel','Top=10;Left=10;Parent=PerpForm;Caption=Слушаю и повинуюсь!;Font=Arial/26/FF0000/B');
Form.PerpForm.Create('TButton','Name=ButStop;Top=60;Left=125;Width=160;Parent=PerpForm;Caption=Остановить;OnClick=StopEvent');
Prg.StopEvent.Load(AppDir+'perpetuum.pms','StopEvent');
Form.PerpForm.Prop(,'Width',420);
Form.PerpForm.Prop(,'Height',130);

ModeSpeech(1); //только словарь
ModeNum(1); //числа писать цифрами
ModeText(1); //ввод слов по одному

DicFile=AppDir+'pmdct.txt';
Gv.Stop=0;
MicStart();
while not Gv.Stop do
begin
  CallPrg(DicFile,'?');
  if Sys.FileExists(DicFile) then Sys.DeleteFile(DicFile);
  Sys.KeybSimulate(MicInput());
end;
MicStop();
###

   Текст со строки "###:StopEvent" и до строки "###" (последний случай) нужно поместить в файл с именем "perpetuum.pms".

   Данное предложение может быть интересно не только потребителям продукции 1С, но и фрилансерам: пока другие еще не знают или раздумывают, вы уже можете начать предлагать заказчикам нечто принципиально новое.

Евгений Котов.

progmikon

Мысль интересная.

Вы не могли бы описать реальный бизнес-процесс, где использование вашей системы может быть эффективным.

П.С. Очень радует цена. :)

jkit

   А нужно ли описывать? Я как раз против шаблонов. Они скорее тормозят творческую мысль, чем стимулируют ее. Но если настаиваете, пожалуйста. Вот первое, что пришло в голову и напрашивается на подключение речевого интерфейса. Недавно на глаза попалась одна распечатка. Она была сделана в программе, предназначенной для автоматизации работы врача, ведущего прием пациентов (цель посещения, жалобы, объективные данные, диагноз, рекомендации и назначения). По опечаткам видно, что значительное количество текста набрано вручную. Другая часть текста собрана из шаблонных заготовок, что, конечно, очень правильно. Та часть, что набрана вручную, в принципе тоже может быть описана заготовками текста. Но даже в этом случае количество мышинно-клавиатурных манипуляций ставит под сомнение эффективность такой автоматизации. Все это не далеко ушло от шариковой ручки.
   Теперь представим вариант с речевым интерфейсом. В кабинете врача, заметим, как правило, не шумно. Уже большой плюс. Пусть используется та же программа, но дополненная речевым интерфейсом. Врач крепит у себя на одежде или на голове беспроводной микрофон с выключателем. Выключатель нужен, чтобы можно было поговорить с пациентом. Далее врач ведет осмотр и одновременно с этим четко произносит стандартные фразы, описывающие жалобы и состояние пациента. Программа распознает эти фразы и, для контроля, негромко повторяет их за врачом. В случае ошибки врач может повторно произнести фразу, либо воспользоваться традиционными клавиатурно-мышечными средствами. При правильной настройке системы и отсутствии у врача существенных проблем с дикцией можно получить вполне приемлемый процент ошибок. К тому же со временем вырабатывается привычка и ошибок становится еще меньше. Заметьте, врачу теперь не нужно переключать свое внимание от пациента к столу и обратно. Все происходит одновременно, что еще больше повышает эффективность такой работы и, кроме того, снижает вероятность ошибок, связанных с переключением внимания. Словарь должен быть организован подобно многоуровневому меню. Это повысит надежность системы. Например, врач произносит слово "жалобы", и программа подгружает словарь жалоб. Или в словаре объективных данных произносит "кожа", после чего программа готова распознавать только описания состояния кожи, и так далее. Для снижения количества ошибок можно использовать в словаре даже искаженные версии слов, выдаваемые программой в режиме произвольной речи. То, что слова искажаются, еще не значит, что они не могут быть распознаны. Словарь работает по принципу наибольшего сходства. Наиболее проблемные слова можно просто заменять другими подходящими вплоть до жаргона (к примеру, "щитовидная железа" - "щитовидка"). Почему бы и нет? Это только для распознавания - в документ будет записано все так, как положено. Словосочетание "щитовидная железа", впрочем, и так должно достаточно уверенно распознаваться.
   Мне кажется, врач с таким техническим оснащением мог бы принять за день раза в полтора больше пациентов (а может и в два, если учесть, сколько врачам приходится писать). Область применения речевого интерфейса, конечно, гораздо шире, поэтому, открывая тему, я особое внимание уделил описанию возможностей, а не примеров использования. Здесь в каждом конкретном случае нужно смотреть отдельно.
   Хотелось бы уточнить, комментарий насчет цены следует толковать всерьез или как бы "в кавычках".
Е.Котов.

progmikon

Спасибо за пояснение.
Но хочу подчеркнуть, что творческая мысль это конечно все хорошо, но чтобы эффективнее продавать любой товар - нужно показать потенциальному покупателю зачем именно ему, именно это нужно.

А по поводу цены, тут без кавычек. Невысокая цена это всегда приятно. :)

Теги:
Рейтинг@Mail.ru

Поиск