Sanal Asistan Programlama Dili: CEYD

Bu konuyu okuyanlar

Cenker Sisman

Öğrenci
Katılım
26 Şubat 2019
Mesajlar
41
Reaksiyon puanı
37
Puanları
18
Yaş
53
CEYD Dili Nedir?

CEYD dili (CEnker.com Yapay Zeka Dili), sohbet robotu ile karşılıklı konuşma esnasında verilen sesli soruların tanımlanmasını ve bu komutlara robotun nasıl cevap vermesi gerektiğini belirleyen bir script dilidir.
Bu script dilini kullanıcılar web üzerinde, Android telefon ve tabletlerde çalışan CEYD-A uygulaması içinde veya web servis API’lerini kullanarak diğer platformlarda kullanıp uygulayabilirler.
CEYD dili fonksiyonları cevapların içine yazılır, robotun soruya karşılık nasıl bir cevap vermesi gerektiğini belirler.
Komutlar kullanıcılar tarafından oluşturulduğu için beyin hücreleri gibidir. Halihazırda 300 bin komut oluşturulmuştur ve bu hücreler birbirleriyle etkileşim içine girebildikleri için makine öğrenmesine yatkın bir yapıdadır.

1*FW0cjR1qdFlpwB8C8OCOHA.jpeg

Görsel Kaynak

KOMUT nedir?
Bir komutu, robota sorulan soruyu ve cevabı tanımlayan adımlar zinciri olarak tanımlayabiliriz. Komut, CEYD-A uygulamasının soru cevap yapısını belirleyen tanımdır. Komutlar, hem
CEYD-A içerisinde Menü->Hesaplar->CEYD-A
ile hem de web üzerinde http://ceyd-a.net/komutekle adresinden kullanıcıya özgü tanımlanabilir. Bu tanımlar kullanıcı cihazlarından otomatik olarak algılanır ve yüklenir.
Komut tanımlama işlemi, aşağıda bahsi geçen 4 ana adım ile yapılmaktadır.

SORU KELİMELERİ

1*_aFG13GEgl_h4E0-7412UA.png

http://ceyd-a.net/komutekle sayfasından komut ekleme
Söyleyeceğiniz cümle içinde bu kelime veya kelimelerden biri geçiyorsa komut devreye girer. Amacı bir bakıma kelimeleri indekslemektir.
Soru kelimelerini seçerken, söyleyeceğiniz cümlenin içinde muhakkak kullanılacak kelime veya kelime öbeklerini seçmeniz önerilir. Kelimenin yanına yazılacak öncelik değeri ile komutların çağırma önceliği belirlenebilir. Bu şekilde alternatif imkanlar sunulabilir.
Soru kelimelerine örnek:
okuyor musun
okul*
Bu örnekte söylediğimiz cümlenin içinde okuyor musun veya içinde okulgeçen bir kelime olmalı. Başka deyişle, okula gidiyor musun dediğimizde içinde okul geçtiği için bu komutu kapsamaktadır. Okul kelimesinin sonundaki * işareti devamında başka bir ek gelebilir anlamındadır. okula,okuldan,okulu gibi kelimeleri içerir. Eğer * işareti eklemeden okul deseydik okula gidiyor musun bu komut için devreye girmeyecek ama okul eğitim yuvasıdır dediğimizde devreye girecekti. O sebeple * işareti kelimenin çeşitliliğini arttıran bir simgedir
Eğer aynı soru kelimeleri başka komut tanımlarında da mevcut ise, hangi komutun devreye gireceğini soru şablonu ve öncelikler belirler.

SORU ŞABLONU

1*xG1NX-j6q76tE-IjYuxlEg.png

