• Hakkımızda
  • Bize Katıl
  • Sizden Gelenler
  • İletişim
Yazılım Karavanı | Bilişim - Teknoloji - Blog
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar
No Result
View All Result
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar
No Result
View All Result
Yazılım Karavanı | Bilişim - Teknoloji - Blog
No Result
View All Result
Home Yapay Zeka

Python NLTK Kütüphanesi İle Basit Bir Chatbot Yapımı

Emre İnaç by Emre İnaç
Ağustos 23, 2022
in Yapay Zeka
10 min read
0
Python NLTK Kütüphanesi İle Basit Bir Chatbot Yapımı
WhatsApp'ta PaylaşTwitter'da PaylaşLinkedIn'de PaylaşTelegram'da Paylaş

CHATBOT NEDİR ?

Chatbot, bir cihazda, (Siri, Alexa, Google Asistan vb.), uygulamada, web sitesinde veya diğer ağlarda bulunan yapay zeka destekli bir yazılım parçasıdır. Tüketicinin ihtiyaçlarını ölçer ve ardından ticari işlem, otel rezervasyonu, form gönderme vb. gibi belirli bir görevi yerine getirmelerine yardımcı olur. Günümüzde hemen hemen her şirketin kullanıcılarla etkileşim kurmak için konuşlandırılmış bir sohbet robotu vardır. Şirketlerin chatbotları kullanma şekillerinden bazıları şunlardır:

  • Uçuş bilgilerini iletmek için
  • Müşteriler ve onlara ait mali durumlar arasında iletişim kurmak için
  • Müşteri desteği

Tabi ki de chatbot kullanım alanları neredeyse sınırsız olarak düşünülebilir.

Chatbotların tarihi, Weizenbaum tarafından ELIZA adlı bir bilgisayar programının icat edildiği 1966 yılına kadar uzanır. Sadece 200 satırlık koddan bir psikoterapistin dilini taklit etti. Onunla hâlâ burada sohbet edebilirsiniz: Eliza.
Chatbotları zamansal evrime göre ele alacak olursak üç kategoride inceleyebiliriz.

Geleneksel Botlar;

  • Sistem odaklı
  • Otomasyona dayalı
  • Minimal işlevsellik
  • Yalnızla sistem içeriğini işleme yeteneği

Günümüz Botları;

  • Sistem ve insanlar arasında ileri geri iletişim tarafından yönlendirilir
  • Görev düzeyinde otomasyon
  • Sistem içeriği ve görev içeriğini işleme yeteneği


Gelecek Botları;

  • Sistemden insana, insandan insana ve sistemden sisteme gibi çoklu iletişim seviyesi
  • Servis seviyesinde otomasyon
  • Sistem içeriği, görev içeriği ve insana dair içerikleri işleme yeteneği
  • Bir işletim sistemi olarak bot

Chatbotların Çalışma Prensibi ?

Chatbotlar, Kural Tabanlı(Rule Based) ve Kendi Kendine Öğrenen(Self Learning) gibi iki farklı tipe sahiptirler.

1. Kural Tabanlı Chatbot; Kural tabanlı bir yaklaşımda, bir bot, eğitim aldığı bazı kurallara dayalı olarak soruları yanıtlar. Tanımlanan kurallar çok basit ila çok karmaşık olabilir. Botlar basit sorguları işleyebilir, ancak karmaşık olanları yönetemez.

2. Kendi Kendine Öğrenen Chatbot; Kendi kendine öğrenen botlar, bazı Makine Öğrenimi tabanlı yaklaşımları kullanan ve kural tabanlı botlardan daha verimli olanlardır. Bu botlar ayrıca iki tipte olabilir, Erişim Tabanlı (Retrieval Based) veya Üretken (Generative).

  • Erişim tabanlı modellerde, bir chatbot, önceden tanımlanmış yanıtlardan oluşan bir kitaplıktan bir yanıt seçmek için bazı buluşsal yöntemler kullanır. Chatbot, önceden tanımlanmış bir bot mesajları listesinden en iyi yanıtı seçmek için konuşmanın mesajını ve bağlamını kullanır. Bağlam, diyalog ağacındaki mevcut bir konumu, konuşmadaki tüm önceki mesajları, önceden kaydedilmiş değişkenleri (örneğin, kullanıcı adı) içerebilir. Bir yanıt seçmeye yönelik buluşsal yöntemler, kural tabanlı if-else koşullu mantıktan makine öğrenimi sınıflandırıcılarına kadar birçok farklı şekilde tasarlanabilir.
  • Üretken botlar yanıtları üretebilir ve her zaman bir yanıtlar dizisinden bir ögeyle yanıt vermeyebilir. Bu, onları sorgudan, kelime kelime alıp yeni yanıtlar oluşturdukça daha akıllı hale getirir.

