Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Olhe! Não preciso usar o teclado! Entrada e resposta de voz usando gramáticas fixas

Direcione a construção de uma gramática de modelo acústico de reconhecimento de voz e o gerenciador de diálogo que usa esta construção com SRGS

Colin Beckingham, Researcher, Freelance
Colin Beckingham é um pesquisador, escritor e programadorfreelancer que mora no leste de Ontário, Canadá. Com diplomas da Queen's University, Kingston e interesse em horticultura, corrida de cavalos, serviço civil, varejo e viagem/turismo. Autor de aplicativos de banco de dados e de diversos artigos para jornais, revistas e on-line, seus interesse de pesquisa incluem programação de software livre e aplicativos de controle de voz em Linux®.

Resumo:  Uma variedade de formatos de texto simples específicos de aplicativos existe para a definição de gramáticas de linguagens não naturais e a preparação de um modelo de reconhecimento de voz. Os programadores podem usar a Speech Recognition Grammar Specification (SRGS) não só para expressar muitos desses formatos em uma estrutura de padrões abertos, como também para definir regras para o gerenciador de diálogo necessário para a interpretação da saída gerada pelo modelo de reconhecimento. Explore a SRGS e os métodos no estilo Semantic Interpretation for Speech Recognition (SISR) usando PHP no contexto de gramáticas específicas de linguagens não naturais neste artigo.

Data:  14/Abr/2011
Nível:  Intermediário Também disponível em :   Inglês
Atividade:  1397 visualizações
Comentários:  


Estado do reconhecimento de voz

Acrônimos usados frequentemente

  • DTD: Definição do Tipo de Documento
  • HTK: Hidden Markov Model Toolkit
  • URI: Identificador Uniforme de Recursos
  • W3C: World Wide Web Consortium
  • XML: Linguagem de marcação extensível

À medida que computadores diminuem de tamanho e aumentam em questões de portabilidade, a necessidade de interagir com eles sem usar um teclado ou um mouse aumenta. A voz é uma alternativa. Superficialmente, muito menos largura da banda está disponível para comunicações de voz do que para interação visual. Como resultado da impressão de que "uma figura equivale a mil palavras", os computadores exibem em telas como resposta a entrada periférica mecânica muito mais prontamente do que aceitam entrada de áudio e respondem de maneira similar.

Já existem técnicas bem-sucedidas, mas limitadas, para emitir instruções para computadores menores com voz. O objetivo é fazer com que um computador reaja à voz e tome uma ação específica com base no comando. O processo geral para atingir esta meta é construir (ou adaptar) um modelo, aplicar um comando com relação àquele modelo em um processo de reconhecimento e, a seguir, decidir sobre uma ação em um gerenciador de diálogos. Os modelos podem ser amplos, no sentido de reconhecer uma variedade de vozes, porém com poucos comandos. Ou é possível treinar seu próprio modelo a partir de uma gramática específica que ofereça a possibilidade de interpretação e interação muito complexas. A Figura 1 mostra o fluxo de desenvolvimento de reconhecimento e interpretação de voz.


Figura 1. Fluxo de desenvolvimento de reconhecimento e interpretação de voz

É importante fazer uma distinção entre natural language processing (NLP) e gramáticas n-gram específicas. A última determina categoricamente o que o reconhecedor pode esperar ouvir, enquanto que o primeiro faz o melhor possível para decodificar o idioma natural em uma estrutura mais simples, descartando alguns elementos do discurso recebido e reajustando outros. Enquanto que tecnologias, como SRGS e SISR, inclinam-se principalmente na direção do processamento de idioma natural, os programadores procuram formas de usar as mesmas ferramentas para outros tipos de gramáticas.

Este artigo usa a abordagem de SRGS para definir gramáticas fixas e trata as questões de contexto e solicitações out-of-vocabulary (OOV) no gerenciador de diálogos, usando o exemplo de um conjunto de amostras de 2-gram ou bigram.


A perspectiva da programação

