Kamis, 10 Januari 2019

Membuat Program GUI A.I. Chatbot Bersuara Seperti Jarvis Menggunakan Python dan AIML

Membuat Program GUI A.I. Chatbot Bersuara Seperti Jarvis Menggunakan Python dan AIML - Apakah kalian pernah mengenal atau mendengar kata - kata atau sebutan JARVIS ? Kata ini  dipopulerkan oleh si Iron Man, Tony Stark dalam 3 sekuel film yang mengagumkan. Jujur admin sendiri dari hero Avengers memang memfavoritkan Iron Man, karena seperti yang kita tahu Tony Stark ini yang paling jenius akan semua hal berbau Teknologi.

Tapi pada postingan kali ini kita tidak akan membahas tentang Tony Stark, melainkan sebuah program kecerdasan buatan atau Artificial Intelligence ( A.I. ) yang selalu menemani Iron Man dalam membasmi kejahatan, yap ! itulah Jarvis !

Mungkin mustahil untuk merealitaskan Jarvis sepenuhnya seperti pada film aslinya. Tapi asal kalian tahu CEO Facebook, Mark Zuckerbeg kabarnya akan membuat Jarvis dalam kehidupan nyata ! Mungkin itu bisa saja terjadi, tapi pastinya membutuhkan dana, storage dan baris code yang tidak sedikit.

Tapi kali ini kita akan membuat Jarvis versi mini. Boleh dikata adiknya Jarvis yang masih sekolah TK . Yang akan saya buat adalah semacam program chatbot ( semacam SimiSimi ) yang dapat mengeluarkan suara. Jadi seolah olah kita nonton webinar atau streaming Youtube, jadi kita hanya menulis text sedangkan jawabannya kepada kita adalah berupa suara.

Tidak hanya itu, agar tidak monoton saya juga akan membuat versi GUI dari chatbot yang saya namakan S.O.B ini, kepanjangan dari SOB ini adalah Smart Online Buddy, yang pastinya cita - cita saya adalah terus mengembangkan software ini sampai sekeren Jarvis.

PERKENALAN DENGAN AIML

Seperti yang saya katakan dijudul, kita akan membangun chatbotnya menggunakan bantuan AIML. Apa itu AIML ? Singkatnya AIML adalah otak dari Chatbot yang akan kita buat, AIML inilah yang kan menghandle seluruh inputan dari user yang nantinya akan direspon berdasarkan data dan code yang telah ia simpan.

AIML atau yang kependekan dari Artificial Inteligence Markup Langunge, menawarkan kemudahan dan kecepatan dalam membangun kecerdasan buatan sendiri. AIML sendiri berbasis XML, yang mana memang memiliki syntax yang clear dan mudah dimengerti. Oleh karena itu kali ini kita akan membahas bagaimana syntax dan kegunaannya masing - masing dalam AIML.

Secara garis besar, syntax AIML hanyalah terdiri dari 3 tag, yaitu <category><pattern>, dan <template>.

1 : Category : Pada tag category terdapat pasangan pola dan jawaban / respon. Jadi intinya tag ini merupakan wrapper / pembungkus untuk masing - masing pertanyaan / inputan dan jawaban / respon yang sesuai.

2 : Pattern : Tag ini merupakan pertanyaan atau pola pertanyaan. Tugasnya adalah menghandle inputan dengan mencocokkan dengan pola yang ditulis dan jika sesuai maka output jawaban akan keluar. Disini kita wajib menjebolkan capslock untuk menulis polanya, alias semua pola pertanyaan disini harus menggunakan kapital.

3 ; Template : Tag template merupakan tempat jawaban ditulis. Jika pattern cocok maka isi dari template akan keluar sebagai respon chatbot.

Nah itulah dasarnya dari sebuah bahasa AIML. Ketiga komponen itu harus ada didalam satu file AIML. Contoh penulisan AIML yang baik dan benar.

<aiml>
    <category>
        <pattern>HALO</pattern>
        <template>Halo user !</template>
    </category>
</aiml>


Nah, disana kita membuat pola input yaitu "HALO" yang jika inputan user terdeteksi halo maka akan keluar jawaban "Halo user !". Ingat tahap ini kita belum mengkonfigurasi AIML dengan Python dan Text-to-Speech jadi jawaban yang keluar masih berupa text.
Baca Juga: Program GUI Grafik Maker dengan Python
Selanjutnya adalah optional tag yang juga memainkan peranan penting dalam AIML, yaitu <random><li><set><get><srai><star>, dan <think>

1 : Random : Seperti namanya tag ini akan memilih jawaban acak berdasarkan list yang sudah dibuat dengan tag li. Contoh penerapan tag random.

<category>
    <pattern>PRESIDENT OF INDONESIA</pattern>
    <template>
        Absolutely i know,
        <random>
           <li>The first president, is Soekarno</li>
           <li>The second president, is Soeharto</li>
           <li>The third president, is Habibie</li>
           <li>The fourth president, is Abdurrahman Wahid</li>
           <li>The fifth president is, Megawati</li>
           <li>The sixth president is, Susilo Bambang Yudhoyono</li>
           <li>The seventh president is Joko Widodo</li>
        </random>
    </template>
</category>


Terlihat seperti list pada HTML kan. Jadi jika code diatas mendeteksi inputan "PRESIDENT OF INDONESIA" maka salah satu dari tujuh opsi akan keluar sebagai output. Dan juga disana terlihat bahwa template biasa dapat digabung dengan tag random.

2 : Set, Get dan Star : Tag set berfungsi mengingat value, dan Tag Get berfungsi memanggil value dari tag Set.  Sedangkan star mengambil inputan user. Contohnya

<category>
    <pattern>_ MY NAME IS *</pattern>
    <template>Oh Hello <set name="nama"><star index="2" /></set></template>
</category>

<category>
    <pattern>WHO AM I</pattern>
    <template>You are <get name="nama"></get></template>
</category>


Nah maksudnya saya membuat pola dengan 2 special karakter, yaitu * (star) dan _ (underscore). Star berarti satu kata setelah atau sebelum pola tergantung penempatannya, sedangkan underscore berarti banyak kata sesudah atausebelum pola tergantung penempatannya.

Kemudian saya set nama user yang telah didapat dari tag star dengan atribut index yang berarti input yang diambil adalah spesial karakter ke dua. Nama sudah didapat, dan jika user bertanya siapa dirinya, maka cukup menggunakan tag get untuk mendapatkan value awal. Jangan lupa atribut valuenya harus sama.

3 : Srai : Tag ini gunannya untuk menggabungkan output dari pertanyaan sejenis / sinonimnya. Maksudnya begini misal ada pola "SMART", user meletakkan smart ini tidak selalu satu kata dan kadang kala menggantinya dengan kata "GENIUS" maka daripada menulis template berulang kali berikan saja tag srai. Contoh

<category>
    <pattern>SMART</pattern>
    <template>Thank You !</template>
</category>

<category>
    <pattern>_ SMART</pattern>
    <template><srai>SMART</srai></template>
</category>

<category>
    <pattern>_ SMART _</pattern>
    <template><srai>SMART</srai></template>
</category>

<category>
    <pattern>SMART _</pattern>
    <template><srai>SMART</srai></template>
</category>

<category>
    <pattern>GENIUS</pattern>
    <template><srai>SMART</srai></template>
</category>

<category>
    <pattern>_ GENIUS</pattern>
    <template><srai>SMART</srai></template>
</category>

<category>
    <pattern>GENIUS _</pattern>
    <template><srai>SMART</srai></template>
</category>

<category>
    <pattern>_ GENIUS _</pattern>
    <template><srai>SMART</srai></template>
</category>


Nah, semua kondisi tersebut dimana ada kata smart dan genius dimanapun letaknya dalam sebuah kalimat maka akan terkoneksi dengan satu jawaban / output yaitu "Thank You !"
Baca Juga: Program GUI Pengubah Decimal ke Hex, Octal dan Biner dengan Python
4 : Think : Tag think ini gunanya mengescape karakter agar tidak keluar sebagai output. Ini biasanya digunakan untuk tag set. Jadi value didapat tanpa mendisplay value tersebut kepada user.

Itulah beberapa tag dan spesial karakter yang lazim dan saya sendiri gunakan dalam membuat chatbot saya. Cukup simple bukan ?! Dengan sedikit latihan dan pembiasaan maka AIML akan mudah ditulis seperti menulis puisi. Jangan lupa juga simpan file kalian dengan format .aiml (dot aiml).

MENGKONFIGURASI AIML DENGAN PYTHON

Sekarang adalah bagaimana kita menggabungkan Python dengan AIML yang telah kita pelajari diawal. Untuk mengkonfigurasinya kita memerlukan Module external bernama PyAIML 3. Modul ini hanya tersedia untuk Python 2 jika diinstall menggunakan PIP, oleh karena itu unutk mendapatkan PyAIML 3 silahkan kalian Download pada Laman GitHub PyAIML 3.

Jika sudah didownload silahkan kalian letakkan folder aiml pada directory site-packages Python kalian. Jika sudah terinstal kita memerlukan beberapa baris code saja untuk memulai menjalankan program chatbot yang sudah kita buat otaknya dengan aiml.

Langkah pertama adalah kita buat kernelnya, kemudian kita load file aiml kita dan kita loop selamanya untuk menjawab segala pertanyaan kita. Berikut code matangnya.
import aiml

bot = aiml.Kernel()
bot.learn("File aiml kamu.aiml")

while True:
    a = bot.respond(input(">> "))
    print(a)


Dengan code begitu saja Chatbot kita sudah jadi dalam bentuk CLI. Jangan lupa untuk meletakkan file aiml amu pada folder yang sama dengan Python Script kamu. Coba jalankan dan pastikan kamu mendapat tulisan load sukses semacam Loading test.aiml... done (1.43 seconds)

MEMBUAT CHATBOT VERSI GUI DAN BERSUARA

Nah pada penghujung tutorial kali ini kita akan mencoba membuat S.O.B menjadi sedikit lebih mirip dengan Jarvis, yaitu kita akan membuatnya berbicara dan mengubahnya dari CLI menjadi versi GUI.

Disini saya ingin memberi semacam label atau foto cover bertuliskan S.O.B agar GUI nya nanti terlihat lebih keren. Dan untuk suara, saya tidak menggunakan modul Text-To-Speech pada Python, hal ini karena tidak ada modul yang berfungsi dengan benar - benar baik.

Oleh karena itu, setelah berkeliling Google dan StackOverflow akhirnya saya menemukan software bernama Espeak. Espeak ini memiliki semacam versi CLI melalui CMD yang terbundle dalam paketnya. Dengan begitu kita panggil mode CLI itu kedalam script Python kita dengan modul OS.

Langkah pertama kamu harus mendownload dan install software Espeak, terlebih dahulu. Jika sudah menginstallnya silahkan cari direktori file Espeak yang kamu pilih tadi saat proses install. Pilih folder command line, kemudian copy file espeak.exe kedalam file script Python dan AIML kamu.

Jika sudah maka kita tinggal merangkai semuanya kedalam versi GUI yang tentunya lebih keren sedikit. Langsung saja begini kode yang sudah saya buat.
import aiml
import os
from tkinter import *

root = Tk()
root.title("Smart Online Buddy")

bot = aiml.Kernel()
bot.learn("test.aiml")

def suara(event):
    a = bot.respond(masukan.get())
    os.system('.\\espeak.exe %(a)s' % locals())
    masukan.delete(0, END)

atas = Frame(root).pack()
bawah = Frame(root).pack(side=BOTTOM)

foto = PhotoImage(file="sob.png")
fotone = Label(atas, image=foto).pack()
masukan = Entry(bawah, width=90)
masukan.pack()

masukan.bind("", suara)

b = '"Hello Anonym User !"'
os.system('.\\espeak.exe %(b)s' % locals())


root.mainloop()

Pada kode tersebut saya pack file suara dan menghapus pertanyaan user sebelumnya kedalam satu function yang akan dipanggil ketika user menekan tombol shift + panah atas. Oh ya jangan lupa jika ingin semua respon terbaca dan disuarakan kamu harus menambah tanda kutip " " pada isi tag template di file AIML. Contoh : <template>"Halo User !"</template>
Sebenarnya kita bisa menambahkan speech recognition atau membuat suara kita menjadi text agar kita merasa benar - benar seperti Tony Stark, tapi saya masih dalam proses downloading software speech recognition yang akurat yaitu Dragon. Karena speech recognition bawaan Windows begitu kampret :)

Seperti inilah penampakan Smart Online Buddy milik saya

Smart Online Buddy
Smart Online Buddy

KESIMPULAN CHATBOT 

Pada akhirnya Python benar - benar gila ! Mana mungkin baris code yang hanya sedikit kita bisa membuat versi mini dari kecerdasan buatan. Memang Python luar biasa ! 4 Jempol buat Python, Mantap !


Atau juga lihat di Video ini




dowload link code : di sini

sumber : LEARN ANYTHING | 
Share:

0 komentar:

Posting Komentar

Calendar Widget by CalendarLabs
Diberdayakan oleh Blogger.

Follow !!!

Friend Link

Social Network

My Banner

Weekly most viewed

Blogger templates