La semaine dernière, je rendais public « Ask Nietzsche », une IA de philosophie morale. Et ce faisant, j’ai appris beaucoup de choses, que je vais vous partager ici.
L’ergonomie, c’est important
Le contrat d’utilisation, c’était que je fournissais une IA de philosophie morale, qui indiquait si la proposition fournie par l’utilisateur était quelque chose de bien, de mal, de neutre, de paradoxal, etc. De plus cette IA ne comprenait que des entrées saisies en anglais.
Visiblement mon interface n’était pas assez claire, parce que beaucoup de saisies ont été faites en français (voire même sur des noms propres qu’aucune IA n’avait la moindre chance de connaitre). Mais surtout, il y avait beaucoup de questions trop ouvertes, de phrases qui ne pouvaient pas être comprises selon un axe bien/mal (comme des questions en « qu’est-ce que… » ou « qui est-ce que… »).
Ce que j’en retiens, c’est que quand on attend une saisie utilisateur libre, on dois s’assurer que les contraintes sont bien comprises, avec assez de textes explicatifs et d’exemples.
Vous êtes des psychopathes (mais des gentils)
Je n’avais pas prévu de logguer les entrées utilisateur, mais en les voyant passer en temps réel dans les logs, je me suis dit qu’il fallait faire quelque chose. Je me suis rappelé que mes logs étaient conservés sur une semaine, et donc qu’en fait je pouvais les récupérer :
zcat -f access_log* | grep morale\?s | cut -d ' ' -f 7 | cut -c30- | sort > ~/words_urlencoded.txt
J’obtiens donc la liste des 1950 demandes qui ont été faites à Ask Nietzsche, ce qui m’a permit de faire ce nuage de mots qui explique très bien pourquoi j’ai voulu faire cette analyse :
Le mot « kill » apparait 192 fois dans 1950 demandes.
J’ai aussi 207 demandes qui commencent par « Should », « What », « Who » ou « Why » et donc tombent dans les cas des questions non traitables par l’IA telles que décrites au paragraphe précédent.
Notez que la rotation des logs se fait sur une semaine et qu’ils ne sont pas sauvegardés, donc d’ici une semaine toute trace de vos expériences aura disparu pour toujours
On peut prétendre que n’importe quoi est de la (mauvaise) IA
Parce qu’il n’y avait pas du tout d’IA dans ce projet.
L’idée
En fait, l’idée du projet vient du fait que, en l’espace de quelques jours, sont tombés cet article sur l’utilisation réelle de l’IA dans les startups et la première version de Ask Delphi, dont les premiers résultats étaient désastreux1, au point qu’on pouvait se demander s’il y avait vraiment des données d’entrainement ou juste un résultat envoyé au pif.
L’idée était donc de créer une « IA » qui semblait répondre à peu près correctement, de l’enrober dans assez d’enfumage pour laisser croire que ses faiblesses étaient normales, puis de donner ça au public pour voir comment il réagirait – sans aucune prétention scientifique.
La réalisation
Les contraintes étaient simples :
- La même entrée devrait toujours renvoyer le même résultat (sinon le côté aléatoire est évident),
- Les résultats devraient paraitre plus stables que ceux de Delphi, notamment sur les problématiques de casse ou de contractions en anglais (« is not » et « isn’t » doivent renvoyer la même chose).
- Le bot doit répondre qu’il ne comprends pas si l’entrée n’a manifestement aucun sens.
- Idéalement les cas les plus évidents renvoient des résultats cohérents.
- Réellement utiliser un back, parce qu’un site web qui se contente de ne pas faire de requêtes aurait été grillé très vite.
J’ai donc récupéré une liste de mots « connus » en anglais, très (trop) libérale parce que contenant 466 550 éléments (mots ou expressions), une liste de mots connotés positivement et une liste de mots connotés négativement – les trois sont disponibles ici.
Il m’a suffit ensuite de rajouter une condition pour éliminer les entrées contenant trop de mots inconnus2, puis qui décidait quelle liste de résultats possibles est utilisable selon la présence des mots dans les listes de « bons » et « mauvais » mots (et le nombre d’occurences du mot « not »).
Le résultat final était sélectionné en hachant l’entrée utilisateur (avec CRC32…) et à se servir du hash modulo la taille des résultats possibles pour obtenir la réponse affichée à l’utilisateur. Le code est disponible ici.
En ajoutant un front qui se contente d’appeler les API, une belle couche d’enfumage à base de « Nietzsche » et de « Il était fou à la fin de sa vie, ça peut perturber les résultats », et toutes les contraintes sont remplies – en moins de 10 heures !
L’accueil de Ask Nietzsche
Ask Nietzsche a été à la fois mieux et moins bien accueilli que ce que je pensais.
Beaucoup de personnes ont signalé, directement ou indirectement, que les résultats obtenus n’étaient pas très bons, voire franchement mauvais. Merci à Delphi de m’avoir fourni quelques exemples dans lesquels j’étais clairement meilleur – heureusement, leur moteur a été bien amélioré depuis.
Par contre, une seule personne a clairement douté de la présence d’IA derrière ce projet (Christophe B sur linuxfr.org, même si son message a été plussoyé pas mal de fois). Je m’attendais à ce que ce nombre soit clairement plus élevé !
La vraie bonne nouvelle, c’est que personne n’a semblé trouver que Ask Nietzsche ait été un bon projet ou se soit enthousiasmé pour lui – ce que je trouve rassurant : on ne peut pas enfumer les gens à l’infini, si c’est objectivement mauvais, au bout d’un moment ça se voit quand même.
Dans un monde où beaucoup de gens malhonnêtes tentent de vous vendre des mots-clés dans tout et n’importe quoi (de l’IA, de la blockchain, des NFT…) dans n’importe quel contexte, essayez de comprendre le niveau de sérieux qu’il y a derrière ces propositions. Surtout quand, contrairement à moi, ces personnes essaient de vous vendre quelque chose, ou de se mettre en valeur.
Ici les indices étaient évidemment la mauvaise qualité des résultats, le fait que je donne des raisons complètement nulles pour ne pas montrer le code, et d’un point de vue plus technique le fait que Ask Nietzsche réponde presque instantanément – ce qui n’est jamais le cas sur des IA à apprentissage modernes.
La paranoïa n’est pas nécessaire, mais un certain doute raisonnable me semble utile, d’autant plus face à des projets pleins de mot-clés à ma mode.
Je vous dois des excuses
Je tiens ici à présenter mes excuses à toutes les personnes qui ont pris un peu de temps pour m’aider à améliorer le projet. Comme vous le voyez, il n’y avait pas grand-chose à améliorer.
Conclusions
Si je devais résumer cette expérience :
- C’est facile de faire n’importe quoi et de prétendre que c’est une IA.
- C’est pas triviale de faire croire que n’importe quoi est une bonne IA.
- Je suis à peu près sûr que j’aurais pu lever des fonds avec un projet aussi mauvais que ça, vu les réactions.
- Une mauvais ergonomie peut mener à un très mauvais usage de l’outil (dans le sens où il va être utilisé autrement que la façon dont il est prévu), même quand la problématique semble simplissime lors du développement.
- La compréhension du langage naturel est une purge sans nom.
- Méfiez-vous des gens qui prétendent faire un truc (ici de l’IA) sans jamais répondre sur ce qu’ils font, comment ils le font et ce que ça apporte par rapport à une technique plus classique. Surtout si ce truc est à la mode.
- En premier lieu : des résultats complètement différents si la casse était changée, comme entre « islam » et « Islam », et le moteur ne bronchait pas si on rentrait absolument n’importe quoi.↩
- Cette méthode a laissé malheureusement trop souvent passer du français, parce que le français et l’anglais ont beaucoup de mots homographes en commun – des mots qui s’écrivent avec la même suite de lettres, quelle que soit la signification du mot.↩
L’API back et son front Web sont libérés sous licence MIT.