Comment préparer les données d’apprentissage de mise en forme du texte affiché pour la reconnaissance vocale personnalisée
Le service Azure AI Speech peut être considéré comme étant constitué de deux composants : la reconnaissance vocale et la mise en forme du texte affiché. La reconnaissance vocale transcrit l’audio en texte lexical, puis le texte lexical est transformé en texte affiché.
Voici les paramètres régionaux qui prennent en charge la fonctionnalité de mise en forme du texte affiché : 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.
Mise en forme du texte affiché par défaut
Le pipeline d’affichage de texte est composé d’une séquence de générateurs de mise en forme de l’affichage. Chaque générateur correspond à une tâche de mise en forme de l’affichage, comme la normalisation de texte inverse (ITN), l’utilisation de majuscules et le filtrage des grossièretés.
- Normalisation de texte inverse (ITN) : pour convertir le texte sous forme de nombre prononcé en une forme affichée. Par exemple :
"I spend twenty dollars" -> "I spend $20"
- Utilisation de majuscules : pour mettre en majuscule les noms d’entités, les acronymes ou la première lettre d’une phrase. Par exemple :
"she is from microsoft" -> "She is from Microsoft"
- Filtrage des grossièretés : masquage ou suppression de mots grossiers dans une phrase. Par exemple, en supposant que « abcd » est un mot grossier, le mot est masqué par le masquage des grossièretés :
"I never say abcd" -> "I never say ****"
Microsoft gère les générateurs de base du pipeline d’affichage de texte pour les tâches de traitement de l’affichage à usage général. Vous obtenez les générateurs de base par défaut quand vous utilisez le service Speech. Pour plus d’informations sur la mise en forme prête à l’emploi, consultez Mise en forme du texte affiché.
Mise en forme personnalisée du texte affiché
Outre les générateurs de base gérés par Microsoft, vous pouvez définir des règles de mise en forme de texte d’affichage personnalisées pour personnaliser le pipeline de mise en forme de texte d’affichage pour vos scénarios spécifiques. Les règles de mise en forme personnalisée du texte affiché sont définies dans un fichier de mise en forme personnalisée du texte affiché.
- Normalisation de texte inverse (ITN) personnalisée : étendez les fonctionnalités de la normalisation de texte inverse de base en appliquant un modèle de normalisation de texte inverse personnalisée basé sur des règles données par un client.
- Réécriture personnalisée : réécrire une expression en une autre expression en fonction d’un modèle basé sur des règles données par un client.
- Filtrage des grossièretés personnalisé : effectuer la gestion des grossièretés en fonction de la liste des mots grossiers donnée par un client.
L’ordre du pipeline de mise en forme du texte affiché est illustré dans ce diagramme.
Normalisation de texte inverse personnalisée
La philosophie de la normalisation de texte inverse personnalisée basée sur des modèles est que vous pouvez spécifier la sortie finale que vous voulez voir. Le service Speech détermine comment les mots peuvent être prononcés et mappe les expressions vocales prédites au format de sortie spécifié.
Un modèle de normalisation de texte inverse personnalisée est créé à partir d’un ensemble de règles de normalisation de texte inverse. Une règle de normalisation de texte inverse est une expression régulière comme une chaîne de modèle, qui décrit :
- Un modèle correspondant de la chaîne d’entrée
- Le format souhaité de la chaîne de sortie
Les règles de normalisation de texte inverse par défaut fournies par Microsoft sont appliquées en premier. La sortie du modèle de normalisation de texte inverse par défaut est utilisée comme entrée du modèle de normalisation de texte inverse personnalisée. L’algorithme correspondant dans le modèle de normalisation de texte inverse personnalisée ne respecte pas la casse.
Il existe quatre catégories de correspondance de modèle à des règles de normalisation de texte inverse personnalisée.
- Modèles avec littéraux
- Modèles avec caractères génériques
- Modèles avec notation de style regex
- Modèles avec remplacement explicite
Modèles avec littéraux
Par exemple, un développeur peut avoir un élément (comme un produit) nommé avec la forme alphanumérique JO:500
. Le service vocal comprend que les utilisateurs peuvent dire la partie de la lettre comme J O
ou prononcer joe
, et prononcer la partie constituée de nombres five hundred
ou five zero zero
ou five oh oh
ou five double zero
, puis à créer un modèle qui mappe toutes ces possibilités à JO:500
(y compris l’insertion du signe deux-points).
Les modèles peuvent être appliqués en parallèle en spécifiant une règle par ligne dans le fichier de mise en forme du texte affiché. Voici un exemple de fichier de mise en forme du texte affiché qui spécifie deux règles :
JO:500
MM:760
Modèles avec caractères génériques
Vous pouvez faire référence à une série entière d’éléments alphanumériques (tels que JO:500
, JO:600
, JO:700
) sans avoir à énumérer toutes les possibilités de plusieurs façons.
Les plages de caractères peuvent être spécifiées avec la notation [...]
: JO:[5-7]00
revient donc à écrire trois modèles.
Vous pouvez également utiliser un ensemble d’éléments avec caractères génériques. L’un d’eux est \d
, qui signifie n’importe quel chiffre. Ainsi, JO:\d00
couvre JO:000
, JO:100
et d’autres expressions jusqu’à JO:900
.
Comme pour une expression régulière, il existe plusieurs classes de caractères prédéfinies pour une règle de normalisation de texte inverse :
\d
: établir une correspondance avec un chiffre de « 0 » à « 9 » et le produire en sortie directement\l
: établir une correspondance avec une lettre (sans respect de la casse) et la changer en minuscule\u
: établir une correspondance avec une lettre (sans respect de la casse) et la changer en majuscule\a
: établir une correspondance avec une lettre (sans respect de la casse) et la produire en sortie directement
Il existe également des expressions d’échappement pour faire référence à des caractères qui ont sans cela une signification syntaxique spéciale :
\\
: établir une correspondance avec le caractère\
et le produire en sortie\(
et\)
\{
et\}
\|
\+
et\?
et\*
Modèles avec notation de style regex
Pour améliorer la flexibilité de l’écriture des modèles, les constructions d’expressions de type expression régulière avec des alternatives et la fermeture de Kleene sont prises en charge.
- Une expression est indiquée avec des parenthèses, comme
(...)
: les parenthèses ne comptent pas littéralement comme caractères à mettre en correspondance. - Vous pouvez indiquer des alternatives dans une expression avec le caractère
|
, comme dans(AB|CDE)
. - Vous pouvez suffixer une expression avec
?
pour indiquer qu’elle est facultative, avec+
pour indiquer qu’elle peut être répétée ou avec*
pour indiquer les deux. Vous pouvez suffixer des expressions seulement avec ces caractères et non pas avec des caractères individuels (ce qui est plus restrictif que la plupart des implémentations d’expressions régulières).
Un modèle comme (AB|CD)-(\d)+
représenterait des constructions telles que « AB-9 » ou « CD-22 », et être développé pour en mots prononcés comme A B nine
et C D twenty two
(ou C D two two
).
Modèles avec remplacement explicite
La philosophie générale est la suivante : « vous nous montrez à quoi doit ressembler le résultat, et le service Speech s’occupe de la façon dont les gens le disent ». Mais cela ne fonctionne pas toujours, car certains scénarios peuvent avoir des façons imprévisibles de dire des choses ou bien les règles internes du service Speech peuvent avoir des lacunes. Par exemple, il peut y avoir des prononciations familières pour les initiales et les acronymes : ZPI
peut être prononcé zippy
. Dans ce cas, un modèle tel que ZPI-\d\d
est peu susceptible de fonctionner si un utilisateur dit zippy twenty two
. Pour ce genre de situation, il existe une notation de mise en forme du texte affiché : {spoken>written}
. Ce cas particulier peut être écrit {zippy>ZPI}-\d\d
.
Ceci peut être utile pour gérer des choses que les règles de mappage de Speech ne prennent pas encore en charge. Par exemple, vous pouvez écrire un modèle \d0-\d0
en pensant que le système va comprendre que « - » peut signifier une plage et doit être prononcé to
, comme dans twenty to thirty
. Mais peut-être que ce ne sera pas le cas. Vous pouvez donc écrire un modèle plus explicite comme \d0{to>-}\d0
et lui indiquer comment vous voulez que le tiret soit lu.
Vous pouvez également omettre le >
et la forme écrite suivante pour indiquer des mots qui doivent être reconnus mais ignorés. Ainsi, un modèle tel que {write} (\u.)+
reconnaît write A B C
et produit en sortie A.B.C
, en supprimant la partie write
.
Exemples de normalisation de texte inverse personnalisée
Regrouper des chiffres
Pour regrouper 6 chiffres en deux groupes et ajouter un caractère « - » entre eux :
Règle de normalisation de texte inverse :
\d\d\d-\d\d\d
Exemple :"cadence one oh five one fifteen" -> "cadence 105-115"
Mettre en forme un nom de film
Space : 1999 est un film célèbre. Voici comment le prendre en charge :
Règle de normalisation de texte inverse :
Space: 1999
Exemple :"watching space nineteen ninety nine" -> "watching Space: 1999"
Modèle avec remplacement
Règle de normalisation de texte inverse :
\d[05]{ to >-}\d[05]
Exemple :fifteen to twenty -> 15-20
Réécriture personnalisée
D’une manière générale, pour une chaîne d’entrée, le modèle de réécriture tente de remplacer l’élément original phrase
dans la chaîne d’entrée par l’élément new phrase
correspondant pour chaque règle de réécriture. Un modèle de réécriture est une collection de règles de réécriture.
- Une règle de réécriture est une paire de deux expressions : l’expression d’origine et une nouvelle expression.
- Les deux expressions sont séparées par un caractère de tabulation (TAB). Par exemple,
original phrase
{TAB}new phrase
. - L’expression d’origine est mise en correspondance (sans respect de la casse) et remplacée par la nouvelle expression (avec respect de la casse). Les caractères de ponctuation grammaticale dans l’expression d’origine sont ignorés lors de la mise en correspondance.
- Si des règles de réécriture sont en conflit, celle dont la
original phrase
est la plus longue est utilisée comme mise en correspondance.
Le modèle de réécriture prend en charge l’utilisation de majuscules grammaticales par défaut, qui met en majuscule la première lettre d’une phrase pour des paramètres régionaux comme en-US
. Elle est désactivée si la fonctionnalité de mise en majuscules de la mise en forme du texte affiché est désactivée dans une demande de reconnaissance vocale.
Ponctuation grammaticale
Les caractères de ponctuation grammaticale sont utilisés pour séparer une phrase ou une expression, et pour clarifier la façon dont une phrase ou une expression doit être lue.
. , ? 、 ! : ; ? 。 , ¿ ¡ । ؟ ،
Voici les règles de ponctuation grammaticale :
- Les caractères de ponctuation pris en charge sont destinés à la ponctuation grammaticale s’ils sont suivis d’un espace, ou s’ils se trouvent au début ou à la fin d’une phrase ou d’une expression. Par exemple, le
.
dansx. y
(avec un espace entre.
ety
) est une ponctuation grammaticale. - Les caractères de ponctuation qui se trouvent au milieu d’un mot (sauf
zh-cn
etja-jp
) ne constituent pas une ponctuation grammaticale. Dans ce cas, ce sont des caractères ordinaires. Par exemple, le.
dansx.y
n’est pas une ponctuation grammaticale. - Pour
zh-cn
etja-jp
(des paramètres régionaux sans espaces), les caractères de ponctuation sont toujours utilisés comme ponctuation grammaticale même s’ils se trouvent entre des caractères. Par exemple, le.
dans中.文
n’est pas une ponctuation grammaticale.
Exemples de réécriture personnalisée
Correction de l’orthographe
Le nom COVID-19
peut être reconnu comme covered 19
. Pour faire en sorte que COVID-19 is a virus
soit affiché au lieu de covered 19 is a virus
, utilisez la règle de réécriture suivante :
#rewrite
covered 19{TAB}COVID-19
Utilisation de majuscules pour les noms
Gottfried Wilhelm Leibniz était un mathématicien allemand. Pour faire en sorte que Gottfried Wilhelm Leibniz
soit affiché avec des majuscules, utilisez la règle de réécriture suivante :
#rewrite
gottfried leibniz{TAB}Gottfried Leibniz
Gestion personnalisée des grossièretés
Un modèle de gestion personnalisée des grossièretés agit de la même façon que le modèle de base de gestion des grossièretés, sauf qu’il utilise une liste personnalisée d’expressions grossières. En outre, le modèle personnalisé de gestion des grossièretés tente de mettre en correspondance (sans respect de la casse) toutes les expressions grossières définies dans le fichier de mise en forme du texte affiché.
- Les expressions grossières sont mises en correspondance (sans respect de la casse).
- Si des règles d’expressions grossières sont en conflit, l’expression la plus longue est utilisée comme correspondance.
- Ces caractères de ponctuation ne sont pas pris en charge dans une expression grossière :
. , ? 、 ! : ; ? 。 , ¿ ¡ । ؟ ،
. - Pour les paramètres régionaux
zh-CN
etja-JP
, les expressions grossières en anglais ne sont pas prises en charge. Les mots grossiers en anglais sont pris en charge. Les expressions grossières pour les paramètres régionauxzh-CN
etja-JP
sont prises en charge.
Les termes grossiers sont supprimés ou masqués, en fonction des paramètres de votre demande de reconnaissance vocale.
Une fois que la gestion des grossièretés est ajoutée dans le fichier de règles de mise en forme du texte affiché et que l’apprentissage du modèle personnalisé a été effectué, elle est utilisée pour la sortie par défaut dans la reconnaissance vocale par lots et la reconnaissance vocale en temps réel.
Exemples de gestion personnalisée des grossièretés
Voici quelques exemples de la manière de masquer des expressions et des mots grossiers dans le fichier de mise en forme du texte affiché.
Exemple de masquage d’un seul mot grossier
Supposons que xyz
est un mot grossier. Pour l’ajouter :
#profanity
xyz
Voici un exemple de test : Turned on profanity masking to mask xyz -> Turned on profanity masking to mask ***
Masquer une expression grossière
Supposons que abc lmn
est une expression grossière. Pour l’ajouter :
#profanity
abc lmn
Voici un exemple de test : Turned on profanity masking to mask abc lmn -> Turned on profanity masking to mask *** ***