Como preparar dados de treinamento de formato de texto de exibição para fala personalizada

O serviço Azure AI Speech pode ser visto como dois componentes: reconhecimento de fala e formatação de texto de exibição. O reconhecimento de fala transcreve áudio para texto lexical e, em seguida, o texto lexical é transformado para exibir texto.

Diagrama do fluxo de reconhecimento de fala para lexical para exibir texto.

Estas são as localidades que suportam o recurso de formato de texto de exibição: da-DK, de-DE, en-AU, en-CA, en-GB, en-HK, en-IE, en-IN, en-NG, en-NZ, en-PH, en-SG, en-US, es-ES, es-MX, fi-FI, fr-CA, fr-FR, hi-IN, it-IT, ja-JP, ko-KR, nb-NO, nl-NL, pl-PL, pt-BR, pt-PT, sv-SE, tr-TR, zh-CN, zh-HK.

Formatação de texto de exibição padrão

O pipeline de texto de exibição é composto por uma sequência de construtores de formatos de exibição. Cada construtor corresponde a uma tarefa de formato de exibição, como ITN, capitalização e filtragem de palavrões.

  • Normalização de Texto Inverso (ITN) - Para converter o texto de números de formulário falados para exibir formulário. Por exemplo: "I spend twenty dollars" -> "I spend $20"
  • Capitalização - Para nomes de entidades maiúsculas, siglas ou a primeira letra de uma frase. Por exemplo: "she is from microsoft" -> "She is from Microsoft"
  • Filtragem de palavrões - Mascaramento ou remoção de palavras de baixo calão de uma frase. Por exemplo, assumindo que "abcd" é uma palavra de palavrão, então a palavra é mascarada por mascaramento de palavrões: "I never say abcd" -> "I never say ****"

A Microsoft mantém os construtores base do pipeline de texto de exibição para as tarefas de processamento de exibição de uso geral. Você obtém os construtores de base por padrão quando usa o serviço de fala. Para obter mais informações sobre formatação pronta, consulte Exibir formato de texto.

Formatação de texto de exibição personalizada

Além dos construtores de base mantidos pela Microsoft, você pode definir regras personalizadas de formatação de texto de exibição para personalizar o pipeline de formatação de texto de exibição para seus cenários específicos. As regras de formatação de texto de exibição personalizada são definidas em um arquivo de formatação de texto de exibição personalizado.

  • ITN personalizado - Estenda as funcionalidades do ITN base, aplicando um modelo ITN personalizado baseado em regras do cliente.
  • Reescrita personalizada - Reescreva uma frase para outra com base em um modelo baseado em regras do cliente.
  • Filtragem personalizada de palavrões - Execute o tratamento de palavrões com base na lista de palavras de palavrões do cliente.

A ordem do pipeline de formatação de texto de exibição é ilustrada neste diagrama.

Diagrama dos construtores de formatos de exibição.

ITN Personalizado

A filosofia do ITN personalizado baseado em padrões é que você pode especificar a saída final que deseja ver. O serviço de Fala descobre como as palavras podem ser faladas e mapeia as expressões faladas previstas para o formato de saída especificado.

Um modelo ITN personalizado é construído a partir de um conjunto de regras ITN. Uma regra ITN é uma expressão regular como string de padrão, que descreve:

  • Um padrão de correspondência da cadeia de caracteres de entrada
  • O formato desejado da cadeia de caracteres de saída

As regras ITN padrão fornecidas pela Microsoft são aplicadas primeiro. A saída do modelo ITN padrão é usada como a entrada do modelo ITN personalizado. O algoritmo de correspondência dentro do modelo ITN personalizado não diferencia maiúsculas de minúsculas.

Há quatro categorias de correspondência de padrões com regras ITN personalizadas.

Padrões com literais

Por exemplo, um desenvolvedor pode ter um item (como um produto) nomeado com o formulário JO:500alfanumérico . O serviço de Fala descobre que os usuários podem dizer a parte da letra como J O, ou eles podem dizer joe, e a parte do número como five hundred ou five double zerofive zero zero five oh oh ou , e, em seguida, construir um modelo que mapeia todas essas possibilidades de volta para JO:500 (incluindo a inserção de dois pontos).

Os padrões podem ser aplicados em paralelo especificando uma regra por linha no arquivo de formatação de texto de exibição. Aqui está um exemplo de um arquivo de formatação de texto de exibição que especifica duas regras:

