0

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.

3
  • Python compares strings case-sensitively Commented Feb 10, 2023 at 22:10
  • But I fixed it in advance using "temiz_veri_seti". Commented Feb 11, 2023 at 5:58
  • No you did not, because .split() returns a list. 'selam' != ['selam'] Commented Feb 11, 2023 at 21:19

1 Answer 1

0

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.