RuneSight: mesin neural yang membedakan teks dari kode
Versi 1.0.6 memensiunkan daftar regex tulisan tangan yang dulu memutuskan baris hasil ekstraksi mana yang teks dan mana yang jalur file, pengenal, dan kode kontrol. RuneSight, pengklasifikasi neural berukuran 400 KB yang dilatih pada sembilan ratus ribu baris dari game sungguhan, kalimat sungguhan dalam enam belas bahasa, dan setiap kode kontrol engine yang terdokumentasi, kini membuat keputusan itu dalam hitungan mikrodetik di CPU Anda, menyebutkan alasannya pada setiap baris, dan tidak pernah menyentuh baris yang memuat teks sungguhan.
Setiap game yang dibuka RuneTranslate sebagian besar berisi teks yang akan dibaca pemain, ditambah ekor panjang berisi hal-hal yang hanya terlihat seperti teks: jalur aset, nama variabel, kode kontrol, kunci plugin, label debug, sebuah blob base64 yang tertinggal di file data. Terjemahkan salah satu dari itu dan skenario terbaiknya adalah satu permintaan terjemahan yang terbuang percuma. Skenario terburuknya adalah sebuah adegan yang tidak pernah termuat karena engine kini mencari nama yang sudah tidak ada lagi.
Sejak rilis pertama, garis pemisah antara keduanya digambar dengan tangan: ratusan ekspresi reguler, satu untuk tiap bentuk sampah yang pernah kami temui, engine demi engine. Versi 1.0.6 menggantikan daftar itu dengan RuneSight, sebuah jaringan neural kecil yang dilatih pada data sungguhan. Ia memutuskan, untuk setiap baris hasil ekstraksi, apakah baris itu teks atau komponen internal, dan ia melakukannya dalam beberapa mikrodetik, di CPU Anda, di dalam aplikasi.
Mengapa daftar aturan tidak lagi cukup
Sebuah ekspresi reguler menangkap persis bentuk yang menjadi tujuannya ditulis. bg_office_01 adalah sebuah pengenal (identifier), jadi aturan untuk snake_case menangkapnya. Lalu datang game Wolf RPG dengan <<GET_FILE_EXIST>>Data/\s[1], game Bakin dengan Lv.\partystatus[0], game Unity dengan "CubismTaskQueue.OnTask" already set., dan sebuah nama folder yang ditulis dalam bahasa Jepang mematahkan aturan jalur yang mengasumsikan ASCII. Setiap kasus menjadi aturan baru, dibatasi cakupannya dengan hati-hati agar tidak ikut menelan dialog sungguhan, dan setiap engine baru memulai lagi siklus itu.
Aturan juga tidak bisa menimbang bukti. Baris yang sebagian besar berupa kode kontrol dengan tiga kata dialog di ujungnya tetaplah teks, dan harus tetap bisa diterjemahkan. Baris yang berupa kalimat utuh tentang sebuah file .png adalah teks. Baris yang isinya semata \f[\cself[1]]\space[4] bukan teks. Membedakan keduanya butuh pemahaman atas keseluruhan baris, bukan sekadar kecocokan pada sebagian darinya.
Apa itu RuneSight
RuneSight adalah pengklasifikasi berukuran sekitar 400 kilobyte. Ia membaca sebuah baris sebagai kumpulan fragmen karakter sepanjang satu sampai empat karakter, di-hash ke dalam tabel tetap, lalu memadukannya dengan beberapa lusin properti terukur dari baris itu: seberapa banyak isinya berupa huruf, digit, tanda baca, atau spasi, aksara apa yang dipakainya, apakah bentuknya menyerupai jalur file, apakah kurungnya seimbang, apakah akhirannya seperti akhir sebuah kalimat. Satu lapisan tersembunyi kecil mengubah semua itu menjadi dua jawaban: probabilitas bahwa baris itu bukan teks, dan, jika memang bukan, jenis bukan-teks apa itu.
Jawaban kedua itulah yang Anda lihat di editor. Baris yang dikecualikan tetap menyertakan alasan yang bisa Anda baca: pola kode, referensi aset, label sistem, numerik, komentar, kunci plugin, hanya kode kontrol, biner, atau perintah plugin. Baris itu mendapat tanda RuneSight kecil beserta tingkat keyakinan di balik vonisnya, sehingga sebuah keputusan tidak pernah jadi kotak hitam, dan satu klik pada baris itu mengaktifkannya kembali.
Semuanya berjalan dalam sekitar empat mikrodetik per baris. Sebuah JRPG seratus ribu baris diklasifikasikan jauh di bawah satu detik, pada mesin Windows 10 atau 11 mana pun, tanpa GPU dan tanpa apa pun yang dikirim ke mana pun.
Dari apa ia belajar
Tidak ada data berlabel untuk ini, jadi data itu dibangun sendiri. Set pelatihannya sedikit di atas sembilan ratus ribu baris:
- Game sungguhan. Ekstraksi penuh dari tiga belas game lintas sepuluh engine, dari RPG Maker dan Ren'Py sampai Wolf RPG, Kirikiri, Artemis, Unity, Godot, Bakin, dan Unreal, dilabeli oleh aturan yang digantikan RuneSight. Itulah batas minimalnya: ia harus menangkap semua yang ditangkap aturan lama.
- Kalimat sungguhan. Seperempat juta kalimat dalam enam belas bahasa — Jepang, Tionghoa, Korea, Thailand, Arab, Rusia, dan bahasa-bahasa beraksara Latin di antaranya — sehingga teks biasa dalam bahasa sumber apa pun tidak pernah keliru dikira kode.
- Komponen internal sungguhan. Seratus enam puluh ribu jalur, pengenal, nama bertitik, dan baris komentar yang dipanen dari kode sumber dan paket, bentuk-bentuk yang dipakai bersama oleh berbagai engine.
- Titik buta, secara sengaja. Hampir tiga ratus ribu baris hasil generasi yang dibangun dari referensi kode kontrol resmi Wolf RPG, RPG Maker, dan Bakin, masing-masing dipasangkan dengan dialog nyaris-mirip yang tidak boleh ikut tertelan: sebuah kalimat yang menyebut nama file, sebuah nama yang diikuti angka, sebuah baris teks dengan kode di tengahnya.
- Set emas yang diperiksa manual. Setiap baris yang menjadi acuan aturan lama, ditambah baris sungguhan yang dilaporkan dari game yang sudah dimainkan, diputuskan satu per satu.
Apa yang harus dibuktikannya sebelum dirilis
Model yang sekadar lebih baik secara rata-rata tetap saja jadi kemunduran bagi siapa pun yang mengalami kesalahan barunya, jadi RuneSight dipegang pada gerbang-gerbang tetap yang dijalankan ulang pada setiap pelatihan ulang:
- Pada setiap game sungguhan dalam set data, ia menangkap setidaknya 99.5% dari apa yang ditangkap aturan tulisan tangan.
- Pada set baris beku yang harus tetap bisa diterjemahkan — baris yang selalu jadi acuan pengujian aturan lama — ia membuat nol pengecualian.
- Pada prosa sungguhan, kurang dari 0.2% baris yang pernah dikecualikan.
- Alasan yang disebutkannya benar setidaknya 97% dari keseluruhan waktu.
- Sebuah baris dinilai dalam waktu kurang dari 5 mikrodetik.
Aturan yang paling penting adalah yang tentang baris campuran. Baris yang memuat teks sungguhan berdampingan dengan kode tetaplah teks, dan tetap bisa diterjemahkan. RuneSight hanya menghapus sebuah baris ketika keseluruhan baris itu adalah komponen internal.
Apa yang tidak berubah
RuneSight memutuskan bentuk sebuah baris. Keputusan yang membutuhkan konteks, bukan bentuk, tetap datang dari adapter engine: sebuah nama node Godot dikecualikan karena posisinya di scene tree, komentar event RPG Maker karena perintah yang membawanya, kunci parameter plugin karena file tempatnya berada. Aturan-aturan itu tetap ada, begitu pula aturan kebijakan yang bisa Anda lihat di kolom alasan, seperti baris yang sama sekali tidak memuat karakter bahasa sumber.
Filter regex Anda sendiri berjalan setelah RuneSight dan berperilaku persis seperti sebelumnya, dan setiap pengecualian, siapa pun yang membuatnya, tetap berupa baris merah opsional yang bisa Anda aktifkan kembali. Tidak ada keputusan RuneSight yang final.
Di mana melihatnya
Lencana RuneSight duduk di kanan bawah aplikasi, di atas baris versi. Titiknya berwarna hijau ketika model sudah termuat. Buka lencana itu dan ia memberi tahu Anda ukuran model, ambang keyakinan bawaannya, dan apa yang dilakukan ekstraksi terakhir: berapa banyak baris yang dinilainya, berapa banyak yang dikecualikannya, dan di mana ia berbeda pendapat dengan aturan lama. Setelah setiap ekstraksi, sebuah toast singkat mengulang angka-angka itu.
Jika suatu saat modelnya gagal termuat, lencana itu akan mengatakannya, dan ekstraksi cukup kembali memakai aturan lama. Aplikasinya tidak pernah menolak bekerja karena hal ini.
Setiap kali model berbeda pendapat dengan aturan lama, itu dituliskan ke sebuah log lokal kecil dan tidak pernah diunggah. Jika sebuah baris yang menurut Anda dialog sungguhan muncul dikecualikan, aktifkan kembali di editor dan beri tahu kami di Discord. Laporan semacam itulah yang menjadi bahan belajar pelatihan ulang berikutnya.
Siap mencoba RuneTranslate?
Tier gratis membuka setiap engine + setiap penyedia terjemahan. Supporter ($3.99/mo) membuka kecepatan penuh.
Unduh untuk Windows
