CEYD Dili ile Programlama

Cenker Sisman
02-04-2018, 15:45   |  #1  
Cenker Sisman avatarı
OP Taze Üye
Teşekkür Sayısı: 0
2 mesaj
Kayıt Tarihi:Kayıt: Oca 2017

CEYD Dili Nedir ?

CEYD dili (CEnker.com Yapay Zeka Dili), sohbet robotu ile karşılıklı konuşmayı sağlayan verilen sesli soruların tanımlanmasını ve bu komutlara robotun nasıl cevap vermesi gerektiğini tanımlayan 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. Halen 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.



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 üzerinden 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.
Toplam 4 ana adım bulunmaktadır. Komut tanımlamak için adımlar şu şekildedir.

SORU KELİMELERİ

Söyleyeceğiniz cümle içinde bu kelime veya kelimelerden biri geçiyorsa komut devreye girer. Amacı bir bakıma kelimeleri indekslemektir.
 Komut için kullanılabilecek soru kelimeleri, | işareti ile ayrıştırılarak yazılır
Soru kelimeleri seçerken, söyleyeceğiniz cümlenin içinde muhakkak kullanılacak kelime veya kelimeler 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 okul geç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

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..Boş bırakılabilir. Bırakılırsa her şablona uygun anlamına gelir. Ancak 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 herhangi kelimeleri ifade eder.
({HER1})
(.*?) ile eşdeğerdir. Herhangi bir söz dizimi olabilir veya olmayabilir ve bu söz dizimin 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 herhangi 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 boyalı kısımlarla ö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 şablonu nda 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

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 1.parantez grubunu belirtmektedir.

Örnek 1:

Hayır, okumuyorum|Okumak için öğrenci olmalıyım|Robotum okula gidemem

iş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ıkki {KELİME1} hakkında bir bilgiye sahip değilim|Üzgünüm, {KELİME1} nasıl bir şey bilemeyeceğim

CEYD Fonksiyonları 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 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ğeri döner.
  • EVAL fonksiyonu matematiksel işlem yapıp değeri döner
  • 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 DERECE!} derece.Buna göre değerlendir.|Kendi zevkine kalmış % {!RET HAVA BULUT!} oranında bulut var.Televizyon {!RET Televizyon NEDİR!} demek sanırım{KELİME1} demek {!RET {KELİME1} NEDİR!} demek sanırım.Hava {!SET derece={!RET HAVA 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. Yani2 amerikan doları kaç liradenildiğinde 2, ({SAYI1}) ifadesine yani soru şablonundaki 1.gruba denk düşer. 2. parantezli grupamerikan dolarıdır. 3. parantezli grup isekaç liradı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 2.29 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 2.29*2!} TL dir
 2 amerikan doları 4.59 TL dir.
 cevabı oluşacak ve ekrana yansıyacaktır.

İŞLEM ŞABLONU

Eğer hazır bir komuta yeni soru cümleleri eklemek istiyorsanız bu adımı kullanabilirsiniz. Diyelimdurumumu güncelledediğinizde, CEYD-A sizi anlamıyor ve bu komutu dediğinizde hazırda olan CEYD-A’nın anlayabildiğifacebookkomutu ile aynı işlemi yaptıracaksınız. O zaman soru cümlesinedurumumu güncelle, komuta yönlendir içinefacebooktanımladığınızda artıkdurumumu güncelledediğinizde facebook durumunuzu güncelleyebilirsiniz.
 Daha komplike bir örnek ise,Kartala nasıl giderimdediğinizdeKartal neredekomutunun ç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.



NASIL KOMUT YAZILIR ?

Komutlar aşağıdaki linkteki 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.

http://ceyd-a.net/c/wp-content/u ... 09-09-16-47-25.webm

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.

http://ceyd-a.net/c/wp-content/uploads/2016/09/ceyd_commands.pdf

Son Düzenleme: Cenker Sisman ~ 02 Nisan 2018 15:54 Neden: