Özelleştirilmiş ChatBot. ChatBot Nedir | by Sibel Çakmak | Nov, 2023


ChatBot Nedir

Kullanıcıların dijital ortamda mesajlaşma yoluyla bir insan ile yazışır gibi iletişim kurdukları ve bir konuda bilgi alma, işlem yapma gibi çeşitli amaçlarla kullandıkları sohbet robotlarıdır.

Neden Özelleştirilmiş ChatBot

OpenAI tarafından geliştirilen, yapay zekâya dayalı bir sohbet robotu olan ChatGPT sayesinde doğal dil işleme büyük bir başarı yakaladı. Robot, kendisine sorduğunuz soruları karşınızda bir insan varmış gibi cevaplayabiliyor. Ayrıca, ChatGPT hangi dilde yazdığınızı anlayabiliyor, sizin için açıklayıcı yazılar oluşturabiliyor, farklı programlama dillerinde programlar yazabiliyor ve hataları dahi ayıklayabiliyor.

Kişisel ChatBotlar ise internette bulunmayacak kişilere veya kurumlara ait blgilere cevap veriler. Çok sorulan sorulara ve merak edilen konulara manuel değil online cevap vermek için kullanılır. Bu proje kapsamında özelleştirilmiş chatbot yapılmıştır. Bu sayede özel sorulara cevap vermekle kalmıyor, genel konular içinde bard yada openai kullanarak cevap veriyor.

Kodlamaya Geçelim..

İlk olarak doğal dil işleme ile (NLP) özelleşmiş verilerimizi eğitiyoruz.

Oluşturduğumuz veri setini taglara ve kelimelerin köklerine göre ayıralım. Türkçe kelimelerin köklerini bulmak için snowballstemmer kütüphanesi kullanılmıştır.

from snowballstemmer import TurkishStemmer
stemmer = TurkishStemmer()
words = []
classes = []
documents = []
ignore_words = ['?', '!']

for intent in intents['intents']:
for pattern in intent['patterns']:

w = nltk.word_tokenize(pattern)
words.extend(w)

documents.append((w, intent['tag']))

if intent['tag'] not in classes:
classes.append(intent['tag'])

words = [stemmer.stemWord(w.lower()) for w in words if w != "?"]
words = sorted(list(set(words)))
classes = sorted(list(set(classes)))

Türkçe kelimelerin köklerini bulmak için snowballstemmer kütüphanesi kullanılmıştır.

from snowballstemmer import TurkishStemmer
stemmer = TurkishStemmer()

Ardından, tekrarlayan kelimeleri temizleyip, sıralar ve tekrar küme haline getirir.

words = [stemmer.stemWord(w.lower()) for w in words if w != "?"]
words = sorted(list(set(words)))
classes = sorted(list(set(classes)))

words ve classes listelerini pickle formatında dosyalara kaydeder.

pickle.dump(words, open('words.pkl', 'wb'))
pickle.dump(classes, open('classes.pkl', 'wb'))

Eğitim verilerini oluşturmak için kullanılacak olan training ve output_empty listelerini tanımlar. Eğitim verilerini karıştırırır ve Numpy dizisine dönüştürür. Daha sonra derin öğrenme ile verileri öğretir.

for doc in documents:
bag = []
pattern_words = doc[0]
pattern_words = [stemmer.stemWord(word.lower()) for word in pattern_words]
for w in words:
bag.append(1) if w in pattern_words else bag.append(0)

output_row = list(output_empty)
output_row[classes.index(doc[1])] = 1

training.append([bag, output_row])
random.shuffle(training)
training = np.array(training, dtype=object)
train_x = list(training[:, 0])
train_y = list(training[:, 1])
print("Training data created")

model = Sequential()
model.add(Dense(128, input_shape=(len(train_x[0]),), activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(len(train_y[0]), activation='softmax'))

Modeli oluşturur. Bu model, giriş katmanında 128 nöron, ardından bir dropout katmanı, 64 nöronlu bir gizli katman ve bir çıkış katmanı içerir. Modeli derleyip (compile eder) ve kullanılacak olan kayıp fonksiyonu, optimizer ve metrikleri belirler.

sgd = SGD(learning_rate=0.01, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])

hist = model.fit(np.array(train_x), np.array(train_y), epochs=300, batch_size=5, verbose=1)

