TheophileBlard / french-sentiment-analysis-with-bert

How good is BERT ? Comparing BERT to other state-of-the-art approaches on a French sentiment analysis dataset
MIT License
146 stars 35 forks source link

Tester le modèle de Birt entrainé chez moi #8

Closed hodhoda closed 3 years ago

hodhoda commented 3 years ago

Bonjour Théophile,

J'espère que vous allez bien,

J'ai une question svp, concernant le modèle Birt pour l'analyse de sentiment qui est sur la page github: https://github.com/TheophileBlard/french-sentiment-analysis-with-bert J'ai terminé l'entraînement du modèle et j'ai obtenu mon modéle tf_model.h5, que je veux tester son efficacité sur mon pc, par contre je savais pas comment faire, pouvez vous svp m'envoyer le code afin de tester des phrases et des expressions spécifiques à mon étude ? Je vous en remercie d'avance pour votre aide et votre soutien.

Cordialement.

TheophileBlard commented 3 years ago

Bonjour @hodhoda,

Si vous avez entrainé votre modèle à partir de TFCamembertForSequenceClassification, vous feriez mieux d'exporter votre modèle avec la méthode save_pretrained. Ce notebook montre comment tester individuellement des phrases sur le modèle tf-allocine, et devrait fonctionner pour tout type de modèles basé sur TFCamembertForSequenceClassification.

Vous ne l'avez pas précisé, mais je devine que vous avez obtenu votre fichier .h5 avec la méthode save_weights de Keras (la méthode save ne fonctionnant pas pour TFCamembertForSequenceClassification). Dans ce cas, le code suivant devrait fonctionner:

from transformers import CamembertTokenizer, TFCamembertForSequenceClassification
import numpy as np

tokenizer = CamembertTokenizer.from_pretrained("camembert-base")
model = TFCamembertForSequenceClassification.from_pretrained("jplu/tf-camembert-base")
model.load_weights("tf_model.h5")

EXAMPLES = ["J'aime bien le camembert...", "Je n'aime pas le parmesan !"]
X = tokenizer(EXAMPLES, truncation=True, padding="max_length", return_tensors="tf")
logits = model.predict(dict(X))["logits"]
preds = np.argmax(logits, axis=1)

print(preds[0], preds[1]) # outputs: 1, 0
hodhoda commented 3 years ago

Bonjour Théophile, Je vous remercie infiniment pour votre réponse, ça fonctionne parfaitement avec le modèle entrainé de camembert_weights.hdf5 pourtant le résultat d'analyse n'est pas trop performant pour cela j'ai testé encore avec le modèle tf_model.h5 et ça marche pas, il m'affiche l'erreur suivant: Layer #0 (named "roberta" in the current model) was found to correspond to layer roberta in the save file. However the new layer roberta expects 197 weights, but the saved weights have 199 elements.

Est-ce que cette erreur a une relation avec l'entrainement? avez vous une idée qui peut être utile pour remédier à ce problème?

hodhoda commented 3 years ago

Bonjour Théophile,

Désolé pour le dérangement encore une fois, je voulais juste vous demander est-ce que c'est possible de m'envoyer le modèle que vous avez entraîné (camembert_weights.hdf5) car le mienne n'était pas assez performant je pense que c'était à cause que j'utilise seulement mon ordinateur fixe core i7 qui n'a pas de GPU et je n'est pas de serveur chez moi, et ainsi j'ai seulement pu terminé les 7 premiers epochs de l'entraînement et ça été arrêté automatiquement, j'ai essayé de le relancer encore et encore pas mal de fois mais le résultat c'était le même malheureusement.

J'attends votre retour et je vous remercie encore une fois pour votre aide.

Cordialement.

Le mer. 26 mai 2021 à 22:22, Théophile Blard @.***> a écrit :

Bonjour @hodhoda https://github.com/hodhoda,

Si vous avez entrainé votre modèle à partir de TFCamembertForSequenceClassification, vous feriez mieux d'exporter votre modèle avec la méthode save_pretrained. Ce notebook https://colab.research.google.com/github/TheophileBlard/french-sentiment-analysis-with-bert/blob/master/colab/french_sentiment_analysis_with_bert.ipynb montre comment tester individuellement des phrases sur le modèle tf-allocine, et devrait fonctionner pour tout type de modèles basé sur TFCamembertForSequenceClassification.

Vous ne l'avez pas précisé, mais je devine que vous avez obtenu votre fichier .h5 avec la méthode save_weights de Keras (la méthode save ne fonctionnant pas pour TFCamembertForSequenceClassification). Dans ce cas, le code suivant devrait fonctionner:

from transformers import CamembertTokenizer, TFCamembertForSequenceClassification import numpy as np

tokenizer = CamembertTokenizer.from_pretrained("camembert-base") model = TFCamembertForSequenceClassification.from_pretrained("jplu/tf-camembert-base") model.load_weights("tf_model.h5")

EXAMPLES = ["J'aime bien le camembert...", "Je n'aime pas le parmesan !"] X = tokenizer(EXAMPLES, truncation=True, padding="max_length", return_tensors="tf") logits = model.predict(dict(X))["logits"] preds = np.argmax(logits, axis=1)

print(preds[0], preds[1]) # outputs: 1, 0

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/TheophileBlard/french-sentiment-analysis-with-bert/issues/8#issuecomment-849128258, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJMMUPEVNEFVHIKQCATJP6TTPVRCZANCNFSM45PQ6V2Q .

-- Abouzid Houda

TheophileBlard commented 3 years ago

Bonjour, quel code avez-vous utilisé pour générer le fichier tf_model.h5 ? Si vous manquez de puissance de calcul, vous pouvez entraîner votre modèle sur un subset du jeu de données total (on peut obtenir >95% d'accuracy sur le test set avec seulement 1000 examples).

Sinon, comme c'est documenté dans le README, vous pouvez charger mon modèle pré-entrainé tf-allociné avec le code suivant:

from transformers import TFAutoModelForSequenceClassification
model = TFAutoModelForSequenceClassification.from_pretrained("tblard/tf-allocine")