Chatbotun Python İle Geliştirilmesi

Gereksinimler: NLTK ve Scikit Kütüphanelerinin kullanımı hakkında bilgi birikimi.

NLP

İnsan dili ve bilgisayarlar arasındaki etkileşimlere odaklanan çalışma alanına Doğal Dil İşleme veya kısaca NLP denir. Bilgisayar bilimi, yapay zeka ve hesaplamalı dilbilimin kesişim noktasında yer alır.
NLP, bilgisayarların akıllı ve kullanışlı bir şekilde insan dilini analiz etmesi, anlaması ve anlam türetmesi için bir yoldur. Geliştiriciler, NLP’yi kullanarak otomatik özetleme, çeviri, adlandırılmış varlık tanıma, ilişki çıkarma, duygu analizi, konuşma tanıma ve konu bölümleme gibi görevleri gerçekleştirmek için bilgiyi organize edebilir ve yapılandırabilir.

NLTK

NLTK( Natural Language Toolkit), insan dili verileriyle çalışacak Python programları oluşturmaya yönelik lider bir platformdur. Sınıflandırma, simgeleştirme, kaynak oluşturma, etiketleme, ayrıştırma ve anlamsal akıl yürütme için bir metin işleme kitaplığı paketinin yanı sıra, endüstriyel güçlü NLP kitaplıkları için sarmalayıcılar ile birlikte WordNet gibi 50’den fazla kurumsal ve sözcük kaynağına, kullanımı kolay arabirimler sağlar.

NLTK, “Python kullanarak hesaplamalı dilbilimi öğretmek ve çalışmak için harika bir araç” ve “doğal dille oynamak için harika bir kitaplık” olarak adlandırıldı.

NLTK’nın İndirilmesi ve Kurulumu

1) pip install nltk komutunu çalıştırarak NLTK’nın kurulumu

nltk kurulum
2) python komutu ile python terminali çalıştırıp, import nltk yazılıp, kurulumun test edilmesi

import nltk

NLTK Paketlerinin Kurulumu

NLTK import edildikten sonra nltk.download() komutu çalıştırılır. Bu komut, indirilecek modellerin seçilebildiği NLTK indiricisini açacaktır. Ayrıca tüm paketler bir defada indirilebilir

nltk indirmeler

NLTK İle Metin Ön İşleme

Metin verileriyle ilgili ana sorun, hepsinin metin biçiminde (dizeler) olmasıdır. Ancak, makine öğrenimi algoritmaları, görevi gerçekleştirmek için bir tür sayısal özellik vektörüne ihtiyaç duyar. Bu nedenle, herhangi bir NLP projesine başlamadan önce, metin verisini eğitime ideal hale getirmek için onu önceden işlememiz gerekir. Temel metin ön işleme şunları içerir:

Algoritmanın aynı kelimeleri farklı durumlarda farklı olarak ele almaması için tüm metni büyük veya küçük harfe dönüştürmek.

  • Simgeleştirme (Tokenization): Tokenization, normal metin dizelerini bir belirteç listesine, yani istediğimiz kelimelere dönüştürme sürecini tanımlamak için kullanılan terimdir. Cümle listesini bulmak için bir cümle belirteci kullanılabilir ve dizelerdeki kelimelerin listesini bulmak için bir Word Tokenizer kullanılabilir.
    NLTK veri paketi, İngilizce için önceden eğitilmiş bir Punkt Tokenizer içerir.
  • Gürültüyü Kaldırma: Yani standart bir sayı veya harfte olmayan her şey.
  • Durma Kelimelerini (Stop Words) Kaldırma: Bazen, bir kullanıcının ihtiyacına uygun belgelerin seçilmesine yardımcı olmada çok az değere sahip görünen bazı son derece yaygın kelimeler, kelime dağarcığından tamamen çıkarılır. Bu kelimelere durma kelimeleri denir.
  • Stemming (Köklendirme): Stemming, çekimli (veya bazen türetilmiş) kelimeleri kök, taban veya kök biçimlerine (genellikle yazılı bir kelime biçimine) indirgeme işlemidir. Örneğin, “Stems”, “Stemming”, “Stemmed”, “ve Stemmization” sözcüklerini kökten türetseydik, sonuç tek bir sözcük olurdu, “stem”.
  • Lemmatization (Başlıklandırma): Köklendirmenin hafif bir çeşidi Başlıklandırmadır. Bunlar arasındaki en büyük fark, kök çıkarmanın genellikle var olmayan kelimeler yaratabilmesidir, oysa başlıklar(lemmas) gerçek kelimelerdir. Yani, sonunda bulduğunuz kök kelime, sözlükte arayabileceğiniz bir şey değilken, bir başlığı arayabilirsiniz. Örnek verecek olursak; “koşacak”, “koşuyor” veya “koştu” gibi kelimelerin temel biçimi “koşmak” tır veya “daha iyi” ve “iyi” kelimeleri aynı başlıkta olduğu için aynı kabul edilir.

Bag Of Words (Kelime Torbası)

İlk ön işleme aşamasından sonra, metni anlamlı bir sayı vektörüne (veya dizisine) dönüştürmemiz gerekir. Kelime torbası, bir belgedeki kelimelerin oluşumunu açıklayan metnin bir temsilidir. İki şeyi içerir:

  • Bilinen kelimelerden oluşan bir kelime dağarcığı
  • Bilinen kelimelerin varlığının bir ölçüsü

Neden bir “kelime torbası” olarak adlandırılıyor? Bunun nedeni, belgedeki sözcüklerin sırası veya yapısıyla ilgili herhangi bir bilginin atılması ve modelin, yalnızca bilinen sözcüklerin belgede nerede ortaya çıktıklarıyla değil, belgede bulunup bulunmadığıyla ilgilenmesidir.

Kelime Torbasının arkasındaki sezgi, aynı içeriğe sahip olmaları durumunda belgelerin benzer olmasıdır. Ayrıca, sadece içeriğinden belgenin anlamı hakkında bir şeyler öğrenebiliriz.

Örneğin, sözlüğümüz {This, car, is, not, red} sözcüklerini içeriyorsa ve “This car is red” metnini vektörleştirmek istiyorsak, şu vektöre sahip oluruz: (1, 1, 1 0, 1).

TF-IDF Yaklaşımı

Kelime Torbası yaklaşımıyla ilgili bir sorun, çok sık kullanılan kelimelerin belgede baskın olmaya başlaması (örneğin, daha büyük puan), ancak çok fazla “bilgi içeriği” içermemesidir. Ayrıca, daha uzun belgelere daha kısa belgelerden daha fazla ağırlık verecektir.

Bir yaklaşım da kelimelerin sıklığını tüm belgelerde ne sıklıkta göründüklerine göre yeniden ölçeklendirmektir, böylece tüm belgelerde de sık görülen “ve” gibi kelimelerin puanları cezalandırılır. Bu puanlama yaklaşımına Terim Frekansı-Ters Belge Frekansı (Term Frequency-Inverse Document Frequency) veya kısaca TF-IDF adı verilir, burada:

Terim Frekansı: Geçerli belgedeki kelimenin sıklığının bir puanlamasıdır. Terim Frekansı, aşağıdaki gibi matematiksel olarak formülleştirilir.

TF = (İlgili terimin belgedeki kullanım frekansı) / (Belgedeki Terim Sayısı)

Ters Belge Frekansı: Kelimenin tüm belgelerde ne kadar nadir olduğunun puanlamasıdır. Ters Belge Frekansı aşağıdaki gibi matematiksel olarak formülleştirilir.

IDF = 1 + log (Belge sayısı/ İlgili terimin bulunduğu belge sayısı)

! TF-IDF ağırlığı, bilgi alma ve metin madenciliğinde sıklıkla kullanılan bir ağırlıktır. Bu ağırlık, bir kelimenin bir koleksiyon veya derlemedeki bir belge için ne kadar önemli olduğunu değerlendirmek için kullanılan istatistiksel bir ölçüdür.
Örneğin;
100 adet kelime içeren ve “telefon” kelimesinin 3 kez geçtiği bir belge düşünelim. Bu durumda “telefon” kelimesi için tf ve idf sayıları aşağıdaki şekilde hesaplanabilir.

TF = (3/100) = 0.03

Şimdi de 5 milyon belgemiz olduğunu ve bu belgelerinde on iki bin tanesinde “telefon” kelimesinin bulunduğunu varsayalım.

IDF = log (5,000,000 / 12,000) = log(416,66) = 2.62

Sonuçlarını elde ederiz. Bu sonuçlara göre ise TF-IDF ağırlığını (2.62 * 0.03) işlemi ile 0.078 olarak elde ederiz.

TF-IDF, Python scikit learn kütüphanesinden aşağıdaki şekilde import edilerek uygulanabilir.

“from sklearn.feature_extraction.text import TfidfVectorizer”

Cosine Similarity (Kosinus Benzerliği)

TF-IDF, vektör uzayında iki gerçek değerli vektör elde etmek için metinlere uygulanan bir dönüşümdür. Daha sonra herhangi bir vektör çiftinin Kosinüs benzerliğini, nokta çarpımlarını alarak ve bunu normlarının çarpımına bölerek elde edebiliriz. Bu, vektörler arasındaki açının kosinüsünü verir. Kosinüs benzerliği, sıfır olmayan iki vektör arasındaki benzerliğin bir ölçüsüdür. Bu formülü kullanarak herhangi iki belge d1 ve d2 arasındaki benzerliği bulabiliriz.

Cosine Similarity (d1, d2) = Dot product (d1, d2) / || d1 || * || d2 ||

Burada d1 ve d2, sıfırdan farklı iki vektördür.
Artık NLP işlemleri hakkında gerekli fikre sahip olduğumuzu düşünürsek bu işlemleri gerçek bir proje üzerinde deneyelim.

CHATBOT PROJESİ

1) Gerekli Kütüphanelerin Import Edilmesi
imports

2) Örnek Metin Belgesi

Örneğimizde, kaynak https://yazilimkaravani.net/gunumuz-dunyasinin-petrolu-veri/ sayfasından alınan veri ile alakalı bir makale kullanacağız. İçeriği sayfadan kopyalayın ve ‘chatbot.txt’ adlı bir metin dosyasına yerleştirin. Ancak, istediğiniz herhangi bir kaynağı da kullanabilirsiniz.

chatbot
3) Verinin Kaynaktan Belgeden Okunması
belge okuma

Yukarıdaki kod bloğunu çalıştırdıktan sonra, cümle ve kelime token listelerinden birer örneği incelemek için aşağıdaki kod bloğu çalıştırılabilir.

cümle ve kelime listeleri

4) Ham Metnin Ön İşlemesi
Şimdi, token’ları(belirteç) girdi olarak alacak ve normalleştirilmiş token’ları döndürecek olan LemTokens adlı bir işlev tanımlayacağız.

lemmer

5) Anahtar Kelimelerin Eşlenmesi

Daha sonra, bot tarafından selamlama için kullanımak üzere bir fonksiyon tanımlayacağız. Yani bir kullanıcının girdisi bir selamlama ise, bot bir selamlama yanıtı verecektir. Selamlamalar için basit bir anahtar kelime eşleme kullanılabilir.

selamlama

6) Cevap Oluşturma

Giriş sorularına karşılık, botumuzla bir yanıt oluşturmak için belge benzerliği kavramı kullanılacaktır. Bu yüzden gerekli modülleri içe aktararak başlıyoruz.

  • Bir ham belge koleksiyonunu, bir TF-IDF özellikleri matrisine dönüştürmek için scikit learn kütüphanesinden TFidfVectorizer modülü import edilir.import tfidf
  • Ayrıca yine scikit kütüphanesinden kosinüs benzerliği modülü de import edilir.
    import cosin similarity

Bu, kullanıcı tarafından girilen kelimeler ile kaynaktaki kelimeler arasındaki benzerliği bulmak için kullanılacaktır. Bu, bir chatbot’un mümkün olan en basit uygulamasıdır.
Kullanıcının ifadesini bir veya daha fazla genel anahtar kelime için arayan ve birkaç olası yanıttan birini döndüren bir işlev yanıtı tanımlarız.
Anahtar kelimelerden herhangi biriyle eşleşen girdi bulamazsa, bir yanıt döndürür: “Üzgünüm, seni anlamıyorum !“

response fonksiyonu

Son olarak, kullanıcının girdisine bağlı olarak, bir sohbeti başlatırken ve bitirirken botumuzun söylemesini istediğimiz satırları besleyeceğiz.

Projenin kaynak kodlarına GitHub üzerinden erişebilirsiniz: simple_chatbot

SONUÇ

Neredeyse hiç bilişsel beceriye sahip olmayan çok basit bir bot olmasına rağmen, NLP’ye girmek ve basit bir selamlama sohbeti yapmak için iyi bir yoldur. “Chatbot”, kullanıcı girdisine basit ve belirlenen yanıtları verebilir. Ancak bu örnek, bir chatbot yaratmanın tasarımını ve zorluklarını düşünmenize yardımcı olacaktır. İnternet kaynaklarla dolup taşıyor ve bu makaleyi okuduktan sonra eminim kendinize ait bir chatbot oluşturmak isteyeceksiniz. Hadi siz de kendinize ait bir chatbot oluşturmayı deneyin ve onu geliştirerek daha karışık cevaplar vermesini sağlayın.
Kendinize iyi bakın iyi geliştirmeler!

einac
Tags: ChatbotPythonYapay Zeka
SendTweet6Share2Share
Önceki Gönderi

Makine Öğrenimi Nedir?

Sonraki Gönderi

SOC Sistemler Üzerine Faydalı Notlar

İlgili Yazılar

VGG-19 Transfer Learning ile Görüntü Sınıflandırma

VGG-19 Transfer Learning ile Görüntü Sınıflandırma

by Ali Murat Çevik
Eylül 12, 2022
0

VGG19 Nedir? VGG19, adını Oxford Üniversitesi’nde bulunan “Visual Geometry Group” isimli gruptan almaktadır. Sonda bulunan 19 ise katman sayısını belirtmektedir....

Makine Öğrenimi Nedir?

Makine Öğrenimi Nedir?

by Emre İnaç
Ağustos 4, 2022
0

Makine Öğrenimi (ML), Yapay Zeka(AI)’ nın bir alt sınıfıdır. Makine öğrenimi; insana ait akıllı karar verme ve tahmin davranışlarını taklit...

Makine Öğreniminde Aşırı Öğrenme (Overfitting) Durumu

Makine Öğreniminde Aşırı Öğrenme (Overfitting) Durumu

by Ali Murat Çevik
Eylül 10, 2021
0

Merhabalar, bu yazıda makine öğrenimi alanında sıkça karşılaşılan aşırı öğrenme (overfitting) - ezber problemine değineceğim. “Aşırı öğrenme (overfitting) nedir?”, “Nasıl...

Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

by Emre İnaç
Temmuz 26, 2021
2

Bu makale, YOLO v4 teknolojisini kullanarak özelleşmiş nesne algılama ve nesne sınıflandırma için izlenmesi gereken işlemleri adım adım anlatan bir...

Makine Öğrenimi İçin Veri Artırımı (Data Augmentation)

Makine Öğrenimi İçin Veri Artırımı (Data Augmentation)

by Emre İnaç
Temmuz 23, 2021
0

Görüntü verisi büyütme, veri kümesinde görüntülerin değiştirilmiş versiyonlarını oluşturarak eğitim veri kümesinin boyutunu yapay olarak genişletmek için kullanılan bir tekniktir....

Next Post
SOC Sistemler Üzerine Faydalı Notlar

SOC Sistemler Üzerine Faydalı Notlar

VGG-19 Transfer Learning ile Görüntü Sınıflandırma

VGG-19 Transfer Learning ile Görüntü Sınıflandırma

Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

  • Popüler
  • Yorumlar
  • En Yeniler
Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

Temmuz 26, 2021
B Ağaçları (B Trees)

B Ağaçları (B Trees)

Ağustos 24, 2020
Splash Screen Yapımı #Flutter

Splash Screen Yapımı #Flutter

Mayıs 25, 2020
Gini Index Kullanılarak Karar Ağacının (Decision Tree)  Oluşturulması

Gini Index Kullanılarak Karar Ağacının (Decision Tree) Oluşturulması

Ağustos 20, 2020
2020 ‘nin En Güncel ve Tehlikeli Zararlı Yazılımları

2020 ‘nin En Güncel ve Tehlikeli Zararlı Yazılımları

6
Magento 2 Detaylı Kurulum & Hatalar

Magento 2 Detaylı Kurulum & Hatalar

5
Flutter’da TFLite Kullanımı

Flutter’da TFLite Kullanımı

4
Bubble Sort (Kabarcık Sıralama) Algoritması

Bubble Sort (Kabarcık Sıralama) Algoritması

2
VGG-19 Transfer Learning ile Görüntü Sınıflandırma

VGG-19 Transfer Learning ile Görüntü Sınıflandırma

Eylül 12, 2022
SOC Sistemler Üzerine Faydalı Notlar

SOC Sistemler Üzerine Faydalı Notlar

Eylül 2, 2022
Python NLTK Kütüphanesi İle Basit Bir Chatbot Yapımı

Python NLTK Kütüphanesi İle Basit Bir Chatbot Yapımı

Ağustos 23, 2022
Makine Öğrenimi Nedir?

Makine Öğrenimi Nedir?

Ağustos 4, 2022

Reklam

Yazılım Karavanı | Bilişim – Teknoloji – Blog

Bilgi Teknolojileri alanına meraklı herkesin buluşma noktası!

No Result
View All Result
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar

© 2020 Yazılım Karavanı Kaynak gösterilmesini rica ederiz.