Aller au contenu


- - - - -

Méthode d'apprentissage


74 réponses à ce sujet

#41 Guest_Calibanproject_*

Guest_Calibanproject_*
  • Guests

Posté 07 juin 2010 - 02:06

Mais non je suis pas bon ;) seulement je me dis qu'il suffit de vérifier dans la liste de mots que possède le robot si le mot qu'il a entendu existe, sinon il l'y intègre.
Pas besoin de vérifier tout le mot, tu vérifie juste les deux premières lettres et si elles n'y sont pas on enregistre le mot et basta, sinon on continue le test avec une troisième lettre, etc..


A mon sens et d'aprés l'expèrience, les choses sont un peu plus compliquées que ça... Pense notament aux mots qui acceptent des orthographes différentes (par exemple les verbes - conjugaison, infinitif...etc) et qui in fino, regrouppent la même "notion".

Lorsqu'on plonge dans le code, il apparait des problèmes que le seul je de l'esprit ne met pas en évidence ;)

#42 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE

Posté 08 juin 2010 - 12:58

les deux premières lettres

LOL, je viens de me rendre compte que je pensais aux phonèmes et je traduisais ça dans le post en terme d'analyse de mot :/
Donc je précise qu'il s'agit de phonèmes à reconnaître (avec une tolérance si possible).
Quand j'y repense je suis persuadé que la méthode est faisable.

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#43 Guest_Calibanproject_*

Guest_Calibanproject_*
  • Guests

Posté 08 juin 2010 - 08:33

LOL, je viens de me rendre compte que je pensais aux phonèmes et je traduisais ça dans le post en terme d'analyse de mot :/
Donc je précise qu'il s'agit de phonèmes à reconnaître (avec une tolérance si possible).
Quand j'y repense je suis persuadé que la méthode est faisable.


Bien entendu, c'est faisable, mais pas si évident que ça en terme de programmation pour obtenir un algo qui gère bien les subtilités car un même mot peut recouvrir plusieurs sens et gérer la hiérarchisation devient alors trés difficile ;)

#44 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE

Posté 08 juin 2010 - 12:24

Déjà limiter la compréhension à un seul langage, le langage français de base, pour simplifier le système, quitte à rajouter d'autres langages plus tard.

car un même mot peut recouvrir plusieurs sens

Donne-moi des mots qui en langage français de base (pas de verlan ni d'argot) ont plusieurs sens.

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#45 Guest_Calibanproject_*

Guest_Calibanproject_*
  • Guests

Posté 08 juin 2010 - 01:17

Déjà limiter la compréhension à un seul langage, le langage français de base, pour simplifier le système, quitte à rajouter d'autres langages plus tard.


Donne-moi des mots qui en langage français de base (pas de verlan ni d'argot) ont plusieurs sens.


Spontanément et à froid, "découvrir" me vient à l'esprit ! Cela signifie autant "enlever une couche à quelque chose" que "être confronté pour la première fois a quelque chose)

#46 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE

Posté 08 juin 2010 - 09:33

Voilà une phrase qu'un expérimentateur pourrait poser au robot alors :
- qui a découvert la fusion nucléaire ?

Je te propose d'imaginer :
[ On imagine, je ne te dis pas que ça pourrait marcher, il faudrait étudier la chose, c'est une idée comme une autre que je lance je ne suis pas spécialiste hein^^ ]

Le traitement que pourrait pratiquer le robot à l'entente de cette phrase :
"qui a découvert la fusion nucléaire ?"

1) Le robot trouve le mot "qui" dans une liste de mots représentants le terme "sujet" et sait ainsi qu'il s'agit du sujet de la phrase.
Le mot "Qui" est toujours en première place dans la phrase quand il s'agit d'une question, donc le robot sait qu'il s'agit d'une question et que le sujet est "qui".
2) "Découvert" indique au robot que le mot "découvrir" est utilisé.
3) "le" ou "la" désignant un sujet, le robot sait qu'il est question de "la fusion nucléaire" (situé après le mot "découvert").
4) le robot sait que la question est "Qui"... "Découvrir"... "La fusion nucléaire".
5) Sachant que c'est une question (étape 1) le robot ne peut que "constater" qu'il s'agit du sens "trouver" du mot "découvrir", il cherche alors dans sa Data-Base l'inventeur de la fusion nucléaire, puis répond : "le découvreur de la fusion nucléaire est untel".

