                            MBRDICO
           	Un dictionnaire parlant multilingue

            Facult Polytechnique of Mons - Belgium
				 		08/03/00, release 1.05

		home: http://tcts.fpms.ac.be/synthesis/mbrdico

Il s'agit de la troisime dition de MBRDICO, dictionnaire parlant
pour l'anglais amricain et de grande bretagne, le nerlandais,
franais et l'espagnol. Ce programme fonctionne avec les bases de
parole us, ar, en, nl, fr et es que vous devez charger sparment sur
la page du projet MBROLA : http://tcts.fpms.ac.be/synthesis

Pour ceux d'entre vous qui veulent directement sortir du son, le
rpertoire BINARY contient des binaires prcompils pour Windows et
Linux. 

Pour le moment les sources en C++ compilent sous Windows et les
plateformes Unix. Pour les premiers un projet VisualC++ est fourni,
pour les deuximes un Makefile fait l'affaire pour modifier le
programme selon vos besoins et introduire de nouvelles langues. Les
sources compltement dependentes des Standard Template Library et dans
la mesure du possible il s'agit de code C++/ANSI (les STL de Visual,
et celles de GNU CC fonctionnent... En revanche le CC de Sun/Solaris
n'est pas assez  jour).
	
Toutes les sources se trouvent dans le rpertoire SRC. Le rpertoire
DATA contient les ressources ncessaires pour prononcer les mots dans
chacune des langues ( .zs est une table de zscore pour le calcul des
dures, .tree est un arbre de dcision pour la conversion graphme
phonme, et .dic est un dictionnaire d'exception).

Si vous dsirez comprendre le fonctionnement de l'algorithme de
conversion graphme-phonme vous pouvez lire l'enthousiaste "LETTER TO
SOUND RULES FOR ACCENTED LEXICON COMPRESSION" Vincent Pagel, Kevin
Lenzo and Alan W. Black Proc ICSLP98 Sydney
(http://tcts.fpms.ac.be/publications/papers/1998/icslp98_vpklab.zip)  

Si vous tes un utilisateur plus aventureux vous pouvez construire vos
propres arbres de phontisation en chargeant l'atelier ID3 disponible
sous http://tcts.fpms.ac.be/synthesis/mbrdico

Copyright
=========

SVP informez vous de la license GNU et des consignes de distribution
dans le fichier copying.txt

Installation sur plateforme MS-WINDOWS 
======================================
1) On charge la base de parole mbrola que l'on veut entendre sur:
           http://tcts.fpms.ac.be/synthesis 
2) On charge Mbrolatools pour Windows a la mme adresse
3) On enregistre les base avec le Wizard Mbrola du panneau de contrle
4) Vrifiez que vous pouvez jouer les fichiers .pho de dmo dans le
rpertoire TEST de vos bases de diphones.
5) On lance alors mbrdico.exe qui se trouve dans le rpertoire
BINAIRE, et ca parle.

ATTENTION: si vous n'avez pas Visual mbrdico va se plaindre qu'il ne
trouve pas une DLL MSVbidule. Vous pouvez charger les dlls sous:
ftp://tcts.fpms.ac.be/pub/mbrola/TTS/MBRDICO/system32.zip

A propos de compilateur:
C:\Program Files\DevStudio\VC\INCLUDE\xtree(522) : warning C4786:
'?_Lmost@?$_Tree@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$pair@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@2@U_Kfn@?$map@V?$basic_string
@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@2@U?$less@V?$basic_string@DU?$char_.....: identifier was truncated to '255' characters in the browser information

Ce message de la vie quotidienne des Microsoftiens dit juste que
bidule ne sait pas utiliser des symboles de debuggage de plus de 255
char (soit de la folie furieuse pour qui utilise un tant soit peu les
STLs). La stratgie de Microsoft consiste  nous faire mourir de rire.
Passons aux choses srieuses.

Installation sur une plateforme UNIX
====================================

Aprs s'tre bien moqu des limites a 255 char cites plus haut on
peut compiler Mbrdico sur SUN/Solaris, PC/Linux (plateformes
effectivement testes) et surement bien d'autre boiboites Unix qui
incluent une version a jour de GCC (les compilateurs C++ un peu dats
auront des ennuis avec les STL, vive l'ANSI).

1) On charge les bases de parole Mbrola dont on a besoin sur:
				 http://tcts.fpms.ac.be/synthesis 

   On n'oublie pas de charger aussi le binaire mbrola pour sa
   plateforme ftiche <:-)

2) On vrifie qu'on sait jouer une phrase de dmo avec une ligne de
   commande du type:

   mbrola us1 TEST/alice.pho -.au | audioplay

	NOTE: remplacez audioplay par votre player audio local. La version
	Linux de mbrola fournit "rawplay" pour faire ce travail.