JO:500
MM:760

Padrões com curingas

Você pode se referir a uma série de itens alfanuméricos (como JO:500, , JO:600JO:700) sem ter que especificar todas as possibilidades de várias maneiras.

Os intervalos de caracteres podem ser especificados com a notação [...], por isso JO:[5-7]00 é equivalente a escrever três padrões.

Há também um conjunto de itens curinga que podem ser usados. Um deles é \d, que significa qualquer dígito. Então JO:\d00 cobre JO:000, JO:100, e outros até JO:900.

Como uma expressão regular, há várias classes de caracteres predefinidas para uma regra ITN:

  • \d - corresponder a um dígito de «0» a «9» e emiti-lo diretamente
  • \l - corresponder a uma letra (sem distinção entre maiúsculas e minúsculas) e transduzi-la para minúsculas
  • \u - corresponder a uma letra (sem distinção entre maiúsculas e minúsculas) e transduzi-la para maiúsculas
  • \a - corresponder a uma letra (sem distinção entre maiúsculas e minúsculas) e emiti-la diretamente

Há também expressões de escape para se referir a caracteres que, de outra forma, têm significado sintático especial:

  • \\ - combinar e produzir o char \
  • \( e \)
  • \{ e \}
  • \|
  • \+ e \? ainda \*

Padrões com notação estilo regex

Para aumentar a flexibilidade da escrita de padrões, são suportadas construções de expressões regulares de frases com alternativas e fechamento de Kleene.

  • Uma frase é indicada entre parênteses, como (...) - Os parênteses não contam literalmente como caracteres a serem correspondidos.
  • Você pode indicar alternativas dentro de uma frase com o | caractere, como (AB|CDE).
  • Você pode sufixar uma frase com ? para indicar que ela é opcional, + para indicar que ela pode ser repetida ou * para indicar ambas. Você só pode sufixar frases com esses caracteres e não caracteres individuais (o que é mais restritivo do que a maioria das implementações de expressão regular).

Um padrão como (AB|CD)-(\d)+ representaria construções como "AB-9" ou "CD-22" e seria expandido para palavras faladas como A B nine e C D twenty two (ou C D two two).

Padrões com substituição explícita

A filosofia geral é "você nos mostra como deve ser a saída e o serviço de fala descobre como as pessoas dizem isso". Mas isso nem sempre funciona porque alguns cenários podem ter maneiras peculiares e imprevisíveis de dizer as coisas, ou as regras de fundo do serviço de fala podem ter lacunas. Por exemplo, pode haver pronúncias coloquiais para iniciais e acrônimos - ZPI pode ser falado como zippy. Nesse caso, é improvável que um padrão como ZPI-\d\d funcione se um usuário disser zippy twenty two. Para esse tipo de situação, há uma notação {spoken>written}de formato de texto de exibição. Este caso em particular poderia ser escrito {zippy>ZPI}-\d\d.

Isso pode ser útil para lidar com coisas que as regras de mapeamento de fala, mas ainda não suportam. Por exemplo, você pode escrever um padrão \d0-\d0 esperando que o sistema entenda que "-" pode significar um intervalo, e deve ser pronunciado to, como em twenty to thirty. Mas talvez não. Assim, você pode escrever um padrão mais explícito como \d0{to>-}\d0 e dizer como você espera que o traço seja lido.

Você também pode deixar de fora a forma escrita e seguinte > para indicar palavras que devem ser reconhecidas, mas ignoradas. Então, um padrão como {write} (\u.)+ reconhece e saída A.B.C- soltando a write write A B C peça.

Exemplos de ITN personalizados

Dígitos do grupo

Para agrupar 6 dígitos em dois grupos e adicionar um caractere '-' entre eles:

Regra ITN: \d\d\d-\d\d\d Exemplo: "cadence one oh five one fifteen" -> "cadence 105-115"

Formatar um nome de filme

Espaço: 1999 é um filme famoso, para apoiá-lo:

Regra ITN: Space: 1999 Exemplo: "watching space nineteen ninety nine" -> "watching Space: 1999"

Padrão com substituição

Regra ITN: \d[05]{ to >-}\d[05] Exemplo: fifteen to twenty -> 15-20

Reescrita personalizada