De uma perspectiva da programação, algumas questões são importantes. Primeiro, é possível expressar uma gramática de várias formas diferentes, dependendo do aplicativo reconhecedor de discurso que for usado. Segundo, essas gramáticas não são bem-coordenadas com os gerenciadores de diálogos que as usam. Gerenciadores de diálogos são importantes por si só porque oferecem formas de lidar com questões como resposta inteligente e reconhecimento de OOV. Terceiro, como estamos conversando sobre gramáticas específicas projetadas para realizar um trabalho específico, é preciso reescrever ou adaptar o modelo e o gerenciador de diálogos para cada uma. Quanto mais automaticamente você puder gerá-las, melhor.

A resposta inteligente implica que o computador leva o contexto em consideração. Se sua pergunta solicitar uma temperatura e a questão anterior perguntar sobre seu computador, então deve ser a temperatura do computador que você necessita.

OOV é um problema comum em gramáticas pequenas. De forma simples, ele diz que algumas solicitações são importantes e outras são necessárias para construir o modelo, porém não são importantes para o processamento posterior.

A geração automática é direta, usando scripts, como Bash, Perl e PHP, ou linguagens de programação comuns, como C e C++, desde que existam regras claras. E o SRGS foi projetado para resumir essas regras.


Um exemplo

A listagem 1 é uma gramática em texto simples em protótipo.


Listagem 1. Protótipo de gramática

COMPUTER WAKE
COMPUTER STATUS
COMPUTER SLEEP

