Date: Fri, 29 Mar 2024 13:49:05 +0100 (CET) Message-ID: <235523749.123.1711716545611@confluence-esup.uphf.fr> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_122_204164298.1711716545611" ------=_Part_122_204164298.1711716545611 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html
POD V2
Remarque : =C3=A0 partir de la version 2.6.2 de Pod, c'est la ver= sion 0.8.2 de DeepSpeech qui est utilis=C3=A9e. Il faut adapter les mod=C3= =A8les et les param=C3=A8tres de configuration de Pod.
Pour d=C3=A9couper le fichier audio de pod et faire sa transcription, no= us avons besoin de Sox, il faut donc installer les deux lib suivantes :
Il faut =C3=A9galement installer le module python ffmpeg-normalize
L'ensemble des fichiers cr=C3=A9=C3=A9s (mod=C3=A8le, alphabet, lm.binar= y et trie pour version 0.6.1 de deepspeech ou kenlm.scorer et output_g= raph.pbmm pour la version 0.8.2 de deepspeech) peuvent =C3=AAtre stock=C3= =A9s dans /usr/local/django_projects/transcription
il convient de faire un sous-dossier par langue (I.E: fr, en etc.)
``` pour version de pod < 2.6.2
pod@podv2:/usr/local/django_projects/transcription/model_fr$ ll
tot= al 2716020
-rw-r--r-- 1 pod pod  = ; 157 nov. 14 21:14 alphabet.txt
-rw-r--r-- 1 pod pod 1395207692 o= ct. 13 10:08 lm.binary
-rw-r--r-- 1 pod pod 1125941232 nov. = 15 09:40 model_tensorflow_fr.tar.xz
-rw-r--r-- 1 pod pod 189186587= nov. 15 08:42 output_graph.pbmm
-rw-r--r-- 1 pod pod = 70846624 nov. 14 11:56 trie
```
le fichier "model_tensorflow_fr.tar.xz" peut-etre t=C3=A9l=C3=A9charg=C3= =A9 sur le site du projet (attention =C3=A0 prendre la version ad=C3=A9quat= : https://github.com/Common-Voice/c= ommonvoice-fr/releases
par exemple pour la version : v0.6.0-fr-0.4
pour la version 0.8.2 (le premier contient les fichiers pour FR, les 2 a= utres sont pour EN ):
wget https://github.com/mozilla/DeepSpeech/releases/download/v0.8.2/deepspeec= h-0.8.2-models.pbmm
wget https://github.com/mozilla/DeepSpeech/releases/download/v0.8.2/deepspe= ech-0.8.2-models.scorer
puis d=C3=A9compresser le/les fichiers :
tar -xJvf model_tensorflow_fr.tar.xz
Dans le fichier custom/settings-local.py, il suffit d=E2=80=99ajouter le= s param=C3=A8tres suivant (une entr=C3=A9e par langue) :
Pour Pod =C3=A0 partir de la 2.6.2 avec fr et en :
....
USE_TRANSCRIPTION =3D True
DS_PARAM =3D {
'fr': { # le mod=C3=A8le deepspeech 0.5.2 FR
'model': "/usr/local/django_projects/transcription/model_fr/output_graph= .pbmm",
'scorer': "/usr/local/django_projects/transcription/model_fr/kenlm.score= r",
},
'en': { # le mod=C3=A8le deepspeech 0.8.2 EN
'model': "/usr/local/django_projects/transcription/model_en/deepspeech-0= .8.2-models.pbmm",
'scorer': "/usr/local/django_projects/transcription/model_en/deepspeech-= 0.8.2-models.scorer",
}
}
Pour Pod < 2.6.2
"""
USE_TRANSCRIPTION =3D True
DS_PARAM =3D {
'fr': {
# alphabet;txt contient tou= s les caract=C3=A8res de la langue lang
'alphabet': "/usr/local/dja= ngo_projects/transcription/model_fr/alphabet.txt",
# le mod=C3=A8le deepspeech=
'model': "/usr/local/django= _projects/transcription/model_fr/output_graph.pbmm",
# le fichier de probabilit= =C3=A9s construit avec kenlm
'lm': "/usr/local/django_pr= ojects/transcription/model_fr/lm.binary",
# le fichier trie cr=C3=A9= =C3=A9 avec generate_trie =C3=A0 partir de lm.binary et
# alphabet.txt
'trie': "/usr/local/django_= projects/transcription/model_fr/trie",
'n_features': 26, &nbs= p; # Number of MFCC f= eatures to use
# Size of the context windo= w used for producing timesteps in the input
# vector
'n_context': 9,
# Beam width used in the CT= C decoder when building candidate
# transcriptions
'beam_width': 500,
# The alpha hyperparameter = of the CTC decoder / Language Model weight
'lm_alpha': 0.65,
'lm_beta': 1.4 &= nbsp; # The beta hyperparameter of the = CTC decoder / Word insertion bonus
}
}
"""
$ python manage shell (pour lancer le shell)
$> from pod.video import transcript (dans le shell, je charge le modu= le transcript de pod)
$>transcript.main_thre=
aded_transcript(<video_id>) (j'appelle la fonction
=
main_threaded_transcript du module transcript pour trans=
crire la video dont l'identifiant est
<video_id&g=
t;)
Les DB doivent =C3=AAtre de la forme :
main_folder
|=E2=80=94- dev folder
|=E2=80=94- test folder
|=E2=80=94- train folder
|=E2=80=94- dev.csv
|=E2=80=94- test.csv
|=E2=80=94- train.csv
les dossiers dev test et train contiennent des fichiers wave en 16bit 16kH=
z Mono de 5 =C3=A0 20 secondes r=C3=A9partis selon environ dev 10% , test 1=
0% , train 80% du nombre total de wave
les csv sont r=C3=A9partis en 3 colonnes dont les noms sont =C3=A0 respect=
er : "wav_filename", "wav_filesize", "transcript"
Pour importer l=E2=80=99ensemble des wav pour r=C3=A9aliser le mod=C3=A8= le - trouver les wav en francais (exemple vorforge voir lien bas de page)= p>
Pour installer deepspeech afin de construire le mod=C3=A8le, il faut se = rendre sur le github de deepspesch : https://github.co= m/mozilla/DeepSpeech (Attention ne pas prendre la branche master)
Pour information,TensorFlow : IA opensource d=C3=A9velopp=C3=A9 par Goog= le (reconnaissance Image, audio, texte etc.) et Baidu : societe chinoise qu= i impl=C3=A9mente le concept de reconnaissance vocale DeepSpeech
Mozilla : ils ont cod=C3=A9 la transcription en utilisant tensorFlow et =
en suivant le concept de Baidu
Pour construire le mod=C3=A8le on lance la commande :
$ ./DeepSpeech.py
--train_files &=
nbsp; # chemin du fichier train.csv
--dev_files &nb=
sp; # chemin du fichier dev.csv
--test_files &n=
bsp; # chemin du fichier test.csv
--export_dir &n=
bsp; # chemin du dossier o=C3=B9 sera export=C3=A9 =
le fichier output_graph.pb
--validation_step 1
--train_batch_size #=
nombre de fichiers wave propag=C3=A9s =C3=A0 travers le r=C3=A9seau dans l=
a cat=C3=A9gorie train , typiquement en **2 , souvent 16, 32, 64, 128 ou 25=
6 (nb : plus le batch size est grand, plus la m=C3=A9moire utilis=C3=A9e se=
ra importante)
--dev_batch_size &nbs=
p; # nombre de fichiers wave propag=C3=A9s =C3=A0 travers le r=C3=A9s=
eau dans la cat=C3=A9gorie dev
--test_batch_size &nb=
sp; # nombre de fichiers wave propag=C3=A9s =C3=A0 travers le r=C3=A9seau d=
ans la cat=C3=A9gorie test
--checkpoint_step 1
-=E2=80=94n_hidden &n=
bsp; # =C2=AB nombre =C2=BB de r=C3=A9seaux de =
neurones , de pr=C3=A9f=C3=A9rence en **2 , souvent 512, 1024, 2048 , doit =
=C3=AAtre le m=C3=AAme =C3=A0 chaque entrainement
--learning_rate # taux d=
=E2=80=99apprentissage , g=C3=A9n=C3=A9ralement en puissance de 10 n=C3=A9g=
ative , souvent compris entre 1e-1 et 1e-6 (nb : =C3=A0 =C3=A9crire en form=
e d=C3=A9cimale : ex : 0.001)
--dropout_rate =
# pourcentage de neurones tu=C3=A9es al=C3=A9atoirement =
entre chaque epoch , de la forme 0.xxx; souvent max 12e-2
=E2=80=94-epoch  =
; # OPTIONNEL , positif : nombre d=E2=
=80=99epoch apr=C3=A8s lequel stopper si il n=E2=80=99y a pas eu d=E2=80=99=
arr=C3=AAt anticip=C3=A9 , n=C3=A9gatif : nombre d=E2=80=99epoc=
h =C3=A0 r=C3=A9aliser en plus apr=C3=A8s un arr=C3=AAt anticip=C3=A9
--checkpoint_dir &nbs=
p; # dossier pour les checkpoints
Pour obtenir le output_graph.pbmm :
$ cd =E2=80=99export_dir=E2=80=99
$ wget https://index.taskcluster.net/=
v1/task/project.deepspeech.tensorflow.pip.master.cpu/artifacts/public/conve=
rt_graphdef_memmapped_format
$ chmod +x convert_graphdef_memmapped_format
$ convert_graphdef_memmapped_format --in_graph=3Doutput_graph.pb --out_gra=
ph=3Doutput_graph.pbmm
Si 4 epoch successives avec un taux de loss identiques, alors early stop=
(arret anticip=C3=A9)
par d=C3=A9faut, le param=C3=A9tre epoch est mis =C3=A0 80
Pour r=C3=A9aliser tous les cycles, 2 heures par =C3=A9poch avec un n_hi= dden =C3=A0 2048. il faut conmpter une dizaine de cycle
Pour am=C3=A9liorer le model, on peut lancer plusieurs fois la commande =
deepseech.py qui pointe vers le m=C3=AAme output graph mais avec les source=
s diff=C3=A9rnetes.
Attention, il ne faut pas changer le n_hidden ni l=E2=80=99alphabet <=
br>
Il faut jouer avec le learning rate et le dropout_rate pour chaque bdd uti=
lis=C3=A9e pour am=C3=A9liorer le rendu
On peut cr=C3=A9er notre propre source de donn=C3=A9e avec des vid=C3=A9os=
sous-titr=C3=A9es (voir script de valentin pour le site caito.de)
sauvegarder les checkpoint et le graph avant de relancer la construction= du mod=C3=A8le
une fois le mod=C3=A8le cr=C3=A9er il faut le transformer en pbm (pour m= ise en memoire) voir doc
Dans un fichier txt (ici vocabulary.txt) , peupler les lignes avec des p=
hrases ou des mots (1 phrase ou 1 mot par ligne de pr=C3=A9f=C3=A9rence)
NB : tous les caract=C3=A8res dans ce fichier doivent =C3=AAtre des caract=
=C3=A8res pr=C3=A9sents dans le fichier alphabet.txt
compiler le binaire kenlm en suivant le site : https://kheafie=
ld.com/code/kenlm/
en supposant =C3=AAtre =C3=A0 la racine du dossier kenlm apr=C3=A8s compil=
ation :
$ /bin/bin/./lmplz --text vocabulary.txt --arpa words.arpa --o K
en rempla=C3=A7ant K par un nombre entre 2 et 6 environs , K repr=C3=A9sen=
te le nombre de mots dans les sections de phrases qui vont =C3=AAtre r=C3=
=A9alis=C3=A9s durant le processus,
c=E2=80=99est le n-gram, plus la valeur du n-gram sera grande et plus le l=
m.binary sera bon, mais c=E2=80=99est un processus tr=C3=A8s consommateur d=
e m=C3=A9moire RAM et ROM
une valeur entre 3 et 5 est pr=C3=A9f=C3=A9rable selon la longueur des phr=
ases pr=C3=A9sentes dans le fichier vocabulary.txt
NB : le fichier interm=C3=A9diaire words.arpa peut avoir une taille cons=
=C3=A9quente selon le vocabulary.txt de base (plusieurs Go)
Une fois le words.arpa cr=C3=A9=C3=A9 :
$ /bin/bin/./build_binary -T -s =E2=80=99path_to_words.arpa=E2=80=
=99 =E2=80=99path_to_export_lm.binary=E2=80=99
suivre les instructions =C3=A0 :
https://github.com/m=
ozilla/DeepSpeech/blob/master/native_client/README.md#compile-libdeepspeech=
so--generate_trie
pour g=C3=A9n=C3=A9rer le fichier generate_trie
lorsque generate_trie est build :
$ chmod +x generate_trie
$ ./generate_trie =E2=80=99path_to_alphabet.txt=E2=80=99 =E2=80=99path_to_=
lm.binary=E2=80=99 =E2=80=99path_to_export_trie=E2=80=99
COMMON VOICE :
https://voice.mozilla.org/fr/datasets=
a>
Telecharger et extraire l=E2=80=99archive puis executer=
l=E2=80=99importer bin/import_cv2.py du depot deepspeech
VOXFORGE :
http://www.repository.voxforge1.org/downloads/fr/Trunk/Audio/Main/16kHz_1=
6bit/
Dans bin/import_voxforge.py remplacer l=E2=80=99url lig=
ne 123 par celle ci-dessus et executer le fichier
CAITO :
https://ww=
w.caito.de/2019/01/the-m-ailabs-speech-dataset/#more-242
Telecharger et extraire l=E2=80=99archive, puis execute=
r le fichier aux_db_fr.py avec 2 param=C3=A8tres, le chemin du dossier d=E2=
=80=99extraction et un nom de genre (female, male ou mix)
Attention, ce fichier est brut, =C3=A0 utiliser avec pr=
=C3=A9caution.
NB : pour le dossier Mix il faut lui cr=C3=A9er un doss=
ier parent de mani=C3=A8re a avoir l=E2=80=99arborescence ./mix/mix/=E2=80=
=A6 au lieu de ./mix/=E2=80=A6
LINGUA LIBRE :
executer la commande en supposant =C3=AAtre dans le dos=
sier racine du projet deepspeech
$ ./bin/import_lingua_libre =E2=80=99path_to_download=
=E2=80=99 --qId 21 =E2=80=94-iso639-3 fra -=E2=80=94english-name French =E2=
=80=94-normalize (optionnel)
https://discourse.mozilla.org/c/deep-speech
https://discourse.mozilla.org/t/tutorial-how-i-trained-a-specific-=
french-model-to-control-my-robot/22830
https://discourse.mozilla.org/t/un-premier-modele-francais/41=
100
https://github.com/Common-=
Voice/commonvoice-fr/releases
https://githu=
b.com/Common-Voice/commonvoice-fr
https://git=
hub.com/mozilla/voice-corpus-tool