Enfin voilà c'est à voir, là je ne réfléchis pas trop, je suis en période "Fatigué/fainéant" :/

En gros : on découpe la phrase entendue :
Première partie : Ce qu'il y a avant le verbe.
Deuxième partie : Le verbe.
Troisième partie : Ce qu'il y a près le verbe.

Cela sous-entend que le robot sait reconnaître (dans une phrase qu'il entend) les verbes principaux et leurs variantes (découvrir, découvert, découverte, découvrit...)
Ce serait la partie la plus difficile si le robot utilisait ce système :/

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#47 Guest_Calibanproject_*

Guest_Calibanproject_*
  • Guests

Posté 09 juin 2010 - 11:02

Voilà une phrase qu'un expérimentateur pourrait poser au robot alors :
- qui a découvert la fusion nucléaire ?

Je te propose d'imaginer :
[ On imagine, je ne te dis pas que ça pourrait marcher, il faudrait étudier la chose, c'est une idée comme une autre que je lance je ne suis pas spécialiste hein^^ ]

Le traitement que pourrait pratiquer le robot à l'entente de cette phrase :
"qui a découvert la fusion nucléaire ?"

1) Le robot trouve le mot "qui" dans une liste de mots représentants le terme "sujet" et sait ainsi qu'il s'agit du sujet de la phrase.
Le mot "Qui" est toujours en première place dans la phrase quand il s'agit d'une question, donc le robot sait qu'il s'agit d'une question et que le sujet est "qui".
2) "Découvert" indique au robot que le mot "découvrir" est utilisé.
3) "le" ou "la" désignant un sujet, le robot sait qu'il est question de "la fusion nucléaire" (situé après le mot "découvert").
4) le robot sait que la question est "Qui"... "Découvrir"... "La fusion nucléaire".
5) Sachant que c'est une question (étape 1) le robot ne peut que "constater" qu'il s'agit du sens "trouver" du mot "découvrir", il cherche alors dans sa Data-Base l'inventeur de la fusion nucléaire, puis répond : "le découvreur de la fusion nucléaire est untel".

Enfin voilà c'est à voir, là je ne réfléchis pas trop, je suis en période "Fatigué/fainéant" :/

En gros : on découpe la phrase entendue :
Première partie : Ce qu'il y a avant le verbe.
Deuxième partie : Le verbe.
Troisième partie : Ce qu'il y a près le verbe.

Cela sous-entend que le robot sait reconnaître (dans une phrase qu'il entend) les verbes principaux et leurs variantes (découvrir, découvert, découverte, découvrit...)
Ce serait la partie la plus difficile si le robot utilisait ce système :/


Cela présuppose qu'il connait auparavant le mot découvrir et ses multiples sens ! Il ne sagit donc pas d'un système d'apprentissage de nouveaux mots et de leur sens mais d'analyse grammaticale et syntaxique afin de déduire le sens général de la phrase ;)

#48 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE

Posté 09 juin 2010 - 12:21

afin de déduire le sens général de la phrase ;)

Heu... oui ;)
J'ai dévié du sujet là :/

Enfin bon, le but était au départ d'enregistrer en DB un mot entendu et qu'il n'a pas déjà en DB, ç'est faisable même si on ne connaît pas le sens du mot, il suffit de le stocker avec tous les mots qui lui ressemblent non ?
Comme "Découvrir, découverte, découvert, découvrit, etc..."
Et c'est dans ce stock qu'il puisera quand il lui faudra juger du sens (comme dans l'exemple précédent) et répondre.
Non ?
On imagine toujours^^

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#49 Guest_Calibanproject_*

Guest_Calibanproject_*
  • Guests

Posté 09 juin 2010 - 02:24

Heu... oui ;)
J'ai dévié du sujet là :/