3) Ensuite il faut definir les variables d'environement "us1", "fr1",
   etc selon les langues que vous voulez lui faire parler. Ce qui
   ressemble peu ou prou sous CSH :

   setenv us1 "mbrola /usr/local/lib/mbrola/us1/us1 - -.au | audioplay"
   setenv fr1 "mbrola /usr/local/lib/mbrola/fr1/fr1 - -.au | audioplay"

et pour Linux gnralement avec BASH  :

	export us1="mbrola /usr/local/lib/mbrola/us1/us1 - -.raw | rawplay"
   setenv fr1="mbrola /usr/local/lib/mbrola/fr1/fr1 - -.raw | rawplay"

Si vous n'avez pas encore charg MBROLA et que vous souhaitez voir la
transcription phontique des mots, utilisez des definitions du type:

	  setenv us1 "cat > /dev/null"

4) Pour utiliser le binaire Linux compil on va dans BINARY est on
   peut par exemple taper:  mbrdico fr.ini  (utilisez les autres
   fichiers .ini pour changer de langue).	Et c'est parti pour bavarder

5) Pour compiler le binaire il suffit de se dplacer dans SRC, de
   fermer les yeux, de taper "make", on appuie sur enter, on ouvre un
   oeil, et puis l'autre si on apercoit:

> ------------------------
> The binary is in ../BINARY/mbrdico.solaris
> Try something like ../BINARY/mbrdico.solaris ../BINARY/us.ini

Dans ce cas, obissez aux conseils et tapez la ligne de commande. Dans
l'autre cas de figure vous n'avez plus qu'a utiliser votre oeil ouvert
pour chercher une version plus recente du compilo C++. Personellement
j'ai pu compiler avec GCC 2.8.1 sur SUN, et egcs-1.0.3 sous Linux
(notons au passage que le code contenant des STLs compile maintenant
sans modification avec GCC et Visual. Progrs suffisement rare pour
tre not).

Au fait que fait ce programme ???
=================================

Il prononce  haute et intellible voix (du moins on espre) les mots
et petites phrases que vous entrez au clavier. Pour ce faire il
converti les mots en une reprsentation phonologiqe avec l'arbre de
dcision et le dictionnaire d'exceptions. Ensuite il applique des
rgles dpendantes de la langue pour gnerer une prosodie (intonation
et rythme) acceptable. En bout de chane tout est envoy  la carte
son par Mbrola (DLL sous Windows, ou pipe vers le binaire pour Unix).

Adjonction rcente dans le dictionaire: vous pouvez maintenant
indiquer avec une tiquette grammaticale la nature d'un mot entr pour
dsambiger les homographes-htrophones -> l'arbre de dcision
utilise ces tiquettes pendant la phase d'apprentissage. En fait
l'implementation GNU de ID3 que l'on fourni sparment avec Kevin
Lenzo sait tirer parti des natures grammaticales, donc ajouter cette
fonctionalit dans MBRDICO tait un jeu d'enfant ... le seul problme
a t de trouver des dictionnaires d'entranement fournissant de
telles tiquettes: ce n'est pas le cas de CMU, donc en anglais
americain record(verb)-record(nom) ne sera pas diffrenci. Au
contraire c'est le cas pour OALD (british english).

Et bien sr, bien que conu au dpart pour la prononciation de mots
isols, notre dictionaire franais se tire des situations:

les poules du \NVERB couvent \VERB couvent 

La squence d'echappement "\" indique que ce qui suit est un tag qui
doit tre rattach au mot suivant. Par exemple dans l'exemple
ci-dessus "\NVERB couvent" indique que le mot n'est pas un verbe (en
fait le nom prononc [kuv]) et "\VERB couvent" indique le verbe a la
troisime personne du pluriel (prononc [kuv]). La convention VERB
NVERB que j'ai choisie ici est purement formelle, vous pouvez inclure
pendant l'apprentissage ID3 tous les noms et types d'tiquettes qui
vous chantent. En fait il se trouve que pour le franais la
distinction VERBE et NON-VERBE suffit gnralement  lever les
ambiguits.

Bricoler les sources
====================

1) Tout ce qui ne dpend pas de l'architecture se trouve dans les
    rpertoires suivants:

    SRC/Engine: gnration de la prosodie (haut niveau)
    SRC/Letter2Phone: transcription proprement dite (bas niveau)
    SRC/PhoFile: structure pour decrire les phonemes, les accents, les
    points de pitch, et les fichiers .pho

    SRC/VisualC++ -> le projet pour Visual.

    SRC/UNIX      -> le prog principal pour les plateforms UNIX