Falando em geral, para uma cadeia de caracteres de entrada, o modelo de reescrita tenta substituir o original phrase na cadeia de caracteres de entrada pelo correspondente new phrase para cada regra de reescrita. Um modelo de reescrita é uma coleção de regras de reescrita.

  • Uma regra de reescrita é um par de duas frases: a frase original e uma nova frase.
  • As duas frases são separadas por um caractere TAB. Por exemplo, original phrase{TAB}new phrase.
  • A frase original é correspondida (não diferencia maiúsculas de minúsculas) e substituída pela nova frase (diferencia maiúsculas de minúsculas). Os caracteres de pontuação gramatical na frase original são ignorados durante a correspondência.
  • Se alguma regra de reescrita entrar em conflito, a que tiver mais tempo original phrase será usada como correspondência.

O modelo de reescrita suporta maiúsculas gramaticais por padrão, que capitaliza a primeira letra de uma frase para en-US localidades semelhantes. Ele será desativado se o recurso de maiúsculas da formatação de texto de exibição estiver desativado em uma solicitação de reconhecimento de fala.

Pontuação gramatical

Os caracteres de pontuação gramatical são usados para separar uma frase ou frase e esclarecer como uma frase deve ser lida.

. , ? 、 ! : ; ? 。 , ¿ ¡ । ؟ ،

Aqui estão as regras de pontuação gramatical:

  • Os caracteres de pontuação suportados são para pontuação gramatical se forem seguidos por espaço ou no início ou no final de uma frase ou frase. Por exemplo, o . in x. y (com um espaço entre . e y) é uma pontuação gramatical.
  • Os caracteres de pontuação que estão no meio de uma palavra (exceto zh-cn e ja-jp) não são pontuação gramatical. Nesse caso, são personagens comuns. Por exemplo, o . in x.y não é uma pontuação gramatical.
  • Para zh-cn e ja-jp (localidades sem espaçamento), os caracteres de pontuação são sempre usados como pontuação gramatical, mesmo que estejam entre caracteres. Por exemplo, o . in 中.文 é uma pontuação gramatical.

Exemplos de reescrita personalizados

Correção ortográfica

O nome COVID-19 pode ser reconhecido como covered 19. Para se certificar de que COVID-19 is a virus é apresentado em vez de , utilize a seguinte regra de covered 19 is a virusreescrita:

#rewrite
covered 19{TAB}COVID-19

Nome em maiúsculas

Gottfried Wilhelm Leibniz foi um matemático alemão. Para certificar-se de que Gottfried Wilhelm Leibniz está em maiúsculas, use a seguinte regra de reescrita:

#rewrite
gottfried leibniz{TAB}Gottfried Leibniz

Palavrões personalizados

Um modelo de palavrões personalizado age da mesma forma que o modelo de palavrões base, exceto que usa uma lista de frases de palavrões personalizadas. Além disso, o modelo de palavrões personalizado tenta corresponder (sem distinção entre maiúsculas e minúsculas) todas as frases de palavrões definidas no arquivo de formatação de texto de exibição.

  • As frases de palavrão são combinadas (sem distinção entre maiúsculas e minúsculas).
  • Se alguma frase de palavrão entrar em conflito, a frase mais longa é usada como correspondência.
  • Esses caracteres de pontuação não são suportados em uma frase de palavrão: . , ? 、 ! : ; ? 。 , ¿ ¡ । ؟ ، .
  • Para zh-CN e ja-JP localidades, frases de palavrões em inglês não são suportadas. Palavras de baixo calão em inglês são suportadas. Frases de palavrões para zh-CN e ja-JP localidades são suportadas.

Os palavrões são removidos ou mascarados dependendo das configurações da sua solicitação de reconhecimento de fala.

Depois que os palavrões são adicionados no arquivo de regra de formato de texto de exibição e o modelo personalizado é treinado, ele é usado para a saída padrão em fala em lote para texto e fala em tempo real para texto.

Exemplos de palavrões personalizados

Aqui estão alguns exemplos de como mascarar palavras e frases de palavrões no arquivo de formatação de texto de exibição.

Mascarar um único exemplo de palavra de palavrões

Supor xyz é uma palavra de palavrão. Para adicioná-lo:

#profanity
xyz

Aqui está um exemplo de teste: Turned on profanity masking to mask xyz -> Turned on profanity masking to mask ***

Mascarar frase de palavrões

Suponha abc lmn que é uma frase de palavrão. Para adicioná-lo:

#profanity
abc lmn

Aqui está um exemplo de teste: Turned on profanity masking to mask abc lmn -> Turned on profanity masking to mask *** ***

Passos Seguintes