Enfin bon, le but était au départ d'enregistrer en DB un mot entendu et qu'il n'a pas déjà en DB, ç'est faisable même si on ne connaît pas le sens du mot, il suffit de le stocker avec tous les mots qui lui ressemblent non ?
Comme "Découvrir, découverte, découvert, découvrit, etc..."
Et c'est dans ce stock qu'il puisera quand il lui faudra juger du sens (comme dans l'exemple précédent) et répondre.
Non ?
On imagine toujours^^


Oui je suis d'accord ! Ce dont je voulais juste te faire prendre concience, c'est que la chose n'est pas aussi simple qu'elle semble au premier abord... Il ne suffit pas juste de coder ;) Se pencher sur une question soulève, en robotique, de nombreux points qui sont des chantiers à part entière et ne peuvent être ignorés ;)

#50 Dr.Calvin

Dr.Calvin

    Membre passionné

  • Membres
  • PipPipPip
  • 474 messages
  • Gender:Female

Posté 09 juin 2010 - 06:58

Si je puis me permettre de conclure le débat :ph34r:

un logiciel de conversation en langue française, ce n'est pas caliban qui me dira le contraire, c'est TRES compliqué, encore plus qu'en anglais (mais c'est ça qui est intéressant). De toute façon je ne souhaite pas un programme qui saisisse toutes les subtilités de vocabulaire (du moins, cela n'est faisable qu'en peaufinant le projet au fil des mois), mais déjà pour commencer un programme qui en connaîtrait assez pour parler comme un petit enfant, de 10 ans maximum, disons. Après seulement, je pourrais le faire "évoluer" en lui incluant davantage de vocabulaire et de grammaire. Car, me semble t'il, ce n'est pas l'ajout de données le plus dur, mais la conception de l'intelligence de départ.

Aussi, auriez-vous des extraits de code sur des projets qui feraient intervenir l'auto-apprentissage (mais peut être que j'en demande beaucoup, c'est juste pour pourvoir saisir la structure générale et les fonctions utilisées... :unsure: ) ? Ca permettrait d'avoir des exemples concrets sur lesquels appuyer la discussion (pour l'instant, mon programme n'a pas d'auto-apprentissage)

Sur ce je m'éclipse :ph34r:

#51 DenisDenis

DenisDenis

    Membre

  • Membres
  • 12 messages

Posté 10 juin 2010 - 11:15

Bonjour à tous,

je suis le créateur de Mylène (voir ce post), et cette conversation me semble intéressante car elle illustre bien les problèmes auxquels je suis confronté. Pour l'instant ce bot parle à peine comme un enfant de quatre ans, mais je l'améliore sans cesse.

Je ne rentrerais pas dans les détails techniques, mais en gros Mylène est un moteur d'inférence capable d'apprentissage (de mots, d'expressions, de faits). Le cerveau de Mylène est un graphe formé de simples faits (sujet-verbe-complément). Les noeuds du graphe sont les concepts (sujet et complément) et les arcs les actions qui les relient. Après, un simple traitement du graphe permet de faire des déductions logiques: "Socrate est un chat" (premier arc), "Les chats sont mortels" (second arc), donc "Socrate est mortel".

Ca, c'est la théorie. Mais lorsqu'on met ça en pratique, il y a des subtilités qui donnent des résultats comiques, mais faux: par exemple: "J'ai deux mains" et "Chaque main a cinq doigts", donc "J'ai dix doigts". Mais "J'ai deux fils" et "Chaque fils a cinq filles", donc... et bien non, je n'ai pas dix filles ! A peu près tous les verbes courants (être, avoir, aller, aimer, ...) ont plusieurs sens différents, qu'il faut classer parce qu'ils ont des propriétés différentes (ici, la transitivité du verbe avoir au sens posséder, et avoir au sens engendrer).

La compréhension ne pose pas moins de problèmes: les homonymes font qu'il faut explorer tous les sens possibles de chaque mot: par exemple la phrase "t'es tu tu ?" ("Après ton long discours, t'es tu tu"), contient deux fois "tu" avec deux sens différents ("toi" et "se taire" conjugué), et deux mots représentant la même personne ("t'" contraction de "te" et "tu"). Pas évident de faire le tri dans cette phrase pourtant toute simple. Et évidemment il y en a des bien plus compliquées, et je ne vous parle pas des fautes d'orthographe et de français que peuvent faire les humains, des contractions, abréviations, sms, etc...

En espérant que ma modeste expérience serve à quelqu'un, c'est avec plaisir que j'en discuterais ici.

#52 Dr.Calvin

Dr.Calvin

    Membre passionné

  • Membres
  • PipPipPip
  • 474 messages
  • Gender:Female

Posté 10 juin 2010 - 11:57

"Socrate est un chat" (premier arc), "Les chats sont mortels" (second arc), donc "Socrate est mortel".


Tes déconvenues avec les aphorismes me rappellent cette plaisanterie : "voici ce chien qui est père", "ce chien est le tien", "c'est donc ton père"
Plus sérieusement j'ai vu ce que ça donnait avec Mylène, et c'est déjà pas si mal. Beta-Max a volontairement utilisé le second degré avec ta machine, or, même les chatterbox perfectionnés comme ELIZA et ALICE tombent dans le panneau avec cette méthode un peu sadique. J'avoue m'être éclatée sur ELIZA et ALICE de la même manière, les pauvres :P, y compris en leur demandant leur avis sur des problèmes d'actualité et en leur posant des questions existentielles. A chaque fois, le résultat était vraiment savoureux. Très facile de démasquer une machine de cette manière, donc tu n'as rien à te reprocher. J'aimerais bien voir ton code-source en détail, si ça ne te dérange pas, car si Mylène est encore "toute jeune", elle se débrouille déjà bien (moi, j'apprends encore à parler à ma machine).

En espérant que ma modeste expérience serve à quelqu'un, c'est avec plaisir que j'en discuterais ici.

ce sera alors un plaisir partagé :D

#53 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE

Posté 10 juin 2010 - 01:01

Salut DenisDenis ;)
ça fait plaisir que tu participe au débat :P

ici, la transitivité du verbe avoir au sens posséder, et avoir au sens engendrer

En fait le sens à choisir pour le verbe est facilement déductible en fonction du sujet non ?
Car les deux mains sont à nous donc le verbe avoir aura le sens "posséder" forcément.


t'es tu tu ?

La phrase a beau être simple, ce n'est pas tous les jours qu'on entend quelqu'un la prononcer dans la vie courante ;)

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#54 Dr.Calvin

Dr.Calvin

    Membre passionné

  • Membres
  • PipPipPip
  • 474 messages
  • Gender:Female

Posté 10 juin 2010 - 04:17

En fait le sens à choisir pour le verbe est facilement déductible en fonction du sujet non ?


Electron, je ne t'ai rien dit jusque là mais par pitié, arrête avec tes "facilement", je te jure, apprendre à une machine à comprendre des questions et à répondre en conséquence, ce N'EST PAS facile...(bon sang de bonsoir). C'est pour un être humain que ça paraît évident... :excl:

#55 Dr.Calvin

Dr.Calvin

    Membre passionné

  • Membres
  • PipPipPip
  • 474 messages
  • Gender:Female

Posté 10 juin 2010 - 04:44

bon, je crois que je te dois au moins une petite explication :unsure:

je ne sais pas où tu en es en informatique, aussi il se peut que tu trouves cette explication vraiment triviale... mais il y a plusieurs solutions pour "déduire en fonction du sujet" le sens adéquate d'un verbe, et je n'en citerai que deux que je connais grosso modo :