En son eğittiğimiz modeli tekrar kullanmak için kaydedelim

model.save('model.keras', hist)

Artık özelleşmiş chatbot oluştu. Şimdi bilmediği soruları bulmasına yardım edelim. Bunun için OpenAI veya Bard kullanılabilir.

Bard ile Geliştirme Yapmak

Bard , yapay zekâ desteğine sahip bir sohbet botudur. Bard, tıpkı ChatGPT gibi sohbet edilebilmesine imkân tanıyor. Bu, kullanıcıların kutucuğa bir metin yazarak chatbot ile etkileşime girdiği ve sorduğu sorulara yanıt alabildiği anlamına geliyor.

Rakiplerine kıyasla daha hızlı yanıt verebilen Bard, kullanıcılara üç farklı yanıt sunuyor. Sohbet botuyla bir konu hakkında çeşitli sorular sorabilir, film veya dizi tavsiyesi alabilir, kod yazdırabilir, e-posta hazırlatabilir ve daha fazlasını yapabilirsiniz.

from bardapi import Bard
from dotenv import load_dotenv
import os

load_dotenv()
os.environ["_BARD_API_KEY"] = os.getenv("BARD_API_KEY")

def bardDevrede(message):
bard = Bard()
answer = bard.get_answer(str(message))
return answer["content"]

Bard API ücretsiz bir şekilde alınmaktadır. OpenAI ek olarak güncel verilere de erişim sağlamaktadır. Geliştiriciler için kodlama kısmında OpenAI den daha hızlıdır

OpenAI ile Geliştirme Yapmak

OpenAI, yapay zekayı sorumlu ve güvenli bir şekilde ilerletmeye adanmış bir araştırma kuruluşudur. Geliştirdikleri araçlardan biri, gerçek zamanlı olarak insan benzeri metinler oluşturabilen son teknoloji bir doğal dil işleme modeli olan ChatGPT, çeşitli istemlere tutarlı ve ilgi çekici yanıtlar verme konusundaki etkileyici yeteneğiyle ilgi gördü ve bu da onu sohbet robotları , içerik oluşturma ve dil çevirisi gibi görevler için değerli bir araç haline getirdi.

def openaiDevrede(soru):
openai.api_key = "sk-*****"
messages = []

def add_message(role, content):
messages.append({"role": role, "content": content})

def converse_with_chatGPT():
model_engine = "gpt-3.5-turbo"
response = openai.ChatCompletion.create(
model=model_engine,
messages=messages,
max_tokens=1024,
n=1,
stop=None,
temperature=0.5
)
message = response.choices[0].message.content
return message.strip()

def process_user_query(prompt):
user_prompt = (f"{prompt}")
add_message("system", "You are a helpful assistant.")
add_message("user", user_prompt)
result = converse_with_chatGPT()
print(result)

def user_query():
response = process_user_query(soru)
return response

user_query()

Kodu çalıştırdığımızda OpenAI sorulara cevap vermeye başlayacaktır. OpenAI ücretli API sunmaktadır ve geliştirme konusunda Bard’a göre daha yavaştır.

En son aşama olarak özelleştirilmiş chatbot ve bard birleştirelim. (OpenAI ücretli API sunduğu için direk Bard’ı önerdim). Eğittimiz modeli çağıralım ve soruya cevap versin, veremezse eğer devreye Bard girsin ve cevap versin.

def chatbot(user_input):
input_data = nltk.word_tokenize(user_input)
input_data = [stemmer.stemWord(word.lower()) for word in input_data]

input_vector = [0] * len(words)
for word in input_data:
if word in words:
input_vector[words.index(word)] = 1

input_vector = np.array(input_vector).reshape(1, len(input_vector))
results = model.predict(input_vector)[0]
results_index = np.argmax(results)
tag = classes[results_index]

# responses değişkenini başlangıçta boş bir liste olarak tanımla
responses = []

if results[results_index] > 0.90:
for tg in intents["intents"]:
if tg['tag'] == tag:
responses = tg['responses']

# Koşul sağlandığında responses değişkenini güncelle
if responses:
return random.choice(responses)
else:
return "Cevap bulunamadı."
else:
return bardDevrede(user_input)

Kodların tamamını görmek ve incelemek için aşağıdaki linke gidiniz.



Source link

Be the first to comment

Leave a Reply

Your email address will not be published.


*