Indexation textuelle pour trouver le bon job dans la meule de foin des annonces merdiques

Aujourd'hui, il est temps de faire son google.

Mon problème:

Après avoir manuellement recherché parmi des centaines d'annonces et essuyé moult déconvenues je me suis aperçu que la méthode manuelle n'étaient pas bonnes:

  1. chaque entrevue me coûte cher;
  2. la plupart des annonces qui sont à chier sont prévisiblement à chier;
  3. il existe des vraies annonces utiles MAIS les critères de recherches (date, pertinence, lieu) ne sont ni pertinents, ni ceux qui me conviennent et je dois prioriser ma recherche;
  4. je veux bien coder, mais ni pour une SSII, ni pour une startup, ni pour une boîte d'IT ni passer par un cabinet de recrutement (95% des annonces);
  5. je veux pouvoir postuler à des jobs de survie sur lesquels ses enfoirés de pôle emploi ne peuvent me bloquer (débutant accepté, pas de spécificité sur les formations...) et sans contact de pole emploi;
  6. J'en ai assez alors que c'est écrit sur mon CV de passer une entrevue et à la fin devoir expliquer à mon futur employeur que NON je ne dépasserais pas les 48heures hebdomadaires de travail sans que ce soit exceptionnel et rémunéré comme il se doit.
Il me faut donc un moteur de recherche qui a les spécificité suivantes :

  • indexation textuelle pour repérer sur un corpus d'apprentissage les catégories;
  • mesures et fitness des résultats comparé aux objectif;
  • parsing et analyse textuelle des annonces;
  • analyse de méta données pour le filtrage.

Cet article est un rapide survol de géométrie euclidienne en base incomplète sur les données textuelles, car il va falloir trier qualitativement ce que je veux ou non.

Stemmisation, tokenisation


Prenons une annonce classique :

Nous recherchons -pour les besoins d'une société en plein essor- un petit jeune passionné, plein d'entrain, pour travailler dans un domaine intellectuellement stimulant.

Nous allons vouloir comparer cette exemple classique de texte qui pue l'exploitation en startup avec les équivalents. Pour cela, il nous faut nettoyer le texte de 2 choses : le bruit, et les variations.

La stemmisation-tokenisation consiste à découper le texte en un tableau de mots sous leur forme invariante. Les spécialistes de l'indexation textuelle rajoutent au passage un filtrage de mots. Internet fourmille de tuto .... pour l'anglais, mais pour le français c'est bonbon, en plus leur jargon est à chier.

Comprenons bien les 2 problèmes spécifique du français :
  • les mots à virer (stopwords) ne sont pas les mêmes qu'en anglais;
  • les formes invariantes ne se créent pas de la même manière qu'en anglais.
Il faut donc sachant que c'est une partie mineure du travail utiliser mes connaissances de mon premier boulot de SSII à l'ECAM (IBM) pour retirer d'internet la substantifique moelle du jargon pour en tirer un exemple utilisable. 

Tokenisation: découper à la scie propre les mots dans une phrase en faisant attention aux apostrophes, virgules
Stemmisation: réduire les ambiguités liés aux variance de graphie (va, allez, aller, allions == aller; évoluant, évolue, évolution == évoluer)
filtrage des Stop words: virer les mots outils qui font du bruit (le, la, les, un)

Tout ce qui fait que les spécialistes sont payés chers et qui fait le jus de leur boulot n'est pas l'appel aux APIs mais la connaissance des 3 étages qui vont bien.

Des tokenisateurs il y en a des centaines, des corpus de mot-outils aussi, ainsi bien évidemment que des stemmers. Leurs beurres qu'ils mettent dans les épinards de leur expertise payées par des fonds publics consiste à vous dire comment faire dans les grandes lignes, partager le code, mais pas les données spécifiques.

Donc, la première tâche consiste avec un moteur de recherche et une bonne patience ainsi qu'une console python à expérimenter sur les différentes recherches sur stopwords, stemmisation, tokenisation à avoir un ensemble de réglages relativement sain sur ses 3 axes. Il se trouve que python a la librairie pour l'indexation textuelle : nltk

Donc pour référence futur voici le résultat:

Comme les universitaires sont jaloux de ne pas tout vous donner il y a de la magie à faire


    import nltk
    nltk.download()




Ensuite un petit tour au fond du code source nous apprend que c'est magiquement utilisé dans notre dos (ah! j'aime la magie) par la bibliothèque:

cf http://www.nltk.org/_modules/nltk/tokenize.html

Oh! Et Wut?  http://www.nltk.org/howto/data.html

On exécute des pickle arbitraires pour avoir accès aux données? Wut, Wut, WTF!

  1. cela veut dire que nltk est certes open source mais que tout le code qui a de la valeur est lui sous une forme binaire ! Donc, a proprement parlé c'est plus du code proprio (mis à disposition par des universités bien souvent publiques, bien souvent payées par les impôts);
  2. que c'est un putain de trou de sécu. 
Bon, je toussote, et continue.

J'avais prévu de donner les liens vers les docs et les mots clés. Mes différents essais m'ont convaincu que les spécialistes de l'indexation textuelle sont au mieux des fraudes publiques, au pire des petits rats universitaires qui restent dans l'ombre de leurs labos et font tout pour ne pas partager leurs données.

Après trop d'heures passer à tenter d'avoir un compteur de mot décent en essai erreur où j'ai pu me rendre compte que finalement je faisais naïvement mieux que des trucs de pros, je me suis dit fuck off : mets juste ton code à dispo et répond aux commentaires si les gens ont des questions.


Prochain épisode, le Xhi², le machine learning me fait chier, et je parie que je peux obtenir 80% du résultat avec .5% de la puissance de calcul utilisé par les grands groupes pour faire de l'apprentissage en utilisant un poil de géométrie.

Darth Vador programming on its way.

No comments: