Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Comparaison Common Voice v3 FR -- Duplicatas #102

Closed
lissyx opened this issue Feb 7, 2020 · 12 comments
Closed

Comparaison Common Voice v3 FR -- Duplicatas #102

lissyx opened this issue Feb 7, 2020 · 12 comments
Assignees
Labels
dsfr DeepSpeech enhancement New feature or request

Comments

@lissyx
Copy link
Collaborator

lissyx commented Feb 7, 2020

Comparer les WER sur l'entraînement entre :

  • Common Voice v3 FR """de base""", i.e., pas de doublons autorisés
  • Common Voice v3 FR avec 2/4 doublons,
  • Common Voice v3 FR avec 8 doublons

On veut vérifier :

  • quelle quantité de données supplémentaires on récupère à chaque étape
  • de combien ça permet d'améliorer le modèle, en partant du postulat qu'à quantité égale, s'il y a des doublons, ça dégrade
@lissyx lissyx added enhancement New feature or request dsfr DeepSpeech labels Feb 7, 2020
@lissyx lissyx self-assigned this Feb 7, 2020
@lissyx lissyx mentioned this issue Feb 7, 2020
10 tasks
@lissyx
Copy link
Collaborator Author

lissyx commented Feb 7, 2020

Avec 8 doublons, on importe ~291h de Common Voice FR.

@lissyx
Copy link
Collaborator Author

lissyx commented Feb 11, 2020

Sans doublons et avec doublons, le WER sur tous les jeux de données reste plus ou moins stable. Par contre, en comparaison avec le modèle 0.3.4, sans doublon, des utilisateurs rapportent une grosse amélioration de la qualité. Pas encore de retour avec les doublons.

@lissyx
Copy link
Collaborator Author

lissyx commented Feb 13, 2020

Avec 8 doublons, le WER se déteriore assez (9% -> 18% sur M-AILABS). En attente de retours sur l'impact "en vrai".

@lissyx
Copy link
Collaborator Author

lissyx commented Feb 13, 2020

Avec 8 doublons, on importe ~291h de Common Voice FR.

Avec 4 doublons, on importe ~282h

@lissyx
Copy link
Collaborator Author

lissyx commented Feb 14, 2020

Avec 8 doublons, on importe ~291h de Common Voice FR.

Avec 4 doublons, on importe ~282h

Et on a ~19.2% WER sur M-AILABS.

@lissyx
Copy link
Collaborator Author

lissyx commented Feb 14, 2020

En attente de retours sur l'impact "en vrai".

Retours des testeurs : "c'est moins bien"

@lissyx
Copy link
Collaborator Author

lissyx commented Feb 14, 2020

Avec 8 doublons, on importe ~291h de Common Voice FR.

Avec 4 doublons, on importe ~282h

Avec 2 doublons, on importe ~232h

@lissyx
Copy link
Collaborator Author

lissyx commented Feb 20, 2020

Avec 8 doublons, on importe ~291h de Common Voice FR.

Avec 4 doublons, on importe ~282h

Et on a ~19.2% WER sur M-AILABS.

C'est faux, j'ai fait une erreur. On est dans des taux très proches quelque soient les taux de duplications, mais toujours un peu d'avance pour les cas où on a le plus de données.

C'est confirmé par des essais sur des clips audio autres.

Par contre il reste des bugs à l'export qui font que c'est

  • pas les bonnes référence pour le fichier checkpoint et ça devrait être best_dev_checkpoint
  • pas le modèle best_dev qui est utilisé pour l'export mais train, et donc de moins bonne qualité

@LucSalommez
Copy link

Bonjour lissyx,

Je ne suis en ce moment Common Voice et Deep Speech que de loin mais en lisant cette issue je me suis fais une remarque :

Lorsque l’on teste avec 8 doublons on obtient une erreur significativement plus élevée.

Je pense que l’origine du problème vient du fait que le modèle tend à overfit les phrases en doublons pour limiter l’erreur d’entrainement, au détriment de l’efficacité du modèle sur des phrases qu’il n’a jamais vu.

De ce que j’ai compris, jusqu’à aujourd’hui l’approche choisie pour DeepSpeech est de se dire que pour éviter cet overfitting, on va simplement éliminer les doublons.

Cependant je trouve cela dommage d’ignorer des données qui comportent de l’information précieuse.

C’est surement cette même raison qui t’incite à faire ces tests.

Ce que je me demande c’est : est-ce qu’il ne serait pas possible de pondérer l’erreur de chaque phrase par son nombre d’occurences ?

Ainsi, il n’y aurait pas plus d’overfitting que sans doublon, tout en profitant de l’information de chaque sample dans notre apprentissage.

Pour illustrer ce que je veux dire, admettons qu’il y ait trois phrases A, B et C telles que A1, A2, A3 soient des enregistrements de la phrase A et B1 et C1 de même pour respectivement B et C.