Vous pouvez dvelopper de nouveaux languages en hritant de la classe
Speak.cpp et dfinir les rgles d'accentuation (symbolique), et de
gnration des paramtres prosodiques (numrique). Pour le moment
j'utilise le caractre spcial '1' pour indiquer l'accent lexical. Si
vous voulez utiliser plus de diacritiques je recommande le
'0'.... Attention de rester raisonable avec les diacritiques car le
'4' peut tre confondu avec le t-flap de X-SAMPA, le '2' and le "eu"
francais arrondi, et le '3' avec le 'er' anglais.

Algorithme du dictionnaire parlant
====================================
sub MAIN
  0) passage aux minuscules, et transformation des sparateurs en '-'
  1) Substrings= split avec les caractres - / .  ( comme x-ray ac/dc I.B.M )
  2) foreach $i (Substrings) Transcription+=graphon($i)
  3) tones-to-f0(Transcription)

sub GRAPHON(Grapheme)
  1) if (Solution=exception_dictionary(Grapheme) 
      return Solution
   else 
  2)    Solution=apply_rule(Grapheme)
  7) return Solution

Les rgles sont encodes dans un arbre de dcision, qui est un
equivallent d'une norme structure if-then-else... Malheureusement
gnrer directement du code "if-then-else" pour l'arbre tait trop
lourd, car de nombreux compilateurs se perdent en conjecture devant
des structures fortement imbriques (l'arbre driv pour CMU
reprsente 100 000 noeuds environ, ce qui est un cauchemard a la fois
pour GCC et pour Visual C++. On accouche gnralement de core dump
douloureux aprs 30 minutes de moulinage, sans parler des insultes de
vos collgues qui vous voient occuper 200Mb de mmoire). Le problme
est bien donc d'empecher l'optimisation du code if-then-else,
cependant en faisant cela obtiens un code de 7Mb pour
l'anglais. L'arbre .tree encod sous un forme "lisible" est portable
reste un compromis portable et acceptable pour le moment. J'attends
cependant vos proposition et vos patches.

Les regles de genration de la courbe intonative a partir des tons
dpendent du fichier de zscore, ce qui peut bien sur tre amlior. Un
ensemble de diacritiques grossier est utilis: ':' pour l'allongement,
'>' pour un ton bas dinal, et '0' pour l'accent secondaire en
francais.

Amliorations possibles
=======================
Plein!!!!

Par exemple utiliser un analyseur morphologique en amont (l'arbre de
dcision peut utiliser les marqueurs de frontire de morphmes de la
mme manire que les tiquettes grammaticales), un taggeur et un
bricole-toi-meme-dans-ton-jardin-un-synthetiseur--partir-du-texte.

Le projet EULER actuellement en cours  la Facult Polytechnique de
Mons rpondra rapidement  ce dernier point. Et il n'y a pas de hasard
EULER inclu Mbrdico comme moteur de phontisation, et ceci dans un
cadre trs gnral et modulaire de synthse multi-lingue.

J'ai d'autres bbs a bichonner (ils commencent  se faire grands
pendant ce temps), ooh grande lchet, je laisse les amliorations
ci-dessus a titre d'exercice au lecteur.

REMERCIEMENTS
=============

Merci :

   * Kevin Lenzo (CMU) pour son tonante implmentation Perl de
     l'algorithme ID3, et de son travail de recherche qui m'a initi 
     ce domaine et a motiv ce projet

   * Alan Black (CSTR) pour son aide, ses tests sur diffrentes
     stratgies de prdiction de l'accent avec son impressionant
     systme WAGON, ainsi que pour son systme de synthse  partir du
     texte Festival ( qui est aujourd'hui une rfrence ).

   * Nawfal Tounsi (FPMS) qui a fourni le systme arabe

   * Fabrice Malfrere (FPMS) qui a fourni l'espagnol et le nerlandais

   * Richard Beaufort (FPMS-tudiant linguiste) qui a mis son
     expertise  profit pour corriger le dictionnaire franais du
     laboratoire 

   * Michel Bagein et Alain Ruelle (FPMS) qui m'ont aid avec C++/STL
	  et surtout  lutter avec le mchant Visual C++.

	* Philippe Devallois qui trouve des bugs partout !

Bugs
====

J'en ai laiss plein, sans a,  quoi bon!

			 Au plaisir !

Vincent PAGEL  ( pagel@tcts.fpms.ac.be ) 
Laboratoire  TCTS, Batiment Multitel,
Parc Initialis, av. Copernic, B7000 Mons, BELGIUM
Tel: /32/65/374733  Fax: 374729 http://tcts.fpms.ac.be/~pagel
