python-3.xkeraskeras-layer

Python keras ValueError: ['selam'] is not in list error


I have written a program with Python Keras but it gives the following error:


import numpy as np
from keras.models import Sequential
from keras.layers import  Dense, Activation, Dropout
from keras.optimizers import *
import random
import json

# Veri setini oluştur.
veri_seti = ['Selam', 'Merhaba','Nasılsın','İyiyim','Seni ne hakkında bilmek istersin?','Bilgisayar mühendisliği hakkında bilmek isterim','Bilgisayar mühendisliği, bilgisayar bilimleri, yazılım ve donanım temelli alanlarda çalışanlar için bir alandır.']

# Veri setinin temizlenmesi
temiz_veri_seti = []
for soru in veri_seti:
    temiz_veri_seti.append(soru.lower().split())

# Sözlük oluşturma
sozluk = {}
for i in range(len(temiz_veri_seti)-1):
    kelime1 = " ".join(temiz_veri_seti[i])
    kelime2 = " ".join(temiz_veri_seti[i+1])
    if kelime1 not in sozluk.keys():
        sozluk[kelime1] = []
    sozluk[kelime1].append(kelime2)

# Sözlüğü dosyaya kaydetme
with open('sozluk.json','w') as dosya:
    json.dump(sozluk,dosya)

# Modeli oluşturma
model = Sequential()
model.add(Dense(128, input_shape=(len(sozluk.keys()),)))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(len(sozluk.keys())))
model.add(Activation('softmax'))

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

# Modeli eğitme
X = np.zeros((len(temiz_veri_seti)-1, len(sozluk.keys())), dtype=bool)
y = np.zeros((len(temiz_veri_seti)-1, len(sozluk.keys())), dtype=bool)
for i, sözcükler in enumerate(temiz_veri_seti[:-1]):
    X[i, list(sozluk.keys()).index(sözcükler)] = 1
    y[i, list(sozluk.keys()).index(temiz_veri_seti[i+1])] = 1
model.fit(X, y, epochs=500, batch_size=len(veri_seti))

def konus():
    kelime1 = random.choice(list(sozluk.keys()))
    mesaj = kelime1.capitalize()
    while True:
        if kelime1 in sozluk.keys():
            kelime2 = model.predict(np.array([X[list(sozluk.keys()).index(kelime1)]]))
            kelime2 = np.argmax(kelime2)
            kelime2 = list(sozluk.keys())[kelime2]
            mesaj += ' ' + kelime2
            if kelime2.endswith('.'):
                break
            else:
                kelime1 = kelime2
        else:
            break
    print(mesaj)

konus()

File "", line 45, in ValueError: ['selam'] is not in list

How can i fix it?

This program was supposed to be a word-based chatbot.I was waiting for him to learn and chat with the words I specified.İ used chatgpt to solve but it couldn't.


Solution

  • You receive this error because values of sozluk dict are strings:

    sozluk.keys()
    
    dict_keys(['selam', 'merhaba', 'nasılsın', 'i̇yiyim', 'seni ne hakkında bilmek istersin?', 'bilgisayar mühendisliği hakkında bilmek isterim'])
    

    but you try to find a list of values among these strings because temiz_veri_seti is a list of lists:

    temiz_veri_seti
    
    [['selam'], ['merhaba'], ['nasılsın'], ['i̇yiyim'], ['seni', 'ne', 'hakkında', 'bilmek', 'istersin?'], ['bilgisayar', 'mühendisliği', 'hakkında', 'bilmek', 'isterim'], ['bilgisayar', 'mühendisliği,', 'bilgisayar', 'bilimleri,', 'yazılım', 've', 'donanım', 'temelli', 'alanlarda', 'çalışanlar', 'için', 'bir', 'alandır.']]
    

    You should debug your code (or at least use simple print statements) to figure out what's going on inside and be able to find such problems.