Recategoriser automatiquement les sujets d'un forum importé en ciblant les mots-clés dans les titres

Bonjour,

J’importe un ancien et vaste forum dédié à la monoculture.

Les anciennes catégories n’étaient pas optimales, et beaucoup de sujets divers étaient mélangés.

Je suis donc en train de réorganiser les catégories.

Au départ, je pensais re-catégoriser manuellement les quelques centaines de sujets les plus récents, et laisser les anciens tels quels.
L’idée était de viser l’avenir plutôt que le passé. Peu importe si les anciens sujets sont mal catégorisés, l’essentiel est qu’ils restent accessibles.

Mais je me demande si une re-catégorisation automatique basée sur des mots-clés pourrait en fait faire du bon travail.

Actuellement, la grande majorité de nos sujets — plus de la moitié au total ! — se trouvent dans une seule catégorie (:scream:).

Je pourrais cibler dans les titres des mots-clés comme « apprendre », « apprentissage », « entraîner », « entraînement », « posture », etc., et placer tous ces sujets dans la catégorie #riding-advice (conseils de pratique).
De même, des termes comme « cadre », « roue », « pneu », « selle », etc., pourraient être regroupés dans #unicycles-and-equipments (monocycles et équipements).

Je vais cibler les mots entourés d’espaces et tenter d’anticiper les expressions à plusieurs mots pour limiter les « faux positifs ». Par exemple : « wheelwalking » est une figure de monocycle qui devrait probablement se retrouver dans #riding-advice. Si je cible uniquement « wheel » sans y réfléchir, il y aura des faux positifs que j’aurais pu facilement éviter (bien que je puisse ensuite déplacer les sujets contenant « wheel » de A vers B, puis ceux contenant « wheelwalking » de B vers C…).

Quelqu’un ici a-t-il déjà fait quelque chose de similaire ? Avez-vous des suggestions ou des idées pour minimiser le risque de « faux positifs » ? Y a-t-il des éléments évidents (ou non) que je dois connaître avant de me lancer ?

Il faut examiner environ 70 000 sujets.

Un petit conseil : ne considérez pas cela comme quelque chose qui doit être fait parfaitement du premier coup.

Votre idée de rechercher des mots-clés correspond à la première approche que je recommanderais moi-même. N’ayez pas peur de jeter tout le travail effectué lors de votre première tentative. Si le résultat n’est pas celui que vous recherchez, tirez les enseignements de cette première tentative et recommencez entièrement depuis zéro.


MODIFICATION

En effectuant une recherche rapide pour trouver des outils gratuits d’analyse de mots, j’ai découvert cette page d’information sur l’analyse de texte. Intéressant à lire.

J’ai déjà abordé des projets similaires en utilisant l’apprentissage non supervisé avec le clustering K-means. Ce serait une expérience plutôt intéressante, et peut-être que l’algorithme aboutira même à une catégorisation meilleure :wink:

Vous pouvez en savoir plus sur une telle approche ici https://towardsdatascience.com/applying-machine-learning-to-classify-an-unsupervised-text-document-e7bb6265f52

Tout comme l’a dit @EricGT : n’ayez pas peur d’itérer, mais une solution suffisamment proche est suffisante, et peut-être avoir quelques utilisateurs TL3 prêts à re-catégoriser si nécessaire.

C’est intéressant !

Je n’aurai probablement ni le temps ni les compétences pour essayer cette approche (le forum est en panne depuis plus d’un mois, et j’ai encore beaucoup de travail à faire !).

Après une première tentative, la sélection manuelle de mots-clés semble donner de bons résultats, bien que je n’aie pas encore re-catégorisé et que je me sois seulement amusé avec des requêtes SQL.

select title from topics
where category_id = 10
and lower(title) not like '%saddle%'
and lower(title) not like '%crank%'
and lower(title) not like '%pedal%'
and lower(title) not like '%rim%'
and lower(title) not like '%carbon%'
and lower(title) not like '%spoke%'
and lower(title) not like '%wheel%'
and lower(title) not like '%frame%'
and lower(title) not like '%hub%'
and lower(title) not like '%tubeless%'
and lower(title) not like '%disk%'
and lower(title) not like '%hydraulic%'
and lower(title) not like '%duro%'
and lower(title) not like '%dominator%'
and lower(title) not like '%torker%'
and lower(title) not like '%nimbus%'
and lower(title) not like '%bearing%'
and lower(title) not like '%pad%'
and lower(title) not like '%repair%'
and lower(title) not like '%handlebar%'
and lower(title) not like '%kh%'
and lower(title) not like '%kris holm%'
and lower(title) not like '%coker%'
and lower(title) not like '%tube%'
and lower(title) not like '%build%'
and lower(title) not like '%29er%'
and lower(title) not like '%36er%'

and lower(title) not like '%backwards%'
and lower(title) not like '%riding%'
and lower(title) not like '%foot%'
and lower(title) not like '%train%'
and lower(title) not like '%training%'
and lower(title) not like '%learn%'
and lower(title) not like '%learning%'
and lower(title) not like '%dismount%'
and lower(title) not like '%habit%'
and lower(title) not like '%idle%'
and lower(title) not like '%idling%'
and lower(title) not like '%freemount%'
and lower(title) not like '%free mount%'
and lower(title) not like '%free mounting%'

Cette requête retourne 33 000 sujets sur 52 000 de la catégorie principale qui pourraient être re-catégorisés. Le chiffre semble réaliste, mais je devrai probablement ajouter encore plus de mots-clés.

La méthode semble suffisamment fiable.

Qu’avez-vous fini par faire ici ?

Si les sujets contiennent des mots-clés suffisamment uniques (je suppose que vous parcourez toutes les réponses aux sujets et que vous comptez les mots-clés dans chaque message), il pourrait être possible de catégoriser automatiquement un sujet en fonction de la présence de suffisamment de mots-clés uniques et spécifiques dans ce sujet.

(Ceci est principalement utile pour les migrations, car sur un forum en direct, vous voudriez que le sujet soit dès le départ dans la bonne catégorie.)

J’ai déplacé des sujets vers d’autres catégories en vérifiant les mots-clés dans leurs titres. Cela a fonctionné suffisamment bien pour être nettement meilleur que le désordre précédent.

C’est un bon point ; l’apparition constante d’un mot spécifique dans de nombreux titres de sujets est un indice fort qu’une nouvelle catégorie est nécessaire. :thinking:

Avez-vous fait cela par une requête ? Si oui, quel était le modèle de requête ? D’autres activités ont-elles été nécessaires après l’exécution de la requête pour garantir l’intégrité de la base de données ?

Il semble que cela ait été fait sur un script d’importation, il aurait donc été modifié pour déduire une catégorie du titre.

Faites-vous une importation ? Depuis quel logiciel ? Si cela existe déjà dans Discourse, vous pourriez le faire depuis Rails.

Autant que je me souvienne, puisque je l’ai aidé dans bon nombre de ses travaux liés à Discourse, je me souviens qu’il utilisait un script Rails après l’importation. Il sélectionnait les sujets par mots-clés dans leurs titres, puis utilisait des commandes officiellement documentées pour les déplacer, comme Administrative Bulk Operations.

Je me souviens aussi que le déplacement de sujets ayant des tags, des commandes officielles et des tâches rake n’avait pas entièrement mis à jour certaines tables, pas plus que le job Sidekiq périodique associé.
Je ne sais pas si c’est toujours le cas, mais c’est peut-être quelque chose à surveiller sur Bulk tagged topics, then moved topics into another category, but the category tag selector doesn't show tags - #3 by Canapin.

J’espère que cela vous aidera !