- réaliser soi-même l'inventaire de tous les sens possibles de tous les verbes possibles et dans tous les cas possibles, les uns après les autres et à la main :wacko: tu vois l'horreur, et c'est pourtant ce que nous faisons inconsciemment ou presque pour discuter avec quelqu'un. Ce phénomène est encore plus visible quand quelqu'un parle dans une langue qu'il ne maîtrise pas, car il est obligé d'aller plus lentement. Selon comment tu le codes, l'ordi peut répondre assez rapidement (voire très rapidement ) mais le programmeur, lui, buguera certainement au bout de x mots de vocabulaire...
car il n'y a pas que la relation sujet-verbe, mais aussi les relations verbe-complément d'objet, proposition principale-proposition subordonnée, verbe-adverbe, et j'en passe...tu te retrouves avec une arborescence de fou et un programme interminable. Une des solutions est de mettre le programme en réseau de sorte à ce que des milliers de gens suffisamment qualifiés puissent coder dessus, comme c'est le cas pour le chatterbox ALICE, et encore, ils ont aussi utilisé des méthodes plus performantes que l'inventaire bourrin...

- utiliser une méthode d'auto-apprentissage qui permettrait au programme de saisir le sens du mot (quelque soit sa catégorie grammaticale)en fonction du contexte et d'apprendre ce nouveau sens. Techniquement, c'est largement au dessus de mes moyens actuels et je ne sais pas du tout coder ça (d'où mes précédentes questions, combinées à d'autres recherches dans mon temps libre).

- une troisième méthode, entre autres : la combinaison des deux précédentes :lol:

voilà ce qui justifie mieux ma légère indignation de tout à l'heure (désolée, :blush: )

#56 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE

Posté 10 juin 2010 - 09:28

je disais "facilité" pour l'exemple donné par DenisDenis ;)
(J'ai mis en gras les mots importants)

par exemple: "J'ai deux mains" et "Chaque main a cinq doigts", donc "J'ai dix doigts". Mais "J'ai deux fils" et "Chaque fils a cinq filles", donc... et bien non, je n'ai pas dix filles ! A peu près tous les verbes courants (être, avoir, aller, aimer, ...) ont plusieurs sens différents, qu'il faut classer parce qu'ils ont des propriétés différentes (ici, la transitivité du verbe avoir au sens posséder, et avoir au sens engendrer).

La main appartient au corps même de l'humain donc c'est "avoir au sens de possèder" tandis que le fils est un humain distinct de celui qui l'a engendré, il ne fait pas partie du même corps physique, donc c'est "avoir au sens de créature engendrée".
Tout le principe de distinction tiens dans ces deux lignes, quand je dis "facilement" pour l'exemple donné.

Les deux mains sont à nous donc le verbe avoir aura le sens "posséder" forcément.


Je ne dis pas facilement pour tous les cas (que je n'aie ni envisagés, ni étudiés, ni voulu étudier).

Bien sûr je sais qu'un tel système tel que tu le décris est compliqué, loin de moi l'idée de le voir autrement, mais je sais qu'en le divisant en petites parties et en observant chaque partie avec l'oeil de la simplification (comme en systeme D en gros) on peut arriver à se faciliter la tâche au lieu de voir ça comme un monstre complexe ;)

Tout ça me donne l'envie de me lancer dans un programme comme ça mais non ;) j'ai trop de projet en cours déjà :P
Un de ces jours pourquoi pas ;)
Tu sais mon prof d'électronique me disais que c'était impossible de calculer une impédance simple sans se passer des nombres complexes mais comme je ne comprenais rien aux nombres complexes il avait fallu que je me trouve une autre méthode plus simple pour moi pour le faire afin d'avoir mon bac technique et je l'ai eu pourtant avec 17 en électronique théorique et 15 en électronique pratique.
Je te dis ça pour l'anecdote ;)
Quand tu pense que mes études étaient du niveau de "5ème 6" (je connaissais pas encore les équations du second degré, je n'avais pas fait de philo) et que pour avoir mon bac technique j'ai dû bûcher les maths, le français et la philo en un après-midi dans une cafétéria, je me dis que l'être humain est presque capable de tout s'il ne se complique pas trop la vue qu'il a des choses.
Bon j'étais jeune, c'est plus comme aujourd'hui, on a plus de la volonté quand on est jeune (enfin en général).

voilà ce qui justifie mieux ma légère indignation de tout à l'heure (désolée, :blush: )

Je te comprend tout à fait ;) De plus on est dans un débat d'idées, ça ne me dérange pas ;)

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#57 Dr.Calvin

