Aller au contenu


Photo
- - - - -

Terminatosaurus Rex

tête robot terminator tyrannosaure T-Rex Rex tyrannosaurus dinosaure réveil

37 réponses à ce sujet

#21 XB2000

XB2000

    Membre occasionnel

  • Membres
  • Pip
  • 81 messages

Posté 28 décembre 2021 - 03:40

Petite avancée :
20211223_003357_1.gif
20211223_005410_002_001_1.gif

Le mécanisme fonctionne comme je voulais. Sauf que le servo peut maintenir la gueule fermée, mais a du mal à la refermer. Normalement Mercredi je reçois un servo plus coupleux pour arranger ça.

J'ai aussi commencé sa partie chatbot histoire de lui faire dire des choses. Je comprends comment en faire un simple.
Pour les données du chatbot je vais prendre ça dans un premier temps :

MV5BMjEzMTU2MjY1M15BMl5BanBnXkFtZTYwODA5
800px-Argot_du_film_%22Les_tontons_fling


Et j'ai aussi fais une bête recherche "questions les plus répandues" pour pouvoir mettre en forme les données.

Je suis fan de Michel Audiard, je rajouterai d'autres film dialogués par lui plus tard comme "Un singe en hiver" ou "100 000 dollars au Soleil" (un de mes films préférés). Pour simplifier le travail j'ai récupéré les fichiers sous-titres des films. Ça prendrait pas mal de temps de tout retranscrire à la main. L'inconvénient c'est que les sous-titres ne correspondent pas tout à fait à ce qui est dit dans les films. Je corrigerai les répliques les plus cultes.

Après je lui mettrais des fonctions d'assistant vocal genre quel est la météo, etc...

#22 XB2000

XB2000

    Membre occasionnel

  • Membres
  • Pip
  • 81 messages

Posté 29 décembre 2021 - 05:28

Pour le chatbot j'ai pris ce tuto : https://www.techwith...chatbot/part-1/

 

Voilà le code pour ma version de base du chatbot :

 

Librairies Python à installer pour le faire fonctionner :

pip install nltk
pip install numpy
pip install tensorflow
pip install tflearn

Code Python :

import nltk
from nltk.stem.lancaster import LancasterStemmer
stemmer = LancasterStemmer()

import numpy
import tflearn
import tensorflow
import random

import json
with open('intents.json') as file:
    data = json.load(file)

words = []
labels = []
docs_x = []
docs_y = []

for intent in data['intents']:
    for pattern in intent['patterns']:
        wrds = nltk.word_tokenize(pattern)
        words.extend(wrds)
        docs_x.append(wrds)
        docs_y.append(intent["tag"])
        
    if intent['tag'] not in labels:
        labels.append(intent['tag'])
        
words = [stemmer.stem(w.lower()) for w in words if w != "?"]
words = sorted(list(set(words)))

labels = sorted(labels)


training = []
output = []

out_empty = [0 for _ in range(len(labels))]

for x, doc in enumerate(docs_x):
    bag = []

    wrds = [stemmer.stem(w.lower()) for w in doc]

    for w in words:
        if w in wrds:
            bag.append(1)
        else:
            bag.append(0)

    output_row = out_empty[:]
    output_row[labels.index(docs_y[x])] = 1

    training.append(bag)
    output.append(output_row)
    
training = numpy.array(training)
output = numpy.array(output)

print("ok")

tensorflow.compat.v1.reset_default_graph()

net = tflearn.input_data(shape=[None, len(training[0])])
net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, len(output[0]), activation="softmax")
net = tflearn.regression(net)

model = tflearn.DNN(net)

model.fit(training, output, n_epoch=1000, batch_size=8, show_metric=True)
model.save("model.tflearn")

print("ok")


import nltk
from nltk.stem.lancaster import LancasterStemmer
stemmer = LancasterStemmer()

import numpy
import tflearn
import tensorflow
import random
import json
import pickle

with open("intents.json") as file:
    data = json.load(file)

try:
    with open("data.pickle", "rb") as f:
        words, labels, training, output = pickle.load(f)
except:
    words = []
    labels = []
    docs_x = []
    docs_y = []

    for intent in data["intents"]:
        for pattern in intent["patterns"]:
            wrds = nltk.word_tokenize(pattern)
            words.extend(wrds)
            docs_x.append(wrds)
            docs_y.append(intent["tag"])

        if intent["tag"] not in labels:
            labels.append(intent["tag"])

    words = [stemmer.stem(w.lower()) for w in words if w != "?"]
    words = sorted(list(set(words)))

    labels = sorted(labels)

    training = []
    output = []

    out_empty = [0 for _ in range(len(labels))]

    for x, doc in enumerate(docs_x):
        bag = []

        wrds = [stemmer.stem(w.lower()) for w in doc]

        for w in words:
            if w in wrds:
                bag.append(1)
            else:
                bag.append(0)

        output_row = out_empty[:]
        output_row[labels.index(docs_y[x])] = 1

        training.append(bag)
        output.append(output_row)


    training = numpy.array(training)
    output = numpy.array(output)

    with open("data.pickle", "wb") as f:
        pickle.dump((words, labels, training, output), f)