Robota sorulabilecek sorunun cümle şablonu tanıtılır. Burada regex yapısı kullanılabilir. Ayrıca kolaylaştırmak için CEYD dilinin sunduğu ilave ifadelerde kullanılabilir veya boş bırakılabilir. Boş bırakılırsa her şablona uygun anlamına gelir. Kullanılması daha zengin komutlar oluşturulması için idealdir.
Regex tanımlarına ek olarak,
{BAŞ}
.*?
regex ifadesi ile eşdeğerdir. Herhangi bir söz dizimidir. Olabilir veya olmayabilir. Cümlenin başında sizin konuya odaklanmayacağınız kelimeleri ifade eder.
({HER1})
(.*?) ile eşdeğerdir. Herhangi bir söz dizimi olabilir veya olmayabilir ve bu söz dizimi cevapta kullanılmak üzere parametre olarak belirlenir. HER1 gibi HER2 de tanımlanabilir.
({SAYI1})
(\d*) ile eşdeğerdir. Parametre olarak bir sayı belirlenir. SAYI1 gibi SAYI2 de tanımlanabilir.
({KELİME1})
(\w*) ile eşdeğerdir. Parametre olarak bir kelime belirlenir. KELİME1 gibi KELİME2 de tanımlanabilir.
{SON} Cümle sonunda, ana kelimelerden sonra bu ifadenin kullanılması doğru olacaktır. Cümlenin sonunda sizin konuya odaklanmayacağınız kelimeleri ifade eder. Genelde şablon cümlesinde en önde {BAŞ} son kısımda {SON} kullanılmalıdır.
.* herhangi bir söz dizimi anlamındadır. Regex’in diğer tüm yazılım formatı burada desteklenmektedir.
Örnek:
{BAŞ}({KELİME1}){NİN EKİ} maçı{SON}
şablonu CEYD-A, FENERBAHÇENİN MAÇI NE ZAMAN? cümlesi ile örtüşmektedir.
Başka bir örnek olarak aşağıdaki ifade soru şablonuna girildiğinde,
({SAYI1}) ile ({SAYI2}) topla.*
eğer sorunuz 4 ile 3 topla ise, 4 ve 3 parametreler olarak algılanır ve bu parametreler {SAYI1} ve {SAYI2} olarak cevap şablonunda kullanılabilir. Örneğin cevap şablonu da şu şekilde olsun:
{SAYI1} ile {SAYI2} yi toplamamı mı istiyorsun ?
O zaman siz 5 ile 6 topla dediğinizde, robot size cevap şablonunda parametreleri eşleştirerek 5 ile 6 yi topmamı mı istiyorsun? der.

CEVAP ŞABLONU

1*QXKR1WxCdGz0051ZDhfpwQ.png

Robotun sözlü olarak size vereceği cevabı belirler. Düz cevap metni olabileceği gibi içine kod yazılmış metin de olabilir.
Verilebilecek cevaplar yine | işareti ile ayrıştırılarak tanımlanır. Soru şablonunda tanımlanan parametreler {KELİME1}, {SAYI1}, {HER1} olarak kullanılabildiği gibi, soru şablonundaki ( ) parantez içindeki ifadeler, cevapta $1, $2 gibi de kullanılabilir. $1 ifadesi 1. parantez grubunu belirtmektedir.
Örnek 1:
Hayır, okumuyorum|Okumak için öğrenci olmalıyım|Robotum okula gidemem
İşte bu cevapların içine CEYD fonksiyonları istenirse eklenebilir. Ayrıca sorudan alınan parametreler de bir önceki adımda anlatıldığı gibi cümle içinde kullanılabilir.
Örnek 2:
Soru şablonu şu şekilde olsun:
({KELİME1}) nasıl sence
Cevap şablonu da aşağıdaki gibi olabilir:
{KELİME1} nedir bilemiyorum|Ne yazık ki {KELİME1} hakkında bir bilgiye sahip değilim|Üzgünüm, {KELİME1} nasıl bir şey bilemeyeceğim
Soru şablonundan gelen parametreler { } işaretleri arasında tanımlanırken, cevap içinde oluşturulan değişkenler $ işareti ile başlar. CEYD fonksiyonları ise cevap cümlelerinin içinde {! !} işaretleri arasında tanımlanır.

RET, IF, SET, GET,EVAL, FOR fonksiyonları
  • RET fonksiyonu tanımlı bir komutun sonucunu döndürür.
  • IF fonksiyonu iki değeri karşılaştırır ve mantıksal sonuca göre değer döndürür
  • SET fonksiyonu bir değişkene değer atar. Bu değer uygulama kapalı olsa bile hafızada tutulur.
  • GET fonksiyonu değişken değerini döndürür.
  • EVAL fonksiyonu matematiksel işlem yapıp değerini döndürür
  • FOR döngüsü, içinde tanımlanan fonksiyonların döngü koşulu içerisinde tekrarlanarak çağrılmasını sağlar.
  • FOREACH döngüsü ile dizilerin ve anahtar değer ikilisi ile atanmış yinelemeli dizilerin değerleri alındığı sürece tekrarlı işlem yapar
Bazı örnekler:
Dışarıda hava {!RET hava kaç derece!} derece. Buna göre değerlendir.|Kendi zevkine kalmış % {!RET hava bulut oranı!} oranında bulut var.
Televizyon {!RET Televizyon nedir!} demek sanırım
{KELİME1} demek {!RET {KELİME1} nedir!} demek sanırım.
Hava {!SET derece={!RET hava kaç derece!}!} derece. Bence {!IF $derece<=18??19 dereceden düşük olduğu için soğuk::18 dereceden fazla olduğu için sıcak!}.
{!FOR $i=0,9 {!SET $i+=1!}{!GET $i!}.sıra
!} Bitti.
Biraz daha komplike bir örnek vermek gerekirse, bir kur hesaplayıcı yazalım.
SORU ŞABLONU:
({SAYI1})(amerikan dolar|dolar|euro|yuro) (ne kadar|kaç lira|kaç tl).*
CEVAP ŞABLONU:
{SAYI1} {PARAM2} {!EVAL{!RET {PARAM2}!}*{SAYI1}!} TL dir.
Bilindiği gibi soru şablonu regex formatındadır.() ile ayrılan gruplar, cevap şablonunda sırasına göre $1 $2 gibi ifade edilmektedirler. Burada $1 ( veya örnekteki {SAYI1} ) cevaptaki {SAYI1} grubuna karşılık gelmektedir. Yani 2 amerikan doları kaç lira denildiğinde 2, ({SAYI1}) ifadesine yani soru şablonundaki 1. gruba denk düşer. 2. parantezli grup amerikan dolarıdır. 3. parantezli grup ise kaç lira dır.
Bu şekilde düşündüğümüzde cevap şablonunda aynı değerler, {PARAM1} veya bu örnekte {SAYI1} olarak atanmış -> 2 , {PARAM2} -> amerikan doları olarak aynen kullanılabilir.
Cevap şablonunu bu değerlerle yorumlar isek, {PARAM1}, {PARAM2} değerlerini yazdığımızda cevap şu şekilde olacaktır:
2 amerikan doları {!EVAL{!RET amerikan doları!}*2!} TL dir
RET fonksiyonu hazır bir komutu çalıştırıp değerini döndürdüğünden, CEYD-A, hali hazırdaki komut yapısından amerikan doları dendiğinde 5.27 değerini döndürürecektir. Öyleyse, cevabımız yorumlanmaya devam ettiğinde sırasıyla
2 amerikan doları {!EVAL{!RET amerikan doları!}*2!} TL dir
2 amerikan doları {!EVAL 5.27*2!} TL dir
2 amerikan doları 10.54 TL dir.

cevabı oluşacak ve ekrana yansıyacaktır.

İŞLEM ŞABLONU

1*rJdbgQYhBPf_PUI80ikrGQ.png

Eğer hazır bir komuta yeni soru cümleleri eklemek istiyorsanız bu adımı kullanabilirsiniz. Diyelim durumumu güncelle dediğinizde, CEYD-A sizi anlamıyor ve bu komutu dediğinizde hazırda olan CEYD-A’nın anlayabildiği facebook komutu ile aynı işlemi yaptıracaksınız. O zaman soru cümlesine durumumu güncelle, komuta yönlendir içine facebook tanımladığınızda artık durumumu güncelle dediğinizde facebook durumunuzu güncelleyebilirsiniz.
Daha komplike bir örnek ise, Kartal a nasıl giderim dediğinizde Kartal nerede komutunun çalışmasını istiyorsanız, soru şablonuna;
({HERHANGİ1}) nasıl giderim
Soru kelimelerine;
nasıl giderim
NEREDE komutu hali hazırda olduğu için komuta yönlendir bölümüne;
{HERHANGİ1} nerede
yazmanız yeterli olacaktır. $1, parantezli ilk gruptur {HERHANGİ1} olarak tanımlanan kısımdır.

1*2dwg7qzVOUrXVPUYKe5cSA.png

http://web.ceyd-a.com/wp-content/uploads/2017/09/nimbus-record-video-2017-09-09-16-47-25.webm

NASIL KOMUT YAZILIR ?
Komutlar buradaki videoda gösterildiği gibi kodlama ile veya kolayca kod yazmadan sesle söylenerek tanımlanabilir. Örneğin CEYD-A’ ya HAVADİSLERİ OKU DEDİĞİMDE HABERLERİ OKUYACAKSIN dediğinizde kendisi HAVADİSLERİ OKU komutunu oluşturur ve yapacağı işlem olarak HABERLERİ OKU işlemini atar.
CEYD dili ile yazılmış komutlardan bazı örnekler:

1*bqKsafqztVS4lIrRTrMVzg.png


1*UKGlKeI0e65WFmen8JuRdQ.png


1*1ud14M9cjs5yczBjus1NNA.png


1*hjvwfh0XXW6vcWGmZuKRjg.png


1*jkSi0L0BonVoNv5SsRBgQw.png


Bu yazıda CEYD dilinin neler yapabildiğinden bahsetmek istedim. Daha sonraki yazılarda basit tanımlamalardan başlayıp daha komplike tanımları içeren örneklerden bahsedeceğim.
Komut ekleme ile ilgili yardımcı bilgi ve videolara Komut Ekleme Nasıl Yapılır ? sayfasından ulaşabilirsiniz.
 

ertan2002

Asistan
Katılım
9 Aralık 2008
Mesajlar
346
Reaksiyon puanı
112
Puanları
43
hocam selamlar,

ugrasiniz, yazdiginiz anlatim/makale icin cok tesekkürler. Böyle büyük bir proje altinda calisiyor olmaniz sevindirdi beni. Ancak bu haliyle piyasada cok bir degeri yok (türkiye'de zaten pek degeri yok).. Dediginiz gibi makine ögrenimine yatkin bir yapidaysa bence bu alan üzerinde calisma yapin. Izlediniz mi bilmiyorum ama person of interest isimli bir dizi var ve oradaki makineye benzettim calismasini ama orada makine kendi kendine ögreniyor. Bundan bir kac yil önce zürih'te microsoft'un bir sunumuna katilmistim, yapay zeka ve makine ögrenimi ile ilgili cok güzel bir sunum ve geldigi noktalar gösteriliyordu.. Bu alan cidden bir yazilim mühendisi olarak beni bile korkutuyor..

Daha önce yine ted'de nesnelerin taninmasiyla ilgili güzel bir sunum izlemistim
Calismalariniz bu alana kaydirir, otonom bir sistem tasarlayabilirseniz türkiye icin büyük bir is yapmis olursunuz ancak ülkemizde pek takdir edilecegini sanmiyorum. Yine de calismalarinizda basarilar diliyorum.
 

Cenker Sisman

Öğrenci
Katılım
26 Şubat 2019
Mesajlar
41
Reaksiyon puanı
37
Puanları
18
Yaş
53
Merhaba oncelikle tesekkur ederim. Zaten bir çok üniversitede CEYD dili proje geliştiriliyor şu an. Ayrıca liselerde de çalışmalar var ve Tübitak yarismasinda bölgesel dereceye girmiş olanları da var. 5 seneden beri kullanılan bir proje ve yeni değil aslinda. Bence CEYD-A | CEYD-A sitesini incelemenizi tavsiye ederim. Bahsettikleriniz konular CEYD dili ile gerçekleştirilebiliyor aslında. CEYD bir geliştirme platformu. Incelemenizi tavsiye ederim. Sorularınız olursa bana site üzerinden ulaşabilirsiniz. Teşekkür ederim.

Aşağıda Deep Learning Türkiye de yayınlanmış bazı yazıları da bulabilirsiniz.
“CEYD-A Türkçe Mobil Asistan” https://link.medium.com/mPYn1mNgFU
“CEYD Dili Nedir ?”
 
Son düzenleme:

Cenker Sisman

Öğrenci
Katılım
26 Şubat 2019
Mesajlar
41
Reaksiyon puanı
37
Puanları
18
Yaş
53
Sayın Volkan Aktaş 'ın hazırladığı çalışma. Kendisini tebrik ediyorum: Raspberry Pi + MATRIXCreator üzerinde Python programlama dili ile sesli asistan yapımı. Google Speech Recognition kütüphanelerini kullanarak sesi yazıya ve yazıyı sese dönüştürme işlemlerini gerçekleştirirken, CEYD-A asistana web üzerinden veri gönderip sonuçları okuyor.
 

ertan2002

Asistan
Katılım
9 Aralık 2008
Mesajlar
346
Reaksiyon puanı
112
Puanları
43
güzel calisma ama bana hep sag kulagi sol elle tutma gibi geliyor. Elbette yapilan is olarak bakilinca harika, hatta raspberry pi üzerinde calismasi bile basli basina güzel bir sey. raspi zero w kullanilarak kücük bir cihaz bile yapilabilinir. Ancak teknoloji olarak bakinca cok yavan kaliyor. Tam manasiyla bir makine ögrenimi yok ya da ben yanlis anlamis da olabilirim. Gördügüm kadariyla, su sorulursa söyle cevap ver ve o cevaba su verileri ekle gibi bir mantigi var. Teknolojik anlamda bir yeniligi yok, bunu asabilirseniz iste o zaman hem ülke icin hem de teknoloji anlaminda bir seyler basarilmis olur.

Yanlis anlamanizi istemem (bugünlerde beni baya kisi yanlis anliyor nedense). Yapilan ise cidden saygi duyuyorum ve böyle bir proje yarattiginiz icin de cok sevindim. Ancak sizlerden daha iyisini bekliyorum :)
 

Cenker Sisman

Öğrenci
Katılım
26 Şubat 2019
Mesajlar
41
Reaksiyon puanı
37
Puanları
18
Yaş
53
Gördügüm kadariyla, su sorulursa söyle cevap ver ve o cevaba su verileri ekle gibi bir mantigi var. Teknolojik anlamda bir yeniligi yok,
Merhaba dediğiniz gibi görünüyor ama tam da o şekilde değil aslında. Tamamen yenilikçi ve farklı bir yapı. Aşağıdaki linkleri incelemenizi tavsiye ederim.



68143


Modüler komut yapısı: Kullanıcılar sesle veya kodla komutlarını geliştirirken, yararlı olan yeni komutları da kendilerinde geliştirmek için kullanabilirler
68144
 
Üst