-->

Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Codice completo un traduttore con LSTM


Codice completo per un traduttore Italiano Inglese
Ottenuto con chatGPT testato con Google Colab

Traduttore con LSTM

Con la rete LSTM creiamo un traduttore.

Codice Completo



import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import LSTM, Dense, Embedding

# Generazione casuale di parole inglesi e traduzioni italiane
english_words = ['hello', 'world', 'cat', 'dog', 'house', 'car', 'tree', 'sun', 'moon', 'book']
italian_words = ['ciao', 'mondo', 'gatto', 'cane', 'casa', 'macchina', 'albero', 'sole', 'luna', 'libro']

# Creazione del DataFrame
vocabolario = pd.DataFrame({'Inglese': english_words, 'Italiano': italian_words})

# Tokenizzazione delle parole
tokenizer_eng = Tokenizer()
tokenizer_ita = Tokenizer()

tokenizer_eng.fit_on_texts(vocabolario['Inglese'])
tokenizer_ita.fit_on_texts(vocabolario['Italiano'])

vocab_size_eng = len(tokenizer_eng.word_index) + 1
vocab_size_ita = len(tokenizer_ita.word_index) + 1

# Sequenze di input e output
X = tokenizer_eng.texts_to_sequences(vocabolario['Inglese'])
y = tokenizer_ita.texts_to_sequences(vocabolario['Italiano'])

# Padding delle sequenze
maxlen = max(len(seq) for seq in X)  # Lunghezza massima delle sequenze
X = pad_sequences(X, maxlen=maxlen, padding='post')
y = pad_sequences(y, maxlen=maxlen, padding='post')

# Codifica one-hot per l'output
y = np.eye(vocab_size_ita)[y]

# Dividi il dataset in training e test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Definizione del modello LSTM
embedding_dim = 50
model = Sequential()
model.add(Embedding(vocab_size_eng, embedding_dim, input_length=maxlen))
model.add(LSTM(128, return_sequences=True))
model.add(Dense(vocab_size_ita, activation='softmax'))

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# Addestramento del modello
history = model.fit(X_train, y_train, epochs=50, validation_data=(X_test, y_test), verbose=2)

# Valutazione del modello
train_loss, train_acc = model.evaluate(X_train, y_train, verbose=0)
test_loss, test_acc = model.evaluate(X_test, y_test, verbose=0)

print(f'Accuracy del training set: {train_acc}')
print(f'Accuracy del test set: {test_acc}')

# Verifica dell'overfitting
if train_loss < test_loss:
    print("Non c'è overfitting.")
else:
    print("C'è overfitting.")

# Predizione della traduzione di una parola italiana inserita
while True:
    print("\nInserisci una parola italiana presente nel vocabolario (EXIT per uscire):")
    word = input().lower()
    if word == 'exit':
        break
    elif word in italian_words:
        # Tokenizzazione e padding della parola in input
        word_seq = tokenizer_ita.texts_to_sequences([word])[0]
        word_seq = pad_sequences([word_seq], maxlen=maxlen, padding='post')
        # Predizione della traduzione
        translated_seq = model.predict(word_seq)
        # Decodifica della traduzione
        translated_word = tokenizer_eng.sequences_to_texts(np.argmax(translated_seq, axis=-1))[0]
        print(f"La traduzione di '{word}' in inglese è '{translated_word}'.")
    else:
        print("La parola non è nel vocabolario.")