Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

[Rêves d'Androïdes #7] - Générateur aléatoire


> Je pense que c'est bon, on a le cadre théorique, tout, du coup on va pouvoir s'y remettre, sur notre projet !

> "Le projet" ?

> Celui de faire le programme qui rédige des livres tout seul ?

> Ouais c'est ça, on y est presque, et la avec la nouvelle technique, ça devrait marcher...

> C'est quoi le principe ?

> Ben c'est simple, t'imagine l'ensemble des histoires possibles F qu'on peut faire et l'ensemble des suites de mots possibles E, on sait que E est inclus dans F car toute histoire est une suite de mots.

> Oui on en avait déjà discuté, c'est le cadre conceptuel. Et donc ?

> Réaliser une machine qui arrive à écrire une histoire, on peut voir ça formellement comme étant une procédure qui donne en sorte un élément de E, donc une suite de mots, dont on sait qu'elle appartient à F, c'est-à-dire que la suite de mots a un sens.

> Ouaip, mais on part pas de 0, il y a déjà des tas et des tas de textes qu'on a pu récolter sur Internet, un petit millier de To, c'est ça ?

> Ouais plus exactement 1 654 To, ça fait une bonne quantité !

FichierDonnees = Fichier.Nouveau(adresse = "D://donnees/donneesTexte.bdt", lecture = vrai) ;;

Donnees.chargement(initialisation = vrai, fichier = FichierDonnees) ;;

[...]

> Sur le principe, je suppose qu'on fait pas le truc classique, l'apprentissage profond ?

> En fait on un nombre de données d'entrée irrégulier, donc ça va pas marcher

> Mais on peut quand même les rééchelonner, et moyenner pour obtenir les fréquences d'éléments de base, ça devrait être utile de décomposer à un premier niveau

> Hum ... Moi je conseillerais plutôt d'avoir un nombre de variable fixe, et de faire passer la grille sur des n-uplets.

> Pas bête... Mais ça règle pas le problème, on va toujours avoir une quantité de données dépendant du texte considéré.

> Une solution, ce serait de couper en plusieurs catégories, séparer les petits textes d'un côté, on leur fait une classification, genre le truc de base linéaire + du plus évolué quitte à re-traiter par la suite.

> Et pour les gros ?

> On les coupe en blocs, et on applique l'analyse sur chacun des blocs, on les projette dans une bonne base, genre Fourier, et on prend les p premières composantes.

seuil1 = 3000 ;;

TextesCourts = FichierDonnees[fichier: où(fichier.longueur <= seuil1 )] ;;

resultatClassif = faireClassif(donnees = TextesCourts, linéaire = vrai, max_iteration = 500, alpha = 0.6) ;;

TextesRestants = FichierDonnees[fichier: où(fichier.longueur > seuil1 )] ;;

// Début de la boucle pour traiter les fichiers

ListeParties = [ ] ;;

PourChaque fichier_iter dans TextesRestants faire:

{

n_parties = ent(fichier_iter.longueur / seuil1) ;;

Parties_iter = fichier_iter.decoupeTexte(nombreParties = n_parties) ;;

ListeParties.ajoute(Parties_iter) ;;

}

[...]

> Et une fois qu'on a extrait les caractéristiques de la base, on en fait quoi ?

> On est aux caractéristiques bas-niveau, les informations parties par parties. Mais maintenant on va devoir s'attaquer à un truc plus dur, le squelette de l'histoire... On pourrait le faire en paramétrique, mais je pense que c'est pas une bonne idée.

> Ouais, ce serait pas assez flexible pour absorber toute la structure.

> Du coup, c'est là où on pourrait réutiliser les réseaux de neurones ?

> Ouais, un petit devrait faire l'affaire, je dirais 7 couches d'épaisseur, avec une largeur du type 1x10x50x200x200x1000x200 ?

> Je pense que la couche de fin est pas suffisante. Mon idée : 1x10x50x200x200x1000x200x150x150

> Ok, de toute façon on pourra tester les deux et garder la meilleure.

listeCouches1 = [ 1, 10, 50, 200, 200, 1000, 200, 150, 150 ] ;;

reseauNeurones1 = ReseauNeurones.nouveau(couches = listeCouches1) ;;

theta_apprentissage = 0.1 ;;

Nombre_iter = 10^6 ;;

commencerApprentissage(reseau = reseauNeurones1 , theta = theta_apprentissage, iterations = Nombre_iter) ;;

[...]

> Pas possible ! Dans chacun des tests on est bloqués !

> Qu'y a-t-il ?

> L'algo converge pas ! Enfin, pour chaque structure, ça marche pas, on doit pas avoir le bon theta de Newton. Les thetas trop petits, ils nous donneraient peut-être la convergence, mais en 10^5 années à ce stade, et les theta trop grands font un algo totalement instable, les coeff sautent de partout...

> Vous avez essayé de rajouter une pénalisation, genre comme dans le recuit simulé ?

> C'est-à-dire ?

> Avec un truc qui dépendrait du temps, pour arriver à un truc stable.

> Ouaip... Ou alors on pourrait changer l'algo de propagation et prendre theta = theta(t), genre décroissant lentement ?

> Faudrait alors choisir une forme fonctionnelle pour la dépendance en t... Vous pensez à un truc exponentiel ?

> Ouais, mais genre par morceaux, avec des pas de taille croissante

> Du coup pas d'exponentielle, on peut faire les grilles classiques.

listeThetas = [50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01] ;;

PourChaque i dans (1:Nombre_iter) faire :

{

theta_apprentissage = choixTheta(ind = i, thetas = listeThetas) ;;

commencerApprentissage(reseau = reseauNeurones1 , theta = theta_apprentissage, iterations = 20) ;;

}

[...]

> Et maintenant ?

> Vous avez réussi à faire converger les algos ?

> Ouais, ça devrait être bien significatif... Peut-être même un peu de sur-apprentissage

> Faudrait voir ça... Ça passe les tests de validation croisée ?

> Oui, mais pas de beaucoup, il y a un risque qu'on ait des coeff inutiles, on pourrait vérifier ça en faisant du ré-échantillonnage

> Nonparamétrique ?

> Forcément...

> Il n'y a plus qu'à lancer les simus, alors !

nombreSimulations = 100 ;;

PourChaque i dans (1:nombreSimulations) faire :

{

simulation1 = reseauNeurones1.faireSimulation() ;;

stockerSimu(simulation = simulation1, emplacement = i) ;;

}

[...]

> Vous avez vu les résultats ?

> Vous voulez dire "lu", plutôt, comme c'est un texte ?

> Oui oui. Alors, vos avis ?

> Ben, franchement, c'est pas mal, il reste un peu de calibration à faire, mais ça semble cool.

> Je pense qu'il y a vraiment du potentiel, ça ressemble bien à ce que je l'ai l'habitude de lire... Je dirais même que c'est difficilement distinguable !

> Tant que ça ?

> Ben... On est forcément influencés par nos propres biais. Une façon d'en être certain, ce serait de connecter directement la sortie de l'algo avec un site de publication.

> Hum ... Ce serait une super idée, oui !

> Et à après tout on a rien à perdre, il suffirait de prendre un pseudo, et puis on verra bien si les gens s'en rendent compte ou non.

> On pourrait même devenir riches, si beaucoup de gens l'achètent !

> Ne rêvez pas trop non plus. Si on veut réussir à faire écrire le premier récit inventé par une machine, il faut que ce soit elle à 100% qui s'en occupe. Donc on ne doit pas la lire avant de la publier.

> Il faudrait même écrire un programme qui choisit automatiquement un titre et qui rédige un résumé...

[...]

> Tu sais quoi ?

> Non ?

> On vient de recevoir un message de la part du site, là , celui où on avait mis le truc écrit en sortie du programme.

> Ok, et donc ? Ils ont vu que c'était nul ?

> Non, justement, c'est le contraire ! On est numéro 1 des ventes sur la semaine, apparemment ça a beaucoup plu !

> Tu te moques de nous ?

> Enfin ça devrait être bien possible, vu qu'on a fait une pondération via le classement...

> Attendez, je vous transfère le mail !

> Eh ouais, effectivement !

> Du coup on leur répond quoi ?

> Je sais pas ...


Bạn đang đọc truyện trên: Truyen247.Pro

Tags: