İçindekiler:

Sesle Etkinleştirilen Asistan - MAKS: 10 Adım
Sesle Etkinleştirilen Asistan - MAKS: 10 Adım

Video: Sesle Etkinleştirilen Asistan - MAKS: 10 Adım

Video: Sesle Etkinleştirilen Asistan - MAKS: 10 Adım
Video: Android telefonda ekran kilitli durumdayken Google asistan ses komutu 2024, Temmuz
Anonim
Sesle Etkinleşen Asistan - MAX
Sesle Etkinleşen Asistan - MAX

Hey, bu Eğitilebilir Kitapta, nasıl bir sohbet botu MAX yapılacağı hakkında konuşacağım (kendi adıma !!!)

Bazı uygulamalarla bu chatbot'u ses kontrollü hale getirebilir veya çeşitli yazılımların kullanımı ile sesli asistan olarak yapabilirsiniz. Herkes bu uygulamayı gerçekten kolayca yapabileceğinden burada bahsetmeyeceğim.

Bu yüzden herkes lütfen beni destekleyin…….

İlk Eğitilebilir Kitabım !!!!!

Olacaklardan Gergin Hissetmek …………….

Adım 1: Yarışmayı Bilmek

Yarışma Hakkında Bilgi
Yarışma Hakkında Bilgi
Yarışma Hakkında Bilgi
Yarışma Hakkında Bilgi

Merhaba Mühendisler ve Tasarımcılar……..

Ben kendim bir Bilgisayar Bilimi öğrencisiyim, oyun oynamayı sever ve her zaman bilgisayarlardan ilham alırım. Kısaca konuşmak gerekirse, mevcut tüm bu şeylerin nasıl çalıştığını bilmeyi seviyorum. !!!) bir şeyleri araştırmak ve öğrenmek için.

Böylece bir gün Instructables ekranının önüne geldim. Çeşitli projelerde, farklı konularda farklı fikirlerle beni gerçekten çok eğlendirdi. O günden sonra da yoluma devam ettim. Yarışma sayfası, hem ödüllerle hem de dünyanın çeşitli yerlerinden gelen projelerle beni çok eğlendirdi. Dünya.

SES AKTİF MÜCADELE, bir Eğitilebilir Yazı yazma konusunda ilk platformum.

Ödüller beni çok eğlendirdi(Evet !!! Çok Fazla……..).

Ayrıca Bilgisayar ve teknoloji alanındaki bilgilerimi çeşitli şeylerin gerçekte nasıl çalıştığına dair başkalarıyla paylaşmak istiyorum.

Bu Eğitilebilir Kitapta size kendi sesle etkinleştirilen yardımcınızı nasıl oluşturacağınızı gösteriyorum.

Bu benim ilk Eğitilebilirliğim olduğu için çok fazla hata olabilir (tüm bunların düzeltildiğini düşünmeme rağmen), bunun için affedin.

BU YÜZDEN….

Yolculuğa başlayalım………………

Adım 2: Şeyler Hakkında Nereden Biliyordum?

Şeyler Hakkında Nereden Biliyordum?
Şeyler Hakkında Nereden Biliyordum?
Şeyler Hakkında Nereden Biliyordum?
Şeyler Hakkında Nereden Biliyordum?
Şeyler Hakkında Nereden Biliyordum?
Şeyler Hakkında Nereden Biliyordum?

Bu büyük bir soru olacak, sanırım aklınızdan geçenlerin çoğu ………

Eğitim hayatımdan beri Yapay Zeka[AI] konusunda büyük bir tutkum var, bu yüzden kendi başıma bir model geliştirmek ve araştırmak için kaynaklara bakarak çok şey araştırdım.

Başlangıçta çok zordu (gerçek durum), anladığım kadarıyla çok geniş bir konuydu ve ele alınması hiç de kolay değildi.

Aranan kitaplar şunları içerir:

  1. Yapay Zeka Modern Bir Yaklaşım
  2. Yapay. Zeka.21. Yüzyıl.2. Baskıda
  3. Derin Öğrenme

Bunlar çok güzel kitaplar(evet kesinlikle) ama üzerinde yazılanları anlamak hiç de kolay değil. Sonra bir kenarda tuttum ve ne olduğu hakkında kısa bir fikir veren kaynakları araştırmaya devam ettim. gerçekten temsil ediyor ve ona ulaşmanın yolları.

Sonra buna bir ilgi duydum. Okuldan sonraki tatil boyunca daha derinden öğrenmeye başladım.

O zaman ayrıca çok ilginç olan çeşitli programlama dillerini (C++, C, Python, Java….) öğrendim.

Konuyla ilgili daha fazla okuduğumda bir Önemli Şey anladım…………………..

Programlama dilleri, HER MAKİNE ÖĞRENME SÜRECİ İÇİN TEMELDİR

Makine Öğrenimi, yapay zekanın uygulama sürecidir

Programlama dilleri hakkında büyük bir anlayışa sahip ve programcıya bağlı olarak yapılabilecek çeşitli şeyler, bir bilgisayarı bizim için her şeyi yapacak hale getirmek.

Bu yüzden, daha önce bahsettiğim kitapta sağlanan kavramları anlamamı sağlayan diller üzerinde iyi bir temel oluşturmaya karar verdim

Siz de yapabilirsiniz…….

Web'de programlama dillerini özgürce öğretmek için pek çok web sitesi bulunmaktadır

Dilerseniz bu konuda daha fazla bilgi edinmek için internette gezinebilirsiniz………

3. Adım: Başlayalım

Eğitilebilirliği yazmaya başlamadan önce, şu şekilde anlaşılacak bir şey yazmayı düşündüm:

  1. Kodlama deneyimi olan kişiler
  2. Herhangi bir kodlama geçmişi olmayan kişiler

Bu yüzden herhangi bir hata yapmadan yaptığımı düşünüyorum (umarım).

Bu yüzden kullanıcıyla konuşabilen ve konuşmamıza göre yanıt verebilen bir sohbet botu oluşturmaya karar verdim.

Program (talimat seti) kendi başına düşünemez. Kullanıcıyla bağlantılı olarak mümkün olan en iyi yanıtı vermek için konuşma sırasında aranan gerçekler ve kurallardan oluşan bir veri tabanına (verilerin depolandığı bir yer) sahiptir.

Girilen şeylere bağlı olarak süreci eşleştirerek çalışır, yalnızca nadir durumlarda tüm bir cümle tam bir cümleyle eşleştirilir.

Adım 4: Aslında Nasıl Çalışır?

Aşama 1:

MAX, kullanıcının herhangi bir boş girdi verip vermediğini öğrenir. Kullanıcı bu şekilde girdi sağladığında, yanıt vermek için gerçeği statik veritabanından alır.

Ay pardon …….

Söylemeyi unuttum,

Statik Veritabanı: Yerleşik yanıtların depolandığı yer. Gibi yanıtlar:

1. MAX, kullanıcının neden bahsettiğini anlamadığında.

2. Kullanıcı kendini tekrar ettiğinde.

3. Tebrik ifadeleri için.

4. Kullanıcı hiçbir şey yazmadığında ve Enter'a basmaya devam ettiğinde.

Anahtar kelime: özel anlamı olan kelimeler.

Adım 2:

MAX'ın kolayca ve kolayca tanıyabileceği bazı yerleşik yanıtlar vardır. Kullanıcıların girdilerini belirledikten sonra böyle bir cümlenin varlığını bulur ve ilişkili anahtar kelimeyi hatırlar.

Aşama 3:

Verilen cümlenin parçalanmasından sonra bile yerleşik bir cümle bulunmazsa, MAX, bağlamı tanımlamak için belirli anahtar kelimeyi arar. Herhangi bir bağlam bulunamazsa, bir sonraki amaç, kullanıcının konu hakkında daha bilinçli bir şekilde belirli bir şekilde konuşmasını sağlamaktır.

Adım 4:

Daha önce bahsettiğimiz Statik Veritabanından, kullanıcının ne hakkında konuştuğuna bağlı olarak yanıtı alacaktır.

Adım 5:

Kendi yapacağı kelimeleri değiştirmeye ihtiyacım var (MY'nin SİZİN'e dönüştürülmesi vb.)

Adım 5: Kodlayalım …………

Bu IDE [Entegre Gelişim Ortamı] olduğundan Turbo C IDE 3.0 kullanıyorum

Kodlamadan önce örnek bir Veri Dosyasının yapısını görelim.

MAX, belirli anahtar kelimeleri tanır.

Bu anahtar kelimeler kullanıcı tarafından sağlanan girişte bulunursa, veri dosyasından ilgili bir yanıt seçilir ve seçilir ve ekranda görüntülenir.

Veri dosyasında bir anahtar sözcük, yanıtlardan @KWD@ belirteci ile ayrılır.

Belirteç, her programlama yönünün en küçük parçasıdır.

Bu belirteç, bir sonraki satırın bir anahtar kelime olduğunu ve bir yanıt olmadığını belirtir.

@KWD@ MERHABA

MERHABA NASILSIN

MERHABA CANIM !

İYİYİM

İŞİN NASILDI?

KAÇ YAŞINDASIN?

NS

YAPACAKSINIZ. BEN DE İNANIYORUM…

BUNU YAPABİLECEK MİSİNİZ?

BANA GÜVENİR MİSİNİZ?

EVET

EMİN MİSİN ?

NASIL BU KADAR EMİN OLABİLİRSİNİZ?

NUMARA

ÇOK PESİMİST GİBİ GÖRÜNÜYORSUNUZ.

ASLA HAYIR DEME…

ASLA ASLA DEME

ASLA KABA OLMA

ASLA KİBİRLİ OLMAYIN !!!!

ASLA BUNU YAPAMAZIM DEME

ASLA İYİMİST OLMAYIN

BİLGİSAYAR

BİLGİSAYARDA NASIL ÇALIŞACAĞIMI BİLİRİM.

ŞU ANDA BİR BİLGİSAYAR KULLANIYORSUNUZ. SAĞ ?

Örneğin, yukarıdaki sözlükten 'Merhaba', MAX aşağıdaki yanıtlardan birini verecektir:

MERHABA, NASILSIN SEVGİLİM !

İYİYİM

İŞİN NASILDI?

KAÇ YAŞINDASIN?

6. Adım: Sınıflar

Bu konu netleştikten sonra şimdi kullanacağımız Veri Yapılarını tanımlayalım.

İki sınıf oluşturuyoruz:

progstr - Bu, kullanıcının girdiyle ilgili bilgilerini depolamak için kullanılır.

resp - Bu, çeşitli yanıtlar hakkındaki bilgileri depolamak için kullanılır

sınıf progstr{

halka açık:

char userip[MAX_USER_INPUT];

char anahtar sözcüğü[30];

int anahtar bulundu;

int anahtar;

int nullip;

// yapıcı

progstr() { keyno=-1; nullip=0; anahtar bulundu = 0;

}

}ip;

sınıf cevap

{

int tot_resp;

int last_resp;

karakter yanıtları[MAX_RESP_NO][MAX_RESP_LEN];

karakter kelimesi[MAX_KWD_LEN];

halka açık:

// yapıcı

cevap()

{

tot_resp=0;

last_resp=-1;

}

int getcount()

{

last_resp döndür;

}

geçersiz addword(char str[MAX_KWD_LEN])

{

strcpy(kelime, str);

}

karakter * getword()

{

dönüş kelimesi;

}

geçersiz adres(char str[MAX_RESP_LEN])

{

strcpy(yanıt[++last_resp], str);

}

// daha sonra tanımlandı

geçersiz display_resp(int num);

void Quit_display_resp(int num);

};

Birinci sınıfa bakıldığında, Karakter dizisi kullanıcı ipi, kullanıcı tarafından sağlanan cümleyi saklamak için kullanılır.

Başka bir dizi anahtar sözcüğü, varsa, bu girdide bulunan anahtar sözcüğü depolamak için kullanılır. Bir anahtar kelime bulunursa, int anahtarını 1 else olarak buluruz, Constructor'da 0 olarak başlatıldığından 0 olarak kalır.

keyno, karşılık gelen anahtar kelimenin karşılık gelen anahtar numarasını saklar.

nullip, kullanıcının herhangi bir Null girdisi verip vermediğini gösterir, yani başka bir şey yapmadan sadece enter'a basıyor.

Şimdi gelelim ikinci sınıfa, cevap.

İlk veri üyesi, tot_resp, belirli bir anahtar kelime için toplam yanıtların sayısını belirtir.

Yanıtlar aslında yanıtlarda[MAX_RESP_NO][MAX_RESP_LEN] depolanır ve karşılık gelen anahtar sözcük dizi sözcüğünde depolanır.

Yapıcı: Bu, 0'a verilen toplam yanıt sayısını başlatmak için kullanılır. add_resp işlevine baktığınızda last_resp'in neden -1 olarak başlatıldığı açık olacaktır.

int getcount():

Bu işlev, belirli bir anahtar kelime için kaç yanıt bulunduğunun sayısını almak için kullanılır.

geçersiz addword(char str[MAX_KWD_LEN]):

Bu, bir anahtar kelime eklemek için kullanılır.

karakter * getword():

Belirli bir sınıf nesnesi için anahtar sözcüğü döndürmek için kullanılır.

geçersiz adres(…):

Bu, belirli bir anahtar kelimeye karşılık gelen bir yanıt eklemek için kullanılır.

geçersiz display_resp(int):

Bu, yanıtlar için belirli bir indeks numarasına karşılık gelen kullanıcıya yanıtı görüntülemek için kullanılır. (aslında bundan daha fazlasını yapar!).

geçersiz Quit_display_resp(int):

Bu fonksiyonun yukarıdaki fonksiyondan farkı, kullanıcı çıkış yaparken sonunda kullanılmasıdır. Bu nedenle, istemi kullanıcıya döndürmez.

7. Adım: İşlevler

geçersiz initialize_global()

{

strcpy(wordin[0], "ARE");

strcpy(wordout[0], "AM");

strcpy(wordin[1], "AM");

strcpy(wordout[1], "ARE");

strcpy(wordin[2], "OLDU");

strcpy(wordout[2], "OLDU");

strcpy(wordin[3], "OLDU");

strcpy(wordout[3], "OLDU");

strcpy(wordin[4], "SİZ");

strcpy(wordout[4], "BEN");

strcpy(wordin[5], " I ");

strcpy(wordout[5], "SİZ");

strcpy(wordin[6], "SİZİN");

strcpy(wordout[6], "BEN");

strcpy(wordin[7], "BEN");

strcpy(wordout[7], "SİZİN");

strcpy(wordin[8], "I'VE");

strcpy(wordout[8], "SİZSİNİZ");

strcpy(wordin[9], "SİZSİNİZ");

strcpy(wordout[9], "I'VE");

strcpy(wordin[10], "Ben");

strcpy(wordout[10], "SEN");

strcpy(wordin[11], "SEN");

strcpy(wordout[11], "Ben");

strcpy(wordin[12], "BEN");

strcpy(wordout[12], "SİZ");

strcpy(wordin[13], "SEN");

strcpy(wordout[13], "BEN");

}

Şimdi cevapları kullanıcıya göstermek için bir fonksiyon yazalım. for döngüsündeki ilk if ifadesi,;-) gibi daha insani görünmesi için kasıtlı bir yazım hatası yapmak için kullanılır. Yazım hatası için rastgele bir karakter seçilir. New Line ve Backspace gibi özel durumlar ayrı ayrı değerlendirilir. (Düşün, neden?). Şimdi yeni bir şey tanıtıyorum. Özel bir karakter - *. Karakter *, tanımlanan anahtar kelimeden SONRA ve aşağıdaki noktalama işaretlerinden birinden önce bulunan metnin tamamını temsil eder.

Örneğin, kullanıcı girişini düşünün

AMIT > YARIN INDORE'A GİDEBİLİR MİYİM?

MAX > YARIN YURT İÇİ GİTMEZSENİZ NE YAPACAKSINIZ?

Altı çizili kısım sözlükte saklanmaz, kullanıcı girdisinden alınır. MAX. Dat dosyasında bu bilgileri şu şekilde saklarız:

YAPABİLİRMİYİM

NE YAPMAZSANIZ *

Yıldız (*), programdan, kullanıcı girişinde anahtar kelimeden sonra yazılanları (burada CAN I) olduğu gibi kopyalamasını ister. Umarım artık * özel bir anahtar kelime olarak işlevi açıktır. Öyleyse, daha karmaşık bir durumu ele alalım.

AMIT > ALIŞVERİŞE GİDEBİLİR MİYİM?

MAX > ALIŞVERİŞE GİTMEZSENİZ NE YAPMALIYIZ?

Biz de biraz dönüşüm yapmalıyız. Dönüşümü düşündüğümüzde, cümle aşağıdaki 3 bölüme ayrılır:

  • Transpozisyon Sözcüğünden Önce Metin. (burada, İLE ALIŞVERİŞE GİT)
  • Transpoze edilen anahtar kelime. (burada, BENİM yerine SİZİN)
  • Anahtar Kelimeden Sonra Metin. (burada, ben?)

Adım 8: Vakaların Ele Alınması………

9. Adım: Kullanıcı Girişinde Anahtar Kelime Arama

MAX_KEY, DAT dosyasındaki anahtar sözcük sayısını belirtir.

Burada sadece anahtar kelimenin Kullanıcı Girişinde bulunup bulunmadığını ararız.

Adım 10: Sonuç

Bu kadar ………

Sen yaptın !!!!!!!!

Sanırım herkes her şeyi net bir şekilde anladı……

Herhangi bir konuda şüphesi olan varsa çekinmeden sorabilirsiniz

Önerilen: