juba / rainette

R implementation of the Reinert text clustering method
https://juba.github.io/rainette/
53 stars 7 forks source link

Exploration du lexique avec rainette_explor() — mots vides et mots tronqués #13

Closed gabrielparriaux closed 2 years ago

gabrielparriaux commented 2 years ago

Bonjour,

Lorsque j’affiche le résultat d’une classification avec la fonction rainette_explor(), certains mots apparaissent comme vides, d’autres sont tronqués à la fin (cf. capture).

J’ai cherché à éliminer les mots vides en supprimant des classiques "\n" ou les espaces simples, doubles ou triples, mais visiblement cela n’a pas suffi car d’autres mots apparaissant comme vides sont toujours là.

Quel serait le moyen de traquer ces mots vides et de s’en débarrasser, à votre avis?

Les mots apparaissant comme tronqués dans la liste ne sont pas forcément des mots très longs (d’autres mots plus longs sont affichés en entier dans la même classe). Lorsque je les recherche dans les segments de la classe en question, ces mots sont pourtant bien correctement orthographiés et ne sont pas tronqués dans le corpus lui-même. C’est donc à l’affichage des résultats qu’ils apparaissent comme tronqués.

Avez-vous une idée de quoi peut provenir ce problème?

Merci pour tout l’excellent travail fait avec Rainette!

Gabriel

rainette_explor
juba commented 2 years ago

Pour les mots vides qui apparaissent vous pouvez essayer d'utiliser une expression régulière pour supprimer toutes les séquences d'espaces.

tokens_remove(tok, "^\\s+$", valuetype = "regex")

Vous pouvez aussi essayer de supprimer les mots vides éventuels.

tokens_remove(tok, "")

Si jamais vous utilisez le padding au moment de la tokenisation ou du pré-traitement des textes vous pouvez aussi essayer de rajouter remove_padding = TRUE à votre appel à dfm().

Pour les mots tronqués je ne vois pas trop d'où peut venir le problème, a priori il n'y a pas de raison que rainette modifie les termes à un moment ou un autre.

Si vous faites kwic(tokens, "jamai") vous ne récupérez aucun résultat ?

gabrielparriaux commented 2 years ago

Merci beaucoup pour votre aide!

La regex semble très bien fonctionner et une bonne partie des mots apparaissant comme vides ont disparu.

A priori, je n’utilise pas le padding (même si je ne suis pas sûr d’avoir très bien compris à quoi il sert).

Pour les mots tronqués, ça semblait venir d’erreurs à la lemmatisation. J’avais des tokens «jamai» une fois lemmatisé alors que je n’avais pas ces termes dans mon corpus de départ.

Mais ça semble avoir disparu en faisant la lemmatisation avec le modèle pour le français que vous m’avez recommandé par ailleurs dans un message, avec la fonction:

spacy_initialize(model = "fr_dep_news_trf")

La lemmatisation semble par contre prendre beaucoup plus de temps avec ce modèle qu’avec le modèle français standard de spaCyr. Pour mon corpus de 4779 documents (segments de 40 mots), ma machine met environ 8 minutes pour effectuer ceci:

data_table_lemmatisee <- spacy_parse(corpus_segmente, pos = TRUE, tag = FALSE, lemma = TRUE, entity = TRUE, dependency = TRUE, nounphrase = FALSE, multithread = TRUE)

alors qu’avec le modèle par défaut, cela prenait moins d’une minute.

Est-ce que vous avez remarqué la même chose?

Merci encore pour votre aide précieuse!

juba commented 2 years ago

Oui c'est normal que la lemmatisation soit plus longue, les modèles trf de spaCy sont des modèles de type transformers (en l'occurrence là c'est le modèle CamemBERT si je ne me trompe pas), beaucoup plus gros que les modèles de base, mais qui permettent d'améliorer un peu la précision normalement.