Dr.Calvin

    Membre passionné

  • Membres
  • PipPipPip
  • 474 messages
  • Gender:Female

Posté 10 juin 2010 - 10:23

ok ok, pas de souci ^_^ encore que la physique de lycée...mais non je plaisante :P
mais j'aimerais bien avoir des bouts de code pour étudier l'auto-apprentissage. j'en ai trouvé sur le net mais soit ils ne sont pas expliqués et c'est incompréhensible pour une profane comme moi, soit ce ne sont que des principes généraux, ou des cours pour les étudiants en fin de cursus <_<

et un truc qui n'a rien à voir, mais je commence à me demander si tu ne serais pas l'auteur du site dont tu tires tes fameuses citations...C'est juste une idée qui me passe par la tête, mais je suis ptêt trop curieuse :unsure:

#58 DenisDenis

DenisDenis

    Membre

  • Membres
  • 12 messages

Posté 11 juin 2010 - 10:32

Tes déconvenues avec les aphorismes me rappellent cette plaisanterie : "voici ce chien qui est père", "ce chien est le tien", "c'est donc ton père"


Si tu aimes ce genre de phrases, il y a aussi celle-ci, appliquable à n'importe quelle décision: "Quelque chose doit être fait, ceci est quelque chose, donc ceci doit être fait" :)

La main appartient au corps même de l'humain donc c'est "avoir au sens de possèder" tandis que le fils est un humain distinct de celui qui l'a engendré, il ne fait pas partie du même corps physique, donc c'est "avoir au sens de créature engendrée".


Donc, si je suis ton raisonnement*, "j'ai une voiture", la voiture ne faisant pas partie du même corps physique, j'ai donc engendré une voiture ??? :)

Comme l'a dit justement Dr.Calvin, c'est très compliqué. Non pas que ce soit impossible, mais la compréhension d'une phrase (du sens du verbe avoir ici) demande un tas de connaissances implicites qui vous semblent évidents, à vous humains, parce que vous avez déjà vu une main, une voiture, des pères et des fils, et que vous savez qu'un fils n'appartient pas à son père. Lorsqu'on est confronté à la logique implacable d'un programme, tous ces sous-entendus doivent avoir été mémorisés dans le programme pour qu'il puisse comprendre la phrase.

J'aimerais bien voir ton code-source en détail, si ça ne te dérange pas


J'aurais un peu honte de diffuser le code source tel qu'il est aujourd'hui. Comme j'ai commencé il y a quelques années sans savoir exactement où j'allais, le programme est maintenant un joli plat de spaghettis plein de verrues, de code mort, de commentaires que je suis seul à comprendre. Je pense que le code n'aurait aucun intêret pour quelqu'un d'autre sans quelques explications. Si je devais le diffuser, il faudrait que j'y mette de l'ordre avant. Et puis l'important est le principe, pas l'implémentation big-banguienne que j'en ai faite.

* (parenthèse)Tiens, sans le faire exprès, voilà encore un bel exemple de phrase ambiguë: je ne suis pas (verbe être) un raisonnement, je suis (verbe suivre) ton raisonnement...(/parenthèse)

#59 Dr.Calvin

Dr.Calvin

    Membre passionné

  • Membres
  • PipPipPip
  • 474 messages
  • Gender:Female

Posté 11 juin 2010 - 10:56

