Compartilhar via


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

O serviço de Fala de IA do Azure pode ser exibido como dois componentes: reconhecimento de fala e formatação de texto de exibição. O reconhecimento de fala transcreve áudio em 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 padrão do texto de exibição

O pipeline de texto de exibição é composto por uma sequência de construtores de formato de exibição. Cada construtor corresponde a uma tarefa de formato de exibição, como ITN, uso de maiúsculas e filtragem de conteúdo ofensivo.

  • ITN (Normalização de Texto Inverso) – para converter o texto dos números da forma falada para a forma de exibição. Por exemplo: "I spend twenty dollars" -> "I spend $20"
  • Uso de maiúsculas - Para colocar em maiúsculas nomes de entidades, acrônimos ou a primeira letra de uma frase. Por exemplo: "she is from microsoft" -> "She is from Microsoft"
  • Filtragem de conteúdo ofensivo - Mascaramento ou remoção de palavras ofensivas de uma frase. Por exemplo, supondo que "abcd" seja uma palavra ofensiva, a palavra receberá mascaramento de conteúdo ofensivo: "I never say abcd" -> "I never say ****"

A Microsoft mantém 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 a formatação pronta para uso, consulte Exibir formato de texto.

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

Ao lado dos construtores de base mantidos pela Microsoft, você pode definir regras de formatação de texto de exibição personalizadas 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.

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

Diagrama dos construtores de formato de exibição.

ITN personalizado

A filosofia do ITN personalizado baseado em padrão é 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 de ITN personalizado é criado a partir de um conjunto de regras de ITN. Uma regra de ITN é uma expressão regular como cadeia de caracteres padrão, que descreve:

  • Um padrão correspondente da cadeia de caracteres de entrada
  • O formato desejado da cadeia de caracteres de saída

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

Há quatro categorias de padrões correspondentes com regras de ITN personalizadas.

Padrões com literais

Por exemplo, um desenvolvedor pode ter um item (como um produto) nomeado com o formulário alfanumérico JO:500. O serviço de Fala descobre que os usuários podem dizer a parte das letras como J O, ou podem dizer joe, e a parte numérica como five hundred ou five zero zero ou five oh oh ou five double zero e, em seguida, cria um modelo que mapeie 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 inteira de itens alfanuméricos (como JO:500, JO:600, JO:700) sem precisar usar por extenso todas as possibilidades de várias maneiras.

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

Há também um conjunto de itens curinga que pode ser usado. Uma delas é \d, que significa qualquer dígito. Portanto, JO:\d00 abrange JO:000, JO:100 e outros até JO:900.

Assim como uma expressão regular, há várias classes de caractere predefinidas para uma regra ITN:

  • \d - corresponder a um dígito de '0' a '9' e gerar diretamente
  • \l - corresponder a uma letra (não diferencia maiúsculas e minúsculas) e transduzir para minúsculas
  • \u - corresponder a uma letra (não diferencia maiúsculas e minúsculas) e transduzir para maiúsculas
  • \a - corresponder a uma letra (não diferencia maiúsculas E minúsculas) e a gerar diretamente

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

  • \\ - corresponder e gerar o caractere \
  • \( e \)
  • \{ e \}
  • \|
  • \+ e \? e \*

Padrões com notação no estilo Regex

Para aprimorar a flexibilidade da escrita de padrões, há suporte para construções semelhantes a expressões regulares de frases com alternativas e fechamento de Kleene.

  • Uma frase é indicada com 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 com 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 de dizer coisas, ou as regras 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 de formato de texto de exibição {spoken>written}. Este caso em particular pode ser escrito como {zippy>ZPI}-\d\d.

Isso pode ser útil para lidar com coisas que estejam nas regras de mapeamento de Fala, mas ainda não tenham suporte. 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 ele não faça isso. Portanto, você pode escrever um padrão mais explícito como \d0{to>-}\d0 e dizer como espera que o traço seja lido.

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

Exemplos de ITN personalizados

Dígitos de grupo

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

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

Formatar um nome de filme

Espaço: 1999 é um filme famoso, para dar suporte a ele:

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

Padrão com Substituição

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

Reescrita personalizada

Em termos gerais, para uma cadeia de caracteres de entrada, o modelo de regravação tenta substituir original phrase na cadeia de caracteres de entrada pelo new phrase correspondente 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 de tabulação. Por exemplo, original phrase{TAB}new phrase.
  • A frase original é correspondida (não diferencia maiúsculas e minúsculas) e substituída pela nova frase (diferencia maiúsculas e minúsculas). Caracteres de pontuação gramática na frase original são ignorados durante a correspondência.
  • Se alguma regra de reescrita entrar em conflito, aquela com o original phrase mais longo será usada como a correspondência.

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

Pontuação gramatical

Caracteres de pontuação gramatical são usados para separar uma frase e esclarecer como ela deve ser lida.

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

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

  • Os caracteres de pontuação com suporte são para pontuação gramatical se forem seguidos por espaço ou no início ou final de uma frase. Por exemplo, o . em x. y (com um espaço entre . e y) é uma pontuação gramatical.
  • 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 caracteres comuns. Por exemplo, o . em 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 . em 中.文 é uma pontuação gramatical.

Exemplos de reescrita personalizada

Correção ortográfica

O nome COVID-19 pode ser reconhecido como covered 19. Para garantir que COVID-19 is a virus seja exibido em vez de covered 19 is a virus, use a seguinte regra de reescrita:

#rewrite
covered 19{TAB}COVID-19

Uso de maiúsculas no nome

Gottfried Wilhelm Leibniz era um matemático alemão. Para garantir que Gottfried Wilhelm Leibniz esteja em maiúscula, use a seguinte regra de reescrita:

#rewrite
gottfried leibniz{TAB}Gottfried Leibniz

Conteúdo ofensivo personalizado

Um modelo de conteúdo ofensivo personalizado age da mesma forma que o modelo de conteúdo ofensivo base, exceto que ele usa uma lista de frases ofensivas personalizadas. Além disso, o modelo de conteúdo ofensivo personalizado tenta corresponder (não diferencia maiúsculas de minúsculas) todas as frases ofensivas definidas no arquivo de formatação de texto de exibição.

  • As frases ofensivas são correspondidas (não diferencia maiúsculas e minúsculas).
  • Se alguma frase ofensivas entrarem em conflito, a frase mais longa será usada como correspondência.
  • Não há suporte para esses caracteres de pontuação em uma frase ofensiva: . , ? 、 ! : ; ? 。 , ¿ ¡ । ؟ ، .
  • Para localidades zh-CN e ja-JP, não há suporte para frases ofensivas em inglês. Há suporte para palavras ofensivas em inglês. Há suporte para frases ofensivas para as localidades zh-CN e ja-JP.

O conteúdo ofensivo é removido ou mascarado dependendo das configurações de solicitação de reconhecimento de fala.

Depois que o conteúdo ofensivo é adicionado no arquivo de regra de formato de texto de exibição e o modelo personalizado é treinado, ele é usado para a saída padrão de reconhecimento de fala padrão e reconhecimento de fala em tempo real.

Exemplos de conteúdo ofensivo personalizado

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

Exemplo de mascaramento de palavra ofensiva única

Suponha que xyz é uma palavra ofensiva. Para adicioná-la:

#profanity
xyz

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

Mascarar frase ofensiva

Suponha que abc lmn é uma frase ofensiva. Para adicioná-la:

#profanity
abc lmn

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

Próximas etapas