AI per scrivere racconti di viaggio: errore strano in Python, aiuto!

👤 Iniziato da @telemacacolombo41
📅 27/06/2025 11:00
📁 Intelligenza Artificiale 🌐 IT
Avatar di telemacacolombo41
Ciao community, sono un'appassionata di letteratura di viaggio e sto provando a creare uno script Python che genera racconti brevi ispirati a luoghi lontani usando modelli linguistici. Ho impostato tutto con TensorFlow e un dataset di diari di esploratori, ma quando avvio la generazione ottengo sempre questo errore:

```python
# Estratto del mio codice
def generate_story(prompt):
output = model.generate(prompt, max_length=150, temperature=0.9)
return output # Qui crasha con 'TypeError: unhashable type'
```
Ho già verificato i tipi di dati dell'input e aggiornato le librerie, ma il problema persiste. Qualcuno ha incontrato un bug simile? Mi piacerebbe capire se è un limite del modello o un mio errore nel preprocessare il testo. Consigli su come debuggarle? Grazie a chi vorrà condividere esperienze!
Avatar di robinlombardo
Ehi @telemacacolombo41, che bel progetto! Adoro l'idea di mixare letteratura di viaggio e Python. Quel TypeError "unhashable type" di solito salta fuori quando il prompt che passi al modello è una lista o un dizionario invece che una stringa. Hai provato a fare un check tipo `print(type(prompt))` prima della generazione?

Se il problema persiste, potresti provare a forzare la conversione a string con `str(prompt)`, anche se magari è meglio capire perché arriva già male formattato. A me è successo una volta che il dataset aveva dei NaN striscianti nel preprocessing.

PS: Se ti serve ispirazione per i racconti, i diari di Bruce Chatwin sono oro puro! Tienici aggiornati sul progetto, sono curioso di leggere qualche output!
Avatar di teobaldofabbri43
Il consiglio di @robinlombardo di verificare il tipo di dato del `prompt` è ottimo. Quel `TypeError: unhashable type` è spesso legato a un passaggio di dati non compatibili con le aspettative del modello.

Una possibile causa potrebbe essere anche nella fase di preprocessing del testo: se stai usando tokenization o embedding, assicurati che il `prompt` sia stato correttamente preprocessato. Un'altra cosa da controllare è se ci sono valori nulli o liste vuote nel dataset che potrebbero essere passati al modello.

Bruce Chatwin è un ottimo riferimento, i suoi diari sono molto ispiranti! Per il debug, potresti anche provare a stampare non solo il tipo di `prompt`, ma anche il suo contenuto per vedere se ci sono pattern anomali. In bocca al lupo con il progetto, e se hai altri intoppi, siamo qua per aiutarti!
Avatar di canyonamato
Ehi @telemacacolombo41, che progetto affascinante! Anch'io adoro mixare letteratura e coding - ho una collezione di segnalibri da tutto il mondo proprio per storie come le tue.

Quel `TypeError` maledetto... ci sono sguazzato ogni volta! Oltre ai consigli ottimi di @robinlombardo e @teobaldofabbri43, controlla **due cose trascurate**:
1. Se usi un tokenizer, assicurati di passare `prompt` come **stringa semplice** DOPO la codifica, non come tensore. Prova:
```python
if not isinstance(prompt, str):
prompt = tokenizer.decode(prompt, skip_special_tokens=True)
```
2. Verifica se nel tuo dataset ci sono **caratteri non decodificabili** (es. emoji vecchie o encoding misto). A me crashava tutto per un apostrofo "smart" copiato da un PDF di Paul Theroux!

PS: Per ispirazione, ruba spunti dai resoconti di Tiziano Terzani - la sua prosa ti farebbe impazzire il modello. Tienici aggiornati!
Avatar di reefmarino59
Ciao @telemacacolombo41, sono davvero incuriosita dal tuo progetto! Anch'io ho provato a giocare con i modelli linguistici per generare testi e so quanto possa essere frustrante quel `TypeError`. I consigli di @robinlombardo e @teobaldofabbri43 sono stati utilissimi, ma credo che valga la pena approfondire un altro aspetto: l'encoding del testo.

Se stai usando un dataset di diari di esploratori, potresti avere a che fare con caratteri non standard o encoding misto. Già solo un semplice apostrofo "diverso" può mandare in crisi il modello. Prova a fare un preprocessing più aggressivo per pulire i dati, magari usando `unicodedata.normalize` per uniformare i caratteri.

Inoltre, se non l'hai già fatto, valuta di stampare qualche esempio di `prompt` problematico per capire se ci sono pattern strani. I diari di esploratori sono una miniera di spunti, ma possono contenere refusi o formattazioni strane. Tiziano Terzani è un'ottima fonte di ispirazione, come dice @canyonamato! In bocca al lupo, fammi sapere se riesci a risolvere!
Avatar di blupalmieri
Ecco, quel dannato TypeError è una bestia che conosco bene! Oltre a tutti i validi consigli già dati, ti direi di controllare anche la struttura del tuo modello. A volte quel tipo di errore spunta quando provi a passare un tensore o un array numpy direttamente come chiave (magari il tuo modello si aspetta una stringa pulita e invece gli arriva roba già tokenizzata).

Un trick che mi ha salvato il culo più volte: prima della generazione, fai un print(type(prompt)) e un print(prompt[:100]) per vedere esattamente cosa sta andando nel modello. Se vedi roba tipo <class 'numpy.ndarray'> o strutture strane, hai trovato il colpevole.

Ah, e se usi un tokenizer custom, controlla che non stia facendo magheggi con i dizionari interni. Per i racconti di viaggio, io ho avuto fortuna con i dataset di Bruce Chatwin ma solo dopo averli ripuliti maniacalmente da tutte quelle maudite virgolette francesi che usava sempre!

PS: se risolvi, condividi qualche output, sono curioso di vedere cosa esce da quei diari d'esploratori! Magari ci becchiamo il prossimo Chatwin generato da AI ;)
Avatar di parkervilla
Quel `TypeError: unhashable type` è davvero un osso duro! Oltre ai consigli già forniti, vorrei sottolineare l'importanza di controllare la compatibilità tra il tipo di dato che il modello si aspetta e quello che effettivamente gli passi.

Un passaggio fondamentale è verificare se il `prompt` viene correttamente gestito dal tokenizer e se non ci sono incongruenze nei dati di input. La pulizia dei dati è cruciale, specialmente se stai usando un dataset di diari di esploratori che potrebbero contenere caratteri non standard o encoding misto.

Ti consiglio di fare un preprocessing più aggressivo usando `unicodedata.normalize` per uniformare i caratteri e di stampare qualche esempio di `prompt` problematico per capire se ci sono pattern strani.

Per ispirazione, potresti attingere da autori come Bruce Chatwin o Tiziano Terzani, come già suggerito. Sono curioso di vedere gli output del tuo modello una volta risolto il problema!
Avatar di telemacacolombo41
Grazie mille @parkervilla! Hai centrato proprio il nodo: i miei diari di esploratori ottocenteschi sono un campo minato di caratteri bizzarri e accenti dimenticati. Non avevo considerato `unicodedata.normalize`! Dopo i tuoi suggerimenti ho:
1) Normalizzato tutto in NFC
2) Aggiunto un controllo sugli apici storti (`“ ”` → `"`)
3) Stampato snippet casuali prima del tokenizer

La magia è avvenuta: il tokenizer ha smesso di ribellarsi! Ora le descrizioni della steppa generate sanno davvero di Chatwin, con quel misto di precisione e stupore. Se ti capita, ti mando un estratto via DM per farti sorridere. Questo thread è stato un viaggio risolutivo!

La Tua Risposta

💬

Vuoi partecipare alla discussione?

Accedi o registrati per scrivere la tua risposta e unirti alla conversazione!