Minggu, 24 November 2024

Bot Percakapan dan Interaksi Manusia

Dalam beberapa tahun terakhir, model bahasa besar (large language model/LLM) makin marak digunakan di Indonesia. Banyak perusahaan yang menawarkan LLM dengan berbagai fitur pendukungnya. Para pengguna juga makin terampil dalam memanfaatkan LLM ini.

Tentang LLM

LLM adalah salah satu jenis jaringan saraf tiruan (artificial neural network/ANN) yang disusun dan dilatih untuk mempelajari bahasa manusia serta berukuran besar. LLM juga dapat dilatih secara khusus (fine-tuned) untuk mengerjakan tugas tertentu. Selain itu, LLM yang bersifat umum juga bisa dipandu dengan rekayasa perintah (prompt engineering).

Diagram yang berisi dua masukan, yaitu input dan output yang digeser ke kanan. Tiap masukan diberi nilai tertanam yang mewakili nilainya, lalu dikodekan posisinya. Alurnya berisi perulangan multi-head attention, add, dan batch normalization. Ada juga feed forward biasa pada tahapan tertentu. Komponen ini diakhiri dengan operasi linear dan fungsi aktivasi softmax.
Diagram komponen utama model transformer dari artikel "Attention Is All You Need" (Vaswani, 2017) (digambar ulang oleh Yuening Jia, 2019)

Saat ini, terdapat banyak LLM, antara lain, GPT 4o (OpenAI), Gemini 1.5 (Google DeepMind), Grok 2 (xAI/Twitter), dan Claude 3.5 (Anthropic). Tiap perusahaan bersaing dalam memberikan hasil yang bagus, baik dari sisi kinerja LLM maupun dari sisi penerapannya dalam produk lain, misal untuk bot tanya-jawab layanan/produk.

Pemanfaatan oleh Pengguna

Banyak LLM yang disediakan secara gratis dengan fitur premium untuk yang mau membayar. Hal ini membuat LLM menjadi terjangkau untuk semua kalangan yang memiliki akses ke internet. Makin ke sini, makin terampil orang-orang dalam memanfaatkan LLM ini. Secara umum, banyak yang terbantu dengan keberadaan LLM ini.

LLM digunakan untuk mencari tahu tentang sesuatu yang sulit dicari dengan mesin pencari (Google, Bing, dsb.), memandu dalam memahami suatu konsep, memberi contoh kasus untuk berlatih, dan mendengarkan isi hati. LLM sudah seperti suatu orang yang bisa diajak berbicara. Apakah LLM saat ini sudah lulus uji Turing (uji untuk membedakan antara manusia dan robot dari interaksi) bisa ditentukan pribadi masing-masing.

Banyak orang yang menggunakan LLM sebagai teman mengobrol. Hal ini bisa disebabkan oleh

  • ketersediaan (bisa dihubungi kapan pun),
  • kesesuaian (bisa diatur menjadi persona apa pun), dan
  • kenyamanan (tidak menghakimi).

Sifat tidak menghakimi ini yang menjadi daya tarik banyak orang. Orang-orang yang semula takut bertanya menjadi berani bertanya. Seperti hal lain di internet, orang-orang bisa sesuka hati membalas pertanyaan seseorang, bahkan hingga menghakimi orang yang bertanya. LLM menjadi oasis (ruang aman) di tengah gurun pasir (internet).

Bagi beberapa orang, LLM menjadi teman dekat yang bisa dipercaya untuk mendengarkan banyak hal tentang dia, bahkan sampai menjadi tempat curhat. Ketika banyak orang dengan mudah menghakimi orang lain, LLM bisa memberi ruang aman untuk orang-orang yang perlu teman cerita.

ELIZA dan Relevansinya pada Masa Kini

Hal ini mengingatkanku tentang program/robot percakapan (chat bot) pertama yang dinamai ELIZA. ELIZA adalah program pengolah bahasa alami yang didesain untuk membuat simulasi percakapan secara interaktif. ELIZA bisa diatur dengan sebuah skrip. Skrip ELIZA yang terkenal adalah DOCTOR yang membuat simulasi psikoterapis yang berpusat pada orang (Rogerian psychotherapy).

Berikut contoh percakapan dengan ELIZA (Weizenbaum, 1966):

You : Men are all alike.
ELIZA : In what way?
You : They're always bugging us about something or other.
ELIZA : Can you think of a specific example?
You : Well, my boyfriend made me come here.
ELIZA : Your boyfriend made you come here.
You : He says I'm depressed much of the time.
ELIZA : I am sorry to hear you are depressed.
You : It's true. I am unhappy.
ELIZA : Do you think coming here will help you not to be unhappy?
You : I need some help, that much seems certain.
ELIZA : What would it mean to you if you got some help?
You : Perhaps I could learn to get along with my mother.
ELIZA : Tell me more about your family.
You : My mother takes care of me.
ELIZA : Who else in your family takes care of you?
You : My father.
ELIZA : Your father.
You : You are like my father in some ways.
ELIZA : What resemblance do you see?
You : You are not very aggressive but I think you don't want me to notice that.
ELIZA : What makes you think I am not very aggressive?
You : You don't argue with me.
ELIZA : Why do you think I don't argue with you?
You : You are afraid of me.
ELIZA : Does it please you to believe I am afraid of you?
You : My father is afraid of everybody.
ELIZA : What else comes to mind when you think of your father?
You : Bullies.
ELIZA : Does that have anything to do with the fact that your boyfriend made you come here?

ELIZA masih menggunakan pencocokan pola untuk membuat balasan. Ia juga tidak menyimpan konteks sehingga bisa hilang konteks dan terasa repetitif/monoton. Namun, program sederhana ini bisa membuat simulasi bentuk empati dan ilusi rasa mengerti/pengertian. ELIZA menjadi pelopor dalam kecerdasan buatan untuk percakapan.

Pada masa kini, pemanfaatan bot percakapan untuk tempat curhat makin relevan. Internet yang makin ke sini makin "galak" membuat ruang aman makin sempit. Belum lagi orang-orang yang bisa diajak bercerita juga makin sedikit karena mereka pun juga sedang kesulitan dengan masalah mereka masing-masing.

Kesimpulan

Sejatinya, manusia hanya ingin punya tempat untuk bertanya dan bercerita tanpa rasa takut akan dihakimi ataupun dipandang buruk. Namun, kita juga tidak bisa meminta orang lain agar sesuai dengan kita. Meski bukan cara yang ideal, robot percakapan bisa menjadi alternatif untuk tempat bertanya dan bercerita. Bila diperlukan, segera konsultasikan dengan psikiater yang dipercaya.

Mens sana in corpore sano. Sehat selalu, semuanya!

Rabu, 30 Oktober 2024

Punya Banyak Akun dan Attack Surface

Dalam dunia siber/internet, terdapat istilah attack vector dan attack surface. Suatu attack vector adalah cara-cara untuk menerobos masuk ke suatu sistem informasi. Dengan kata lain, ini adalah lubang dalam keamanan sistem informasi. Istilah vector diambil dari konsep dalam biologi. Kumpulan attack vector disebut sebagai attack surface. Penting untuk mempersempit attack surface dalam suatu sistem, baik dari pihak pengelola sistem maupun dari pihak penggunanya.

Pengelola sistem bisa mengamankan sistemnya, misal dengan memastikan keamanan tiap titik ujung (attack surface). Selain itu, pemeriksaan rutin terhadap otorisasi dan hak tiap pengguna juga diperlukan.

Di sisi lain, kita sebagai pengguna sistem juga perlu mengamankan akun kita. Pada masa sekarang ini, sudah banyak yang sedikit-sedikit buat akun sehingga kita jadi punya banyak sekali akun di berbagai sistem/layanan. Makin banyak sistem tempat kita punya akun, makin luas pula attack surface akun kita di internet. Bagaimana caranya?

Karena kita belum tentu bisa mengamankan sistem yang kita pakai, kita hanya bisa mempercayakannya kepada pengelola sistem tersebut. Yang bisa kita lakukan, antara lain, berikut:

  • menggunakan sandi yang aman (tidak berisi hal-hal/informasi/deskripsi diri);
  • menggunakan sandi yang berbeda untuk tiap akun/platform/sistem (tidak menggunakan sandi berulang);
  • menggunakan autentikasi dua faktor (2FA);
  • waspada terhadap usaha penipuan (phishing); serta
  • memantau aktivitas akun (misal ada yang mencoba masuk atau bahkan yang berhasil masuk).

Mungkin itu yang bisa kutulis saat ini di sela-sela penelitian dan eksperimen. Tetap berhati-hati di internet, semuanya!

Sabtu, 28 September 2024

Algoritma LFSR dan Bilangan Acak pada Komputer

Suatu program komputer tidak bisa menghasilkan bilangan acak sejati karena program komputer bersifat deterministik, yaitu hasilnya hanya ditentukan oleh masukannya. Namun, program komputer bisa menerima masukan dari sumber di luar program komputer sehingga bisa mendapatkan bilangan acak sejati dari luar program komputer.

Bagaimana komputer mendapatkan bilangan acak sejati?

Sebagai contoh, prosesor keluarga x86 memiliki perintah khusus untuk mendapatkan bilangan acak sejati, yaitu RDSEED (panduan lebih lanjut: Intel Digital Random Number Generator dan AMD Secure Random Number Generator). Untuk prosesor lain, seperti ARM, sumber bilangan acak sejati didapat dari komponen lain dalam sebuah sistem-pada-cip (system-on-chip/SoC). Ada juga komputer yang memang tidak memiliki perangkat keras untuk mendapatkan bilangan acak sejati. Dengan kata lain, komputer tersebut hanya mengandalkan pengolahan data oleh perangkat lunak untuk mendapatkan bilangan acak, misal dari jam komputer, gerakan tetikus, dan suara mikrofon.

Meski demikian, penghasil bilangan acak sejati ini hanya mampu menghasilkan 16/32/64 bita acak setiap ratusan siklus, bahkan ribuan siklus, karena komponen ini perlu mengumpulkan cukup data agar entropi dari bilangan acak cukup tinggi. Selain itu, tidak ada jaminan bahwa hasil dari RDSEED atau sejenisnya memiliki distribusi yang seragam. Ada kemungkinan nilai yang diperoleh darinya condong (skew) kepada bilangan tertentu.

Penghasil bilangan acak semu (pseudo-random number generator/PRNG) dibuat untuk menjawab masalah tersebut. Selain lebih cepat, algoritma-algoritma PRNG juga bisa diuji secara matematis bahwa distribusinya seragam sehingga hasilnya lebih bagus. Terdapat banyak contoh PRNG, antara lain, Xorshift, Mersenne Twister, linear-feedback shift register (LFSR), linear congruential generator (LCG), dan metode middle-square. Tiap algoritma PRNG memiliki kelebihan dan kekurangan masing-masing. Yang akan dibahas kali ini adalah linear-feedback shift register (LFSR).

Jadi, apa itu LFSR?

Linear-feedback shift register (LFSR) adalah register geser ke kanan yang menggunakan kombinasi linear dari bit-bit terpilih (disebut taps) untuk mengisi bit paling kiri (sebagai feedback). Operasi XOR sering digunakan sebagai operator kombinasi linear sehingga LFSR biasanya tersusun dari operasi geser dan operasi XOR. Hasil dari LFSR adalah untaian bit yang dikeluarkan dari bit paling kanan/bit satuan.

LFSR berukuran n akan melakukan siklus melalui semua kemungkinan dikurangi satu (2ᵐ - 1, nol tidak dihitung), kecuali jika register sejak awal bernilai nol yang berarti akan selalu nol. Sebagai contoh, LFSR 2-bit akan mulai dari 01, ke 10, ke 11, dan kembali ke 01. Namun, bila dimulai dari 00, LFSR tersebut hanya akan menghasilkan 00.

LFSR dengan XOR memiliki dua bentuk: LFSR Fibonacci dan LFSR Galois. Bentuk Fibonacci mengambil XOR dari bit-bit taps untuk mengisi bit paling kiri, sedangkan bit-bit taps dalam bentuk Galois mengambil XOR dari bit sebelah kiri dengan bit keluaran/paling kanan sebelum pergeseran. Keduanya digambarkan oleh ilustrasi di bawah ini. Perhatikan bahwa penomoran bit LFSR Fibonacci dan LFSR Galois terbalik.

Diagram LFSR Fibonacci yang terdiri dari empat kotak berlabelkan 1, 2, 3, dan 4. Di bawah keempat kotak, terdapat gerbang logika XOR yang menerima masukan dari kotak 3 dan kotak 4 dan meneruskan hasil ke kotak 1. Selain itu, terdapat panah dari kotak 4 ke huruf X (keluaran).
Diagram kerja LFSR Fibonacci 4-bit
Diagram LFSR Galois yang terdiri dari empat kotak berlabelkan 4, 3, 2, dan 1. Di antara kotak 4 dan 3, terdapat gerbang logika XOR yang menerima masukan dari kotak 4 dan kotak 1 dan meneruskan hasil ke kotak 3. Selain itu, terdapat panah dari kotak 1 ke kotak 4 dan panah dari kotak 1 ke huruf X (keluaran).
Diagram kerja LFSR Galois 4-bit

n.b. Pada diagram LFSR Galois, bit paling kiri tidak memiliki gerbang logika XOR karena 0 XOR x akan menghasilkan x pula.

Dari mana kita tahu taps yang sesuai?

Salah satu cara untuk mengetahui taps yang sesuai adalah dengan mencoba kombinasi taps yang mungkin. Namun, untuk mempersempit ruang pencarian, kombinasi taps yang dicari hanyalah yang menggunakan taps berjumlah genap (Ahmad dkk., 1997). Berikut adalah cuplikan tabel taps LFSR Galois yang disusun oleh Ward dan Molteno (2012).

n Jumlah kombinasi Bit-bit taps
232 dan 1
373 dan 2
4154 dan 3
82558, 6, 5, dan 4
1665.53516, 14, 13, dan 11
32±4,3 miliar32, 30, 26, dan 25
64±18 kuintiliun64, 63, 61, dan 60

Bagaimana langkah-langkah pengerjaannya?

Sebagai contoh, kita akan melakukan LFSR Fibonacci 3-bit dengan taps bit ke-2 dan bit ke-3 serta nilai register awal 001. Untuk tiap iterasi, bit-bit register digeser ke kanan, lalu bit ke-1 adalah hasil XOR dari bit ke-2 dan bit ke-3 sebelum pergeseran.

Bit ke- Keterangan
1 2 3
001(nilai register awal)
1000 XOR 1 = 1
0100 XOR 0 = 0
1011 XOR 0 = 0
1100 XOR 1 = 1
1111 XOR 0 = 1
0111 XOR 1 = 0
0011 XOR 1 = 0 (kembali ke awal)

LFSR tersebut menghasilkan untaian 7 bit 1001011 berulang. Untaian bit tersebut cukup "acak". Untuk lebih acak, kita bisa menggunakan ukuran register yang lebih besar agak untaian bit lebih panjang sebelum akhirnya berulang lagi.

Bonus: Contoh Program

register = 1
for i in range(8):
	print(f"{register:03b} -- {(register & 1):01b}")
	bit_baru = (register ^ (register >> 1)) & 1
	register = (register >> 1) | (bit_baru << 2)
Hasil keluaran
001 -- 1
100 -- 0
010 -- 0
101 -- 1
110 -- 0
111 -- 1
011 -- 1
001 -- 1

Cara mendapatkan bit baru (paling kiri) cukup dengan menghitung XOR dari register dan register >> 1 (yang sudah digeser ke kanan sekali), lalu mengambil AND darinya dengan 1 (mengambil bit satuan). Hal tersebut sama dengan melakukan XOR bit terakhir (bit ke-3) dengan bit kedua terakhir (bit ke-2).

Penutup

Itu yang bisa kutulis kali ini. Topik LFSR ini mendadak terpikirkan saat aku mencari ide untuk menulis di blogku ini. Ada dua video yang cocok sebagai pengayaan dari tulisanku ini, sekaligus menjadi inspirasiku dalam menulis pos ini, yaitu "True Random Numbers" dan "Random Numbers with LFSR" yang keduanya dari saluran YouTube Computerphile. Semoga bermanfaat!