a, b, c sont les erreurs associées aux enregistrements.

L’erreur calculée pour une stratégie sans doublons serait du type :
(a1 + b1 + c1) / 3

Chaque phrase n’est présente qu’une fois et chaque sample a un poids de 1 donc pas d’overfitting mais perte d’information.

Pour une stratégie avec tous les doublons et un poids de 1 :
(a1 + a2 + a3 + b1 + c1) / 5

On a plus d’information mais on voit ici que A pèse plus lourd que B et C réunis.

Ma proposition :
((a1 + a2 + a3) / 3 + b1 + c1) / 3

Ainsi, la phrase A pèse toujours pour un tier du total, mais le modèle a une incentive à être performant sur A1, A2 et A3 et non seulement A1.
On profite ainsi que l'information présente dans chaque sample.

J’ai du mal à savoir à quel point cette idée peut être difficile à intégrer à DeepSpeech mais je la trouvais intéressante.
Qu'en penses-tu ?

J’ai fais comme j’ai pu pour expliquer mon idée mais si c’est pas clair n'hésite pas.

À bientôt !

@lissyx
Copy link
Collaborator Author

lissyx commented Feb 21, 2020

Bonjour lissyx,

Je ne suis en ce moment Common Voice et Deep Speech que de loin mais en lisant cette issue je me suis fais une remarque :

Lorsque l’on teste avec 8 doublons on obtient une erreur significativement plus élevée.

Je pense que l’origine du problème vient du fait que le modèle tend à overfit les phrases en doublons pour limiter l’erreur d’entrainement, au détriment de l’efficacité du modèle sur des phrases qu’il n’a jamais vu.

De ce que j’ai compris, jusqu’à aujourd’hui l’approche choisie pour DeepSpeech est de se dire que pour éviter cet overfitting, on va simplement éliminer les doublons.

Cependant je trouve cela dommage d’ignorer des données qui comportent de l’information précieuse.

C’est surement cette même raison qui t’incite à faire ces tests.

Ce que je me demande c’est : est-ce qu’il ne serait pas possible de pondérer l’erreur de chaque phrase par son nombre d’occurences ?

Ainsi, il n’y aurait pas plus d’overfitting que sans doublon, tout en profitant de l’information de chaque sample dans notre apprentissage.

Pour illustrer ce que je veux dire, admettons qu’il y ait trois phrases A, B et C telles que A1, A2, A3 soient des enregistrements de la phrase A et B1 et C1 de même pour respectivement B et C.

a, b, c sont les erreurs associées aux enregistrements.

L’erreur calculée pour une stratégie sans doublons serait du type :
(a1 + b1 + c1) / 3

Chaque phrase n’est présente qu’une fois et chaque sample a un poids de 1 donc pas d’overfitting mais perte d’information.

Pour une stratégie avec tous les doublons et un poids de 1 :
(a1 + a2 + a3 + b1 + c1) / 5

On a plus d’information mais on voit ici que A pèse plus lourd que B et C réunis.

Ma proposition :
((a1 + a2 + a3) / 3 + b1 + c1) / 3

Ainsi, la phrase A pèse toujours pour un tier du total, mais le modèle a une incentive à être performant sur A1, A2 et A3 et non seulement A1.
On profite ainsi que l'information présente dans chaque sample.

J’ai du mal à savoir à quel point cette idée peut être difficile à intégrer à DeepSpeech mais je la trouvais intéressante.
Qu'en penses-tu ?

J’ai fais comme j’ai pu pour expliquer mon idée mais si c’est pas clair n'hésite pas.

À bientôt !

Jusqu'à présent, par défaut, on interdit les doublons parce qu'on pense que ça va overfit. Je suis en train de tester ce que ça donne, en vrai, dans le cas du français (pas forcément généralisable).

Et pour le moment, les résultats que j'ai, justement, tendent à indiquer que ça overfit pas :)

@lissyx
Copy link
Collaborator Author

lissyx commented Feb 23, 2020

J’ai du mal à savoir à quel point cette idée peut être difficile à intégrer à DeepSpeech mais je la trouvais intéressante.
Qu'en penses-tu ?

Je sais pas trop, je me demande si c'est pas plus compliqué que nécessaire, sauf si on a vraiment accès à un volume de données qui se justifie. Peut-être lancer l'idée sur Discourse?

@lissyx
Copy link
Collaborator Author

lissyx commented Feb 28, 2020

Bon, avec 8 j'ai toujours de meilleurs résultats, mais y'a aussi un comportement un peu étrange dans notre code d'entraînement qui s'arrête trop tôt:
loss

Résultat, quand on exporte avant steps =~ 66000, les résultats d'inférence sont un peu moins bons. Faut qu'on regarde ça côté DeepSpeech upstream.

@lissyx lissyx closed this as completed Feb 28, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dsfr DeepSpeech enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants