Saturday, June 29, 2024

Belajar Entropy dan Aplikasinya pada Teori Informasi

Entropy yang dibahas ini bukan entropi pada termodinamika, melainkan pada teori informasi, meski secara konsep sama. Yakni, entropi adalah derajat ketidakturan, atau ketidakpastian.

Seperti biasa, proses belajar saya dokumentasikan dengan bantuan asciinema. Perangkat yang saya gunakan adalah scipy.stat.entropy, bisa juga dikodekan manual dengan Numpy. Materi pembelajaran saya kembangan dari manual Scipy.

Berikut dokumentasi pembelajaran saya untuk Entropy.


Keterangan:
Makna koin bias pada pembelajaran di atas adalah bahwa peluang gambar dan angka menjadi tidak 50:50, tetapi 90:10. Bisa jadi karena secara fisik berat sebelah ataupun sebab lain yang menjadikan peluang munculnya gambar jauh lebih besar dari peluang munculnya angka.

Saturday, June 22, 2024

Memahami Bash Return Value

Bash, salah satu Unix Shell yang paling banyak digunakan, merupakan salah satu (bahasa) pemrograman yang saya pakai selain Python. Fungsi Bash layaknya lem perekat, melekatkan program yang satu dengan yang lain, Python dengan C, Python dengan C++, dan yang paling sering, Python dengan Sistem Unix (Linux Kernel, OS, dl). Simpelnya, saya menulis program utama dengan Python dan memanggilnya dengan Bash. 

Ada salah satu konsep yang selama ini belum sepenuhnya saya pahami: return value. Kalau dalam Python return value sangat jelas, nilai yang dikembalikan dari fungsi tersebut. Dalam bash, maka nilai return value hanya ada dua: sukses atau gagal. Nilai return value tersebut bisa banyak, dari 0 sampai 255. Nilai 0 untuk sukses (perintah yang dieksekusi), nilai selainnya untuk gagal.

Kode bash di bawah ini mendemonstrasikan return value dalam bash. Tugasnya adalah mendeteksi nilai yang diberikan, saya masukkan dari 5 sampai 15. Jika nilainya lebih dari 10 maka sukses, jika kurang atau sama dengan 10 maka gagal ("failure").

#!/bin/bash
# bash_return_value_demo.sh

# set counter
failure_count=0
success_count=0

# Zero (0) return value as sign of success
success_function() {
    if [ $1 -gt 10 ]; then # greater than
        echo "Success!"
        success_count=$((success_count+1))
        return 0
    fi
}

# Non-zero (1-255) return value as sign of failure
failure_function() {
    if [ $1 -le 10 ]; then # less equal
        echo "Failure!"
        failure_count=$((failure_count+1))
        return 1
    fi
}

# loop from 5 to 15
for x in {5..15}; do
    # print the value of x
    echo "Value of x: $x"
    success_function $x 	# input x to success_function
    failure_function $x 	# input x to failure_function

    # Print the last return values via $?
    echo "Return value: $?"

done
# count the number of successful and failed commands
echo "Number of successful commands: $success_count"
echo "Number of failed commands: $failure_count"
Kode di atas sebenarnya self explanatory, bisa jelas sendiri per baris plus komentar di atas/sampingnya. Sederhananya, kita set counter di baris 7-8. Kemudian kita buat fungsi sukses dan gagal di baris 8 dan 17. Argument untuk fungsi di Bash di masukkan dalam fungsi yakni lewat $1 (untuk argumen pertama, $2 untuk argumen kedua dst). Kemudian buat loop untuk X mulai dari 5 sampai 15 (5..15), batas atas, 15, diproses juga, tidak seperti dalam bahasa Python. Di akhir skrip kita tampilkan jumlah perintah yang sukses dan gagal. Outputnya 5 untuk gagal, 6 untuk sukses, sesuai logika kode tersebut. Jika program di atas dijalankan (setelah disimpan dalam fail bash_return_value_demo.sh), maka hasilnya adalah sebagai berikut, sesuai dengan penjelasan di atas.
./bash_return_value_demo.sh
Value of x: 5
Failure!
Return value: 1
-----------------
Value of x: 6
Failure!
Return value: 1
-----------------
Value of x: 7
Failure!
Return value: 1
-----------------
Value of x: 8
Failure!
Return value: 1
-----------------
Value of x: 9
Failure!
Return value: 1
-----------------
Value of x: 10
Failure!
Return value: 1
-----------------
Value of x: 11
Success!
Return value: 0
-----------------
Value of x: 12
Success!
Return value: 0
-----------------
Value of x: 13
Success!
Return value: 0
-----------------
Value of x: 14
Success!
Return value: 0
-----------------
Value of x: 15
Success!
Return value: 0
-----------------
Number of successful commands: 5
Number of failed commands: 6

Thursday, June 20, 2024

Perangkat AI yang saya gunakan untuk riset (pengodean)

Beberapa perangkat berikut saya gunakan secara masif satu tahun terakhir ini untuk riset, yakni untuk pengodean (coding). Urutan perangkat AI di bawah ini saya susun berdasarkan prioritas, mana yang paling penting saya urutkan paling atas.


1. Cody.dev

Saya menggunakan cody.dev versi berbayar (USD 9/bulan). Perangkat ini sangat efektif untuk mencari bug, code completion, dan chat tentang kode-kode kita. Fitur utamanya, Cody bisa membaca codebase kita (sampai 15 file) dan menggunakan LLM, paling ampuh Claude 3 Opus, untuk menjelaskan, menyarankan, dan mengedit code secara otomatis. Selain versi VS Code-nya, saya juga menggunakan versi web-chat van search-nya di sourcegraph.com.


2. Github copilot

Perangkat ini adalah perangkat AI pertama yang saya gunakan dan sangat fungsional (meski kalah dari Cody). Saya menggunakan code completion dan chatnya (kadang-kadang). Perangkat ini secara intensif saya gunakan sebelum menggunakan Cody dengan bantuan email kampus untuk registrasi.


3. Cursor.sh

Cursor adalah fork dari vscode yang dikhususkan untuk AI. Fitur utamanya adalah copilot++ yang lebih handal dari Github Copilot dan juga bisa membaca codebase seperti Cody namun lebih pintar (lebih solutif dibanding Cody). Kelemahannya adalah biaya yang lebih mahal dan kuota terbatas LLM Claude 3 Opus (10 limit perhari untuk versi berbayarnya, 20 USD/bulan). Saya menggunakan versi gratisnya. Tips: untuk membuat alias "code" ke "cursor" untuk terminal Cursor, ikuti arahan di issue ini.


4. Deepseek Coder

DeepSeek Coder adalah LLM khusus untuk pengodean gratis dan opensource. Saya menggunakan versi webnya. DeepSeek Coder, jika tanpa codebase (hanya satu kasus saja), akan menghasilkan hasil terbaik sepengalaman saya (mengalahkan Claude Opus).


5. Ollama

Ollama adalah platform untuk menggunakan LLM secara offline. Perangkat ini sangat bermanfaat ketika tidak bisa koneksi internet. Kelemahannya, butuh spek komputer yang tinggi (RAM ideal minimal 16GB dan CPU/GPU modern).


Kehadiran LLM (large language model) spt GPT-4 membuat riset menjadi berbeda. Sebelum adanya LLM (large-language model, seperti ChatGPT, Claude Opus, dll), saya membagi waktu kerja saya menjadi 2, riset dan menulis (proses/hasil riset). Masing-masing porsinya 50:50. Setelah adanya LLM, porsinya berubah, menjadi sekitar 65:35. Lebih banyak risetnya ketimbang menulisnya. Kenapa? Karena masalah yang dulu banyak ditemui ketika riset bisa diselesaikan dengan bantuan  LLM (kebanyakan masalah algoritma, koding, percepatan waktu komputasi). Hasilnya, riset saya lebih produktif tapi tulisannya saya (pertahun) lebih sedikit. Semoga tahun depan bisa lebih banyak porsi untuk menulis kembali.

Wednesday, June 05, 2024

Rekomendasi direktori untuk penyimpanan data

Ketika bekerja dalam tim, atau dengan tim, tempat penyimpanan data menjadi masalah. Si A menyimpan data di "download", si B di "my document", dan si C di "Files". Untuk menyamakan tempat penyimpanan data di komputer, saya merekomendasikan hal berikut.

Komputer dengan satu harddisk (SSD/HDD)

Untuk komputer dengan satu hardisk, tempat penyimpanan data terbaik adalah di "home", atau "/home/$USER/data", dimana $USER adalah nama user, misal "bagus" (sehingga menjadi "/home/bagus/data"). Di Linux, kita hanya butuh mengetik "cd" untuk "pulang ke rumah". Untuk memanggil path "data", siapapun usernya, dalam python, kita bisa menggunakan Path dari pathlib berikut.

from pathlib import Path
data = Path.home() / "data"

Oya, di era sekarang ini, kita tidak perlu membuat partisi tersendiri untuk data. Beda dengan zaman saya kuliah dulu yang perlu mempartisi satu HDD menjadi beberapa drive agar ketika drive satu rusak, drive lainnya masih bisa digunakan.

Komputer dengan multi harddisk

Untuk komputer dengan multi harddisk, tempat penyimpanan data yang saya rekomendasikan adalah di root, yakni "/data". Siapapun usernya, pathnya pasti akan sama dalam hal ini.

Pro-kontra:

Kenapa satu harddisk di "home" dan multi-hardisk di "/data"? Sebetulnya "/data" lebih universal karena tidak bergantung "User", namun karena lokasinya di "/" (root), menurut saya hal ini rentan masalah. Misalnya jika sistem korup atau clash, biasanya data di bawah root akan terkena juga. Alasan kedua karena sekuritu/akses terhadap root. Home bisanya terisolasi.

Thursday, March 14, 2024

Siapa Pencipta Tuhan?

Dalam filosofi, permasalahan siapa pencipta Tuhan (problem of the creator of God) adalah topik perdebatan yang tiada habisnya. Argumennya adalah: "Jika alam semesta diciptakan oleh Tuhan, maka siapa pencipta Tuhan?"

Saya ingin menjawab pertanyaan itu dengan sederhana. Begini analoginya.

Analogi #1

Jika alam semesta, sebagai ciptaan, diibaratkan oleh angka 2, maka sebelum angka dua itu pastilah ada angka sebelumnya, yaitu 1. Angka 2 adalah alam semesta dan angka 1 adalah Tuhan. Lalu, siapa/apa sebelum 1? Tidak ada alias nol, 0. Begitu juga dengan Tuhan, tidak ada penciptanya. 

Analogi #2.

Dari video ini, adanya Tuhan Allah merusak teori sebab-akibat. Karena adanya penciptanya, maka siapa pencipta pencipta? Jawabannya adalah bahwa teori sebab-akibat tidak wajib ada (not necessarily exist). Dari mana hukum sebab-akibat itu berasal? Dari Fisika. Darimana Hukum Fisika itu berasal? Dari Matematika. Jadi pasti ada ujungnya, sebagaimana kita saat ini (fixed ada). Pencipta alam semesta tidak punya pencipta!

Jika semua, anggap, ada sebab-akibatnya, apa sebab dari hukum sebab-akibat (cause-effect relantionship)? Allah!

Thursday, March 07, 2024

Membuat Alias untuk Github Copilot CLI

Untuk membuat alias untuk Github Copilot, misal ?? untuk menggantikan `gh copilot suggest`, beberapa baris alias berikut dapat ditambahkan pada fail `.bashrc`.
alias '??'='gh copilot suggest -t shell'
alias 'git?'='gh copilot suggest -t git'
alias 'explain'='gh copilot explain'
Dengan cara ini kita bisa mempermudah hidup dan menghemat waktu. Berikut contohnya:
bagus@m049:~$ ?? list WAV files less than 1 MB

Welcome to GitHub Copilot in the CLI!
version 0.5.4-beta (2024-01-04)

I'm powered by AI, so surprises and mistakes are possible. Make sure to verify any generated code or suggestions, and share feedback so that we can learn and improve. For more information, see https://gh.io/gh-copilot-transparency

Suggestion:                                                                     
                                                                                
  find . -name "*.wav" -size -1M                                                

? Select an option
> Exit
bagus@m049:~$ git? show history

Welcome to GitHub Copilot in the CLI!
version 0.5.4-beta (2024-01-04)

I'm powered by AI, so surprises and mistakes are possible. Make sure to verify any generated code or suggestions, and share feedback so that we can learn and improve. For more information, see https://gh.io/gh-copilot-transparency

Suggestion:                                                                     
                                                                                
  git log                                                                       

? Select an option
> Exit
bagus@m049:~$ explain "make -j 5"

Welcome to GitHub Copilot in the CLI!
version 0.5.4-beta (2024-01-04)

I'm powered by AI, so surprises and mistakes are possible. Make sure to verify any generated code or suggestions, and share feedback so that we can learn and improve. For more information, see https://gh.io/gh-copilot-transparency

Explanation:                                                                    
                                                                                
  • make is a build automation tool used to compile and build projects.         
    • -j 5 specifies the maximum number of jobs (parallel tasks) that make can  
    run simultaneously. In this case, it is set to 5.  

Wednesday, March 06, 2024

Menggunakan (Mini) Conda Untuk Komersial (Institusi Riset, dll)

Per 30 September 2020, term of service Anaconda berubah; lisensi berbayar dibutuhkan untuk menggunakan Anaconda untuk keperluan komersial (gratis untuk skala kecil, perusahaan kurang 200 orang pekerja). Miniconda dapat digunakan secara gratis, namun setting default dapat menyebabkan akses ke repository berbayarnya (meskipun gratis).

Solusi singkatnya adalah menambahkan `conda-forge` pada channel di `.condarc` untuk menggantikan konfigurasi default. Cek dengan `conda config --show channels` sebelum dan sesudah mengganti channel default (tidak tertulis di `.condarc`) dengan `conda-forge`.

Cek setting default channel:

$ conda config --show channels
channels:
  - defaults

Ganti channel default dengan menambahkan conda-forge di fail `.condarc` (default di direktori home)

 auto_activate_base: false
  channels: 
    - conda-forge

Cek kembali config conda:

$ conda config --show channels
channels:
  - conda-forge
Dengan cara ini, Miniconda dapat digunakan secara sah dan halal. Saya menggunakan Miniconda (daripada Anaconda) hanya untuk membuat virtual environment dengan versi python yang berbeda (misal dengan python3.8, python3.12, dll). Instalasi paket dalam python (seperti Numpy, Pandas) tetap saya lakukan dengan pip, bukan dengan Conda.

Wednesday, January 31, 2024

Laporan Bulanan Januari 2024

Pada bulan ini, saya melakukan dua kali kerja jarak jauh setengah hari dan tiga kali kerja jarak jauh sepanjang hari. Isi dari pekerjaan jarak jauh ini entah menulis laporan (makalah penelitian) untuk pengembangan sistem pengenalan emosi ucapan waktu nyata atau melihat sistem e-learning di kantor (Kursus Pelatihan Dasar untuk Karyawan Asing). Saya terus membangun adapter WavLM untuk sistem pengenalan emosi ucapan Jepang, tetapi hasilnya belum diperoleh. Saya juga meninjau beberapa pengenalan emosi ucapan dan ekspresi vokal termasuk dataset dari Vietnam (dari Konferensi APSIPA 2023), Korpus Ucapan Emosional Anak Rusia (EmoChildRu), vokalisasi nonverbal Jepang (JNV), dan Ucapan Emosional Jepang dengan Konten Verbal dan Ekspresi Nonverbal (JVNV). Saya juga sedang menyiapkan tanggapan untuk sebuah makalah yang diajukan ke LREC/Coling 2024. Dalam diskusi tertulis, saya menjelaskan daya saing model pra-pelatihan dengan HuBERT Large yang mencapai hasil terbaik di antara model-model pra-pelatihan lainnya, dan juga kesulitan dengan model-model pra-pelatihan lain seperti UniSpeech-SAT dan XLSR-2B. Kesulitan pertama disebabkan oleh desain UniSpeech-SAT yang ditujukan untuk verifikasi pembicara dengan informasi terpisah di antara pembicara, sementara kesulitan kedua disebabkan oleh batasan memori GPU (saat ini saya melatih model saya dengan RTX3090 24 GB VRAM). Komputasi sebelumnya menggunakan model besar seperti XLSR 2B tidak dapat dilakukan karena masalah out-of-memory. Meskipun masalah ini dapat diatasi dengan meningkatkan memori (misalnya, dengan mengupgrade GPU ke A6000 dengan 48 GB VRAM), model yang dihasilkan akan besar ukurannya, yang dapat memperpanjang waktu pemuatan model untuk inferensi. Selain itu, saya juga melakukan pekerjaan administratif menyiapkan dokumen untuk perpanjangan visa.

Related Posts Plugin for WordPress, Blogger...