Partage
  • Partager sur Facebook
  • Partager sur Twitter

Extraction de date - Algorithme

    9 novembre 2017 à 20:46:50

    - Re - Bonjour,

    Je - re - viens avec un nouveau soucis :

    (Ici, je bosse en python, mais le problème est plus "logique" que "programmation pur"

    Je cherche a extraire la/les date.s d'une phrase.

    Un exemple ?

    Quel sera le temps demain midi ?

    retournera

    timestamp + (60*60*24*1) + (60*60*12)

    Ceci :

    Un avion pour Paris mardi en huit

    retourne

    timestamp + (60*60*24*12)

    Bon, j'avoue, le second est plus extrême, mais c'est pour montrer la complexité que peut avoir la chose.

    Pour le moment, mon début "d’algorithme" ressemble plus a une suite de "if"

    exemple :

    words = words(input) # liste des mots de la phrase de base
    
    for word in words:
        if word in ["aujourd'hui","maintenant","en ce moment", ...]

    (Ce code ne fonctionne pas, il est juste la a titre informatif)

    Des sortes de "Y a t'il ce mot dans la phrase ?"

    C'est bien pour peut de précision, mais une fois qu'on a quelque chose du style :

    Quel sera la météo de dimanche à mardi prochain ?

    Bonne chance pour faire cela avec des "if" en  masse, ou alors, bonjour le bordel.

    N'avez vous pas une idée de comment on pourrait résoudre ce problème ?

    Si on touche a ce dont on parle beaucoup en ce moment : Le machine learning, c'est cool, mais sur internet on a deux types de vidéos qui en parles :

    "Ce sont des dixaines de neurones agencées entre eux avec un système de poids"

    "Il faut écrire tel code pour que tel chose

    • "Ce sont des dixaines de neurones agencées entre eux avec un système de poids"
    • "Il faut écrire tel code pour que tel chose marche"

    Mais pas de "fonctionnement précis général" (qui vas plus loin en gros)

    Merci !

    • Partager sur Facebook
    • Partager sur Twitter

    CodeWe is an open-source live code-sharing website.

      30 décembre 2017 à 0:39:42

      Bonjour Bhasher,

      C'est typiquement le problème du Web 3.0 / Web Sémantique qui n'a pas encore vu le jour - pour la simple et bonne raison que les solutions sont compliqués à mettre en oeuvre et pour l'instant imparfaite.

      Il existe deux problèmes sous-jacents : les erreurs de saisies et la compréhension globale de la phrase.

      Le premier est plutôt facile à résoudre. Si le mot ne se trouve pas dans le dictionnaire, on peut tenter de réorganiser les lettres, remplacer certaines parties, compter le nombre de lettres et piocher dans les mots existants (avec un peu d'imagination le résultat est efficace). Par la suite une optimisation possible c'est une liste A -> B pointant les mots erronées vers les bons mots.

      Le second problème nécessite un réseau de neurones ou plus généralement un système de prédiction. La phrase doit être dans un premier temps découpé pour créer un ensemble de vecteurs. Par exemple (à voir si c'est optimisé) : identifier la position de chaque mot dans le dictionnaire. La valeur sera unique et permettra d'être calculé par la suite.

      Pour pouvoir prendre n'importe quelle taille d'entrée de vecteurs (= nos mots), il faudrait pouvoir les digérer. Pour résoudre ce problème, il faut se tourner vers les réseaux de neurones convolutifs. Une première couche de convolution pour morceler l'ensemble des vecteurs et une deuxième couche de pooling pour réduire l'entrée (à répéter autant de fois qu'il le faut). On peut également ajouter entre les deux une couche de correction (notamment si les vecteurs sont trop lourd à cause d'un dictionnaire trop rempli). Une fois fait, ça semble bien partie pour en tirer des informations ...

      La troisième étape c'est la plus compliqué. Pour la partie apprentissage, il va falloir un algorithme de sélection - généralement on utilise un algorithme génétique, ça marche très bien. Cet algorithme va proposer un réseau de neurones à chaque génération en choisissant tout d'abord des hyper-paramètres aléatoires, puis se rapprochera progressivement de la solution en faisant varier ces hyper-paramètres. Les hyper-paramètres ce sont : le nombre de couches, le nombre de neurones par couche, les poids initiaux et les biais.

      Ta citation "ce sont des dizaines de neurones agencées entre eux avec un système de poids" prend tout son sens en effet. Ce que l'on calcule c'est la propagation. On réalise en faite pour chaque neurones de chaque couche, un calcul avec la couche antérieure : la première valeur multiplié par le poids du premier synapse additionné à la deuxième valeur du poids du deuxième synapse etc etc. valeur1 * poids1 + valeur2 * poids2 + ... + 1 * biais. Le biais est un poids supplémentaire pour déplacer les valeurs (ça se voit lors-ce qu'on analyse la courbe de sortie). Une fois la somme obtenu, on passe le résultat dans une fonction d'activation pour normaliser le résultat avant de l'enregistrer dans le neurone. J'ai une préférence pour la sigmoïde, le résultat sortant est obligatoirement compris entre 0 et 1 (bien pratique !).

      Même si tu utilises une bibliothèque (par exemple Tensorflow pour Python), tu auras besoin d'avoir ces notions de calcul.

      Bon je termine cette explication Une fois que ton algorithme génétique est en capacité de créer n'importe quel réseau de neurones (en lui passant les hyper-paramètres qu'il devra varier) et évidemment de lancer une propagation / prédiction. Il faut pouvoir lui donner une série d'entraînement ... pour chaque génération il faudrait dans l'idéal lui apprendre une centaine de cas différent. Ne pas oublier par ailleurs de modifier l'ordre d'apparition d'une génération sur l'autre (trier aléatoirement l'ensemble des échantillons), ça évitera du sur-apprentissage. Écarter également une autre série pour tester ton réseau, une fois l'entraînement terminé.

      En ce qui concerne tes sorties, une bonne solution est de proposer les 14 jours suivants - une sortie de 15 (avec la date du jour). Ainsi lors-ce que le deuxième neurone de ta couche de sortie s'active à 0.7 (la meilleur prédiction de ta couche), il te retourne le timestamp de J+1. Pour affiner le résultat en fonction de la demande "avion" ou "météo", tu peux ajouter deux neurones de plus.

      Il existe des chaînes sur Youtube pour apprendre les réseaux de neurones :

      https://www.youtube.com/user/sentdex/videos

      https://www.youtube.com/user/hugolarochelle

      https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw

      J'espère avoir pu orienter ta réflexion. Vu que l'on est obligé de passer par du Deep Learning, j'ai un peu de mal à voir comment intégrer une rétro-propagation ou tout autre algorithme d'auto-apprentissage à ce réseau de neurones. Si quelqu'un d'autre peut compléter mes connaissances ... incomplètes, ce serait parfait !

      Bon courage.

      • Partager sur Facebook
      • Partager sur Twitter

      Extraction de date - Algorithme

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown