Actions

Projets

« Apprendre en Cuisinant » : différence entre les versions

De GBLL, TAL, ALAO, etc.

Lmongin (discussion | contributions)
mAucun résumé des modifications
Lmongin (discussion | contributions)
Tout refait
Ligne 2 : Ligne 2 :
[[Utilisateur:Sylvain Coulange/M2 IdL — TAL & ALAO/2020-2021|< M2 IdL — TAL & ALAO/2020-2021]]
[[Utilisateur:Sylvain Coulange/M2 IdL — TAL & ALAO/2020-2021|< M2 IdL — TAL & ALAO/2020-2021]]


== Rapport : ==
Projet réalisé par Sanda HACHANA et Louis MONGIN


==== Presentation globale : ====
== Introduction ==
Creer une application pour les fans de cuisine : apprendre 5 mots culinaires par jour tout en decouvrant des nouvelles recettes<br>


Notre application sera codee en java et en python.
=== I. Problématique ===


==== De quel type d'appli est-il question ? ====
Selon la langue de l’apprenant, celui-ci aura des difficultés à prononcer correctement des sons français éloignés et/ou inexistants dans sa langue maternelle. De plus, il arrive souvent qu’un locuteur confonde deux phonèmes.
...
Par exemple, les phonèmes /y/ et /u/ sont souvent confondus par les locuteurs anglophones car ils sont très proches phonétiquement. Il en est de même pour les phonèmes /œ/ et/ø/.
Les voyelles nasales sont également souvent difficiles à prononcer.


==== Pour quels besoins ? ====  
=== II. Notre proposition ===
Apprendre des nouveaux mots dans des nouvelles langues (francais et anglais) tout en cuisinant : notre appli permet donc d'apprendre a cuisiner en ameliorant son vocabulaire ainsi que sa prononciation dans une ou plusieurs langues.<br>


Decouvrir des recettes traditionnelles typiques francaises / anglaises.
Notre application propose à l’utilisateur de s'entraîner à prononcer les sons qui lui posent des problèmes tout en lui faisant un retour sur sa prononciation et de quelle manière le mot doit être prononcé.


==== Quels publics ?====
=== III. Présentation du projet ===
Pour des apprennants anglais et francais. Il serait mieux d'avoir un niveau A1 au moins ou quelques bases pour pouvoir mieux comprendre les recettes et reutiliser ces mots.<br>


Tout le monde mais plutot des personnes qui aiment cuisiner


==== Quelles modalités ? ====
==== 1. Besoins ====
...


==== Quels apports potentiels du TAL ? ====
Apprendre des nouveaux mots en français tout en cuisinant : notre appli permet donc d'apprendre à cuisiner en améliorant son vocabulaire ainsi que sa prononciation dans une langues.
Apprendre des mots selon leur categorie grammaticale<br>
<br>
==== 2. Public ====
Pour des apprenants qui veulent apprendre le français. Il serait mieux d'avoir un niveau A1 au moins ou quelques bases pour pouvoir mieux comprendre les recettes et réutiliser ces mots. Ce serait également mieux d'avoir des connaissances en phonétique, savoir lire l'api.
L'application s'adresse également tout particulièrement aux personnes qui aiment cuisiner puisque de cette manière, on peut apprendre tout en cuisinant.
<br>


Creer un systeme pour verifier la prononciation des phonemes : script praat en python
==== 3. Objectifs ====
Créer une application pour les fans de cuisine : apprendre 5 mots culinaires par jour tout en découvrant des nouvelles recettes
Avoir un corpus de recette dynamique, une recette différente à chaque utilisation
Apprendre des mots selon leur catégorie grammaticale
Créer un système pour vérifier la prononciation des phonèmes : script praat en python
<br>


==== Problématique ? ====
== Réflexions ==
C'est quoi notre problematique ??


==== Une présentation de votre travail et de sa place dans le projet global  ====
=== I. EasyAlign et les phonèmes en option ===
...


==== Présentation de notre solution ====
== Développement ==
*'''java''' = extraire 5 mots de types différents (adj, vb, nom ..., avec l'utilisation du POS tagging de CoreNLP) dans un corpus de recettes.<br>
Dans notre corpus de recettes, on veut extraire des mots que l'on va classer en fonction de leur catégorie grammaticale, pour ensuite pouvoir choisir 5 mots de catégorie différente (par jour)<br>


*'''python''' = vérifier avec des scripts Praat la prononciation de l'apprenant. Webscraping pour récupérer une recette récente aléatoire<br>
=== I. Contenu des scripts ===
Les scripts Praat vont comparer la production orale d'un mot de l'utilisateur avec une production déjà existante<br>
Le programme sera capable de dire quel son a été bien ou pas prononcé en le comparant avec un mot de notre lexique phonétisé : <br>
Avec EasyAlign on va essayer de faire des alignements automatiques de la transcription des mots issus de nos recettes tout en récupérant leurs transcription phonétique qui sera dans notre lexique phonétisé<br>


*l'appli va directement récupérer une recette récente au hasard sur un site de recettes, base de recettes est dynamique, elle grandit avec le site de recettes.
Le manuel d'utilisation se trouve dans le README.


==== Prise de recul par rapport à notre solution (prolongements possibles, évaluation possible, distance entre l'objectif et la réalisation...) ====
==== 1. Python ====
''réfléchir à un moyen d'évaluer cet alignement. Un moyen pourrait être de rendre optionnel certains phonèmes dans la transcription et voir ce qui a été aligné sur la production de l'apprenant. Ça vous permettrait de tout faire automatiquement sur n'importe quel mot en entrée partir du moment où il est dans le dico phonétisé).''
 
Nous avons utilisé Python pour plusieurs tâches de notre projet.
 
La première étape consiste à la création d’un script qui permet de faire du web scraping afin de récupérer une recette aléatoirement sur le site marmiton https://www.marmiton.org/.
Pour cela nous avons utilisé la librairie BeautifulSoup. Ce code se trouve dans le script getrecipe.py.
Le site de Marmiton propose une “recette au hasard” dans le menu de la page, notre script récupère donc tout d’abord le lien de cette recette.
 
Ensuite, on récupère les informations de la recette qui nous intéresse, le texte avec les indications ainsi que le titre et les ingrédients. Alors que nous afficherons toutes ces informations à l’utilisateur qui pourra reproduire la recette, nous ne récupérons que le texte pour le choix des mots, pour éviter les erreurs de POS tagging.
 
Contenu du fichier texte pour CoreNLP Contenu de l’invite de commande
Screenshot
[[Fichier:Recette.png|1000px|vignette|centré]]
 
 
Ensuite, nous avons créé un deuxième script qui permet d'annoncer à l’utilisateur quel mot il doit prononcer et d’enregistrer sa prononciation dans un format audio WAV. On retrouve cette partie dans le script record.py.
 
Dans un second temps, nous nous sommes occupés de la partie PRAAT. Nous avons créé deux scripts PRAAT (script1.praat et script2.praat) qui effectuent les parties 1 (macro-segmentation), 2 (phonétisation) et 3 (phone-segmentation) de EASYALIGN. Dans le premier script on retrouve les deux premières parties de EASYALIGN. Ensuite, il nous faut modifier le textgrid généré par script1.praat afin de modifier la transcription phonétique et d’ajouter les phonèmes options (indiqués par une *). Le script2.praat utilise ce textgrid modifié pour faire l’alignement des phonèmes optionnels entre la prononciation de l’utilisateur et la transcription du mot proposée par PRAAT. Pour lancer ces scripts PRAAT, nous avons écrit des scripts python praatrun1.py (qui lance le premier script PRAAT et modifie le textgrid) et praatrun2.py qui lance le deuxième script PRAAT.
 
 
Enfin, nous avons créé le script phon.py qui regroupe plusieurs étapes de notre projet. La première est la récupération des phonèmes du mot en SAMPA à partir du textgrid créé grâce aux étapes précédentes sur PRAAT. La deuxième étape du script fait la conversion de SAMPA à API à partir du fichier TSV que nous avons créé. La troisième étape,  permet de comparer la prononciation de l'apprenant avec celle du lexique phonétisé. C’est cette dernière étape qui annonce le résultat à l’utilisateur, en lui disant si oui ou non sa prononciation est correcte.
 
==== 2. Java ====
 
Nous avons utilisé Java pour choisir aléatoirement quatre mots dans notre recette. C’est avec le POS-tagging de CORENLP que nous avons pu réaliser cette tâche. Dans notre code JAVA, on crée un fichier pour chaque mot (un fichier verbe, un fichier nom, un fichier adjectif et un fichier adverbe) contenant chacun un seul mot de la même catégorie.
 
 
=== II. Difficultés ===
 
 
==== 1. CoreNLP ====
 
Nous avons rencontré plusieurs difficultés pour la partie JAVA. Premièrement, nous avons remarqué que le POS-tagging de CORENLP que nous avons utilisé n’est pas tout à fait exact. En effet, la catégorie grammaticale des mots n’est pas fiable.
CAPTURE DECRAN
 
Ensuite, nous avons eu des soucis avec ECLIPSE et nous n’avons alors pas pu continuer notre travail.
 
==== 2. Encodage ====
 
Les textgrids qui utilisent des mots avec accents “é, è, ê, …” se sauvegardent en utf-16 et non pas en UTF-8.
 
CAPTURE
 
Donc création d’une fonction qui vérifie l’encodage du fichier.
 
==== 3. Lier Java et Python ====
 
L’affichage de l’application étant majoritairement effectué en python, nous avons décidé de lier java et python à partir de python ou d’un script bash. Nous avons eu des difficultés pour lancer Corenlp sans utiliser Eclipse (qui déjà nous posait des problèmes).
Comment lier les dependencies avec les scripts ?
 
 
==== 4. Windows vs Linux ====
Nous avons souhaité faire fonctionner l’application sur les systèmes d’exploitation Linux et Windows.
Problèmes de certaines librairies python qui ne fonctionnent pas avec Linux par exemple sounddevice, os.
Praat et easyalign qui ne sont pas disponibles sous linux. Possibilité de les utiliser et installer avec wine mais problèmes lorsque que l’on veut écrire appeler les scripts praat avec les chemins sur le ‘faux’ disque C:.
 
Pour remédier à ces problèmes, ayant tous les deux accès à Windows, nous avons décidé de nous concentrer en priorité à ce que l’application fonctionne sous cet OS.
 
== Evaluation ==
 
 
=== I. Problèmes ===
 
 
* erreurs dans le lexique qu’on a utilisé : les deux son o et (c à l’envers). Par exemple olive o ou c à l’envers.
* on a commencé à lier java et python mais prob pour lancer corenlp avec lignes de commandes
* Si on enregistre plusieurs phonèmes comme devant être noté en options alors easyalign n’arrive pas à bien fonctionner.
* Les nasales ne sont pas bien prises en compte dans easyalign
 
=== II. Améliorations ===
 
 
* Proposer à l’utilisateur des recettes typiques française, pour cela, détecter sur le site un tag “français” par exemple, ou utiliser un site/corpus différent et libre d’utilisation. Le but ultime serait d’utiliser notre propre site de recette avec des plats typiques revisités à la façon Sandouis.
* Automatiser le lien de Python avec Java pour ne pas avoir à demander à l’utilisateur de lui même lancer les scripts java
* Proposer à l’utilisateur d’indiquer au début quels phonèmes lui posent problème
 
 
== Liens ==
 
 
=== I. Bibliographie ===
 
 
Corpus de recettes :
Marmiton : https://www.marmiton.org/


==== Bibliographie ====
Sites de recettes<br>
Lexique phonétisé : https://gricad-gitlab.univ-grenoble-alpes.fr/pedagogies-multimodales/lexiques-phonetises
Lexique phonétisé : https://gricad-gitlab.univ-grenoble-alpes.fr/pedagogies-multimodales/lexiques-phonetises


==== Lien du projet ====
Praat :
https://github.com/Louielo/ApprendreEnCuisinant
EasyAlign :
Phonèmes en option : ''Remédiation phonétique et phonologique en FLE par une approche multimodale chez les apprenants japonophones'' - Sylvain Coulange
https://dumas.ccsd.cnrs.fr/dumas-01387387/document partie 7.1.2 (p98)
 
* Librairies Python :
BeautifulSoup : https://www.crummy.com/software/BeautifulSoup/bs4/doc/
 
* Librairie Java :
CoreNLP : https://stanfordnlp.github.io/CoreNLP/
 
 
=== II. Lien du projet ===
 
 
Lien GitHub du projet ApprendreEnCuisinant : https://github.com/Louielo/ApprendreEnCuisinant

Version du 30 décembre 2020 à 20:06

< M2 IdL — TAL & ALAO/2020-2021

Projet réalisé par Sanda HACHANA et Louis MONGIN

Introduction

I. Problématique

Selon la langue de l’apprenant, celui-ci aura des difficultés à prononcer correctement des sons français éloignés et/ou inexistants dans sa langue maternelle. De plus, il arrive souvent qu’un locuteur confonde deux phonèmes. Par exemple, les phonèmes /y/ et /u/ sont souvent confondus par les locuteurs anglophones car ils sont très proches phonétiquement. Il en est de même pour les phonèmes /œ/ et/ø/. Les voyelles nasales sont également souvent difficiles à prononcer.

II. Notre proposition

Notre application propose à l’utilisateur de s'entraîner à prononcer les sons qui lui posent des problèmes tout en lui faisant un retour sur sa prononciation et de quelle manière le mot doit être prononcé.

III. Présentation du projet

1. Besoins

Apprendre des nouveaux mots en français tout en cuisinant : notre appli permet donc d'apprendre à cuisiner en améliorant son vocabulaire ainsi que sa prononciation dans une langues.

2. Public

Pour des apprenants qui veulent apprendre le français. Il serait mieux d'avoir un niveau A1 au moins ou quelques bases pour pouvoir mieux comprendre les recettes et réutiliser ces mots. Ce serait également mieux d'avoir des connaissances en phonétique, savoir lire l'api. L'application s'adresse également tout particulièrement aux personnes qui aiment cuisiner puisque de cette manière, on peut apprendre tout en cuisinant.

3. Objectifs

Créer une application pour les fans de cuisine : apprendre 5 mots culinaires par jour tout en découvrant des nouvelles recettes Avoir un corpus de recette dynamique, une recette différente à chaque utilisation Apprendre des mots selon leur catégorie grammaticale Créer un système pour vérifier la prononciation des phonèmes : script praat en python

Réflexions

I. EasyAlign et les phonèmes en option

Développement

I. Contenu des scripts

Le manuel d'utilisation se trouve dans le README.

1. Python

Nous avons utilisé Python pour plusieurs tâches de notre projet.

La première étape consiste à la création d’un script qui permet de faire du web scraping afin de récupérer une recette aléatoirement sur le site marmiton https://www.marmiton.org/. Pour cela nous avons utilisé la librairie BeautifulSoup. Ce code se trouve dans le script getrecipe.py. Le site de Marmiton propose une “recette au hasard” dans le menu de la page, notre script récupère donc tout d’abord le lien de cette recette.

Ensuite, on récupère les informations de la recette qui nous intéresse, le texte avec les indications ainsi que le titre et les ingrédients. Alors que nous afficherons toutes ces informations à l’utilisateur qui pourra reproduire la recette, nous ne récupérons que le texte pour le choix des mots, pour éviter les erreurs de POS tagging.

Contenu du fichier texte pour CoreNLP Contenu de l’invite de commande Screenshot


Ensuite, nous avons créé un deuxième script qui permet d'annoncer à l’utilisateur quel mot il doit prononcer et d’enregistrer sa prononciation dans un format audio WAV. On retrouve cette partie dans le script record.py.

Dans un second temps, nous nous sommes occupés de la partie PRAAT. Nous avons créé deux scripts PRAAT (script1.praat et script2.praat) qui effectuent les parties 1 (macro-segmentation), 2 (phonétisation) et 3 (phone-segmentation) de EASYALIGN. Dans le premier script on retrouve les deux premières parties de EASYALIGN. Ensuite, il nous faut modifier le textgrid généré par script1.praat afin de modifier la transcription phonétique et d’ajouter les phonèmes options (indiqués par une *). Le script2.praat utilise ce textgrid modifié pour faire l’alignement des phonèmes optionnels entre la prononciation de l’utilisateur et la transcription du mot proposée par PRAAT. Pour lancer ces scripts PRAAT, nous avons écrit des scripts python praatrun1.py (qui lance le premier script PRAAT et modifie le textgrid) et praatrun2.py qui lance le deuxième script PRAAT.


Enfin, nous avons créé le script phon.py qui regroupe plusieurs étapes de notre projet. La première est la récupération des phonèmes du mot en SAMPA à partir du textgrid créé grâce aux étapes précédentes sur PRAAT. La deuxième étape du script fait la conversion de SAMPA à API à partir du fichier TSV que nous avons créé. La troisième étape, permet de comparer la prononciation de l'apprenant avec celle du lexique phonétisé. C’est cette dernière étape qui annonce le résultat à l’utilisateur, en lui disant si oui ou non sa prononciation est correcte.

2. Java

Nous avons utilisé Java pour choisir aléatoirement quatre mots dans notre recette. C’est avec le POS-tagging de CORENLP que nous avons pu réaliser cette tâche. Dans notre code JAVA, on crée un fichier pour chaque mot (un fichier verbe, un fichier nom, un fichier adjectif et un fichier adverbe) contenant chacun un seul mot de la même catégorie.


II. Difficultés

1. CoreNLP

Nous avons rencontré plusieurs difficultés pour la partie JAVA. Premièrement, nous avons remarqué que le POS-tagging de CORENLP que nous avons utilisé n’est pas tout à fait exact. En effet, la catégorie grammaticale des mots n’est pas fiable. CAPTURE DECRAN

Ensuite, nous avons eu des soucis avec ECLIPSE et nous n’avons alors pas pu continuer notre travail.

2. Encodage

Les textgrids qui utilisent des mots avec accents “é, è, ê, …” se sauvegardent en utf-16 et non pas en UTF-8.

CAPTURE

Donc création d’une fonction qui vérifie l’encodage du fichier.

3. Lier Java et Python

L’affichage de l’application étant majoritairement effectué en python, nous avons décidé de lier java et python à partir de python ou d’un script bash. Nous avons eu des difficultés pour lancer Corenlp sans utiliser Eclipse (qui déjà nous posait des problèmes). Comment lier les dependencies avec les scripts ?


4. Windows vs Linux

Nous avons souhaité faire fonctionner l’application sur les systèmes d’exploitation Linux et Windows. Problèmes de certaines librairies python qui ne fonctionnent pas avec Linux par exemple sounddevice, os. Praat et easyalign qui ne sont pas disponibles sous linux. Possibilité de les utiliser et installer avec wine mais problèmes lorsque que l’on veut écrire appeler les scripts praat avec les chemins sur le ‘faux’ disque C:.

Pour remédier à ces problèmes, ayant tous les deux accès à Windows, nous avons décidé de nous concentrer en priorité à ce que l’application fonctionne sous cet OS.

Evaluation

I. Problèmes

  • erreurs dans le lexique qu’on a utilisé : les deux son o et (c à l’envers). Par exemple olive o ou c à l’envers.
  • on a commencé à lier java et python mais prob pour lancer corenlp avec lignes de commandes
  • Si on enregistre plusieurs phonèmes comme devant être noté en options alors easyalign n’arrive pas à bien fonctionner.
  • Les nasales ne sont pas bien prises en compte dans easyalign

II. Améliorations

  • Proposer à l’utilisateur des recettes typiques française, pour cela, détecter sur le site un tag “français” par exemple, ou utiliser un site/corpus différent et libre d’utilisation. Le but ultime serait d’utiliser notre propre site de recette avec des plats typiques revisités à la façon Sandouis.
  • Automatiser le lien de Python avec Java pour ne pas avoir à demander à l’utilisateur de lui même lancer les scripts java
  • Proposer à l’utilisateur d’indiquer au début quels phonèmes lui posent problème


Liens

I. Bibliographie

Corpus de recettes : Marmiton : https://www.marmiton.org/

Lexique phonétisé : https://gricad-gitlab.univ-grenoble-alpes.fr/pedagogies-multimodales/lexiques-phonetises

Praat : EasyAlign : Phonèmes en option : Remédiation phonétique et phonologique en FLE par une approche multimodale chez les apprenants japonophones - Sylvain Coulange https://dumas.ccsd.cnrs.fr/dumas-01387387/document partie 7.1.2 (p98)

  • Librairies Python :

BeautifulSoup : https://www.crummy.com/software/BeautifulSoup/bs4/doc/

  • Librairie Java :

CoreNLP : https://stanfordnlp.github.io/CoreNLP/


II. Lien du projet

Lien GitHub du projet ApprendreEnCuisinant : https://github.com/Louielo/ApprendreEnCuisinant