A gramática na listagem 1 é bastante simples e específica. Ela diz ao computador que só escuta três solicitações possíveis. Cada solicitação é iniciada com a palavra COMPUTER e pode ser seguida de WAKE, STATUS(SLEEP. Nenhum outro comando é possível. O reconhecedor de discurso tem somente uma tarefa, que é escolher qual das três opções ele considera mais próxima do que ouviu e passar aquele comando para a próxima etapa. Por exemplo, se eu disser MAKE COFFEE, ele retorna COMPUTER mais uma das três palavras alternativas. O gerenciador de diálogos deverá aplicar a mesma inteligência. Por exemplo, se ele ouvir COMPUTER SLEEP, não deverá responder a nenhum outro comando até que escute COMPUTER WAKE. Ele deverá responder a COMPUTER STATUS somente se estiver em um estado WAKE e, neste ponto, poderá anunciar a temperatura do processador, espaço livre em disco e uma série de outras coisas interessantes. Isto não é uma gramática prática de maneira nenhuma— ao construir um modelo acústico de gramáticas pequenas como esta, você terá, em pouco tempo, problemas relacionados a amostras insuficientes. Este protótipo tem como finalidade somente uma ilustração do princípio.

Treinar um computador para reconhecer sons falados e aplicar regras de gramática ao que ele escuta é um processo relativamente direto, mesmo se relacionado ao software livre. Para obter orientações completas sobre como obter um sistema efetivo de reconhecimento de discurso usando um vocabulário fixo, consulte o site VoxForge. Os tutoriais do VoxForge usam ferramentas como o HTK, da Universidade de Cambridge, e o mecanismo de reconhecimento de voz Julius, da Universidade de Nagoya no Japão. Consulte a seção Recursos para obter links para todos esses sites.

Construir um modelo de áudio com o HTK requer que você expresse a gramática em um formato particular, como na listagem 2.


Listagem 2. Gramática no formato do HTK

$major =  COMPUTER ;
$minor = WAKE | STATUS | SLEEP ;
( SENT-START ( $major $minor ) SENT-END )

O mesmo processo com o mecanismo Julius requer um formato um pouco diferente, como na listagem 3.


Listagem 3. Gramática no formato Julius

S : NS_B SENT NS_E
SENT: MAJOR MINOR
MAJOR: COMPUTER
MINOR: WAKE STATUS SLEEP

Os formatos HTK e Julius compartilham similaridades estruturais do ponto de vista de programação, mas são suficientemente diferentes para não serem intercambiáveis.

A listagem 4 mostra um gerenciador de diálogos simples em PHP que pode lidar com esta gramática.


Listagem 4. Um gerenciador de diálogos simples

<?php
...
function dm($prompt_heard) {
global $wake_state; // FALSE is asleep so do not respond, TRUE is awake
  $parts = explode(" ",$prompt_heard);
  $minor = $parts[1];
  switch ($minor) {
    case 'WAKE':
      $wake_state = TRUE ;
    break;
    case 'SLEEP':
      $wake_state = FALSE ;
    break;
    case 'STATUS':
      if ($wake_state) {
        announce_status();
      } else {
        // do nothing
      }
    break;
    default:
      // OOV - any other prompt, just ignore it.
    break;
  }
}
?>

Esta função PHP passa o resultado do reconhecedor com um argumento em $prompt_heard. A variável $wake_state é declarada como global e é conhecida em todo o gerenciador de diálogos. O explode() analisa as partes da solicitação ouvida. Neste caso de exemplo, você sabe que a primeira parte será COMPUTER, portanto o switch seguinte lê somente a parte menor. Se for WAKE, então defina o estado wake para TRUE. Se for SLEEP, então defina o estado wake para FALSE. Se a parte menor for STATUS, anuncie o resultado, mas somente se o estado wake for TRUE. É possível anunciar o status para as pessoas que falam usando um processo similar ao explorado no artigo do developerWorks "PHP bees and audio honey: Accessible agent-based audio alerts and feedback" (consulte Recursos ). A seção padrão capturará quaisquer solicitações adicionais que forem incluídas a fim de exercitar o reconhecedor— para solicitações não reconhecidas, não tome nenhuma ação, a não ser gravar um registro para resolução de problemas posteriores.

Do ponto de vista de eficiência de programação, se for possível gerar automaticamente parte da gramática e do gerenciador de diálogos, você economizará tempo e esforço, e melhorará a precisão. Os esforços para criar até mesmo gramáticas de nível mais alto para fazer isto (consulte Recursos ) estão amplamente no domínio de NLP.


Como SRGS pode ajudar

O SRGS destina-se a exprimir as mesmas ideias que a listagem 2 e alistagem 3 , mas em uma estrutura mais rigorosa fornecida pelo XML, como na listagem 5.


Listagem 5. Protótipo no formato SRGS

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE grammar PUBLIC "-//W3C//DTD GRAMMAR 1.0//EN"
                  "http://www.w3.org/TR/speech-grammar/grammar.dtd">
<grammar xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://www.w3.org/2001/06/grammar 
                             http://www.w3.org/TR/speech-grammar/grammar.xsd"
         version="1.0" 
         mode="voice" 
         root="myroot">
<meta name="author" content="Colin Beckingham"/>
<rule id="myroot" scope="public">
  <example> COMPUTER WAKE </example>
  <example> COMPUTER SLEEP </example>
  <example> COMPUTER STATUS </example>
  <ruleref uri="#command1"/>
  <!-- ruleref uri="#command2"/ -->
</rule>
<rule id="command1">
  <ruleref uri="#major"/> <ruleref uri="#minor"/>
</rule>
<rule id="major">
   <one-of>
      <item> COMPUTER </item>
    </one-of>
</rule>
<rule id="minor">
    <one-of>
      <item> WAKE </item>
      <item> SLEEP </item>
      <item> STATUS </item>
    </one-of>
</rule>
</grammar>

A listagem 5 mostra a declaração XML usual, seguida de uma instrução DOCTYPE que localiza o DTD. Neste caso, ele aponta detalhes relacionados a gramáticas. Ele, então, acompanha o elemento-raiz <grammar>. O elemento grammar contém uma série de atributos importantes, incluindo espaços de nomes, o modo (que neste caso é voice porque o destino dos dados é o reconhecedor de discurso) e o ID da regra raiz, que é o local no qual iniciar a procurar por solicitações correspondentes (neste caso, myroot). A regra myroot contém rulerefs que apontam para outras regras. O DTD permite elementos <example> como informações. A regra com ID command1 vem a seguir. Depois, há mais duas regras, major e minor. A regra major contém uma única palavra COMPUTER. A regra minor contém as alternativas WAKE, SLEEPe STATUS. Estes últimos são elementos <item> em uma estrutura <one-of> , indicando que uma, e somente uma, se aplica de cada vez. Usando o elemento <ruleref> da regra raiz, as regras major e minor tornam-se parte da estrutura geral de regras.

Em resumo, as regras seguem esta estrutura:

  1. O atributo da gramática root aponta para a regra raiz myroot.
  2. A regra myroot contém um ou mais rulerefs, cada um dos quais tem um URI que aponta para outra regra, neste caso command1, que é a regra principal para uma n-gram. O ruleref para command2 está comentado porque é um marcador para uma regra principal ainda inexistente.
  3. A regra principal command1 contém ruleref que mostra que outras regras são usadas, major seguida de minor.

Os processos de geração de modelo para HTK e Julius não são agentes do usuário em termos de W3C porque não leem atualmente o formato SRGS diretamente, mas, em vez disso, usam o SRGS para definir as chamadas de gramática para que um script converta o SRGS para outros formatos. Além disso, nem o HTK ou o Julius geram um gerenciador de diálogos por causa de informações insuficientes. Como, por exemplo, ele pode saber que SLEEP significa parar de responder?


Convertendo o SRGS para HTK ou Julius

A listagem 6 é um conversor simples em PHP que examina a versão do SRGS e cria saída na forma de uma gramática básica equivalente ao formato HTK ou Julius.


Listagem 6. Conversor

<?php
// test translator: SRGS to HTK/Julius
$xml = simplexml_load_file("mysrgs.xml");
$roote = trim($xml['root']);
// find the root rule, get the basic rulerefs
foreach ($xml->rule as $rule) { 
  if ($rule['id'] == $roote) { 
    foreach ($rule->ruleref as $rref) {
      $rulerefs[] = substr($rref['uri'],1);
} } }
// find the rules indicated by the rulerefs
foreach ($rulerefs as $ruleid) {
  foreach ($xml->rule as $rule) {
    if ($rule['id'] == $ruleid) {
      $i = 0;
      foreach ($rule->ruleref as $rref) {
        $myrules[$ruleid][$i] = substr($rref['uri'],1);
        $i++;
} } } }
// load the words array
foreach ($myrules as $mr=>$myr) {
  foreach ($myr as $md=>$myd) {
    foreach ($xml->rule as $rule) {
      if ($rule['id'] == $myd) {
        foreach ($rule->{'one-of'}->item as $item) {
          $words[$mr][$md][] = $item;
} } } } }
// now the output
$varnamestr .= "";
$jvarnamestr = "";
foreach ($words as $k=>$v) { // master
  $jvarnamestr .= "\nSENT: ";
  foreach ($v as $kk=>$vv) { // sub
    $i = 0;
    foreach ($vv as $wd) { // word
      $j = count($vv);
      $htkwds[$k][$kk] .= " $wd ";
      $i++;
      $jwds[$k][$kk] .= " $wd ";
      if ($i < $j) $htkwds[$k][$kk] .= "|";
    }
    // htk
    $varname = "$".$k."_".$kk."";
    $htkv .= "$varname = ".$htkwds[$k][$kk].";\n";
    $varnamestr .= " ".$varname;
    // julius
    $jvarname = strtoupper($k."_".$kk);
    $jvarwordstr .= "$jvarname: ".$jwds[$k][$kk]."\n";
    $jvarnamestr .= " ".$jvarname." ";
  }
  $varnamestr = $varnamestr." |";
}
// output as HTK
echo "\n-------------------------\n";
echo "HTK Version\n-------------------------\n";
$varnamestr = substr($varnamestr,0,-2);
$htk = $htkv."( SENT-START (".$varnamestr." ) SENT-END )";
echo "$htk\n-------------------------\n";
// output as Julius
echo "Julius Version\n-------------------------\n";
$julius = "S : NS_B SENT NS_E";
$julius .= "$jvarnamestr\n";
$julius .= "$jvarwordstr";
echo "$julius-------------------------\n";
// end
echo "Done\n\n";
?>

A meta geral do programa na listagem 6 é varrer o documento SRGS e preencher uma matriz multidimensional com objetos SimpleXML que representam a estrutura da solicitação. Quando a matriz estiver concluída, ele gera as variáveis de sequência necessárias daquela matriz e grava os formatos HTK e Julius. A matriz é preenchida usando uma série de instruções foreach que escolhem a regra raiz, as regras principais e as regras as quais as regras principais se referem. O resultado é uma matriz em que a primeira chave é o nome da regra principal e a segunda chave é a posição —0 (major) ou 1 (minor). As variáveis $i e $j são contadores que controlam a adição de uma barra vertical (|), que é um símbolo OR no formato HTK. Finalmente, a saída usa variáveis criadas a partir das palavras e dos IDs das regras principais. A listagem 7 é a saída de uma sessão de amostra.


Listagem 7. Saída do conversor
 
> php mytrans.php

-------------------------
HTK Version
-------------------------
$command_0 =  COMPUTER ;
$command_1 =  WAKE | SLEEP | STATUS ;
$zoo_0 =  ANIMALS ;
$zoo_1 =  TIGER | LION | LEOPARD ;
( SENT-START ( $command_0 $command_1 | $zoo_0 $zoo_1 ) SENT-END )
-------------------------
Julius Version
-------------------------
S : NS_B SENT NS_E
SENT:  COMMAND_0  COMMAND_1
SENT:  ZOO_0  ZOO_1
COMMAND_0:  COMPUTER
COMMAND_1:  WAKE  SLEEP  STATUS
ZOO_0:  ANIMALS
ZOO_1:  TIGER  LION  LEOPARD
-------------------------
Done

Este código leva você de volta ao formato das Listagens 2 e 3. Para fins de teste, uma segunda regra principal foi adicionada, a fim de garantir que várias regras principais sejam processadas. Note que este é um conversor básico que não lida com repetições (por exemplo, onde um conjunto de números pode ser repetido, como em um número de telefone). Ainda é preciso definir outros arquivos dependendo do vocabulário, léxico e estrutura de fonemas escolhidos antes que seja possível construir o modelo, mas isto ao menos proporciona a você o ponto de partida. Consulte o tutorial do VoxForge em Recursos para obter orientação adicional.


Gerador do gerenciador de diálogos

O programador agora se volta para o gerenciador de diálogos. Será útil se você puder gerar pelo menos parte do diálogo a partir da origem do SRGS. Se trabalhar com uma gramática livre de contexto, a estrutura do n-gram (consulte Recursos ) poderá ser o que você precisa. Nesta situação do n-gram atual, a gramática é fixa. A gramática contém quatro palavras e o uso dessas palavras só permite três respostas possíveis.

Ao mesmo tempo que permanece rigorosamente dentro do padrão, a definição do SRGS permite adicionar alguns detalhes que são úteis ao gerar um gerenciador de diálogos. Primeiro, ela permite a adição de um atributo weight ao elemento <item> como um número inteiro ou decimal. Segundo, ela permite a edição de elementos <tag> a regras como filhos que podem conter sequências arbitrárias. Elas são, mais frequentemente, expressões ECMAScript (JavaScript). E são comumente usadas para emitir instruções SISR para analisadores NLP em navegadores, mas, neste exemplo, poderão ser úteis para enviar dicas a um gerador de gerenciador de diálogos.

Você já tem algumas informações da gramática: O formato do bigram pede duas instruções switch, que são menores aninhadas dentro de maiores. Isto é bem direto. Mas o contexto e o OOV pedem mais do que isso. Esta proposta usa o atributo weight para lidar com o OOV e o elemento tag a fim de identificar o contexto.


Listagem 8. SRGS aprimorado com instruções do gerenciador de diálogos

...
<item weight="1"> COMPUTER <tag>$context = "tech";</tag></item>
...
<item weight=""> WAKE <tag>$wake_state = TRUE;</tag></item>
<item weight=""> SLEEP <tag>$wake_state = FALSE;</tag></item>
<item weight=""> STATUS <tag>
      if ($wake_state) {
        announce_status();
      }</tag></item>
...      
<item weight="0"> ANIMALS <tag></tag></item>
...

Note que COMPUTER maior tem peso 1, mas ANIMALS tem peso 0. Neste contexto, você quer que COMPUTER * seja reconhecido, mas ANIMALS * deverá ser ignorado como OOV. Adicionalmente, os elementos tag contêm fragmentos de código PHP que o gerador poderá inserir.

A meta do gerador do gerenciador de diálogos mostrado na listagem 9 é construir uma função dm() semelhante à listagem 4.


Listagem 9. Gerador do gerenciador de diálogos

<?php
// Dialog manager generator
// Colin Beckingham, 2010
// test dmgen
$xml = simplexml_load_file("mysrgs.xml");
$roote = trim($xml['root']);
// find the root rule, get the basic rulerefs
foreach ($xml->rule as $rule) { 
  if ($rule['id'] == $roote) { 
    foreach ($rule->ruleref as $rref) {
      $rulerefs[] = substr($rref['uri'],1);
} } }
// find the rules indicated by the rulerefs
foreach ($rulerefs as $ruleid) {
  foreach ($xml->rule as $rule) {
    if ($rule['id'] == $ruleid) {
      $i = 0;
      foreach ($rule->ruleref as $rref) {
        $myrules[$ruleid][$i] = substr($rref['uri'],1);
        $i++;
} } } }
// load the words array
foreach ($myrules as $mr=>$myr) {
  foreach ($myr as $md=>$myd) {
    foreach ($xml->rule as $rule) {
      if ($rule['id'] == $myd) {
        foreach ($rule->{'one-of'}->item as $item) {
          $words[$mr][$md][] = $item;
} } } } }
$dmout1 = "<?php
...
function dm(\$prompt_heard) {
global \$wake_state; // FALSE is asleep so do not respond, TRUE is awake
  \$parts = explode(\" \",\$prompt_heard);
  \$major = \$parts[0];
  \$minor = \$parts[1];
  switch (\$major) {";
    foreach ($words as $mw) {
      $mww = $mw[0][0]->attributes();
      if ($mww->weight == 1) {
$maj = "    case '".trim($mw[0][0])."':\n      ";
$maj .= "".$mw[0][0]->tag."";
$min1 = "\n      switch (\$minor) {";
        $ins .= "\n$maj$min1";
        foreach ($mw[1] as $mm) {
$min2 = "\n        case '".trim($mm)."':\n";
$min3 = "        ".$mm->tag."\n";
$min4 = "        break;";
        $ins .= "$min2$min3$min4";
      }
$min5 = "\n        case default:\n        break;\n      }";
        $ins .= $min5;
      }
    }
$dmout2= "
    default:
      // OOV - any other prompt, just ignore it.
    break;
  }
}
?>
";
echo "$dmout1$ins$dmout2\n";
?>

A primeira metade do código na listagem 9 é exatamente a mesma que o código do conversor na listagem 6. Esta duplicação é intencional pois, eventualmente, a geração da gramática e do gerenciador de diálogos poderá ser realizada no mesmo programa. Tendo estabelecido a matriz $words com objetos SimpleXML, agora é possível varrer aqueles objetos e escolher valores não só para itens, como também para pesos e tags. Depois da gravação de parte do código estático introdutório, o gerador do gerenciador de diálogos faz iteração pelos objetos SimpleXML, renderizando a saída em formato de código PHP e aninhando as instruções switch conforme necessário.

A listagem 10 mostra uma saída de amostra a partir de um arquivo SRGS de origem para teste que contém três regras principais, uma das quais deverá ser ignorada somente como dados de teste.


Listagem 10. Saída do gerador

> php dmgen2.php

<?php                                                          
...                                                            
function dm($prompt_heard) {                                   
global $wake_state; // FALSE is asleep so do not respond, TRUE is awake
  $parts = explode(" ",$prompt_heard);                                 
  $major = $parts[0];                                                  
  $minor = $parts[1];                                                  
  switch ($major) {                                                    
    case 'COMPUTER':                                                   
      $context = "tech";                                               
      switch ($minor) {                                                
        case 'WAKE':                                                   
          $wake_state = TRUE;
        break;
        case 'SLEEP':
          $wake_state = FALSE;
        break;
        case 'STATUS':
          if ($wake_state) { announce_status(); }
        break;
        case default:
        break;
      }
    case 'APPLES':
      $context = "fruit";
      switch ($minor) {
        case 'PIPPIN':
          pippin apple
        break;
        case 'DELICIOUS':
          delicious apple
        break;
        case 'SPARTAN':
          spartan apple
        break;
        case default:
        break;
      }
    default:
      // OOV - any other prompt, just ignore it.
    break;
  }
}
?>


Os arquivos que geraram esta saída estão disponíveis em Download.


Conclusão

Com o SRGS, é possível determinar requisitos para uma gramática fixa, além de sua função usual em NLP, fornecendo um local central para a geração de arquivos de gramática e do gerenciador de diálogos. Usando o atributo weight para definir se uma regra principal deverá ser detectada e o elemento <tag> para instruir o gerenciador de diálogos sobre qual ação tomar quando uma solicitação específica for detectada, a geração automática de gramática e de gerenciadores de diálogos é mais rigorosa e efetiva.

Interagir com um computador somente por voz é um trabalho muito mais difícil do que usar vários dispositivos de hardware de entrada e monitorar o estado do computador com feedback visual. Como programadores de voz, um objetivo principal seria facilitar a interação de usuários por voz— particularmente para aqueles que não têm opção além de usar a voz e os ouvidos. Apesar de os geradores de gramática e de o gerenciador de diálogos apresentados aqui não serem simples em si, seus produtos podem tornar mais fácil o processo de criar ferramentas simples e que possam ser empilhadas.



Download

DescriçãoNomeTamanhoMétodo de download
Sample files using PHP to exercise SRGS and SISRsrgsphp.zip3KBHTTP

Informações sobre métodos de download


Recursos

Aprender

Obter produtos e tecnologias

  • Julius: Explore um software decodificador de alto desempenho, com large vocabulary continuous speech recognition (LVCSR) em duas etapas, para pesquisadores e desenvolvedores, o qual é baseado em N-gram de palavras e HMM dependente de contexto.

  • HTK: Descubra este kit de ferramentas portátil para construir e manipular modelos Markov ocultos. Usado principalmente para pesquisa de reconhecimento de discurso, o HTK também é usado para pesquisas em síntese de discurso, reconhecimento de caracteres e sequenciamento de DNA.

  • Versões de avaliação de produto IBM: Faça o download ou explore as versões de teste online no IBM SOA Sandbox e entre em contato com as ferramentas de desenvolvimento de aplicativos e produtos de middleware do DB2®, Lotus®, Rational®, Tivoli®e WebSphere®.

Discutir

Sobre o autor

Colin Beckingham é um pesquisador, escritor e programadorfreelancer que mora no leste de Ontário, Canadá. Com diplomas da Queen's University, Kingston e interesse em horticultura, corrida de cavalos, serviço civil, varejo e viagem/turismo. Autor de aplicativos de banco de dados e de diversos artigos para jornais, revistas e on-line, seus interesse de pesquisa incluem programação de software livre e aplicativos de controle de voz em Linux®.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre
ArticleID=647330
ArticleTitle=Olhe! Não preciso usar o teclado! Entrada e resposta de voz usando gramáticas fixas
publish-date=04142011
author1-email=colbec@start.ca
author1-email-cc=

Conheça a IBM da sua cidade

Virtual Branch Office Brasil

A IBM está mais perto do que você imagina!


Tags

Help
Use o campo de pesquisa para encontrar todos os tipos de conteúdo no My developerWorks com essa tag.

Use a barra de rolagem para ver mais ou menos tags.

Tags populares mostra as principais tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Minhas tags mostra suas tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Use o campo de pesquisa para localizar todos os tipos de conteúdo no Meu developerWorks com essa tag. Tags populares mostra as tags principais para essa zona de conteúdo particular (por exemplo, tecnologia Java, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere). Minhas tags mostra as suas tags para essa zona de conteúdo em particular (por exemplo, tecnologia Java, Linux, WebSphere).