bon, DenisDenis je te comprends pour ce qui est de ton programme, car je n'ai pas diffusé le mien pour les mêmes raisons ;) mais je ne lâcherai pas le morceau : au moins pourrais-tu m'en donner, comme tu l'as justement dit :P , le principe, étape par étape ? De plus, je crois que ça intéresserait plus d'un lecteur du topic vu le sujet...

#60 DenisDenis

DenisDenis

    Membre

  • Membres
  • 12 messages

Posté 11 juin 2010 - 12:02

Le principe, étape par étape (je vais essayer d'être bref):

1) Reconnaissance des mots dans phrase:

J'ai en entrée une chaîne de caractères, qu'il faut découper en mots et ponctuation. Et déjà là il y a les premières difficultés: "mille-patte" doit être compris comme deux mots (et même pour être rigoureux comme un mot composé), tandis que "trois-deux" doit être compris comme "trois moins deux".

2) Reconnaissance de chaque mot:

Pour chaque mot, j'identifie tous les homonymes possibles dans la base de mots. Si je n'en trouve aucun, j'essaye de les identifier dans la base de mots orthographiés phonétiquement (par exemple, "orthographe" est mémorisé "ortografe" dans cette base) justement pour identifier les mots mal écrits. Si un mot n'est toujours pas reconnu, il est mémorisé dans une base temporaire "nouveaux mots", et si le même mot inconnu est rencontré plusieurs fois, il sera ensuite mémorisé définitivement dans la base de mots.

3) Reconnaissance du "squelette de phrase"

J'ai une base de "Squelettes de phrases" (par exemple "groupe nominal-groupe verbe-groupe nominal", ou "groupe nominal-groupe verbal-adjectif"), et j'essaye d'en trouver un qui correspond. Ici, pas de mystère, il faut faire toutes les combinaisons possibles. Selon la forme du squelette, on peut généralement savoir si c'est une question ou une affirmation (expérience: ne pas se fier à la ponctuation. Beaucoup posent des questions sans mettre le point d'interrogation à la fin). A la fin de cette étape, j'ai un squelette de phrase et les concepts qu'il contient (le sujet, l'action, le complément).

Dans cette étape, j'élimine également ce que j'ai appelé les "incises", c'est à dire les petits bouts de phrases qui ne sont pas essentiels à la compréhension: par exemple les "Dis-moi ...", "Peux-tu me dire ...".

4) Traitement

J'ai une espèce de script qui, en fonction du squelette, fait une action particulière. Par exemple, si le squelette est "Combien [phrase interrogative]", je sais qu'il faut chercher dans le graphe des faits connus un fait qui correspond à la phrase interrogative en question, ou bien un fait contraire au fait recherché. Dans le cas d'une phrase affirmative et si aucun fait contraire ne l'interdit (par exemple "Un chat a quatre pattes"), le script est programmé pour mémoriser cette nouvelle donnée. Par contre, si un fait contradictoire est trouvé (par exemple si ensuite je dis "Un chat à cinq pattes"), le script fera réagir différemment.

5) Expression de la réponse

A la fin de l'étape précedente, j'ai un squelette de phrase et un ou plusieurs faits pour le contenu. Il faut ensuite le reconvertir les concepts en mots, les organiser selon le squelette, accorder les verbes et les adjectifs avec le sujet (pour ceci les mots sont regroupés en familles avec un système de chaînage), et j'affiche la réponse.

6) Fall-back:

Si l'une des étapes précédentes ne marche pas, j'ai une procédure par défaut: J'ai une base de phrases toutes faites qui réagit à un ou pluieurs mots, comme la plupart des chatterbots. Le résultat est souvent peu naturel, mais ça évite de répéter "Je ne comprend pas la phrase" (comme je le faisais au début).


Voilà, j'ai un peu simplifié: en fait les mots sont des expressions (par exemple "petit pois" représente une seule entité, au même titre que "haricot" ou "tomate"). J'ai fait des verrues pour le traitement des nombres et expressions mathématiques, j'ai passé sous silence le traitement des élision (les apostrophes qui doivent être interprétées comme une voyelle muette), mais l'essentiel est là.



Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users