Risultati Ricerca Intelligenza Artificiale Italia
331 risultati trovati per "ChatGPT business"
- Visualizzare i dati con il LinePlot o grafico a linee con Python e MatplotLib
Prerequisiti : Se non sai perchè utilizzeremo python, clicca qui Se non hai ancora installato Python, clicca qui Se non sai come scaricare e gestire le librerie, clicca qui Se non sai cosa sia un Dataset, clicca qui Prima di iniziare la giuda pratica per creare uno linePlot partendo da un dataset vediamo quando è utile o necessario utilizzare il grafico a linee. Cosa è lo linePlot? Il grafico a linee rappresenta su due assi (x & y), mediante una o piu linee, coppie di dati numerici, con una variabile di coordinate ( x, y ). Quando è consigliato usarlo? Quando bisogna cercare quale variabile indipendente influenzi maggiormente la variabile dipendente Quando la variabile dipendente può avere più valori per ogni valore della variabile indipendente Quando si cerca di determinare se le due variabili sono correlate. In alcuni casi vine anche usato per lo studio di funzioni. Installiamo la librerie Necessarie Per installare le librerie necessarie per la rappresentazione dei nostri dati con il LinePlot o grafico a linee apriamo il terminale e digitiamo il seguente comando: pip install matplotlib pip3 install matplotlib #per python3 pip install numpy pip3 install numpy #per python3 pip install pandas pip3 install pandas #per python3 Giuda alla visualizzazione dello LinePlot da un file Excel Creiamo un nuovo file e importiamo le librerie che ci serviranno. Per questo esempio utilizzeremo questo file excel import matplotlib.pyplot as plt import pandas as pd Creiamo adesso con pandas il nostro dataset in memoria Creiamo adesso con pandas il nostro dataset in memnoria #carichiamo in Ram i dati contenuti nel file excel dataset = pd.read_excel (r'mq_prezzo_appartamento.xlsx') #stampiamo il nostro dataset print(dataset) output: mq prezzo 0 50 37500 1 55 45375 2 60 54000 3 65 63375 4 70 73500 5 75 84375 6 80 96000 7 85 108375 8 90 121500 9 95 135375 10 100 150000 11 105 165375 12 110 181500 13 115 198375 14 120 216000 15 125 234375 16 130 253500 17 135 273375 18 140 294000 19 145 315375 20 150 337500 21 155 360375 22 160 384000 23 165 408375 24 170 433500 25 175 459375 26 180 486000 27 185 513375 28 190 541500 29 195 570375 30 200 600000 31 205 630375 32 210 661500 33 215 693375 34 220 726000 35 225 759375 36 230 793500 37 235 828375 38 240 864000 Creiamo due liste contenti rispettivamente i valori X (metri quadrati) e Y (prezzo appartamento) #creiamo due liste conteneti rispettivamente i valori X (metri quadrati) e Y (prezzo appartamento) mq = dataset['mq'] prezzo = dataset['prezzo'] #stampiamo le nostre liste print(mq,prezzo) output: 1 55 2 60 3 65 ... 37 235 38 240 1 45375 2 54000 3 63375 ... 37 828375 38 864000 Visti così si capisce poco e niente, ma ora vedremo come rappresentarli con un grafico a dispersione. La libreria MatplotLib offre anche la possibilità di personalizzare i nostri grafici. #definire il titolo del grafico plt.title("Rapporto dimensione / prezzo degli appartamenti") #definire il testo dell'asse x plt.xlabel("Dimensione in m^2 dell'appartamento") #definire il testo dell'asse y plt.ylabel("prezzo in € dell'appartamento") #definire lo sfondo a griglia plt.grid() #definire le dimensioni de grafico plt.rcParams['figure.figsize'] = [15,10] #altezza,lunghezza #la funzione per creare il grafico è molto semplice plt.plot(metriquadrati_appartamento,prezzi_appartamento, label="Rapporto appartamenti") #definire la leggenda del grafico plt.legend() #salviamo il grafico plt.savefig("scatterPlot_rapporto_mq_prezzo_appartamenti.png") #mostriamo il grafico plt.show() output: Scarica Gratuitamente l'esempio Per scaricare gratuitamente devi prima registrati/accede al portale. Scorri in fondo alla pagina per registrati o accedere Giuda alla visualizzazione dello LinePlot da dati generati Creiamo un nuovo file e importiamo le librerie che ci serviranno. import matplotlib.pyplot as plt import numpy as np Creiamo adesso con Numpy dei dati da rappresentare # utilizzando la funzione np.linspace(35,150) andiamo a creare una lista # contenente 50 (size) numeri casuali da 50 a 150, i quali indicheranno la metratura quadrata metriquadrati_appartamento = np.linspace(50,150) # utilizzando la funzione np.power(metriquadrati_appartamento, 2)*9 andiamo a creare una lista # contenente 50 numeri generati elevando al quadrato e moltiplicato per 15 la metratura quadrata prezzi_appartamento = np.power(metriquadrati_appartamento, 2)*15 print(metriquadrati_appartamento,prezzi_appartamento) Output: [ 50. 52.04081633 54.08163265 56.12244898 58.16326531 60.20408163 62.24489796 64.28571429 66.32653061 68.36734694 70.40816327 72.44897959 ... 143.87755102 145.91836735 147.95918367 150. ] [ 37500. 40623.69845898 43872.34485631 47245.939192 50744.48146606 54367.97167847 58116.40982924 61989.79591837 ... 284647.02207414 293143.48188255 301764.88962932 310511.24531445 319382.54893794 328378.80049979 337500. ] Visti così non si capisce poco e niente, ma ora vedremo come rappresentarli con un grafico a dispersione La libreria MatplotLib offre anche la possibilità di personalizzare i nostri grafici. #definire il titolo del grafico plt.title("Rapporto dimensione / prezzo degli appartamenti") #definire il testo dell'asse x plt.xlabel("Dimensione in m^2 dell'appartamento") #definire il testo dell'asse y plt.ylabel("prezzo in € dell'appartamento") #definire lo sfondo a griglia plt.grid() #definire le dimensioni de grafico plt.rcParams['figure.figsize'] = [15,10] #altezza,lunghezza #la funzione per creare il grafico è molto semplice plt.plot(metriquadrati_appartamento,prezzi_appartamento, label="Rapporto appartamenti") #definire la leggenda del grafico plt.legend() #salviamo il grafico plt.savefig("scatterPlot_rapporto_mq_prezzo_appartamenti.png") #visulazziare il grafico plt.show() Output: Scarica Gratuitamente l'esempio Per scaricare gratuitamente devi prima registrati/accede al portale. Scorri in fondo alla pagina per registrati o accedere LinePlot: Quando e Come Utilizzarlo per Visualizzare i Dati Il grafico a linee, o LinePlot, è uno strumento potente per visualizzare dati numerici su due assi, solitamente rappresentati da coppie di valori (x, y). Ma quando è davvero utile utilizzarlo? Quando Utilizzare il LinePlot? Il LinePlot è consigliato quando si desidera esplorare la relazione tra una variabile indipendente e una variabile dipendente. È particolarmente utile nei seguenti casi: Analisi delle Correlazioni: Se si vuole determinare se esiste una correlazione tra due variabili, il LinePlot offre una visualizzazione chiara dei dati. Variazione nel Tempo: Quando si vogliono tracciare i cambiamenti nel tempo di una variabile rispetto a un'altra, il LinePlot fornisce una rappresentazione intuitiva. Tendenze o Modelli: Se si sospetta che i dati seguano una tendenza o un modello specifico, il LinePlot può evidenziare queste caratteristiche. Esempi di Utilizzo del LinePlot Per capire meglio come utilizzare il LinePlot, prendiamo ad esempio il prezzo degli appartamenti in base alla loro dimensione. Creiamo un grafico a linee che mostri questa relazione: import matplotlib.pyplot as plt import numpy as np # Creazione di dati generati casualmente metriquadrati_appartamento = np.linspace(50, 150) prezzi_appartamento = np.power(metriquadrati_appartamento, 2) * 15 # Personalizzazione del grafico plt.title("Rapporto Dimensione / Prezzo degli Appartamenti") plt.xlabel("Dimensione in m^2 dell'Appartamento") plt.ylabel("Prezzo in € dell'Appartamento") plt.grid() plt.rcParams['figure.figsize'] = [15,10] # Creazione del LinePlot per i dati generati plt.plot(metriquadrati_appartamento, prezzi_appartamento, label="Rapporto Appartamenti") plt.legend() # Salvataggio e visualizzazione del grafico plt.savefig("lineplot_rapporto_mq_prezzo_appartamenti.png") plt.show() Esplorare Dati Generati con il LinePlot import matplotlib.pyplot as plt import pandas as pd # Caricamento dei dati dal dataset dataset = pd.read_excel(r'mq_prezzo_appartamento.xlsx') # Estrazione delle colonne 'mq' e 'prezzo' mq = dataset['mq'] prezzo = dataset['prezzo'] # Personalizzazione del grafico plt.title("Rapporto Dimensione / Prezzo degli Appartamenti") plt.xlabel("Dimensione in m^2 dell'Appartamento") plt.ylabel("Prezzo in € dell'Appartamento") plt.grid() plt.rcParams['figure.figsize'] = [15,10] # Creazione del LinePlot plt.plot(mq, prezzo, label="Rapporto Appartamenti") plt.legend() # Salvataggio e visualizzazione del grafico plt.savefig("lineplot_rapporto_mq_prezzo_appartamenti.png") plt.show() Conclusioni Il LinePlot è uno strumento versatile per visualizzare relazioni e tendenze nei dati. Utilizzalo per esplorare connessioni tra variabili, tracciare variazioni nel tempo o identificare modelli nei tuoi dati. Continua a esplorare le potenzialità del LinePlot e scopri nuove informazioni nei tuoi dati! Grazie mille per la lettura, condividi l'articolo per sostenerci
- Intelligenza artificiale nella vita quotidiana
rendere la nostra vita più sicura, più facile e più sana, a fornirci nuove opportunità di lavoro e di business Inoltre, l'IA può anche offrire nuove opportunità di lavoro e di business, ad esempio nei settori della
- Git - Il tool essenziale per l’intelligenza artificiale
(prima di tutto connetti il cervello, poi la memoria ed infine usa gli strumenti giusti) Git è lo strumento software essenziale per incominciare a lavorare con l’intelligenza artificiale, lo si può utilizzare sin dai primi passi, magari assieme alla tua IDE (Integrated Development Environment, ovvero ambiente di sviluppo integrato) o editor di programmazione preferito. Git è un progetto open source, forse quello più utilizzato in assoluto, in quanto estremamente utile, ideato e sviluppato nel 2005 da Linus Torvalds (vi dice nulla?), il creatore del kernel del sistema operativo Linux! Git fondalmentalmente è un software per il controllo delle “versioni”, più precisamente, un DVCS (Distributed Version Control System, sistema di controllo delle versioni distribuito), ma, oltre ad essere distribuito, Git è stato progettato per fornire prestazioni, sicurezza e flessibilità. Le funzionalità principali che consentono di sottoporre a “commit” le nuove modifiche, di creare “branch”, di eseguire il “merge” e di fare un confronto con le versioni precedenti sono tutte ottimizzate per fornire ottime prestazioni. Gli algoritmi implementati all'interno di Git sfruttano tutti i dati inerenti gli attributi comuni degli alberi dei file di codice sorgente reali, di come vengono solitamente modificati nel tempo e dei modelli di accesso. In particolare, l’oggetto dei file del repository Git utilizza una combinazione di codifica delta (archiviazione delle differenze di contenuto, tramite le sequenze dei commit) e compressione (come il formato zip, inoltre, archivia esplicitamente i contenuti delle directory e gli oggetti dei metadati della versione. Ad esempio, supponiamo che uno sviluppatore apporti modifiche al codice sorgente, aggiungendo del codice e quindi esegua il commit di tali modifiche con messaggi descrittivi. In seguito poi apporti ulteriori modifiche ed esegua un nuovo commit. Git, archivierà questa sequenza di operazioni, identificandone ogni dettaglio. Se lo sviluppatore passa le modifiche su uno dei rami dell’archivio, (effettua un branch), ad esempio quello inerente all’ambiente di test o di sviluppo, potrà condividere il suo lavoro con altri, Se effettua un “push” in cloud, dove viene condiviso il progetto, senza dover intaccare il ramo principale del progetto (main). Git - Il tool essenziale per l’intelligenza artificiale Riassumendo, i repository online e locali possono essere divisi in ramificazioni (Branch). I branch (ramificazioni) permettono di creare delle versioni assestanti del codice master. Queste versioni "assestanti" permettono la creazione di features o aggiornamenti in fase alpha che non vanno ad intaccare minimamente il codice del progetto. Finito la scrittura della ramificazione il branch verrà unito con il master (main). Git permette di gestire i tag. I tag sono le versioni del software in uso. I tag registrano tutti i commit fino al rilascio nel server. Git è stato concepito, considerando come priorità imperativa, la tutela dell'integrità del codice sorgente gestito. Il contenuto dei file e le reali relazioni tra file e directory, le versioni, i tag e i commit, tutti oggetti nel repository Git, sono protetti da un algoritmo di “hashing”, sicuro a livello di crittografia, chiamato SHA1. Questo algoritmo protegge il codice e la cronologia delle modifiche da variazioni accidentali e dannose, garantendo la completa tracciabilità della cronologia. Uno dei principali obiettivi di progettazione di Git è la flessibilità. Git è flessibile sotto diversi aspetti: è in grado di supportare vari tipi di flussi di lavoro e di sviluppo non lineare, offre efficienza in progetti di piccole e grandi dimensioni ed è compatibile con molti sistemi e protocolli esistenti. Git, dovrebbe essere la priorità nella scelta di apprendimento per un sviluppatore inesperto che desidera acquisire competenze preziose negli strumenti di sviluppo software, in particolare se si vuole intraprendere un percorso di apprendimento nell’ambito del software utilizzato in ambito dello sviluppo di applicazioni di intelligenza artificiale. Ovviamente, la documentazione è eccellente e vasta, con libri, tutorial e siti Web dedicati, podcast e i video tutorial. La caratteristica open source riduce i costi per gli sviluppatori amatoriali consentendo loro di utilizzare Git senza pagare una commissione. Come installare di GIT Per gli utenti windows: https://gitforwindows.org/ Per utenti Linux (dovrebbe essere installato di default ovviamente). In qualsiasi caso: $ sudo apt-get update $ sudo apt-get install git Per gli utenti OS (se non installato): https://sourceforge.net/projects/git-osx-installer/files/ I principali comandi GIT Per lavorare con GIT ci vuole un po’ di impegno che lo sviluppatore alle prime armi, dovrebbe impiegare per famigliarizzare con i comandi che questo tool richiede per effettuare le varie procedure di utilizzo. Uno dei comandi principali è sicuramente quello che permette di “clonare” un progetto esistente, presente in rete, ad esempio nella piattaforma GitHub. Per inciso, GitHub è un servizio di hosting per progetti software, di proprietà della società GitHub Inc. git clone è un comando per scaricare il codice sorgente esistente da un repository remoto (come elemento di Github, per esempio). In altre parole, git clone praticamente fa una copia identica dell'ultima versione di un progetto in un repository e la salva sul tuo computer locale. Esempio: git clone https://github.com/cheshire-cat-ai/core.git cheshire-cat scarica il progetto di Piero Savastano cheshire-cat-ai : un framework per creare servizi di intelligenza artificiale personalizzati utilizzando qualsiasi LLM. Cheshire-Cat (Stregatto) Questo comando genera in locale una directory corrispondente al progetto esistente: git branch è il comando con il quale si può generare il “ramo” sul quale operare in locale. I branch sono molto importanti nel mondo Git. Usando i branch, parecchi sviluppatori sono in grado di lavorare in parallelo sullo stesso progetto simultaneamente. Se si apre una CLI (terminale) nella directory generata dal clone (ci si può accedere anche con cd cheshire-cat). Se invece si volesse fare una prova preliminare, con un proprio progetto o “repository”, si potrebbe creare una cartella apposita ed accedervi anche imparando ad usare la terminale con le istruzioni: magoo@magoo:~/U_2023_D$ mkdir prova magoo@magoo:~/U_2023_D$ cd prova magoo@magoo:~/U_2023_D/prova$ git init è il comando da usare per il setup iniziale di un repository. magoo@magoo:~/U_2023_D/prova$ git init suggerimento: Utilizzo di 'master' come nome per il ramo iniziale. Questo nome ramo predefinito suggerimento: è soggetto a modifiche. L’esecuzione di questo comando crea la sottodirectory .git nella directory in cui viene eseguito (la directory del progetto); nessun file viene aggiunto o modificato oltre alla sottodirectory .git All’interno della directory (nascosta) .git vengono creati tutti i metadati necessari a Git (branch di default, oggetti, reference, file template, …). La maggior parte dei comandi Git sono disponibili solo se eseguiti all’interno di un repository inizializzato. È, ovviamente, possibile inizializzare una directory diversa da quella corrente indicando il percorso: git init /path/to/project/directory A questo punto, all’intrno della directory “prova”, si può editare un file, come questo, che servirà per fare una prova di utilizzo del linguaggio Python, per passare da testo scritto a sintesi vocale: #test_to_speak # apt-get install espeak -y import subprocess import time lang = "en+f5" speaker = True message = "Hi I'm cheshire cat" print (message) #--------------- def Speak(): global message, lang print (message) spk_now = 'espeak -v'+lang +' " '+ message + ' " ' #print(spk_now) subprocess.call(spk_now, shell=True) #time.sleep (1) #---------- if speaker: Speak() #------------------- nota: per il funzionamento di questo file è necessario installare eSpeak che è un sintetizzatore vocale software open source compatto per l'inglese e altre lingue, per Linux e Windows. Possiamo controllare lo stato del nostro repositori con il comando git status: magoo@magoo:~/U_2023_D/prova$ git status Sul branch master Non ci sono ancora commit : File non tracciati: (usa "git add ..." per includere l'elemento fra quelli di cui verrà eseguito il commit) test_to_speak.py non è stato aggiunto nulla al commit ma sono presenti file non tracciati (usa "git add" per tracciarli) con questo comando si possono visualizzare diverse informazioni, tra le quali: controllare se il branch corrente è aggiornato controllare se c'è qualcosa da passare a commit, da inviare al repository oppure da ottenere dal repository controllare se ci sono file nell'area di stage, non passati all'area di stage oppure non tracciati controllare se ci sono file creati, modificati o cancellati Il “tracciamento” dei file avviene mediante commit, ma per poterlo effettuare è necessario aggiungere il file al controller Git, il comando, in questo caso dovrà essere: git add test_to_speak.py il risultato viene riportato di seguito: magoo@magoo:~/U_2023_D/prova$ git add test_to_speak.py magoo@magoo-Strix-GL504GM:~/U_2023_D/prova$ git status Sul branch master Non ci sono ancora commit Modifiche di cui verrà eseguito il commit: (usa "git rm --cached ..." per rimuovere gli elementi dall'area di staging) nuovo file: test_to_speak.py Il file appena aggiunto viene portato in uno stato di “staging”, ovverosia è pronto per essere “committato”, o per meglio dire, in termini meno tecnici “tracciato”. Se si volessero aggiungere tutti i file di un repository, il comando sarebbe git add -A. Se adesso si volesse effettuare il commit però, Git risponderebbe con un errore, come riportato dalle seguenti linee di comando: magoo@magoo:~/U_2023_D/prova$ git commit -m "aggiunto file test per python" Identità autore sconosciuta Dimmi chi sei. Esegui git config --global user.email "tu@esempio.com" git config --global user.name "Il tuo nome" per impostare l'identità predefinita del tuo account. Ometti --global per impostare l'identità solo in questo repository. fatal: impossibile rilevare automaticamente l'indirizzo e-mail (ho ricavato 'magoo@magoo-Strix-GL504GM.(none)') Come è giusto che sia, daltronde, Git è stato concepito appositamente per una funzionalità “collaborativa”, dove ogni autore deve essere riconosciuto. Quindi, seguendo le istruzioni suggerite, si portà effettuare il commit in modo corretto, sul branch nel quale si sta operando: magoo@magoo-Strix-GL504GM:~/U_2023_D/prova$ git config user.email romeo.ceccato@gmail.com magoo@magoo-Strix-GL504GM:~/U_2023_D/prova$ git config user.name magoo magoo@magoo-Strix-GL504GM:~/U_2023_D/prova$ git commit -m "aggiunto file test in python" [master (commit radice) f4e4e27] aggiunto file test in python 1 file changed, 21 insertions(+) create mode 100644 test_to_speak.py Per vedere il risultato di questa operazione, si utilizza il comando git log, più in generale, questa funzionalità è specialmente utile per ottenere un riepilogo dello “storico” delle operazioni effettuate e tracciate. Vale sempre la pena di perfezionare i criteri di ricerca per ottenere risultati migliori, specialmente quando si tratta di progetti di grandi dimensioni. A questo scopo Git offre numerose possibilità, come riportato da questa tabella: In questo caso il comando git log produrrà il seguente risultato: magoo@magoo:~/U_2023_D/prova$ git log commit f4e4e274766a502d77c1f89c17a26143494c8632 (HEAD -> master) Author: magoo Date: Thu Jun 8 15:36:55 2023 +0200 aggiunto file test in python Se, lo stesso comando lo avessimo fatto, all’interno della directory di Cheshire_cat, otterremmo qualcosa di diverso, come nell’esempio di seguito riportato: commit f6d4ec26157afebf1200c0b6bf3e5092b1312639 (HEAD -> main, origin/main, origin/HEAD, test_beta) Author: pieroit Date: Fri Jun 2 21:21:13 2023 +0200 .env is optional commit b5058cebd21589e4939dd644d6c900b79c906025 Author: Piero Savastano Date: Thu Jun 1 22:52:17 2023 +0200 Update how-to-write-a-plugin.md commit 13c69932d30d0be62701807054a8f09565d3b2ef Author: Piero Savastano Date: Thu Jun 1 22:32:21 2023 +0200 Update README.md commit 4993de08257f74ed0d39125f6118522fe097b264 Author: Piero Savastano Date: Thu Jun 1 19:48:55 2023 +0200 Possiamo usare il comando git branch per creare, elencare ed eliminare branch. Esempio: git branch test_beta genera un ramo di lavoro denominato test_beta, se eseguiamo questo comando all’interno della directory “prova”, otterremmo il seguente risultato: magoo@magoo:~/U_2023_D/prova$ git branch test_beta magoo@magoo:~/U_2023_D/prova$ git log commit f4e4e274766a502d77c1f89c17a26143494c8632 (HEAD -> master, test_beta) Author: magoo Date: Thu Jun 8 15:36:55 2023 +0200 aggiunto file test in python A questo punto, si potrebbe desiderare di lavorare su questo ramo, per evitare eventuali modifiche indesiderate al ramo principale master (main). Per questo, si può utilizzare il comando git checkout. git checkout è il comando che permette di “spostare”, l’ambiente di lavoro, al ramo desiderato. Esempio: git checkout test_beta magoo@magoo:~/U_2023_D/prova$ git checkout test_beta Si è passati al branch 'test_beta' Se adesso andassimo a fare delle modifiche al file in python, come ad esempio queste: #test_to_speak # apt-get install espeak -y import subprocess import time lang = "en+f5" #lang = "it+f5" speaker = True message = "Hi I'm cheshire cat" #message = "ciao io sono lo Stregatto" print (message) #--------------- def Speak(): global message, lang print (message) spk_now = 'espeak -v'+lang +' " '+ message + ' " ' #print(spk_now) subprocess.call(spk_now, shell=True) #time.sleep (1) #---------- if speaker: Speak() ed andassimo a controllare lo stato del repository, otterremmo qualcosa di analogo a questo: magoo@magoo:~/U_2023_D/prova$ git status Sul branch test_beta Modifiche non nell'area di staging per il commit: (usa "git add ..." per aggiornare gli elementi di cui sarà eseguito il commit) (usa "git restore ..." per scartare le modifiche nella directory di lavoro) modificato: test_to_speak.py nessuna modifica aggiunta al commit (usa "git add" e/o "git commit -a") Quindi si potrebbe a questo punto effettuare un ulteriore commit seguendo le istruzioni di cui sopra: magoo@magoo:~/U_2023_D/prova$ git add . magoo@magoo:~/U_2023_D/prova$ git commit -m "modifiche al file di test" [test_beta 9f7dc90] modifiche al file di test 1 file changed, 2 insertions(+), 1 deletion(-) permette di operare le modifiche al codice, senza apportare modifiche indesiderate al 'origin/main' o al branch . Se volessimo verificare lo stato storico del repository, vedremmo quanto segue: magoo@magoo:~/U_2023_D/prova$ git log commit 9f7dc9036bf7a978953b4e004e7388b00ad6fa78 (HEAD -> test_beta) Author: magoo Date: Thu Jun 8 16:29:53 2023 +0200 modifiche al file di test commit f4e4e274766a502d77c1f89c17a26143494c8632 (master) Author: magoo Date: Thu Jun 8 15:36:55 2023 +0200 aggiunto file test in python Se, a questo punto, si volesse controllare le modifiche tra i due file presenti nei brach master e in test-beta, lo si potrebbe fare mediante il comendo git diff, come riportato dalle seguenti linee di comando della CLI: magoo@magoo:~/U_2023_D/prova$ git diff test_beta master diff --git a/test_to_speak.py b/test_to_speak.py index f64f430..a04a09c 100644 --- a/test_to_speak.py +++ b/test_to_speak.py @@ -3,10 +3,9 @@ import subprocess import time lang = "en+f5" -#lang = "it+f5" + speaker = True message = "Hi I'm cheshire cat" -#message = "ciao io sono lo Stregatto" print (message) #--------------- Per concludere questa piccola introduzione all’impiego di Git, potrei invitarvi a far eseguire il codice in python, ricordando che vi sono molti altri comandi essenziali per poter lavorare con Git, come ad esempio quello che permette di fondere i file nel ramo di test con quelli del ramo principale di lavoro (master) per il repository di prova. Se si osserva, con il comado git log, quando si è su un barach, viene indicata la posizione: magoo@magoo:~/U_2023_D/prova$ git log commit a2ee0cdc4b49414987bed98d0386fae77411b816 (HEAD -> master) Nel nostro caso, se non si è nel ramo master, eseguiremo git checkout main. Se si lavora con repository remoti sarà bene assicurarsi che il branch di destinazione e quello che verrà sottoposto a merge siano aggiornati con le ultime modifiche remote, Eseguendo il comando git fetch per eseguire in seguito un pull dei commit remoti più recenti. In questo caso, per semplicità illusrto solo il l’effetto del comando git merge: magoo@magoo:~/U_2023_D/prova$ git merge test_beta Merge automatico di test_to_speak.py in corso Merge made by the 'ort' strategy. test_to_speak.py | 1 + 1 file changed, 1 insertion(+) considerazioni finali Ovviamente, questo è solo un piccolo assaggio di ciò che comporta lavorare con Git e con la comuniti di github che ad un alto livello, corrisponde ad un servizio web e cloud-based che aiuta gli sviluppatori ad archiviare e gestire il loro codice e a tracciare e controllare le modifiche. La conoscenza dei comandi Git, quindi, può essere considerata come prerogativa base per accedere ad un qualsiasi colloquio di lavoro da parte di chi aspira a divenire uno sviluppatore di software per l’intelligenza artificiale. Git, in particolare, dovrebbe essere preso in considerazione perché può essere impiegato in molte applicazioni dove si vuole facilitare la collaborazione di intenti, anche al di fuori dello sviluppo di software. In tutto questo, vi chiederete, cosa centra lo Stregatto? Cheshire cat A.I. è un progetto ideato da Piero Savastano, che con molta lungimiranza ha intravisto la possibilità di attuare quello che si può considerare una piattaforma di sviluppo simile a Wordpress, ma orientata all’intelligenza artificiale, a mio avviso e spero che sia anche l’opinioni di altri esperti del settore, questo sarà sicuramente uno dei progetti più interessanti a livello mondiale in questo settore. A proposito, Chesire cat gioca nei contenitori di Docker, di cui ne ho parlato in questo articolo: https://www.intelligenzaartificialeitalia.net/post/i-contenitori-di-intelligenza-artificiale Il mio invito, pertanto è quello di collaborare a questa iniziativa che, affiliandosi alle direttive e allo spirito del freeware, ma soprattutto del open source, mantiene uno spirito morale libero, che promuove la sinergia, la collaborazione e la sussidiarietà, nello sviluppo di applicazioni etiche a livello mondiale, ma che, in questo ultimo periodo, sembrano minacciate da un accentramento tecnocratico che in nome del profitto e del controllo, ne minaccia il futuro. Grazie per la lettura Romeo Ceccato
- L'impatto delle Intelligenze Artificiali sulla società e nel mondo del lavoro
Noi di IntelligenzaArtificialeItalia.net ci stiamo dando da fare, ad esempio abbiamo creato un ChatBOT simile a CHATGPT con il quale puoi divertirti. Inizia a chattare con il CHATBOT -> https://rebrand.ly/CHATBOT-IAITALIA Domanda provocatoria: come possiamo
- GPTs la Guida Completa: Creazione e Personalizzazione di GPTs con il Generatore OpenAI
Oltre un anno fa, l'innovativo ChatGPT ha rivoluzionato il panorama tecnologico. OpenAI, la mente dietro ChatGPT, ha lanciato di recente una straordinaria possibilità: la creazione di Ecco come dare vita al tuo ChatGPT personalizzato sfruttando il potente generatore GPTs di OpenAI. Mentre gli utenti ChatGPT Plus o Enterprise possono già personalizzare le risposte di ChatGPT con istruzioni Aggiungi Azioni: Se vuoi che il tuo chatbot compia azioni al di fuori di ChatGPT, fai clic su "Aggiungi
- I contenitori di intelligenza artificiale
In termini molto pratici, l'intelligenza artificiale è una funzione complessa, di "algoritmi", ovvero il prodotto di "software" che risiede su dei supporti “hardware”, funziona su dei sistemi operativi diversi, quindi su macchine differenti, che possono comunicare tra loro, scambiando informazioni, elaborando dati in ingresso e fornendo altri dati in uscita. Uno dei sistemi migliori, che permette un "ambiente protetto" per questi software, è quello di incapsualare questi "organismi informatici", all'interno di contenitori: "i container". Docker è una piattaforma aperta per lo sviluppo, la spedizione e l'esecuzione di applicazioni di ogni tipo. Docker consente di separare le applicazioni dalla infrastruttura che le ospita, in modo da poter fornire rapidamente il software specifico. Con Docker, si può quindi gestire l'infrastruttura nello stesso modo in cui si gestiscono le applicazioni, sfruttando rapidamente le metodologie di questa piattaforma, per la spedizione, il test e la distribuzione del codice, è possibile ridurre significativamente il ritardo tra scrittura del codice ed esecuzione in produzione. Docker fornisce dunque, la possibilità di impacchettare ed eseguire un'applicazione in un ambiente isolato chiamato contenitore "CONTAINER". L'isolamento e la sicurezza consentono di eseguire molti contenitori contemporaneamente su un determinato host ("MACCHINA"). I contenitori si possono considerare "leggeri", in quanto specifici per far girare quella applicazione e quindi non è necessario fare affidamento su ciò che è attualmente installato sull'host. I contenitori si possono facilmente condividere, e danno la garanzia di funzionare allo stesso modo, a parità di sistema operativo ospitante. Il contenitore diventa quindi “l'unità atomica”, per la distribuzione e il test dell'applicazione. I contenitori Docker possono essere eseguiti sul laptop locale di uno sviluppatore, su macchine fisiche o virtuali in un data center, sui fornitori di cloud o in una miscela di ambienti. Questa metodologia di sviluppo, fornisce un'alternativa praticabile ed economica alle macchine virtuali basate su hypervisor, in modo da poter utilizzare più capacità del server per raggiungere gli obiettivi aziendali. Docker è perfetto sia per ambienti ad alta densità che per implementazioni di piccole e medie dimensioni in cui è necessario fare di più con meno risorse. Docker utilizza un'architettura client-server. In particolare, un client Docker è "Docker Compose", che consente di lavorare con applicazioni costituite da un insieme di contenitori. Per sintetizzare a livello visivo, potremmo concepire Docker, in questo modo: Elementi specifici di Docker Docker daemon: Docker Daemon (Dockkerd) ascolta le richieste dell'API Docker e gestisce oggetti Docker come immagini, contenitori, reti e volumi. Un demone può anche comunicare con altri demoni per gestire i servizi Docker. The Docker client: Docker Client (Docker) è il modo principale in cui molti utenti Docker interagiscono con Docker. Quando si utilizzano comandi come Docker RUN, il client invia questi comandi a Dockerd, che li esegue. Il comando Docker utilizza l'API Docker. Il client Docker può comunicare con più di un demone. Docker Desktop: Docker Desktop è un'applicazione facile da installare per l'ambiente MAC, Windows o Linux che consente di creare e condividere applicazioni e microservizi containerizzati. Docker Desktop include Docker Daemon (Dockkerd), Docker Client (Docker), Docker Compose, Docker Content Trust, Kubernetes e Helper credenziali. Docker registries: Un registro Docker memorizza immagini Docker. Docker Hub è un registro pubblico che chiunque può utilizzare e Docker è configurato per cercare immagini su Docker Hub per impostazione predefinita. si può persino gestire un registro personale privato. Quando si utilizzano i comandi "Docker Pull" o "Docker Run", le immagini richieste vengono estratte dal registro configurato. Quando si utilizza il comando "Push Docker", l'immagine viene inviata al registro configurato. Docker objects: Quando si usa Docker, si possono generare e utilizzare immagini, contenitori, reti, volumi, plugin e altri oggetti. Images: Un'immagine è un modello di sola lettura con istruzioni per la creazione di un contenitore Docker. Spesso, un'immagine si basa su un'altra immagine, con una personalizzazione aggiuntiva. Ad esempio, è possibile creare un'immagine basata sull'immagine Ubuntu, ma installa il server Web Apache e l'applicazione specifica, comprensiva di configurazione necessaria per l'utilizzo. Si possono generare immagini o usare solo quelle create da altri e pubblicate in un registro. Per creare una immagine, si utilizza un file Docker con una semplice sintassi per definire i passaggi necessari per creare l'immagine ed eseguirla. Ogni istruzione in un fikerfile crea un livello nell'immagine. Quando si cambia il Dockerfile e si ricostruisce l'immagine, vengono ricostruiti solo quegli strati che sono cambiati, in questo modo si rendono le immagini così leggere, piccole e veloci, rispetto ad altre tecnologie di virtualizzazione. Containers: Un contenitore è un'istanza eseguibile di un'immagine. È possibile creare, avviare, fermare, spostare o eliminare un contenitore utilizzando l'API Docker o la CLI. È possibile collegare un contenitore a una o più reti, allegare l'archiviazione ad esso o persino creare una nuova immagine in base al suo stato attuale. Per impostazione predefinita, un contenitore è relativamente ben isolato da altri contenitori e dalla sua macchina host. È possibile controllare come la rete di un contenitore, l'archiviazione o altri sottosistemi sottostanti sono isolati da altri contenitori o dalla macchina host. Un contenitore è definito dalla sua immagine e da qualsiasi opzione di configurazione che viene fornita quando si crea o lo si avvia. Quando un contenitore viene rimosso, eventuali modifiche al suo stato che non sono conservate in modo persistente scompaiono. Oltre ai moduli specifici della lingua, la documentazione di Docker fornisce anche linee guida per costruire e gestire in modo efficiente l'ambiente di sviluppo. Si possono trovare informazioni sulle migliori pratiche per la scrittura di file di docker, costruire e gestire le immagini in modo efficiente, guadagnando miglioramenti delle prestazioni costruendo immagini usando buildkit, ecc. Si possono anche trovare istruzioni specifiche su come mantenere piccole le immagini e come persistere i dati delle applicazioni, come utilizzare build multi-stage, ecc. Volumes Un volume di container permette di mantenere inalterati i file anche quando si eliminano i container Docker. I volumi rappresentano inoltre una possibilità pratica per scambiare dati tra l’host e il container. Collegare un volume di un container Docker rappresenta una buona soluzione per eseguire le seguenti operazioni: Trasmettere dati in un container Docker Salvare dati da un container Docker Scambiare dati tra container Docker I volumi di Docker esistono al di fuori dello union file system grazie all’accesso di sola lettura e al livello descrivibile.Il volume è una cartella condivisa tra il container e il computer host. È possibile anche condividere volumi tra container. Un volume di un container “vive” al di fuori del container in questione sul computer host, il volume si comporta come una cartella in cui salvare file o da cui recuperare dati. Si tratta del cosiddetto “mount point” (punto di montaggio) in una directory dell’host. Linguaggi software supportati dai DOCKER IA : JavaScript E’ uno dei linguaggi di programmazione più popolari al mondo. Oggi alimenta milioni di siti web e ha attratto frotte di sviluppatori e designer per creare funzioni per il web. Se siete alle prime armi con la programmazione, sappiate che JavaScript è probabilmente uno dei migliori linguaggi di programmazione da apprendere. Node.js è un ambiente runtime single-threaded, open-source e multipiattaforma per la creazione di applicazioni server-side e di networking veloci e scalabili. Gira sul motore di runtime JavaScript V8 e usa un’architettura I/O event-driven e non bloccante, il che lo rende efficiente e adatto ad applicazioni real-time. Python Python è un linguaggio di programmazione di "alto livello", orientato a oggetti, adatto, tra gli altri usi, a sviluppare applicazioni distribuite, scripting, computazione numerica e system testing. Ideato da Guido van Rossum all'inizio degli anni novanta, è spesso paragonato a Ruby, Tcl, Perl, JavaScript, Visual Basic o Scheme. Il nome fu scelto per la passione dello stesso inventore verso i Monty Python e per la loro serie televisiva Monty Python's Flying Circus. Spesso viene anche studiato tra i primi linguaggi per la sua somiglianza a uno pseudo-codice e di frequente viene usato per simulare la creazione di software grazie alla flessibilità di sperimentazione consentita da Python, che permette al programmatore di organizzare le idee durante lo sviluppo, come per esempio il creare un gioco tramite Pygame oppure il back-end di un sito web tramite Flask o Django. Python dispone anche di una sezione grafica, il modulo Python Turtle Graphics, che permette di applicare le righe di codici alla grafica. Java Java è un linguaggio di programmazione ad alto livello, orientato agli oggetti e a tipizzazione statica, che si appoggia sull'omonima piattaforma software di esecuzione, specificamente progettato per essere il più possibile indipendente dalla piattaforma hardware di esecuzione (tramite compilazione in bytecode prima e interpretazione poi da parte di una JVM) (sebbene questa caratteristica comporti prestazioni in termini di computazione inferiori a quelle di linguaggi direttamente compilati come C e C++ ovvero dunque perfettamente adattati alla piattaforma hardware). Go E’ un linguaggio di programmazione open source sviluppato da Google. Il lavoro su Go nacque nel settembre 2007 da Robert Griesemer, Rob Pike e Ken Thompson basandosi su un precedente lavoro correlato con il sistema operativo Inferno. Secondo gli autori, l'esigenza di creare un nuovo linguaggio di programmazione nasce dal fatto che non esiste un linguaggio di programmazione che soddisfi le esigenze di una compilazione efficiente, di un'esecuzione veloce e di una facilità di programmazione. Go viene annunciato ufficialmente nel novembre 2009. C# Il C# (sharp), come l'espressione see sharp, "vedere nitidamente") è un linguaggio di programmazione multi-paradigma che supporta tutti i concetti della programmazione orientata agli oggetti. Esso è stato sviluppato da Microsoft all'interno dell'iniziativa .NET, e successivamente approvato come standard dalla ECMA (ECMA-334) e ISO (norma ISO/IEC 23270). La sintassi e struttura del C# prendono spunto da vari linguaggi nati precedentemente, in particolare Delphi, C++, Java e Visual Basic. Cenni sull'installazione. Come installare DOCKER? Docker Desktop Docker Desktop è un'applicazione one-click-install per l'ambiente MAC, Linux o Windows che consente di creare e condividere applicazioni e microservizi containerizzati. Fornisce una GUI semplice (interfaccia utente grafica) che consente di gestire i contenitori, le applicazioni e le immagini, direttamente dalla macchina. Docker Desktop può essere utilizzato da solo o come strumento complementare alla CLI. Docker Desktop riduce il tempo trascorso su configurazioni complesse in modo da potersi concentrare sulla scrittura del codice. Questa GUI, si occupa delle mappature delle porte, delle preoccupazioni del file system e di altre impostazioni predefinite e viene regolarmente aggiornato con correzioni di bug e aggiornamenti di sicurezza. Docker engine: Docker Engine è una tecnologia di containerizzazione open source per la costruzione e il containerizzazione delle applicazioni. Il motore Docker funge da applicazione client-server con: Un server con un processo demone Dockerd. API che specificano le interfacce Un Docker client CLI (Command Line Interface). La CLI utilizza le API Docker per controllare il demone Docker t Molte altre applicazioni Docker utilizzano l'API e la CLI sottostanti. Il demone crea e gestisce oggetti Docker, come immagini, contenitori, reti e volumi. In altre parole, "il core" spartano a linea di comando che solitamente contraddistingue il nerd che lavora su linux. Tuttavia Docker Engine è disponibile su una varietà di piattaforme Linux, MacOS e Windows 10 tramite Docker Desktop e come installazione binaria statica Docker Build: Docker Build è una delle funzionalità più utilizzate di Docker Engine. Ogni volta che sista creando un'immagine, si utilizza Docker Build. Build è una parte fondamentale del ciclo per lo sviluppo del software che consente di impacchettare e raggruppare il codice e spedirlo ovunque. Il motore Docker utilizza un'architettura client-server ed è composto da più componenti e strumenti. Il metodo più comune per l'esecuzione di una build è emettere un comando build Docker. La CLI invia la richiesta al motore Docker che, a sua volta, esegue la build dell'immagine. Docker Build è più di un semplice comando build e non si tratta solo di imballaggio del codice. È un intero ecosistema di strumenti e funzionalità che supportano non solo le attività comuni del flusso di lavoro, ma fornisce anche supporto per scenari più complessi e avanzati. Docker Compose: Compose è uno strumento per definire e eseguire applicazioni Docker multi-container. Con COMPOSE, si utilizza un file YAML per configurare i servizi dell'applicazione, quindi, con un singolo comando, si crea e si avviano tutti i servizi dalla configurazione. Compose opera in tutti gli ambienti: produzione, stadiazione, sviluppo, test e flussi di lavoro CI ed è dotato anche comandi per la gestione dell'intero ciclo di vita della applicazione: Iniziare, fermare e ricostruire i servizi Visualizzare lo stato dei servizi in esecuzione Trasmettere in streaming l'output del registro dei servizi in esecuzione Eseguire un comando unico su un servizio Le caratteristiche chiave di COMPOSER che lo rendono efficace sono: Avere più ambienti isolati su un singolo host Preservare i dati del volume quando vengono creati i contenitori Rigenerare contenitori che sono cambiati Supportare le variabili e spostare i container tra gli ambienti Docker Hub: Docker Hub è un servizio fornito da Docker per la ricerca e la condivisione di immagini di container. È il più grande repository al mondo di immagini di container con una serie di fonti di contenuto tra cui sviluppatori di comunità di container, progetti open source e fornitori di software indipendenti (ISV) che costruiscono e distribuiscono il loro codice in contenitori. Gli utenti ottengono accesso a repository pubblici gratuiti per la memorizzazione e la condivisione di immagini o possono scegliere un piano di abbonamento per repository privati. Docker Hub fornisce le seguenti caratteristiche principali: Repository: pubblicare e scaricare le immagini del contenitore. Team e organizzazioni: gestire l'accesso a repository privati di immagini container. Immagini ufficiali di Docker: scaricare e usare immagini contenitori di alta qualità fornite da Docker. Docker Verified Publisher : scaricare e utilizzare immagini di contenitori di alta qualità fornite da venditori esterni. Build: costruire automaticamente le immagini del contenitore da GitHub e Bitbucket e pubblicarle a Docker Hub. WebHooks: attivare azioni dopo una pubblicazio riuscita a un repository per integrare Docker Hub con altri servizi. Docker fornisce uno strumento CLI Docker Hub (attualmente sperimentale) e un'API che consente di interagire con Docker Hub. Fare riferimento alla documentazione API Docker Hub per esplorare gli endpoint supportati. Un percorso pratico per una installazione: https://docs.docker.com/get-docker/ https://docs.docker.com/desktop/install/linux-install/ https://docs.docker.com/desktop/install/ubuntu/ https://docs.docker.com/compose/ https://docs.docker.com/compose/install/ https://docs.docker.com/compose/gettingstarted/ https://docs.docker.com/language/python/develop/ Le metodologie di installazione, in qualche modo differiscono da un sistema operativo all'altro. Un esempio pratico con DOCKER Una volta che si è installato docker engine e docker compose, o docker desktop, si potrebbe ad esempio utilizzare il terminale per verificare la versione dei componenti installati: oppure visualizzare la lista delle immagini scaricate: O, ancora, visualizzare le istruzioni inerenti la piattaforma, con la classica istruzione CLI: A cui seguiranno le linee indicative dei comandi e delle opzioni a disposizione per i due servizi. In particolare, voglio sottolineare qualche semplice comando: docker push Usa Docker Image Push per condividere le immagini nel registro Docker Hub o con una self-hosted one. Fare riferimento al riferimento del tag dell'immagine Docker per ulteriori informazioni su nomi di immagini e tag validi. Terminare il processo di pubblicazione dell'immagine Docker, ad esempio premendo CTRL-C mentre è in esecuzione in un terminale, termina l'operazione di pubblicazione. Le barre di avanzamento durante, che mostrano lo stato del processo Docker nella dimensione non compressa. La quantità effettiva di dati trasferiti, verrà compressa prima di inviare, quindi la dimensione caricata non verrà riflessa dalla barra di avanzamento. docker pull La maggior parte delle tue immagini verrà creata sopra un'immagine di base dal registro Docker Hub. Docker Hub contiene molte immagini pre-costruite che puoi scaricare e provare senza dover definire e configurare le proprie. Questo è il comando che serve per scaricare una particolare immagine o un set di immagini (ovvero un repository). docker run Il comando Docker Run prima crea un livello di contenitore scrivibile sull'immagine specificata, quindi inizia usando il comando specificato. Cioè, Docker Run è equivalente all'API/Container/Crea quindi/Container/(ID)/Start. Un contenitore arrestato può essere riavviato con tutte le sue precedenti modifiche intatte usando Docker Start. Vedi Docker PS -A per visualizzare un elenco di tutti i contenitori. Per informazioni sulla connessione di un contenitore a una rete, consultare la "Panoramica della rete Docker". Si può fare riferimento alla sezione Esempi seguenti, nella pagina https://docs.docker.com/engine/reference/commandline/run/ Quindi, per semplificare, quando si fa girare una immagine, si genera un “container” visibile con l’istruzione: Un Volume di Esempio per Docker container Nella seguente immagine viene rappresentato il contenuto di un volume di esempio, per utilizzo in locale, prima di una pubblicazione “git”. Il Docker-compose.yml Innanzitutto bisogna specificare che, i file con l'estensione “.yml” possono essere lanciati solo da alcune applicazioni. Questo tipo di file sono da considerarsi “file dati” piuttosto che documenti, il che significa che non sono stati concepiti per essere visualizzati dai software, (sono comunque file testuali), ma utilizzati, ad esempio come basi di dettagli di configurazione. Il linguaggio “ YAML”, (Yet Another Markup Language), sfrutta concetti di altri linguaggi come il C, il Perl e il Python e dal formato XML ma anche dal formato per la posta elettronica (RFC2822). Questi file vengono salvati in formato testo normale (con estensione .yml), YAML è un linguaggio di serializzazione dei dati leggibile dall'uomo, proprio come XML e JSON. La serializzazione è un processo in cui un'applicazione o un servizio che dispone di strutture di dati diverse ed è scritta in una diversa serie di tecnologie può trasferire dati in un'altra applicazione utilizzando un formato standard. In altre parole, la serializzazione riguarda la traduzione, la conversione e la conclusione di una struttura di dati in un altro formato. I dati nel nuovo formato possono essere archiviati in un file o trasmessi a un'altra applicazione o servizio su una rete. YAML è dunque un formato ampiamente usato per la scrittura di file di configurazione per diversi strumenti, programmi e applicazioni DevOps a causa della sua sintassi leggibile dall'uomo e intuitiva. In questo caso il “Docker compose file” definisce servizi, reti e volumi per un'applicazione Docker. La versione più recente e consigliata del formato di file di composizione è definita dalla specifica compose. La specifica compose unisce le versioni Legacy 2.x e 3.x, aggregando le proprietà tra questi formati ed è implementata mediante COMPOSE 1.27.0+. Le specifiche riportate nel file, consentono di definire un'applicazione basata su contenitori prefissati. In questo esempio il file si presenta così: In particolare si può notare che l’immagine di riferimento è Stable diffusion: Stable Diffusion, tra l’altro, propone un modello di diffusione “text-a-immagine” latente in grado di generare immagini foto-realistiche, dato qualsiasi input di testo, (prompt), coltiva la libertà autonoma di produrre immagini incredibili, rendendo accessibile ad una moltitudine di persone di creare arte straordinaria in pochi secondi. In questo caso, lanciando un server web con il comando “jupyter lab --ip=0.0.0.0 --port=8888 –allow-root” Si noti inoltre che viene richiesta la disponibilità, in locale, di una macchina dotata di “GPU”. GPU, identifica L'unità di elaborazione grafica (o processore grafico, in inglese graphics processing unit) è un circuito elettronico progettato per accelerare la creazione di immagini in un frame buffer, destinato all'output su un dispositivo di visualizzazione. Le GPU vengono utilizzate in sistemi embedded come telefoni cellulari, personal computer e console di gioco. In un personal computer una GPU può essere presente su scheda video o incorporata sulla scheda madre.Il termine GPU è stato reso popolare da NVIDIA nel 1999, che ha commercializzato la GeForce 256 come "la prima GPU al mondo". Le GPU moderne, sebbene operino a frequenze più basse delle CPU, sono molto più veloci di esse nell'eseguire i compiti in cui sono specializzate. Le GPU sono efficaci nell'intelligenza artificiale perché utilizzano il calcolo parallelo per scomporre un problema complesso in calcoli più piccoli e simultanei. Questi calcoli sono distribuiti tra un vasto numero di core del processore e sono adatti per l'apprendimento automatico e la “big analytics”!. Il DockerFile Un Dockerfile è l’elemento costitutivo dell’ecosistema Docker, che descrive i passaggi per creare un’immagine Docker. Il flusso di informazioni segue un modello centrale: Dockerfile > immagine Docker > container Docker. Si parte dal presupposto che tutto inizia con un’immagine di base esistente. L’immagine appena creata si riferisce all’immagine di base e vi sono anche una serie di cambiamenti specifici che, possono ad esempio essere riferite all’ecosistema su cui deve essere implementata. Il Dockerfile contiene una serie di istruzioni, ciascuna su una riga separata. Le istruzioni vengono eseguite una dopo l’altra per creare un’immagine Docker. In questo caso: Un Dockerfile è un semplice file di testo chiamato “Dockerfile”. Si noti che, la prima lettera deve essere maiuscola. Il file contiene una voce per riga. I commenti contengono informazioni destinate principalmente agli esseri umani. Ad esempio, su Python, Perl e Ruby, i commenti di un Dockerfile iniziano con il segno cancelletto (#). Le righe di commento vengono rimosse durante il processo di costruzione prima di ulteriori elaborazioni. Le istruzioni costituiscono la maggior parte del contenuto del Dockerfile, descrivono la struttura specifica di un’immagine Docker e vengono eseguite una dopo l’altra. Così come i comandi sulla riga di comando, le istruzioni accettano argomenti, alcune istruzioni sono direttamente paragonabili a specifici comandi della riga di comando. Per quanto riguarda gli argomenti, è necessario fare una distinzione tra parti a codifica fissa e parti variabili. Docker segue la metodologia della “twelve-factor app” e usa variabili d’ambiente per configurare i container. L’istruzione ENV è usata per definire le variabili d’ambiente in un Dockerfile. Le principali istruzioni di un DockerFile: Il file “LICENCE” Una licenza è un documento legale che concede specifici diritti all'utilizzatore relativamente al ri-uso e alla ri-distribuzione, a certe condizioni di un determinato materiale. Una licenza informatica (o licenza d'uso), in informatica, è il contratto con il quale il titolare dei diritti di sfruttamento economico sul software (programma informatico) definisce il regime giuridico di circolazione e le limitazioni nell'utilizzo e nella cessione dell'opera (che sia un'opera creativa, o un software, inteso come programma). Il file “README” Un file README (dall'inglese read me, "leggimi") è un file che contiene informazione riguardo ai file contenuti in un archivio o in una directory ed è comunemente incluso nei pacchetti software. Il file può avere diverse estensioni: dal semplice file .txt a estensioni di fantasia come README.1ST, READ.ME o semplicemente senza estensione README e nei sistemi Windows come README.WRI o README.RTF o README.DOC. In questo caso, la bozza README.md si presenta in questo modo: GitHub è un servizio web e cloud-based che aiuta gli sviluppatori ad archiviare e gestire il loro codice e a tracciare e controllare le modifiche. Per capire esattamente cos’è GitHub, è necessario introdurre due principi collegati: Controllo versioni Git Git è uno specifico sistema di controllo versioni open-source creato da Linus Torvalds nel 2005. In particolare, Git è un sistema di controllo versioni distribuito, il che significa che l’intero codice base e la cronologia sono disponibili sul computer di ogni sviluppatore, il che permette di creare facilmente ramificazioni e fusioni. GitHub è un’azienda a scopo di lucro che offre un servizio di hosting di repository Git basato su cloud. In sostanza, rende molto più facile per individui e team utilizzare Git per il controllo delle versioni e la collaborazione. Fondamentalmente, la directory presente sull’host locale, può essere trasferita al cloud e da quella posizione, pubblicata nelle sue varianti (branch version)… (master)… il file .dockerignore Un file .dockerignore è un file di configurazione che descrive file e directory che si desidera escludere quando si crea un'immagine Docker. Di solito, il Dockerfile si colloca nella directory principale del tuo progetto, ma potrebbero esserci molti file nella directory principale che non sono correlati all'immagine Docker o che non si desidera includere. .dockerignore viene utilizzato per specificare tali file indesiderati e non includerli nell'immagine Docker. Il file .dockerignore è utile per evitare di inviare inavvertitamente file o directory che sono grandi o contengono file sensibili al demone o evita di aggiungerli all'immagine utilizzando i comandi ADD o COPY. L’importanza di ridurre le dimensioni dell'immagine Docker ha i seguenti vantaggi, questi vantaggi sono importanti perché più istanze di un servizio ci sono, come i microservizi, più si devono scambiare immagini Docker. In sintesi: Velocità nell’esecuzione del comando Docker Pull/Push. Velocità quando si costruiscono immagini Docker. Se un file di immagini Docker contiene informazioni sensibili come le credenziali, diventa un problema di sicurezza. Ad esempio, se il caricamento di un'immagine Docker contenente file con informazioni sulle credenziali come .AWS o .env a un repository Docker come il Dockerhub pubblico ,dockerignore, farà il compromesso sulla pubblicazione di tali informazioni sulle credenziali ecc. La directoty /project In questo caso, si fa riferimento a queste istruzioni: RUN mkdir project WORKDIR /project del DockerFile, ed anche a: volumes: - ./project:/project del file DockerCompose. che in pratica identificano la Directory di lavoro dell’applicazione. In particolare , per questo esempio, si fa riferimento ad un file python, inerente la specifica applicazione per StableDiffusion. Questo file python costituisce il “core” dell’applicazione che potrà essere lanciata da uno dei file con estensione “.ipynb”. Un file IPYNB è un documento di quaderno utilizzato da “Jupyter Notebook”, un ambiente di calcolo interattivo progettato per aiutare gli scienziati a lavorare con il linguaggio Python e i loro dati. Jupyter Notebook è un’applicazione Web open source che permette di creare e condividere documenti testuali interattivi, contenenti oggetti quali equazioni, grafici e codice sorgente eseguibile. Jupyter è diventato uno standard de-facto per data scientist perché offre la possibilità di realizzare, documentare e condividere analisi di dati all’interno di un framework che supporta: operazioni di data cleaning & trasformation, simulazioni numeriche, modellazione statistica, machine learning deep learning e altro; l’esecuzione di applicazioni Scala e Python su piattaforme big data, integrazione con Apache Spark. In particolare, nella prima riga di codice, si può notare che, per utilizzare questa applicazione, è necessario verificare una autorizzazione che fa riferimento al “hugginface_token.token”. I file TOKEN sono un tipo di Sandcastle Help File Builder Token File, sviluppato per Microsoft Sandcastle da Microspot. Un token viene utilizzato come tag sostituibile all'interno di un argomento ed è rappresentato usando un elemento “gettone”. La configurazione del token di autenticazione presentato, garantisce che l’utilizzatore sia riconosciuto e possa utilizzare la sua sessione interattiva. Il file .token contiene dunque un codice alfanumerico identificativo. !nvidia-smi serve per verificare la presenza del driver per la GPU, che viene richiesta dal file DockerFile. in caso positivo, apparirà, in fase di esecuzione, qualcosa del genere: Nelle seguenti righe del notebook troveremo questo semplice codice. import torch from torch import autocast from diffusers import StableDiffusionPipeline torch.cuda.is_available() pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16) pipe = pipe.to("cuda") prompt = "a photo of green alien" pipe.enable_attention_slicing() image = pipe(prompt).images[0] In particolare, verrà richiesto tramite un “prompt”,di generare una immagine partendo da un testo appositamente inserito. L’esecuzione di questa parte di codice, prevede lo scaricamento di molti dati software e può richiedere molto tempo. Infine salveremo l'Immagine generata: image.save("prompt.png") image.show() L’immagine, in questo test, verrà salvata nella directory di lavoro e verrà mostrata a video. Questo potrebbe essere un risultato possibile: Per generare questa immagine, ci sono voluti i seguenti comandi: docker compose up Dato nella directory principale dell’applicazione, mediate il terminale. Verrà di seguito lanciato il web server, da terminale all’indirizzo opportuno. Dal browser si accederà al desktop attivo: verrà lanciato dato il comando di start : La prima volta, potrebbe impiegarci parecchio tempo, ma alla fine, se tutto va a buon fine, viene riportato in uscita un risultato simile a quello sopra riportato. Per terminare il test, bisogna utilizzare ancora il terminare, uscendo dalla modalità attiva (ctrl+c), e scrivendo il comando che terminerà le attività del container attivo. Grazie per la lettura. Romeo Ceccato.
- Che cos'è la Data Quality o qualità dei dati
L'apprendimento automatico è diventato uno strumento essenziale per le organizzazioni di tutte le dimensioni per ottenere informazioni e prendere decisioni basate sui dati. Tuttavia, il successo dei progetti ML dipende fortemente dalla qualità dei dati utilizzati per addestrare i modelli. Una scarsa qualità dei dati può portare a previsioni imprecise e scarse prestazioni del modello. Comprendere l'importanza della qualità dei dati nel machine learning e le varie tecniche utilizzate per garantire dati di alta qualità è fondamentale. Questo articolo tratterà le basi del machine learning e l'importanza della qualità dei dati per il successo dei modelli di machine learning. Approfondirà inoltre la pipeline ETL e le tecniche utilizzate per la pulizia dei dati, la preelaborazione e l'ingegnerizzazione delle funzionalità. Alla fine di questo articolo, avrai una solida comprensione dell'importanza della qualità dei dati nel machine learning e delle tecniche utilizzate per garantire dati di alta qualità. Ciò contribuirà a implementare queste tecniche nei progetti del mondo reale e a migliorare le prestazioni dei loro modelli ML. Obiettivi formativi Cos'è l'apprendimento automatico? Perché i dati sono fondamentali nell'apprendimento automatico? Raccolta di dati tramite pipeline ETL? Cos'è l'iniezione di dati? L'importanza della pulizia dei dati Cos'è la pre-elaborazione dei dati? Un tuffo nell'ingegneria delle caratteristiche Codice completo per la pipeline ETL Conclusione Cos'è l'apprendimento automatico? L'apprendimento automatico è una forma di intelligenza artificiale che consente ai computer di apprendere e migliorare in base all'esperienza senza una programmazione esplicita. Svolge un ruolo cruciale nel fare previsioni, identificare modelli nei dati e prendere decisioni senza intervento umano. Ciò si traduce in un sistema più preciso ed efficiente. L'apprendimento automatico è una parte essenziale della nostra vita e viene utilizzato in applicazioni che vanno dagli assistenti virtuali alle auto a guida autonoma, all'assistenza sanitaria, alla finanza, ai trasporti e all'e-commerce. I dati, in particolare l'apprendimento automatico, sono uno dei componenti critici di qualsiasi modello. Dipende sempre dalla qualità dei dati che fornisci al tuo modello. Esaminiamo perché i dati sono così essenziali per l'apprendimento automatico. Che cos'è la Data Quality o qualità dei dati ? La qualità dei dati è un concetto cruciale nell'elaborazione dei dati e nell'intelligenza artificiale. Si riferisce alla completezza, accuratezza, affidabilità e coerenza dei dati. In altre parole, si tratta della capacità dei dati di soddisfare i requisiti e le aspettative degli utenti e delle applicazioni che li utilizzano. Una buona qualità dei dati è essenziale per l'analisi, la previsione e la decisione informate. La qualità dei dati è influenzata da molti fattori, tra cui la fonte dei dati, la raccolta dei dati, la gestione dei dati e la conservazione dei dati. Per garantire una qualità dei dati elevata, è importante utilizzare metodi di pulizia dei dati, validazione e verifica. In generale, una buona qualità dei dati è fondamentale per garantire che le informazioni utilizzate per prendere decisioni importanti siano affidabili e valide.📊💻 Perché i dati sono importanti nell'apprendimento automatico? Siamo circondati da molte informazioni ogni giorno. I giganti della tecnologia come Amazon, Facebook e Google raccolgono quotidianamente enormi quantità di dati. Ma perché raccolgono dati? Hai ragione se hai visto Amazon e Google approvare i prodotti che stai cercando. Infine, i dati delle tecniche di apprendimento automatico svolgono un ruolo essenziale nell'implementazione di questo modello. In breve, i dati sono il carburante che guida l'apprendimento automatico e la disponibilità di dati di alta qualità è fondamentale per creare modelli accurati e affidabili. Molti tipi di dati vengono utilizzati nell'apprendimento automatico, inclusi dati categorici, numerici, di serie temporali e di testo. I dati vengono raccolti tramite una pipeline ETL. Cos'è una pipeline ETL? Raccolta di dati tramite pipeline ETL La preparazione dei dati per l'apprendimento automatico viene spesso definita pipeline ETL per l'estrazione, la trasformazione e il caricamento. Estrazione : il primo passo nella pipeline ETL è l'estrazione dei dati da varie fonti. Può includere l'estrazione di dati da database, API o file semplici come CSV o Excel. I dati possono essere strutturati o non strutturati. Ecco un esempio di come estraiamo i dati da un file CSV. Codice Python: import pandas as pd #read csv file df = pd.read_csv("data.csv") #extract specific data name = df["name"] age = df["age"] address = df["address"] #print extracted data print("Name:", name) print("Age:", age) print("Address:", address) Trasformazione : è il processo di trasformazione dei dati per renderli adatti all'uso nei modelli di apprendimento automatico. Ciò può includere la pulizia dei dati per rimuovere errori o incoerenze, la standardizzazione dei dati e la conversione dei dati in un formato utilizzabile dal modello. Questo passaggio include anche la progettazione delle funzionalità, in cui i dati grezzi vengono trasformati in un set di funzionalità da utilizzare come input per il modello. Questo è un semplice codice per convertire i dati da JSON a DataFrame. import json import pandas as pd #load json file with open("data.json", "r") as json_file: data = json.load(json_file) #convert json data to a DataFrame df = pd.DataFrame(data) #write to csv df.to_csv("data.csv", index=False) Carica : il passaggio finale consiste nel caricare o caricare i dati convertiti nella destinazione. Può essere un database, un archivio dati o un file system. I dati risultanti sono pronti per un ulteriore utilizzo, come l'addestramento o il test dei modelli di machine learning. Ecco un semplice codice che mostra come carichiamo i dati usando pandas: import pandas as pd df = pd.read_csv('data.csv') Dopo aver raccolto i dati, generalmente utilizziamo l'iniezione di dati se troviamo valori mancanti. Cos'è l'iniezione di dati? L'aggiunta di nuovi dati a un server di dati esistente può essere eseguita per vari motivi per aggiornare il database con nuovi dati e per aggiungere dati più diversificati per migliorare le prestazioni dei modelli di apprendimento automatico. Oppure la correzione degli errori del set di dati originale viene solitamente eseguita dall'automazione con alcuni strumenti utili. Ci sono tre tipi. Inserimento batch: i dati vengono inseriti in blocco, di solito a un'ora fissa Iniezione in tempo reale: i dati vengono iniettati immediatamente quando vengono generati. Stream Injection: i dati vengono iniettati in un flusso continuo. Viene spesso utilizzato in tempo reale. Ecco un esempio di codice di come iniettiamo i dati utilizzando la funzione append utilizzando la libreria Pandas.La fase successiva della pipeline di dati è la pulizia dei dati. import pandas as pd # Create an empty DataFrame df = pd.DataFrame() # Add some data to the DataFrame df = df.append({'Name': 'John', 'Age': 30, 'Country': 'US'}, ignore_index=True) df = df.append({'Name': 'Jane', 'Age': 25, 'Country': 'UK'}, ignore_index=True) # Print the DataFrame print(df) L'importanza della pulizia dei dati La pulizia dei dati è la rimozione o la correzione di errori nei dati. Ciò può includere la rimozione di valori mancanti e duplicati e la gestione dei valori anomali. La pulizia dei dati è un processo iterativo e le nuove informazioni potrebbero richiedere di tornare indietro e apportare modifiche. In Python, la libreria Pandas viene spesso utilizzata per pulire i dati. Ci sono motivi importanti per la pulizia dei dati. Qualità dei dati : la qualità dei dati è fondamentale per un'analisi accurata e affidabile. Informazioni più precise e coerenti possono portare a risultati effettivi e a un migliore processo decisionale. Prestazioni dell'apprendimento automatico : i dati sporchi possono influire negativamente sulle prestazioni dei modelli di apprendimento automatico. La pulizia dei dati migliora la precisione e l'affidabilità del modello. Archiviazione e recupero dei dati: i dati puliti sono più facili da archiviare e recuperare e riducono il rischio di errori e incoerenze nell'archiviazione e nel recupero dei dati. Governance dei dati: la pulizia dei dati è fondamentale per garantire l'integrità dei dati e la conformità alle politiche e ai regolamenti normativi sui dati. Archiviazione dei dati : la cancellazione dei dati aiuta a salvare i dati per l'uso e l'analisi a lungo termine. Ecco il codice che mostra come eliminare i valori mancanti e rimuovere i duplicati utilizzando la libreria panda: df = df.dropna() df = df.drop_duplicates() # Fill missing values df = df.fillna(value=-1) Ecco un altro esempio di come puliamo i dati utilizzando varie tecniche import pandas as pd # Create a sample DataFrame data = {'Name': ['John', 'Jane', 'Mike', 'Sarah', 'NaN'], 'Age': [30, 25, 35, 32, None], 'Country': ['US', 'UK', 'Canada', 'Australia', 'NaN']} df = pd.DataFrame(data) # Drop missing values df = df.dropna() # Remove duplicates df = df.drop_duplicates() # Handle outliers df = df[df['Age'] < 40] # Print the cleaned DataFrame print(df) La terza fase della pipeline di dati è la pre-elaborazione dei dati, È anche utile comprendere chiaramente i dati e le caratteristiche prima di applicare qualsiasi metodo di pulizia e testare le prestazioni del modello dopo aver pulito i dati. Cos'è la pre-elaborazione dei dati? L'elaborazione dei dati sta preparando i dati per l'uso nei modelli di machine learning. Questo è un passaggio essenziale nell'apprendimento automatico perché garantisce che i dati siano in un formato utilizzabile dal modello e che eventuali errori o incoerenze vengano risolti. L'elaborazione dei dati di solito comporta una combinazione di pulizia dei dati, trasformazione dei dati e standardizzazione dei dati. I passaggi specifici dell'elaborazione dei dati dipendono dal tipo di dati e dal modello di machine learning in uso. Tuttavia, ecco alcuni passaggi generali: Pulizia dei dati : rimuovere errori, incoerenze e valori anomali dal database. Trasformazione dei dati : trasformazione dei dati in una forma che può essere utilizzata dai modelli di apprendimento automatico, come la modifica delle variabili categoriche in variabili numeriche. Normalizzazione dei dati : scala i dati in un intervallo specifico compreso tra 0 e 1, che aiuta a migliorare le prestazioni di alcuni modelli di machine learning. Aggiungi dati : aggiungi modifiche o manipolazioni ai punti dati esistenti per crearne di nuovi. Selezione o estrazione delle funzionalità : identifica e seleziona le funzionalità essenziali dai tuoi dati da utilizzare come input per il tuo modello di machine learning. Rilevamento dei valori anomali : identifica e rimuovi i punti dati che si discostano in modo significativo da grandi quantità di dati. I valori anomali possono alterare i risultati analitici e influire negativamente sulle prestazioni dei modelli di machine learning. Rileva duplicati : identifica e rimuovi punti dati duplicati. I dati duplicati possono portare a risultati imprecisi o inaffidabili e aumentare le dimensioni del set di dati, rendendone difficile l'elaborazione e l'analisi. Identifica le tendenze : trova modelli e tendenze nei tuoi dati che puoi utilizzare per fornire previsioni future o comprendere meglio la natura dei tuoi dati. L'elaborazione dei dati è essenziale nell'apprendimento automatico perché garantisce che i dati siano in una forma che il modello può utilizzare e che eventuali errori o incoerenze vengano rimossi. Ciò migliora le prestazioni del modello e l'accuratezza della previsione. Di seguito è riportato un semplice codice che mostra come utilizzare la classe LabelEncoder per ridimensionare le variabili categoriche in valori numerici e la classe MinMaxScaler per ridimensionare le variabili numeriche. import pandas as pd from sklearn.preprocessing import MinMaxScaler, StandardScaler, OneHotEncoder, LabelEncoder # Create a sample DataFrame data = {'Name': ['John', 'Jane', 'Mike', 'Sarah'], 'Age': [30, 25, 35, 32], 'Country': ['US', 'UK', 'Canada', 'Australia'], 'Gender':['M','F','M','F']} df = pd.DataFrame(data) # Convert categorical variables to numerical encoder = LabelEncoder() df["Gender"] = encoder.fit_transform(df["Gender"]) # One hot encoding onehot_encoder = OneHotEncoder() country_encoded = onehot_encoder.fit_transform(df[['Country']]) df = pd.concat([df, pd.DataFrame(country_encoded.toarray())], axis=1) df = df.drop(['Country'], axis=1) # Scale numerical variables scaler = MinMaxScaler() df[['Age']] = scaler.fit_transform(df[['Age']]) # Print the preprocessed DataFrame print(df) La fase finale della pipeline di dati è l'ingegneria delle funzionalità. Un tuffo nell'ingegneria delle funzionalità L'ingegneria delle funzionalità trasforma i dati grezzi in funzionalità che possono essere utilizzate come input per i modelli di machine learning . Ciò comporta l'identificazione e l'estrazione dei dati più critici dalla materia prima e la loro conversione in un formato utilizzabile dal modello. L'ingegnerizzazione delle funzionalità è essenziale nell'apprendimento automatico perché può influire in modo significativo sulle prestazioni del modello. Diverse tecniche che possono essere utilizzate per l'ingegnerizzazione delle caratteristiche sono: Estrazione di funzionalità: estrae informazioni rilevanti dai dati grezzi. Ad esempio, identifica le funzionalità più importanti o combina le funzionalità esistenti per creare nuove funzionalità. Modifica dell'attributo: cambia il tipo di attributo, ad esempio modificando una variabile categoriale in una variabile numerica o ingrandendo i dati per adattarli a un intervallo specifico. Selezione delle funzionalità : determina le funzionalità essenziali dei tuoi dati da utilizzare come input per il tuo modello di machine learning. Riduzione dimensione : ridurre il numero di elementi nel database rimuovendo elementi ridondanti o irrilevanti. Aggiungi dati : aggiungi modifiche o manipolazioni ai punti dati esistenti per crearne di nuovi. L'ingegnerizzazione delle funzionalità richiede una buona comprensione dei dati, del problema da risolvere e degli algoritmi di apprendimento automatico da utilizzare. Questo processo è iterativo e sperimentale e potrebbe richiedere diverse iterazioni per trovare il set di funzionalità ottimale che migliora le prestazioni del nostro modello. Codice completo per l'intera pipeline ETL Ecco un esempio di una pipeline ETL completa che utilizza le librerie pandas e scikit-learn: import pandas as pd from sklearn.preprocessing import MinMaxScaler, StandardScaler, OneHotEncoder, LabelEncoder # Extract data from CSV file df = pd.read_csv('data.csv') # Data cleaning df = df.dropna() df = df.drop_duplicates() # Data transformation encoder = LabelEncoder() df["Gender"] = encoder.fit_transform(df["Gender"]) onehot_encoder = OneHotEncoder() country_encoded = onehot_encoder.fit_transform(df[['Country']]) df = pd.concat([df, pd.DataFrame(country_encoded.toarray())], axis=1) df = df.drop(['Country'], axis=1) scaler = MinMaxScaler() df[['Age']] = scaler.fit_transform(df[['Age']]) # Load data into a new CSV file df.to_csv('cleaned_data.csv', index=False) I dati vengono prima recuperati da un file CSV utilizzando la funzione pandas read_csv() di questo esempio. La pulizia dei dati viene quindi eseguita rimuovendo i valori mancanti e i duplicati. Questa operazione viene eseguita utilizzando LabelEncoder per modificare le variabili categoriali in numeriche, OneHotEncoder per ridimensionare le variabili categoriali in numeri e MinMaxScaler per ridimensionare le variabili numeriche. Infine, i dati eliminati vengono letti in un nuovo file CSV utilizzando la funzione pandas to_csv(). Si noti che questo esempio è una versione molto semplificata della pipeline ETL. In uno scenario reale, la pipeline può essere più complessa e comportare più elaborazione e outsourcing, determinazione dei costi, ecc. possono includere metodi come. Inoltre, anche la tracciabilità dei dati è essenziale. Cioè, tiene traccia dell'origine dei dati, delle sue modifiche e di dove sono archiviati. Questo non solo ti aiuta a capire la qualità dei tuoi dati, ma ti aiuta anche a eseguire il debug e rivedere la tua pipeline. Inoltre, è essenziale comprendere chiaramente i dati e le caratteristiche prima di applicare metodi di post-elaborazione e controllare le prestazioni del modello dopo la pre-elaborazione. Informazione. Conclusione La qualità dei dati è fondamentale per il successo dei modelli di machine learning. Prendendoti cura di ogni fase del processo, dalla raccolta dei dati alla pulizia, elaborazione e convalida, puoi garantire che i tuoi dati siano della massima qualità. Ciò consentirà al tuo modello di fare previsioni più accurate, portando a risultati migliori e progetti di machine learning di successo.
- Introduzione ai Large Language Models (LLM) con esempi Python
🤖 Possono tradurre lingue, analizzare sentimenti, generare conversazioni con i chatbot e molto altro future degli LLM Negli ultimi anni, gli LLM (modelli di linguaggio di grandi dimensioni) come GPT-3 e chatbot come ChatGPT hanno attirato l'interesse di molti, grazie alla loro capacità di generare testo in linguaggio
- 10 migliori Generatori di voci gratuiti online | Convertire testo in voce con l'Intelligenza Artificiale
le potenti funzionalità di Speechify per creare colonne sonore personalizzate per i tuoi progetti di business
- K-means Cluster analysis : teoria e codice in Python
K-means è un algoritmo di clustering non supervisionato molto utilizzato in statistica e machine learning. Consiste in un metodo di suddivisione di un insieme di oggetti in K gruppi (o cluster) in modo da ottenere il massimo grado di somiglianza all'interno di ciascun cluster e il massimo grado di dissomiglianza tra gli elementi appartenenti a cluster diversi. In questo articolo, esamineremo in dettaglio la teoria di base di K-means, la sua storia, gli utilizzi e i vantaggi di questo algoritmo, nonché le formule matematiche alla base del suo funzionamento. Inoltre, forniremo un esempio pratico di cluster analysis con Python, mostrando come eseguire un'analisi di cluster utilizzando K-means su un dataset di esempio. Questo articolo è rivolto a chiunque sia interessato a conoscere meglio K-means e a imparare a utilizzarlo per eseguire analisi di cluster. Potrebbe essere particolarmente utile per chi studia statistica o machine learning o per chi lavora in ambiti in cui il clustering può essere applicato, come il marketing, la finanza, la biologia, etc. Se sei un principiante in questi campi, non temere: in questo articolo spiegheremo tutto in modo semplice e accessibile, fornendo esempi pratici che ti aiuteranno a capire come funziona K-means e come utilizzarlo per risolvere problemi di clustering. Se sei già un esperto di K-means, questo articolo potrebbe comunque offrirti spunti interessanti e nuove prospettive sull'utilizzo di questo algoritmo. Indice su K-means Cluster analysis: Teoria di base di K-means Cos'è il clustering e a cosa serve Come funziona l'algoritmo di K-means Come si sceglie il numero di cluster K Vantaggi e svantaggi di K-means Storia di K-means Chi è James MacQueen e come ha sviluppato l'algoritmo di K-means Come K-means è diventato popolare negli anni '90 Utilizzi di K-means Esempi di applicazioni di K-means in diverse aree, come il marketing, la finanza, la biologia, etc.ubunt Formule di K-means Spiegazione delle formule matematiche alla base di K-means Esempio di cluster analysis con Python Passi per eseguire un'analisi di cluster con K-means in Python Codice di esempio per eseguire un'analisi di cluster su un dataset di esempio Cosa è K-means? La teoria di base di K-means si basa sull'idea di suddividere un insieme di oggetti in K gruppi (o cluster) in modo da ottenere il massimo grado di somiglianza all'interno di ciascun cluster e il massimo grado di dissomiglianza tra gli elementi appartenenti a cluster diversi. Questo viene generalmente fatto utilizzando una misura di distanza, come ad esempio la distanza Euclidea. Il processo di clustering viene effettuato utilizzando un algoritmo iterativo, che parte da K centroidi (punti rappresentativi) scelti in modo casuale e assegna ogni oggetto al cluster il cui centroide è più vicino. Una volta che tutti gli oggetti sono stati assegnati a un cluster, i centroidi vengono aggiornati come la media dei punti assegnati al cluster. Questo processo viene ripetuto finché i centroidi non convergono, ovvero finché non cambiano più significativamente. Una volta che il processo di clustering è stato completato, ogni oggetto viene assegnato al cluster a cui appartiene in base alla distanza dal centroide. Il numero di cluster K viene solitamente scelto in base alla dimensione del dataset e al numero di cluster che si desidera ottenere. Esistono diverse tecniche per scegliere il numero ottimale di cluster, come ad esempio l'utilizzo della curva di Elbow o della metrica di Calinski-Harabasz. K-means presenta alcuni vantaggi, come ad esempio la sua semplicità di implementazione e il suo tempo di esecuzione relativamente breve. Tuttavia, ha anche alcuni svantaggi, come la dipendenza dalla scelta dei centroidi iniziali e la difficoltà nel gestire cluster di forma irregolare o di densità variabile. Inoltre, K-means è sensibile alle outlier (punti anomali) e non è adatto a dati non linearmente separabili. Quando è stato sviluppato K-means? K-means è stato sviluppato negli anni '50 da James MacQueen, un matematico e statistico statunitense. MacQueen aveva bisogno di un metodo per suddividere un insieme di dati in gruppi omogenei in modo da poter studiare le relazioni tra le variabili e i gruppi. L'algoritmo di K-means che ha sviluppato utilizzava una misura di distanza per assegnare gli oggetti ai cluster e aggiornare i centroidi iterativamente fino a quando non si otteneva una convergenza. Tuttavia, K-means non è diventato popolare fino agli anni '90, con l'avvento dei computers e dei software di data mining. In particolare, l'aumento della potenza di calcolo e la disponibilità di grandi quantità di dati hanno reso possibile l'applicazione di K-means su dataset di grandi dimensioni. Inoltre, l'interesse per il machine learning e il data mining ha contribuito a diffondere l'utilizzo di K-means in diverse aree, come il marketing, la finanza, la biologia, etc. Oggi, K-means è uno dei metodi di clustering più utilizzati in statistica e machine learning, e continua a essere uno strumento molto utile per esplorare e analizzare i dati. Grazie alla sua semplicità di implementazione e al suo tempo di esecuzione relativamente breve, K-means è spesso utilizzato come punto di partenza per l'analisi di cluster e come base per lo sviluppo di altri algoritmi di clustering più sofisticati. Applicazioni di K-means: K-means è uno degli algoritmi di clustering più utilizzati in diverse aree, grazie alla sua semplicità di implementazione e al suo tempo di esecuzione relativamente breve. Ecco alcuni esempi di come K-means viene utilizzato in diverse aree: Marketing: K-means può essere utilizzato per segmentare i clienti in base alle loro caratteristiche demografiche, alle loro preferenze e ai loro comportamenti di acquisto. Ad esempio, un'azienda di abbigliamento potrebbe utilizzare K-means per suddividere i suoi clienti in gruppi in base al genere, all'età, alla frequenza di acquisto e al budget, al fine di creare campagne di marketing mirate a ciascun gruppo. Finanza: K-means può essere utilizzato per identificare gruppi di investitori con caratteristiche simili, al fine di offrire loro prodotti finanziari adeguati. Ad esempio, una banca potrebbe utilizzare K-means per suddividere i suoi clienti in gruppi in base al reddito, all'età, alla propensione al rischio e alla diversificazione del portafoglio, al fine di offrire loro prodotti di investimento personalizzati. Biologia: K-means può essere utilizzato per analizzare i dati di espressione genica e identificare gruppi di geni con espressione simile. Ad esempio, uno studio potrebbe utilizzare K-means per suddividere i geni in gruppi in base all'espressione in diversi tessuti o in risposta a diverse condizioni, al fine di identificare i geni coinvolti in specifiche funzioni biologiche. Questi sono solo alcuni esempi di come K-means viene utilizzato in diverse aree. In generale, K-means è uno strumento molto utile per esplorare e analizzare i dati e scoprire relazioni e pattern nascosti. Formule Matematiche di K-means K-means è basato sulla minimizzazione di una funzione di costo che misura la somiglianza degli oggetti all'interno di ciascun cluster. Nello specifico, la funzione di costo di K-means è data dalla somma delle distanze quadrate (SSE, Sum of Squared Errors) degli oggetti dal centroide del cluster a cui appartengono: SSE = ∑(x - μ)^2 dove x è l'oggetto i-esimo, μ è il centroide del cluster a cui appartiene l'oggetto x, e la somma viene effettuata su tutti gli oggetti del dataset. La funzione di costo viene minimizzata iterativamente aggiornando i centroidi come la media degli oggetti assegnati al cluster. Per eseguire il clustering con K-means, il processo consiste nei seguenti passi: Scegliere K, il numero di cluster. Inizializzare i centroidi scegliendo K punti casuali dal dataset. Assegnare ogni oggetto al cluster il cui centroide è più vicino, utilizzando una misura di distanza come ad esempio la distanza Euclidea. Aggiornare i centroidi come la media degli oggetti assegnati al cluster. Ripetere i passi 3 e 4 finché i centroidi non convergono, ovvero finché non cambiano più significativamente. Una volta che il processo di clustering è stato completato, ogni oggetto viene assegnato al cluster a cui appartiene in base alla distanza dal centroide. Esempio di cluster analysis con Python Per illustrare come utilizzare K-means per eseguire un'analisi di cluster, in questa sezione forniremo un esempio pratico utilizzando Python. Prima di iniziare, assicurati di avere i seguenti prerequisiti installati sul tuo computer: Un ambiente di sviluppo Python, come ad esempio Anaconda o PyCharm. La libreria NumPy per l'elaborazione dei dati in forma numerica. La libreria Pandas per il caricamento e la manipolazione dei dati. La libreria Matplotlib per la visualizzazione dei dati. Una volta che hai installato queste librerie, sei pronto per iniziare a lavorare con K-means in Python. Per semplicità, useremo un set di dati fittizio su degli studenti e i loro voti. Immagina di avere un dataset che contiene le seguenti informazioni sugli studenti: Nome Genere (Maschio o Femmina) Età Numero di esami sostenuti Voto medio Per creare questo dataset fittizio, possiamo utilizzare la libreria Pandas e generare dei dati casuali. Ecco un esempio di come fare: import pandas as pd import numpy as np # Crea un array di nomi casuali nomi = ['Mario', 'Anna', 'Giovanni', 'Sara', 'Luca', 'Chiara', 'Francesco', 'Martina', 'Riccardo', 'Alessia'] # Crea un array di generi casuali generi = ['M', 'F', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'F'] # Crea un array di età casuali età = np.random.randint(18, 26, size=10) # Crea un array di numero di esami sostenuti casuali esami = np.random.randint(1, 10, size=10) # Crea un array di voti medi casuali voti = np.random.randint(60, 101, size=10) Una volta che abbiamo generato i nostri dati fittizi, possiamo creare un dataframe Pandas utilizzando questi array: # Crea il dataframe Pandas df = pd.DataFrame({'Nome': nomi, 'Genere': generi, 'Età': età, 'Esami': esami, 'Voto': voti}) # Mostra le prime 5 righe del dataframe df.head() Il risultato dovrebbe essere simile a questo: Ora che abbiamo il nostro dataset, possiamo procedere con l'analisi di cluster utilizzando K-means. Per fare questo, dobbiamo prima importare il modulo di K-means dalla libreria scikit-learn: from sklearn.cluster import KMeans A questo punto, possiamo creare un'istanza di KMeans specificando il numero di cluster che vogliamo ottenere (in questo caso, 2): # Crea un'istanza di KMeans con 2 cluster kmeans = KMeans(n_clusters=2) Infine, possiamo utilizzare il metodo fit() per addestrare il modello di K-means sul nostro dataset: # Addestra il modello di K-means sul dataset kmeans.fit(df[['Età', 'Esami', 'Voto']]) Il modello di K-means ora è stato addestrato e può essere utilizzato per assegnare ogni oggetto del dataset a uno dei due cluster. Possiamo ottenere le etichette dei cluster assegnate ad ogni oggetto utilizzando il metodo predict(): # Assegna le etichette dei cluster a ogni oggetto del dataset df['Cluster'] = kmeans.predict(df[['Età', 'Esami', 'Voto']]) # Mostra le prime 5 righe del dataframe con la colonna Cluster aggiunta df.head() Il risultato dovrebbe essere simile a questo: Come puoi vedere, ogni oggetto del dataset è stato assegnato a uno dei due cluster (0 o 1) in base alle sue caratteristiche (età, numero di esami sostenuti, voto medio). A questo punto, possiamo utilizzare queste informazioni per esplorare le caratteristiche dei due cluster e scoprire eventuali pattern o relazioni interessanti. A questo punto, possiamo utilizzare le informazioni ottenute dal modello di K-means per esplorare le caratteristiche dei due cluster e scoprire eventuali pattern o relazioni interessanti. Ad esempio, possiamo utilizzare la libreria Matplotlib per visualizzare i dati in un grafico a dispersione e ottenere una rappresentazione visiva dei due cluster: import matplotlib.pyplot as plt # Crea un grafico a dispersione dei dati utilizzando le colonne Età e Voto plt.scatter(df['Età'], df['Voto'], c=df['Cluster'], cmap='viridis') plt.xlabel('Età') plt.ylabel('Voto') plt.show() Il grafico dovrebbe mostrare i due cluster in colori diversi, in base all'etichetta assegnata dal modello di K-means. In questo modo, è possibile visualizzare visivamente le caratteristiche dei due cluster e scoprire eventuali pattern o relazioni interessanti. Questo è solo un esempio di come utilizzare K-means per eseguire un'analisi di cluster con Python. Naturalmente, ci sono molti altri aspetti da considerare nell'utilizzo di K-means, come ad esempio la scelta del numero di cluster ottimale, la selezione delle caratteristiche da utilizzare per il clustering, o la valutazione della qualità dei cluster ottenuti. Tuttavia, spero che questo esempio ti abbia fornito un'idea di come utilizzare K-means in Python e ti abbia ispirato a esplorare ulteriormente questo algoritmo. Conclusione In conclusione, K-means è un algoritmo di clustering molto popolare e versatile che viene utilizzato in diverse aree, come il marketing, la finanza, la biologia e molte altre. Basato sulla minimizzazione di una funzione di costo che misura la somiglianza degli oggetti all'interno di ciascun cluster, K-means viene eseguito iterativamente aggiornando i centroidi come la media degli oggetti assegnati al cluster. In questo articolo, abbiamo visto come utilizzare K-means per eseguire un'analisi di cluster con Python, utilizzando un semplice esempio di dataset fittizio su degli studenti e i loro voti. Spero che questo articolo ti sia stato utile e ti abbia fornito una buona comprensione della teoria e dell'utilizzo di K-means. Grazie per aver letto questo articolo! Se ti è piaciuto e vuoi rimanere aggiornato sui nostri contenuti, ti invitiamo a iscriverti al nostro sito. In questo modo potrai ricevere notifiche ogni volta che pubblichiamo nuovi articoli e rimanere sempre informato sui nostri contenuti. Grazie ancora e a presto!
- I Migliori Libri Sull’ Intelligenza Artificiale in Italiano da Leggere 2023
Le aziende stanno investendo molto nell'intelligenza artificiale per aumentare il suo business futuro Libri per capire come Applicare l'Intelligenza Artificiale al Business. Libri per capire come Applicare l'Intelligenza Artificiale al Business. nostro tempo è un qualcosa di assolutamente necessario per chi lavora nel settore del web marketing.Il business Business, Tecnica ed Etica ( Utilizza il nostro link per usufruire di uno sconto al momento dell'acquisto
- Intelligenza artificiale applicata in pratica con Q.bo STEM
Tanti anni fa, nel 1977, quando iniziai ad occuparmi di cibernetica, lo feci perché leggendo un libro di Silvio Ceccato, mi sembra si intitolasse “L’ABC della cibernetica”, ci misi tre settimane per cercare di capire quello che c’era scritto nelle prime tre pagine. Dice Wikipedia: Filosofo irregolare, dopo aver proposto una definizione del termine "filosofia" e un'analisi dello sviluppo storico di questa disciplina, a partire dalla fine degli anni '40 ha preferito prenderne le distanze e perseguire la costruzione di un'opzione alternativa, denominata inizialmente "metodologia operativa" e in seguito "cibernetica della mente". (e gia questo, per un potenziale ribelle come ero a quel tempo, mi affascinava moltissimo). Continua Wikipedia: Silvio Ceccato fu Saggista prolifico, ha scritto numerosi libri, saggi, e articoli, rendendosi noto in particolare nel campo della cibernetica. Pur ottenendo notevole successo di pubblico con i suoi libri, riscosse scarso successo negli ambienti scientifici e filosofici accademici. (non poteva essere diversamente). Fu tra i primi in Italia ad interessarsi alla traduzione automatica di testi, settore in cui ha fornito importanti contributi scientifici. Negli anni sessanta sperimentò anche la relazione tra cibernetica e arte in collaborazione con il Gruppo V di Rimini. Studioso della mente, intesa come l'insieme delle attività che l'uomo svolge per costituire i significati, memorizzarli ed esprimerli, ne propose un modello in termini di organo - funzione, scomponendo quest'ultima in fasi provvisoriamente elementari di un ipotetico organo, e nelle loro combinazioni in sequenze operazionali, in parte poi designate dalle parole e dalle frasi, o da altri codici utilizzati nei rapporti sociali. Su questi argomenti pubblicò 21 volumi e centinaia di saggi. Anche io a quel tempo, sebbene giovane scapestrato, studiavo queste cose, ma all’università, avevo “preferito” la praticità della vita (che per praticità della vita, bisogna intendere che, essendo figlio di emigranti, sebbene i miei genitori mi spingessero a continuare gli studi, io, vivendo con i nonni che ormai stavano diventando vecchi e soli, optai per un percorso più avventuroso, ma questo non lo potevo immaginare, sicuramente quello che volevo, era di essere di supporto a questi poveri vecchietti, se avessi trovato un buon lavoro, forse avrei anche avuto il tempo ( non so la voglia), di rimettermi in gioco con gli esami). Così a ventitre, ventiquattro anni, mi ritrovai con un paio di negozi di informatica da gestire e una collaborazione con un laboratorio di elettronica. Non c’era ancora internet, ovviamente, per studiare, mi compravo i libri, ma anche se giunsi davanti al portone di ingresso dell’università, per prendere i moduli, ritornai a casa, senza compilarli, dicendomi che, con il carattere che mi ritrovavo, (avevo litigato con qualche professoressa il giorno della verifica d’esame di italiano per la maturità, che mi bruciò il ‘60…), il dovere sociale che mi aveva costretto alla leva militare, lo avevo assolto, e non me la sentivo di dire ancora “Signor ssssisssignore!”. Evidentemente la lettura del libro “Un Uomo” di Oriana Fallaci, aveva lasciato il segno sin da quel 1978, percui, siccome anche io, nel mio piccolo, avevo scritto un libro, che in piccola parte è stato riportato in alcuni articoli su questo sito, andai a trovare di persona, a Milano, questo grande faro, che mi aveva aiutato ad illuminare le parti più buie della mia mente. Mi ricordo ancora che, nel lungo colloquio, ad un certo momento, quando gli dissi che mi dispiaceva non aver approfondito gli studi universitari, anche perché non c’era un corso di studi sulla cibernetica o sulla psicocibernetica, Lui mi disse, ma uno con le tue capacità, ha bisogno di un pezzo di carta per vivere? ( si sentiva tutta la sua delusione per il mondo accademico), credimi, mi disse, ha più soddisfazione un idraulico a Venezia, che un professore a Milano. Fatto sta, che consegnai una copia dei miei appunti, una buona bottiglia di prosecco ed un salame nostrano, perché mi sembrava una cosa buona riportare alla memoria i nostri prodotti tipici, ad uno che probabilmente aveva origini Venete, e ritornai a casa, con un senso di tristezza e di malinconia, ma anche con la voglia di impegnarmi, a modo mio, nel cercare di fare qualcosa di utile. Non ho mai voluto cercare ipocriti risconti su quelli che erano gli studi che conducevo, la vita poi mi riservò tante avventure, molto spesso brutte avventure, per cui, cercare di portare a casa “la pagnotta”, in una giungla di animali feroci, era già un buon risultato. Quindi, tra una esperienza e l’altra approdai ad operare nell’ambito della impiantistica elettrica, poi nell’automazione industriale, nella robotica industriale, per finire anche ad occuparmi di intelligenza artificiale e robotica sociale. Mai avrei detto, in quel lontano 1977 che, iniziare a studiare cibernetica, più per sopravvivenza che per curiosità, mi avrebbe portato a programmare una macchina (Q.bo STEM), che in qualche modo, usufruendo di un sistema interlacciato di informazioni, riuscisse, non solo a tradurre autonomamente delle frasi, da molte lingue diverse, ma riuscisse anche a parlare, (anche se ancora grezzamente), con dei fonemi appropriati, e soprattutto, a capire i comandi. Era difficile allora, immaginare, dal basso delle mie conoscenze, che sarebbe stato possibile implemetare degli algoritmi, dei motori inferenziali, tali da permettere un simile approccio ai processi di traduzione. Mentre adesso, è sin troppo semplice, dall’alto della piramide software necessaria per poter espletare questo compito, scrivere alcune righe di programma, per raggiungere i risultati che potete riscontrare nel video allegato. In pratica, con circa trecento linee di codice in Python, si può fare in modo che Q.bo risponda ai comandi, riconosca in che lingua si intende tradurre la frase, permetta la traduzione in lingue diverse e la ripetizione della frase. Ovvio, qualche volta sbaglia a capire le parole, (dipende da internet)… ma risulta essere lo stesso simpatico! In sintesi, come nella modalità più classica, la strutturazione del programma prevede il caricamento di alcune librerie fondamentali (che costituiscono la piramide), in modo particolare, si considerano le seguenti: #!/usr/bin/python3 # import the necessary packages import speech_recognition as sr from deep_translator import GoogleTranslator import re import os import subprocess import wave #import yaml import time Poi si passa al settaggio delle variabili utilizzate in questo processo: # setting for i, mic_name in enumerate(sr.Microphone.list_microphone_names()): if mic_name == "dmicQBO_sv": m = sr.Microphone(i) print ("microphone is", m) Query = "" P_language = "" Api_Lang = "" translated = "" start = True end = False first_translate = False command = "" counter = 0 new_Lang = False Lang_verified = False repeat = False Phrase = "" #------------------ Txt_start = "sono pronto, al momento, posso fare traduzioni in inglese, francese o spagnolo" Txt_end = "va bene ciao" Txt_end1 = "fine delle traduzioni, spero di esserti stato utile" Txt_end2 = "però, aspetto che tu mi insegni a parlare in molte altre lingue!" dopodicchè viene istanziata una classe: class listen(): def __init__(self): #global start, enc, P_language, Api_Lang, Txt, Query, command #global first_translate e vengono definite le varie funzioni, una per il controllo dei comandi: def control_commands(self): global command, end, first_translate, new_Lang print ("command in control command is = ", command) if command != "": if "spegni" in command: print ("comando spegni attivato") command = "" end = True #..... if re.search(r'\s*cambia lingua', command): print("cambio lingua richiesto") first_translate = False new_Lang = True Lang_verified = False command = "" P_language = "" Api_Lang = "" if re.search(r'\s*ripeti*', command): global repeat print ("ripetizione richiesta") command = "" repeat = True if re.search(r'\s*smetti di tradurre', command): print ("richiesta di fine lavoro") end = True Una per il riconoscimento vocale del parlato italiano: def take_commands(self): global m, Query # initializing speech_recognition r = sr.Recognizer() # opening physical microphone of computer with m as source: r.adjust_for_ambient_noise(source) print('Ascolto...') r.pause_threshold = 1 # storing audio/sound to audio variable audio = r.listen(source) try: print("Riconoscimento") # Recognizing audio using google api Query = r.recognize_google(audio, language="it_IT") command= Query.lower() print("Questo è ciò che ho capito='", command, "'") except Exception as e: print(e) print("Prova a ripetere, credo di non aver capito") # returning none if there are errors return "None" # returning audio as text time.sleep(2) return command Una per la vocalità italiana: def Speak(self): global Txt print ("frase parlata", Txt) spk_now = 'espeak -v mb-it4 -s 120 -p 35 -w /tmp/temp.wav' +' " '+ Txt + ' " '+ '&& aplay -r 8000 -D convertQBO /tmp/temp.wav' subprocess.call(spk_now, shell=True) Una per le vocalità nelle lingue oggetto della traduzione: def Speak_Translate(self): print ("testo tradotto", translated) if Api_Lang == "en": spk_now = 'espeak -v mb-en1 -s 120 -p 35 -w /tmp/temp.wav' +' " '+ translated + ' " '+ '&& aplay -r 8000 -D convertQBO /tmp/temp.wav' subprocess.call(spk_now, shell=True) if Api_Lang == "es": spk_now = 'espeak -v mb-es2 -s 120 -p 35 -w /tmp/temp.wav' +' " '+ translated + ' " '+ '&& aplay -r 8000 -D convertQBO /tmp/temp.wav' subprocess.call(spk_now, shell=True) if Api_Lang == "fr": spk_now = 'espeak -v mb-fr1 -s 120 -p 80 -w /tmp/temp.wav' +' " '+ translated + ' " '+ '&& aplay -r 8000 -D convertQBO /tmp/temp.wav' subprocess.call(spk_now, shell=True) Una per la verifica del riconoscimento della richiesta inerente la lingua “target”: def verify(self): global Lang_verified global Api_Lang global P_language print ("contollo in verify", P_language) if re.search(r'\s*francese', P_language): print("lingua riconosciuta", P_language) Api_Lang = "fr" elif re.search(r'\s*inglese', P_language): print("lingua riconosciuta", P_language) Api_Lang = "en" elif re.search(r'\s*spagnolo', P_language): print ("lingua riconosciuta", P_language) Api_Lang = "es" elif re.search(r'\s*portoghese', P_language): print ("lingua riconosciuta", P_language) Api_Lang = "pt" if Api_Lang !="": Lang_verified = True else: P_language = "" Api_Lang = "" print ("verify non riconosce la lingua") command = "" Lang_verified = False ed infine una per la richiesta di traduzione alla I.A. remota: def translator(self): global translated print ("Api_Lang = ", Api_Lang) translated = GoogleTranslator(source = 'it', target = Api_Lang).translate(Phrase) print("traduzione",translated) Infine, le istruzioni di processo: prima di eseguire il codice, l’interprete Python legge il codice sorgente e definisce alcune variabili globali speciali, tra cui la variabile __name__ a cui viene assegnato il nome del modulo principale in esecuzione. Un modulo è un file contenente definizioni e dichiarazioni in Python. if __name__=='__main__': """ Main void. Is the main void executed when started. It does: - Start the node - Create an object of the class - Run the node """ while True: print("devo tradurre in che lingua?", P_language) print("o capire un comando?", command) print ("start=", start) if start == True: start = False Txt = Txt_start listen.Speak(Txt) command = listen.take_commands(m) listen.control_commands(command) print ("command", command) print ("controllo comandi effettuato", "end=", end) if end == True: print ("game over") print ("comando spegni in esecuzione") Txt = Txt_end command = "" start = False listen.Speak(Txt) Txt = Txt_end1 listen.Speak(Txt) Txt = Txt_end2 listen.Speak(Txt) #os.system("shutdown -h now") break P_language = command if Lang_verified == False: listen.verify(P_language) print ("Lang_verified =", Lang_verified) print ("lingua target =", Api_Lang) print ("controllo cambio lingua", "new_Lang=", new_Lang) print ("Api_Lang verificato:", Api_Lang) if Api_Lang !="" and new_Lang == True: print ("richiesta cambio lingua in corso") new_Lang = False Lang_verified = False Query = "" Txt = "sono pronto, dimmi in che lingua devo fare la traduzione" listen.Speak(Txt) command = listen.take_commands(m) P_language = command listen.control_commands(command) listen.verify(P_language) print ("verifica cambio lingua effettuata") if Api_Lang == "": print ("lingua non riconosciuta") Txt = "mi dispiace, non ho riconosciuto il nome della lingua, puoi ripetere?" Query = "" listen.Speak(Txt) Query = "" Txt ="" P_language = "" first_translate = False command ="" Lang_verified = False if Lang_verified == True and first_translate == False: print ("Lingua riconosciuta, prima traduzione") Query = "" if Api_Lang == "es": Query = "spagnolo" if Api_Lang == "en": Query = "inglese" if Api_Lang == "fr": Query = "francese" Txt= "la lingua che mi hai indicato dovrebbe essere " + Query listen.Speak(Txt) Query = "" Txt = "Dimmi la frase che vorresti tradurre" listen.Speak(Txt) Txt="" command = listen.take_commands(m) Phrase = command Txt = "la frase dovrebbe essere," + Phrase listen.Speak(Txt) Query ="" Txt = "che nella lingua da te richiesta, si traduce in questo modo: " listen.Speak(Txt) Txt = "" listen.translator(Phrase) listen.Speak_Translate(translated) first_translate = True print ("in attesa di comando") elif Api_Lang != "" and repeat == True: repeat = False listen.Speak_Translate(translated) elif Api_Lang != "" and re.search(r'\s*altra frase*', command): print ("chiede altra frase") Query = "" Txt = "Dimmi la frase che vorresti tradurre" listen.Speak(Txt) Txt="" command = listen.take_commands(m) Phrase = command Txt = "questa frase dovrebbe essere," + Phrase listen.Speak(Txt) Query ="" Txt = "che, se non sbaglio,si traduce così: " listen.Speak(Txt) Txt = "" listen.translator(Phrase) listen.Speak_Translate(translated) print ("frase tradotta") elif Query != "": Txt = "mi sembra di aver capito," + Query listen.Speak(Txt) Query = "" Txt = "ma non saprei come posso fare per esaudire il tuo desiderio!" listen.Speak(Txt) Query = "" Txt = "vuoi farmi un'altra domanda o spengo?" #------------------------ print ("P_language attuale ", P_language) listen.Speak(Txt) Txt = "" command ="" print ("controllo finale") else: print ("aspetta comandi") command = listen.take_commands(m) listen.control_commands(command) Query = "" Txt = "" command = "" counter += 1 print (" in tutti gli altri casi incrementa counter", counter) Detto questo, il gioco è fatto, si fa per dire! Ecco un video dell'output : Amazon ( Acquistabile con il Bonus Cultura e Carta docente ) Un ringraziamento particolare per tutti coloro che hanno dedicato il loro tempo prezioso a questa lettura, che spero possa essere di stimolo per le nuove generazioni, a cercare di “imparare ad imparare”, come dice Q.bo STEM, in alcuni video, senza mai farsi condizionare da false aspettative, consci del fatto che l’unica ricchezza che abbiamo è la nostra conoscenza, che va coltivata, come si coltivano le cose buone che ci dona la natura, scartando le erbacce che infestano il campo (appunto il campo di conoscenza che non è solo un big-data). Se siete interessasti ad aggiornamenti e video su Q.bo STEM potete seguirmi quì : https://patreon.com/Qbo_STEM
- Come usare l’IA per imparare nuove lingue in modo facile e divertente
Vedremo come usare ChatGPT, un chatbot basato sull’IA che può generare conversazioni in diverse lingue Un esempio di questo tipo di IA è ChatGPT, un chatbot basato sull’IA che può generare conversazioni in Come usare ChatGPT per imparare una lingua ChatGPT è un chatbot basato sull’IA che può generare conversazioni ChatGPT usa un modello di IA chiamato GPT-3, che è in grado di produrre testi coerenti e creativi su Migliori prompt per imparare una lingua ChatGPT è un chatbot generico, che può generare conversazioni
- Cosa è Chat GPT e come usarla gratis + Regalo
e altri modelli di intelligenza artificiale Problemi etici ChatGPT Trucchi per usare al meglio ChatGPT Problemi etici ChatGPT: Ecco alcuni problemi etici con ChatGPT e altri modelli di intelligenza artificiale Trucchi per usare al meglio ChatGPT Stai cercando di ottenere il massimo da ChatGPT, il potente modello Utilizza i controlli avanzati per personalizzare il comportamento di ChatGPT: ChatGPT offre una serie Approfitta delle applicazioni ChatGPT predefinite: per semplificare l'utilizzo di ChatGPT, sono disponibili
- Principali tendenze sull'Intelligenza Artificiale e Analisi Dati per il 2023
diventate un mandato, costringendo le aziende a digitalizzare le operazioni e abbracciare modelli di business