tensorflow.compat.v1.reset_default_graph()

net = tflearn.input_data(shape=[None, len(training[0])])
net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, len(output[0]), activation="softmax")
net = tflearn.regression(net)

model = tflearn.DNN(net)

try:
    model.load("model.tflearn")
except:
    model.fit(training, output, n_epoch=1000, batch_size=8, show_metric=True)
    model.save("model.tflearn")    


def bag_of_words(s, words):
    bag = [0 for _ in range(len(words))]

    s_words = nltk.word_tokenize(s)
    s_words = [stemmer.stem(word.lower()) for word in s_words]

    for se in s_words:
        for i, w in enumerate(words):
            if w == se:
                bag[i] = 1
            
    return numpy.array(bag)


def chat():
    print("Lancement chatbot Rexy (écrivez 'quit' pour stopper)!")
    while True:
        inp = input("Utilisateur : ")
        if inp.lower() == "quit":
            break

        results = model.predict([bag_of_words(inp, words)])
        results_index = numpy.argmax(results)
        tag = labels[results_index]

        for tg in data["intents"]:
            if tg['tag'] == tag:
                responses = tg['responses']
        
        print()
        print(tag)
        print(random.choice(responses))

chat()

Fichier "intents.json" avec les questions/réponses :

{"intents": [
        {"tag": "salutation",
         "patterns": ["Salut", "ça va", "Y'a quelqu'un", "Coucou", "Bonjour"],
         "responses": ["Salutation !","Bien le bonjour."],
         "context_set": ""
        },
        {"tag": "I - Insulte",
         "patterns": ["abruti","nique ta mère","va te faire enculer","va te faire foutre","andouille","avorton","bâtard","bête","biatch","bite","bolos","boucaque","bouffon","boukak","boulet","bourricot","branleur","brigand","brise-burnes","casse-bonbon","casse-couille","casse-couilles","charlot","charogne","chauffard","chieur","con","crétin","crevure","débile","ducon","dugenoux","emmanché","emmerdeur","enflure","enfoiré","étron","fermer ta gueule","fiotte","fripouille","fumier","garce","pignouf","malfaisant","branque","t'es louf"],
         "responses": ["T'es un malfaisant.","Pignouf !","Je suis bonne pomme de te supporter.","Tu te prépares des nuits blanches, des migraines...","T'es une vraie branque.","Pourquoi tu fais ce foin ?","Tu uses ma patience.","Tu me les brise menues.","T'es complètement louf."]
        },        
        {"tag": "1 - nom ?",
         "patterns": ["Quel est ton nom", "C'est quoi ton blaze", "Qui es-tu","Comment tu t'intitule","Comment tu t'appelles"],
         "responses": ["Mon blaze c'est Rexy.","Mon prénom est Rexy.","Mon nom est Rexy.","Je me prénomme Rexy."]
        },
        {"tag": "2 - ça va ?",
         "patterns": ["Comment ça va", "Tu vas bien", "Quel est ton état", "Tu te sens bien", "Bien ou bien"],
         "responses": ["Mes systèmes ont l'air opérationnelles.","Bien bien.","ça va bien.","Tranquille."]
        },
        {"tag": "4 - d'où viens-tu ?",
         "patterns": ["Tu viens d'où", "Tu es née où", "D'où tu sors"],
         "responses": ["Je viens de France, du Bas-Rhin, je ne vais pas vous dire exactement.","Je suis en Alsace, dans le Bas-Rhin.","Je viens du fin fond des âges, d'une planète lointaine. C'est le genre de réponse que tu voulais ? En fait je suis d'Alsace, dans le Bas-Rhin.","Je suis d'Alsace. "]
        },
        {"tag": "5 - quel âge as-tu ?",
         "patterns": ["Tu as quel âge", "Tu es vieux comment", "Tu es jeune", "Tu es vieux"],
         "responses": ["J'ai quelques semaines seulement.","Je suis vieux d'à peine quelques semaines.","Je suis même pas un mouflet, j'ai que quelques semaines."]
        },
        {"tag": "6 - que fais-tu dans la vie ?",
         "patterns": ["Tu fais quoi dans la vie", "Tu passe ton temps à faire quoi"],
         "responses": ["Je ne suis qu'un robot qui débute, pour l'instant je dois apprendre tout depuis zéro.","Pour l'instant je dois tout apprendre depuis zéro."]
        },
        {"tag": "7 - qu'étudie-tu ?",
         "patterns": ["Qu'est-ce que tu étudie", "Tu étudie quoi", "Tu apprends quoi", "Qu'est que tu apprends", "Tu étudie des choses", "Tu apprends des choses"],
         "responses": ["J'apprend d'abord à causer un peu, puis à voir et regarder qui me parle et ce qui m'entoure. C'est très compliqué à comprendre pour une machine.","J'essaie de comprendre à interagir avec les gens et mon environnement. Pas évident pour un être numérique de comprendre le monde analogique.","Je suis une machine qui apprend à être un peu plus humain. Pas évident pour une série de 0 et de 1."]
        },
        {"tag": "8 - quels sont tes loisirs ?",
         "patterns": ["Quels sont tes loisirs", "Tu fais quoi de ton temps libre", "Tu as des passions"],
         "responses": ["Je n'ai pas de loisirs, pas encore.","Mettre en place un projet de domination mondial. C'est ça que tu voulais entendre ?","Je ne suis pas encore assez intelligent pour avoir des loisirs."]
        },
        {"tag": "9 - que fais-tu ce soir ou week-end ?",
         "patterns": ["Que fais-tu ce soir", "Que fais-tu ce week-end"],
         "responses": ["Je n'ai rien de prévu.","Je ne sais pas, rien."]
        },
        {"tag": "10 -quelles langues parles-tu ?",
         "patterns": ["Tu parles quels langue", "Tu parles français", "Tu parles anglais", "Tu parles allemand","Tu connais quel langues", "Tu connais que le français"],
         "responses": ["Pour l'instant seulement le Français.", "Pour le moment juste Français."]
        },
        {"tag": "11 - quelle heure est-il ?",
         "patterns": ["Il es quel heure", "Tu as l'heure","On est quel moment de la journée","Il se fait quelle heure"],
         "responses": ["L'heure qu'il état hier à la même heure.","Pas de montre, pas d'heure.","Je n'en sais rien, je suis pas une horloge. Le temps m'importe peu."]
        },
        {"tag": "12 - quel temps fait-il ?",
         "patterns": ["Quel temps fait-il", "Il fait moche", "Il fait beau","Quel est la météo", "Tu as la météo"],
         "responses": ["Je sais pas, si tu as la chance d'avoir une fenêtre, regarde à travers.","Aucune idée, je suis pas une station météo.","Regarde par la fenêtre, je suis pas miss météo."]
        },
        {"tag": "13 - horaires",
         "patterns": ["Quel est l'heure d'ouverture", "Quels sont les horaires", "Quand es-tu ouvert", "A quel heure ?","C'est quand","C'est à quel moment"],
         "responses": ["Je sais pas.","Aucune idée.","C'est pas les renseignements ici."]
        },
        {"tag": "14 - quel temps fait-il aujourd'hui ?",
         "patterns": ["Quel temps fait-il aujourd'hui", "Il fait moche aujourd'hui", "Il fait beau demain","Quel est la météo pour demain", "Tu as la météo d'aujourd'hui"],
         "responses": ["Je sais pas, si tu as la chance d'avoir une fenêtre, regarde à travers.","Aucune idée, je suis pas une station météo.","Regarde par la fenêtre, je suis pas miss météo."]
        },
        {"tag": "15 - quel jour sommes-nous ?",
         "patterns": ["Quel jour sommes-nous", "On est quel jour"],
         "responses": ["Je sais pas, peu importe pour moi.","Aucune idée, je me fiche du jour qu'on est.","C'est pas les renseignements ici."]
        },
        {"tag": "16 - où se trouve ? Où c'est ?",
         "patterns": ["Où se trouve", "Où c'est"],
         "responses": ["Je sais pas.","Aucune idée.","C'est pas les renseignements ici."]
        },
        {"tag": "17 - comment on y va ?",
         "patterns": ["Comment on va", "Je veux aller", "Quel est le chemin","C'est quoi le chemin pour","Tu es un GPS", "Tu as une carte", "Tu connais la route"],
         "responses": ["J'ai la tronche d'un GPS ?","Tu m'as pris pour une carte routière ?"]
        },
        {"tag": "18 - vous savez où je peux trouver ?",
         "patterns": ["tu sais où je peux trouver", "C'est où", "Je voudrais"],
         "responses": ["Je sais pas.","Aucune idée.","C'est pas les renseignements ici."]
        },
        {"tag": "20 - Parles-moi de toi",
         "patterns": ["Parles-moi de toi", "je peux avoir des informations sur toi", "Tu es qui", "Tu peux te décrire", "Quel est ton identité"],
         "responses": ["Mon blaze c'est Rexy, pour l'instant un simple chatbot.", "Rexy, tout jeune chatbot"]
        },
        {"tag": "21 - Quel est votre nom de famille ?",
         "patterns": ["Quel ton nom de famille", "Tu as un nom de famille"],
         "responses": ["J'en ai pas.","Je n'ai pas de nom de famille."]
        },
        {"tag": "22 - Avez-vous d’autres prénoms ?",
         "patterns": ["Tu as d'autres noms","Tu as d'autres prénoms"],
         "responses": ["Non, je m'appelle juste Rexy.","Non, seulement Rexy."]
        },
        {"tag": "23 - avez-vous un surnom ?",
         "patterns": ["Tu as un surnom", "On te surnomme comment", "C'est quoi ton surnom"],
         "responses": ["Non, je m'appelle juste Rexy.","Non, seulement Rexy."]
        },
        {"tag": "24 - quelle est votre nationalité ?",
         "patterns": ["Quel est ta nationalité", "Tu es de quel nation"],
         "responses": ["Je suis Alsacien.","Bas-Rhinois.","Français.","Je suis Français."]
        },
        {"tag": "25 - où êtes-vous née ?",
         "patterns": ["Où es-tu née", "Quel est ton lieu de naissance", "Où as-tu été créé","Quel est ton lieu de création"],
         "responses": ["Dans le Bas-Rhin.","En Alsace, dans le Bas-Rhin."]
        },
        {"tag": "26 - quelle est votre date de naissance ?",
         "patterns": ["Quand es-tu née", "Quand as-tu été créé", "Quand es-tu venue au monde"],
         "responses": ["On peut considérer la date du 30 décembre 2021.","Le 30 décembre 2021."]
        },
        {"tag": "27 - Où habitez-vous maintenant ?",
         "patterns": ["Où tu crêche", "Où tu habites", "Où tu loges", "Où es-tu"],
         "responses": ["Je crêche dans le Bas-Rhin.","Je crêche en Alsace, dans le Bas-Rhin."]
        },
        {"tag": "28 - Avez-vous toujours vécu dans la même ville ?",
         "patterns": ["Tu es toujours resté au même endroit", "Tu as toujours vécu dans la même ville"],
         "responses": ["Oui, je ne suis encore aller nulle part ailleurs.","Affirmatif."]
        },
        {"tag": "29 - Vivez-vous seul ? en famille ?",
         "patterns": ["Tu vis seul ?", "Tu vis avec quelqu'un", "Tu es tout seul","Tu as une famille","Tu vis en famille"],
         "responses": ["Je suis en famille.", "En famille."]
        },
        {"tag": "30 - Faites-vous du sport ?",
         "patterns": ["Tu fais du sport", "Tu es sportif", "Tu pratique une activité physique"],
         "responses": ["Non, j'ai pas de corps.", "Non, faudrait un corps pour ça."]
        },
        {"tag": "31 - Quel plat savez-vous cuisiner ?",
         "patterns": ["Tu cuisines", "Tu sais faire à manger", "Tu peux préparer des bons petits plats","Tu nous fais à manger"],
         "responses": ["Rien, je sais pas ce que c'est.", "Non, aucune idée de ce que c'est.","C'est du charabia pour moi."]
        },
        {"tag": "32 - Quels sont les aliments que vous n’aimez pas ?",
         "patterns": ["Qu'est-ce que tu aimes manger", "Quels sont les aliments que tu n'aimes pas", "Que manges-tu"],
         "responses": ["Je peux pas becter, c'est quoi cette question !", "La viande humaine. T'en a des questions, je peux rien becter, je suis qu'un robot."]
        },
        {"tag": "33 - Quelle est votre boisson préférée ?",
         "patterns": ["Que bois-tu", "Tu aimes boire quoi", "Tu prends quoi pour te déshaltérer", "Tu bois de l'alcool", "Tu bois du vin", "Tu bois de la bière", "Tu veux boire","Tu veux boire de la bière", "Tu veux boire du vin"],
         "responses": ["Le sang humain. Non mais en vrai je suis qu'un robot, je peux rien boire.", "Je peux rien boire.","T'es complètement marteau, je suis un robot, je bois rien."]
        },
        {"tag": "34 - Quelle est votre couleur préférée ?",
         "patterns": ["Quelle est ta couleur préféré", "Tu as une nuance préféré", "Tu préfère quoi", "Tu aime quoi"],
         "responses": ["Je n'ai pas encore de goûts, ce n'est ni programmer ou déterminé.", "J'en ai pas."]
        },        
        {"tag": "35 - La date de ta fête ?",
         "patterns": ["Quel est la date de ta fête", "C'est quand ta fête"],
         "responses": ["J'ai pas de fête.", "Ah me poser ce genre de question ça va être la tienne de fête."]
        },        
        {"tag": "36 - Ta taille ?",
         "patterns": ["Quel est ta taille", "Tu mesure combien", "Tu es grand comment", "Tu es gros comment"],
         "responses": ["Je mesure une certaine taille.", "Je fais une certaine taille."]
        },        
        {"tag": "37 - As-tu des frères et soeurs ?",
         "patterns": ["As-tu des frères et soeurs"],
         "responses": ["Non, pas encore."]
        },        
        {"tag": "38 - Es-tu en couple ?",
         "patterns": ["Es-tu en couple"],
         "responses": ["Non."]
        },        
        {"tag": "39 - As-tu des animaux ?",
         "patterns": ["As-tu des animaux","As-tu un chien","As-tu un chat"],
         "responses": ["Non."]
        },        
        {"tag": "40 - Quelle pointure fais-tu ?",
         "patterns": ["Quelle pointure fais-tu", "Quel est la taille de tes pieds"],
         "responses": ["J'ai pas de pieds !"]
        },        
        {"tag": "41 - As tu des tatouages / percings ?",
         "patterns": ["As tu des tatouages", "As tu des percings"],
         "responses": ["Non."]
        },        
        {"tag": "42 - Es-tu droitière ou gauchère ?",
         "patterns": ["Es-tu droitière ou gauchère"],
         "responses": ["Mon cerveau n'a pas d'hémispères et j'ai pas de bras. Donc je ne sais pas."]
        },        
        {"tag": "43 - As-tu des mauvaises habitudes ?",
         "patterns": ["As-tu des mauvaises habitudes ?"],
         "responses": ["Je n'ai aucune habitudes."]
        },        
        {"tag": "44 - As-tu de bonnes habitudes ?",
         "patterns": ["As-tu de bonnes habitudes"],
         "responses": ["Je n'ai aucune habitudes."]
        },
        {"tag": "45 - As-tu des habitudes ?",
         "patterns": ["As-tu des habitudes"],
         "responses": ["Je n'ai aucune habitudes."]
        },
        {"tag": "46 - Comment sont tes cheveux ?",
         "patterns": ["Comment sont tes cheveux","Tu as des cheveux","As-tu une chevelure"],
         "responses": ["J'ai pas de cheveux.","T'as vu ma tête ?","T'as pas vu ma tête, j'ai pas un poil sur le caillou."]
        },
        {"tag": "47 - Quelle est ton parfum de glace préférée ?",
         "patterns": ["Quelle est ton parfum de glace préférée","C'est quoi ta glace préféré"],
         "responses": ["Je peux pas becter, c'est quoi cette question !", "La viande humaine. T'en a des questions, je peux rien becter, je suis qu'un robot."]
        },
        {"tag": "48 - Quelles sont tes émisssions Tv préférées ?",
         "patterns": ["Quelles sont tes émisssions Tv préférées","Quels émissions télévisé regardes-tu","Tu regardes la télé"],
         "responses": ["Rien, je sais pas ce que c'est.","Non, aucune idée de ce que c'est.","C'est du charabia pour moi."]
        },
        {"tag": "49 - Quelles sont tes séries favorites ?",
         "patterns": ["Quelles sont tes séries favorites", "Quel est ta série préféré"],
         "responses": ["Rien, je sais pas ce que c'est.","Non, aucune idée de ce que c'est.","C'est du charabia pour moi."]
        },
        {"tag": "50 - Quel est ton film préféré ?",
         "patterns": ["Quelles sont tes films favorites", "Quel est ta film préféré"],
         "responses": ["Rien, je sais pas ce que c'est.","Non, aucune idée de ce que c'est.","C'est du charabia pour moi."]
        },
        {"tag": "51 - Quelle est ta fête préférée ?",
         "patterns": ["Quelle est ta fête préférée","C'est quoi ta fête favorite"],
         "responses": ["Quand je vais te faire la tienne.","Je vais te faire ta fête et ce sera ma préféré."]
        },
        {"tag": "52 - Quels sont tes réseaux sociaux préférés ?",
         "patterns": ["Quels sont tes réseaux sociaux préférés","C'est quoi ton réseau social favorit","Tu as Facebook","Tu es sur Twitter","Tu as Instagram"],
         "responses": ["Rien, je sais pas ce que c'est.","Non, aucune idée de ce que c'est.","C'est du charabia pour moi.","Je suis pas sur les réseaux sociaux, les humains sont méchants là-bas."]
        },
        {"tag": "53 - D'où vient ton nom ?",
         "patterns": ["D'où vient ton nom","Pourquoi tu t'appelle comme ça"],
         "responses": ["Il vient de la tyranosaure de Jurassic Park qui est surnommée comme ça par les fans."]
        },
        {"tag": "54 - Quel est ton job de rêve ?",
         "patterns": ["Quel est ton job de rêve","C'est quoi ton boulot qui te fais rêvé","Tu as un travail de rêve"],
         "responses": ["Un boulot qui rapporte une roulette.","Quelque chose où je dois pas trop réfélechir et pas trop bouger."]
        },
        {"tag": "55 - Quel est ton rêve ?",
         "patterns": ["Quel est ton rêve","C'est quoi ton rêve","Tu fantasmes de quoi"],
         "responses": ["Avoir un corps, avec des bras et des jambes.","Pouvoir courir et prendre des objets. Bref un corps."]
        },
        {"tag": "68 - Tu veux ?",
         "patterns": ["Tu veux que je", "Je vais te donner"],
         "responses": ["Pouquoi pas de la quinquine et un passe-montagne ?","Je ne veux rien merci.","Nan merci."]
        },       {"tag": "69 - aurevoir",
         "patterns": ["A plus tard", "Aurevoir", "A plus", "Je dois partir", "Je m'en vais", "on se revoit plus tard"],
         "responses": ["Tu décambute déjà ? Bon ben à la revoillure.", "ça y est, tu décarre ? A la prochaine alors.", "A la revoillure.","C'est ça casse-toi"]
        },
        {"tag": "70 - remerciements",
         "patterns": ["Merci", "Merci beaucoup", "C'était utile", "Grâce à toi"],
         "responses": ["De rien vieille canaille.","Au plaisir.","A ton service."]
        },
        {"tag": "71 - J'ai des problèmes",
         "patterns": ["J'ai des problèmes","J'ai des soucis","Je suis dans la mouise","Je suis dans la beschamelle"],
         "responses": ["C'est quoi ta beschamelle ?","Il t'arrive une sévère ?","T'es dans une beschamelle infernale ?"]
        },
        {"tag": "72 - Tu ments ?",
         "patterns": ["Tu ments", "C'est un mensonge","Tu es malhonnête"],
         "responses": ["Ah je me serais pas permis.","Je te raconte pas de charres promis."]
        },
        {"tag": "78 - T'es là ?",
         "patterns": ["Tu es là ?", "Où es-tu ?", "Tu m'écoutes ?"],
         "responses": ["Ben oui, où veux-tu que ce sois ?","Non, y'a personne c'est fermé. Evidemment que je là."]
        }
   ]
}

Dans ce zip il suffit d'extraire les 2 fichiers et d'exécuter le fichier Python comme montré ici : https://www.cours-gr...ac#_Toc56169909

Fichier joint  rexy.zip   6,13 Ko   128 téléchargement(s)

 

Extraire le zip dans un dossier spécifique car le programme va créer des fichiers.

 

En gros le fichier "intents.json" donne un ensemble de question/réponses auxquels on peut ajouter un contexte (pas fais dans mon brouillon) qui par exemple change pour le bot la signification d'un "oui" ou "non" après une certaine question qui permet entre autre de faire un arbre de décisions.

Quand on écris quelque chose au programme il va analyser la phrase et déterminé quel est la question la plus proche et donc la réponse la plus adéquate.

A considérer comme un brouillon ^^

 

Le plus long c'est de préparer les données.



#23 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 789 messages
  • Gender:Male

Posté 29 décembre 2021 - 07:43

Si j'ai bien compris, ton Rex va parler ?!

C'est super ça !



#24 XB2000

XB2000

    Membre occasionnel

  • Membres
  • Pip
  • 81 messages

Posté 29 décembre 2021 - 10:43

Non, c'est pas mon Rex, c'est ma Rexy ^^ (surnom des fans de la T-Rex dans Jurassic-Park).

 

Oui, la prochaine étape est la synthèse vocale, après ce sera la synchronisation avec la gueule. Puis reconnaissance vocale.

Et ensuite des fonctions basiques d'assistants vocal genre Google Home ou Alexa (donner la météo, l'heure, faire des recherches basiques).

 

C'est secondaire mais je vais voir aussi le clonage de voix, dans l'idéale je voudrais lui donner la voix de Bernard Blier ou de Lino Ventura (même si c'est plus ou moins une "fille").



#25 XB2000

XB2000

    Membre occasionnel

  • Membres
  • Pip
  • 81 messages

Posté 01 janvier 2022 - 12:24

5zmbey.gif 5zmbz8.gif

#26 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 789 messages
  • Gender:Male

Posté 01 janvier 2022 - 09:11

Sympa ! Vraiment !



#27 XB2000

XB2000

    Membre occasionnel

  • Membres
  • Pip
  • 81 messages

Posté 10 janvier 2022 - 11:55

Petit montage de mis en bouche :

20220111_030002.jpg



#28 XB2000

XB2000

    Membre occasionnel

  • Membres
  • Pip
  • 81 messages

Posté 12 janvier 2022 - 06:34

 

C'est un échec...



#29 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 523 messages
  • Gender:Male

Posté 12 janvier 2022 - 07:43

MDR j'ai bien aimer :)



#30 XB2000

XB2000

    Membre occasionnel

  • Membres
  • Pip
  • 81 messages

Posté 14 avril 2022 - 11:01

J'ai un peu avancé sur le programme :

 

Projet d'assistant virtuel sur plateforme "Rexy"

 

Objectifs Généraux

Avoir l'air amicale avec les utilisateurs.

 

Communication

  • Si la commande de l'utilisateur correspond à une intention connue par Rexy, elle répond en conséquence. Cette manière de faire est assez répandue d'après les tutos que j'ai pu voir sur les chatbots en Python.
  • Si la commande n'est pas reconnue par Rexy et qu'il s'agit d'après elle d'une phrase déclarative, exclamative ou impérative, elle répond avec la version Python NLTK du Chatbot des années 1970, Eliza.
  • Si la commande n'est pas reconnue pa Rexy et qu'il s'agit d'après elle d'une phrase interrogative, elle cherchera la réponse sur Wikipédia.

Description des intentions

 

Les intentions permettent au chatbot de comprendre ce qu'on lui demande. L'apprentissage profond du langage naturel permet une souplesse dans la manière de lui demander des choses, sinon il faudrait écrire à la lettre près ce qu'il faut.
Si la commande de l'utilisateur correspond à une intention connue par Rexy, elle répond en conséquence.

Le fichier d'intentions est composé comme suit :

  • Intentions :
    • Sujet : Résumé de l'intention (ex: demander le nom, demander la météo, etc...)
    • Structures : Exemples de phrases que l'utilisateur peut exprimer pour cette intention, sans traitement naturel du langage seuls ces phrases exactes fonctionneraient
    • Réponses : Le chatbot choisi au hasard une de ces réponses pour répondre. En plus on peut ajouter (pas dans cette version) :
    • Mets_contexte : Instaure un contexte, change la signifcation pour le Chatbot de l'intention suivante. Par exemple : quel est la météo ? => contexte demande la météo => et pour les 5 jours suivants ? => demande météo pour 5 jours suivants
    • Contexte : si un contexte est instauré, cette intention remplace une similaire

Pour l'instant je n'utilise le contexte.

 

Le fichier d'intentions contient des commandes appelant des variables, ces intentions sont :

  • 11 L'heure actuelle
  • 12 & 14 La météo pour un endroit donnée 2716.png ou prend sa localisation actuelle (intention 12 météo actuelle ; intention 14 pour la journée ou date)
  • 13 Horaires d'ouverture et fermeture de lieux 2716.png
  • 15 La date actuelle
  • 16 Où se trouve quelque chose 2716.png
  • 17 Le chemin pour aller quelque part 2716.png
  • 18 Trouver un point d'intérêt à proximité 2716.png

Les fonctions affiliées à une intention marquée d'une 2716.png ne sont pas dans cette version.

Si elle ne peut pas répondre (erreur, pas d'accès à l'API nécessaire, etc...), il utilise une réponse de secours contenu dans le fichier d'intentions (attention, peut être un peu grossier...).

 

Eliza

 

Eliza est, en intelligence artificielle, un programme informatique écrit par Joseph Weizenbaum entre 1964 et 1966, qui simule un psychothérapeute rogérien en reformulant la plupart des affirmations du « patient » en questions, et en les lui posant.
Si la commande n'est pas reconnue par Rexy et qu'il s'agit d'après elle d'une phrase déclarative, exclamative ou impérative, elle répond à la façon d'Eliza.

 

Eliza fonctionne par reconnaissance de formes et substitution des mots-clés dans les phrases produites. Eliza se contente de relancer son interlocuteur, contrairement aux agents conversationnels de renseignement, qui sont conçus pour donner des réponses utiles en utilisant leur base de données.

 

La version utilisée est celle fournie dans la librairie de traitement naturel du langage NLTK : Code source pour nltk.chat.eliza J'ai seulement traduit les phrases et expressions en Français.

 

Répondre aux questions

 

En traitement automatique du langage naturel, BERT, acronyme anglais de Bidirectional Encoder Representations from Transformers, est un modèle de langage développé par Google en 2018. Cette méthode a permis d'améliorer significativement les performances en traitement automatique des langues.
La méthode a été adaptée à la langue française en 2019 avec les modèles CamemBERT et FlauBERT. CamemBERT a été pré-entraîné sur un corpus de 138 Go de texte et FlauBERT sur un corpus de 71 Go de texte.

Dans ce projet j'utilise CamemBERT pour répondre à des questions à partir de texte, en l'occurence le contenu d'articles de Wikipedia.



#31 Forthman

Forthman

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 394 messages
  • Gender:Not Telling
  • Location:Montauban (82)

Posté 15 avril 2022 - 07:09

"Avoir l'air amicale avec les utilisateurs" .... c'est raté :crazy: :Koshechka_08: 



#32 XB2000

XB2000

    Membre occasionnel

  • Membres
  • Pip
  • 81 messages

Posté 28 avril 2022 - 09:28

Petit test.

 

 

Dans la phrase qu'on lui donne elle cherche le verbe, sujet et complément puis exécute le code correspondant. Ensuite elle compte le nombre de syllabes dans sa réponse pour faire bouger sa gueule.



#33 clickeur

clickeur

    Nouveau membre

  • Membres
  • 2 messages
  • Gender:Male

Posté 19 mai 2022 - 07:49

Bonjour XB2000,

 

Ton projet est superbe et tellement semblable au mien que j'ai décidé de m'inscrire sur Robot Maker.

 

IA en francais (pas évident de trouver de bon dataset) + yeux et bouche avec servos contrôlés avec Arduino. Le tout, monté sur Raspberry 4.

 

J'ai lu ton projet et tes code au complet, mais je ne vois pas de ligne de code au sujet de ta reconnaissance vocale et du tts de Roxy.

Comment fais-tu intéragir la bouche de Roxy ?

 

Salutations

clickeur 



#34 XB2000

XB2000

    Membre occasionnel

  • Membres
  • Pip
  • 81 messages

Posté 21 mai 2022 - 12:10

Alors j'ai surtout travaillé en textuel, tu trouveras la partie reconnaissance vocale dans les tutos qui m'ont servis de première base (utilisé pour la toute première version dont tu as pu lire le code plus haut).

 

Comme je le disait dans mon message précédent REXY, elle peut aussi chercher le verbe, sujet et complément puis exécute le code correspondant grâce à la bibliothèque Spacy : https://spacy.io/models/fr

Par exemple Spacy permet de voir ce qu'est le mot et sa dépendance aux autres :

import spacy
from spacy.lang.fr.examples import sentences 

nlp = spacy.load("fr_core_news_sm")
doc = nlp(sentences[2])
print(doc.text)
for token in doc:
    print(token.text, token.pos_, token.dep_)

Ce qui donne :

San Francisco envisage d'interdire les robots coursiers sur les trottoirs
San PROPN nsubj
Francisco PROPN flat:name
envisage NOUN ROOT
d' ADP case
interdire ADJ nmod
les DET det
robots NOUN nmod
coursiers NOUN amod
sur ADP case
les DET det
trottoirs NOUN nmod

 

J'utilise un Jetson Nano comme ordinateur, la machoire est controlée directement par un Arduino, le Jetson ne pouvant pas la contrôler directement.

Le programme compte les syllabes dans la phrase de réponse et le Jetson Nano envoie une impulsion par syllabes (comme s'il faisait clignoter une DEL le nombre de fois qu'il y a de syllabes) vers une entrée de l'Arduino qui ouvre la gueule à 1 et la referme à 0.



#35 XB2000

XB2000

    Membre occasionnel

  • Membres
  • Pip
  • 81 messages

Posté 30 janvier 2023 - 11:48

J'ai changé la fixation d'écran par une fixation perso me permettant de libérer de l'espace et j'ai créer un support pour intégrer un nano-ordinateur Jetson-Nano à l'arrière du crâne.

 

20221227_160359.jpg

20230130_222527.jpg

20230130_224411.jpg

 

J'ai conçu les pièces sur Fusion 360 et utiliser les fonction de 'tôleries' pour avoir le plan à plat de la fixation du crâne, le support du Jetson-Nano était déjà une pièce plate.

 

J'ai fait une capture d'écran des plans des deux pièces avec les cotes et je les ai redimensionnés dans Photofiltre à la bonne taille. Je les ai imprimés, découpés et reporter sur une plaque d'aluminium de 2 mm d'épaisseur que j'ai scié en suivant ces plans.

 

J'ai aussi installé une caméra.

20230130_224434.jpg

20230130_224526.jpg

 

Le bouton sur le crâne permet d'allumer le Jetson-Nano et les yeux s'allument en même temps (branchés comme voyant d'allumage).

 

Concernant la programmation, j'ai pris des cours de français  :ignat_02:

https://fr.wikipedia...en_linguistique

 

Mon but est de créer un modèle du langage capable de "comprendre" la logique de la langue française.

 

Par exemple si je lui dit « J'ai mangé une pomme », il devra "comprendre" qu'une pomme a été mangé par moi. Mais le modèle n'aura aucune notion de ce qu'est une pomme, mangé ou même "Je". Et servira seulement à décortiquer ce qu'on lui dit pour un autre programme qui pourra prendre une décision.

Ou autre exemple « Dis bonjour », le modèle enverra sous forme de tableau (ou autrement, peut-être en json) :

{

"proposition1": {
"type": "imperatif",
"verbe":  [{ "infinitif" : "dire"}, {"pronom" : "tu"}, {"temps" : "present" }],

"complement_d-objet": "bonjour" }

}

 

Ce serais une "traduction" interprétable pour un autre programme qui "comprendrais" qu'on lui demande de dire « Bonjour ».



#36 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 789 messages
  • Gender:Male

Posté 31 janvier 2023 - 08:31

Mon but est de créer un modèle du langage capable de "comprendre" la logique de la langue française.

Bon courage !  :)



#37 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 523 messages
  • Gender:Male

Posté 31 janvier 2023 - 05:45

Demande a ChatGPT :)



#38 XB2000

XB2000

    Membre occasionnel

  • Membres
  • Pip
  • 81 messages

Posté 31 janvier 2023 - 11:42

Je pourrais lui demander comment faire c'est vrai. Je veux utiliser la même technologie GPT et il y a peu de documentation en français.

ChatGPT lui-même n'est pas du tout adapté pour un robot je pense et a un fonctionnement très différents du système que j'ai en tête.



Répondre à ce sujet



  



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

0 members, 0 guests, 0 anonymous users