Menerjemahkan Komentar Berbahasa Korea untuk StarCraft: Brood War
(blog.sourcedive.net)- Diskursus strategi tingkat tinggi StarCraft: Brood War sejak lama terpusat pada video dan stream berbahasa Korea, sehingga komunitas non-Korea sulit mengikuti pengetahuan strategi
- Terjemahan yang ada sebelumnya harus mengandalkan kerja manual orang yang bisa bahasa Korea atau Google Translate, dan build order serta slang komunitas sering diterjemahkan harfiah sehingga konteksnya kerap rusak
- Alur baru menggabungkan
yt-dlp, Whisper, Google Colab, LLM, dan glosarium istilah TeamLiquid untuk mentranskripsi suara Korea lalu mengubahnya menjadi subtitle bahasa Inggris yang dapat dipahami pemain Brood War - Distribusi subtitle ditangani lewat BWKT Client yang menghubungkan TamperMonkey UserScript, Pastebin, Google Sheets, dan Apps Script agar tidak terhambat izin pemilik YouTube
- Meski ini proyek hacking yang dibuat selama sekitar 2 minggu, dengan kombinasi sekitar $30 USD dan tool gratis saja proyek ini bisa menerjemahkan sekitar 7 video per hari, serta masih menyisakan peluang perluasan seperti dukungan multibahasa
Mengapa sulit mengakses pengetahuan Brood War berbahasa Korea
- StarCraft: Brood War adalah RTS kompetitif yang dirilis pada 1998, dan hingga kini masih memiliki komunitas aktif
- Ekosistem Brood War level tinggi pada praktiknya bergerak dengan berpusat di Korea
- Sebagian besar pemain profesional, tim, dan turnamen berbasis di Korea
- Penonton fanatik dan komunitasnya juga sebagian besar berada di Korea
- Anggota komunitas non-Korea menyebut diri mereka “foreigners”
- Seperti catur, Brood War sangat mengandalkan rekam jejak pertandingan dan riset strategi yang terakumulasi lama
- Di level tinggi, belajar sama pentingnya dengan bermain
- Sebagian besar diskursus modern terjadi di video dan live stream pemain Brood War profesional
- Seperti “Sicilian defense” dan “Najdorf variation” dalam catur, Brood War juga memiliki bahasa khusus domain yang dibentuk komunitas
- Istilah-istilah ini bukan ungkapan dari buku aturan, melainkan bahasa yang memadatkan riset dan analisis jangka panjang
Masalah Foreigner Knowledge
- Di komunitas non-Korea, orang yang fasih berbahasa Korea sangat jarang
- Jika seseorang fasih berbahasa Korea, kecil alasannya untuk tetap bergantung pada materi non-Korea yang lebih terbatas dan kualitasnya lebih rendah
- Komunitas selama ini mengumpulkan dana untuk meminta orang yang bisa bahasa Korea menerjemahkan subtitle YouTube
- Pekerjaan terjemahan berat dan lambat
- Bayarannya pun secara objektif tidak bagus
- Meski begitu, dengan cara ini sekitar puluhan video per tahun berhasil diterjemahkan
- Terjemahan mesin seperti Google Translate berguna untuk kalimat sehari-hari, tetapi tidak cocok untuk terminologi khusus Brood War
- Ada banyak slang dan istilah build yang tidak pernah ditemui tool tersebut
- Terjemahan harfiah justru merusak konteks
Titik kegagalan terjemahan harfiah
- Tutorial berbahasa Korea memuat istilah build Brood War seperti
12 앞마당,11 스포닝풀,10가스,투해처리,3해처리,안 3해처리 - Google Translate mengubahnya menjadi ungkapan seperti
12 courtyard,two-processing,3-point processingyang tidak sesuai dengan konteks game- Tidak ada “courtyard” di Brood War
- “starting off the most affluently” adalah terjemahan “economic opener/build” yang canggung dan bertele-tele
- “3-point processing” tidak bermakna bahkan bagi pemain Brood War
- Sebagian kata masih bisa dikenali
Toss,build,fast gas,moderately fast tech-tree,Terran, dan sejenisnya tetap muncul- Namun sebagian besar adalah noise terjemahan harfiah, sehingga konteks kata-kata yang bisa dikenali pun ikut kabur
- Kombinasi subtitle otomatis berkualitas rendah dan terminologi khusus yang diterjemahkan harfiah dianggap membuat komunitas non-Korea tertinggal puluhan tahun dari komunitas Korea
Proses terjemahan baru
- Proses baru menerjemahkan subtitle yang sama menjadi ungkapan yang dapat dipahami pemain Brood War, seperti
12 Natural,economic opener,Protoss,two-Hatchery build,11 Spawning Pool,10 Gas,third Hatchery - Terjemahannya tidak sempurna, tetapi signal-to-noise ratio meningkat besar hingga topik video langsung terlihat
- Sebelumnya, batasnya hanya puluhan video per tahun, tetapi dengan metode baru satu orang bisa menerjemahkan sekitar 7 video per hari pada waktu luang
Pipeline produksi subtitle
-
yt-dlp dan Whisper
- Awalnya, rencananya adalah mengunduh subtitle otomatis Korea dari YouTube dengan
yt-dlplalu menerjemahkannya, tetapi kualitas subtitle otomatisnya tidak berguna - Sebagai gantinya, track audio video diunduh dengan
yt-dlpdan ditranskripsi langsung menggunakan Whisper - Hasilnya lebih bersih dan lengkap daripada subtitle YouTube, dan tampaknya juga lebih baik dalam mengabaikan noise seperti suara dalam game dan klik mouse
- Pada awalnya Whisper dijalankan secara lokal dan memakai sekitar 10GB VRAM
- Di Windows, harus memasang Python, venv, CUDA, git, dan lain-lain, sehingga ada banyak hambatan bagi kolaborator lain
- Awalnya, rencananya adalah mengunduh subtitle otomatis Korea dari YouTube dengan
-
Google Colab
- Whisper bisa dipasang dengan
pipPython, dan Google Colab menyediakan layanan notebook Jupyter gratis serta GPU gratis - GPU Colab memiliki VRAM yang cukup untuk menjalankan Whisper
- Berbagi notebook read-only yang diberi parameter cocok sebagai model distribusi
- Pengguna nonteknis bisa menjalankannya tanpa bergantung pada hardware, dan bisa mendapat fitur terbaru cukup melalui pembaruan notebook
- Tidak perlu git clone atau unduhan berulang
- Notebook menerima satu YouTube URL, menghasilkan file SRT berbahasa Korea, lalu memungkinkan pengguna mengunduhnya
- Whisper bisa dipasang dengan
-
LLM dan glosarium slang Korea
- TeamLiquid adalah komunitas Brood War non-Korea yang sudah lama ada
- Sekitar 15 tahun lalu, anggota TeamLiquid konadora membuat posting forum berupa glosarium “istilah Korea yang dipakai komentator BW”
- Posting ini disalin ke file Markdown bernama
KoreanSlang.txtdan diberikan ke LLM - Prompt meminta subtitle Korea diterjemahkan ke bahasa Inggris dengan merujuk pada
KoreanSlang.txtdan konteks StarCraft: Brood War - Kejelasan diprioritaskan daripada terjemahan harfiah, sementara timestamp dan format file harus dipertahankan
- Subtitle duplikat atau kesalahan yang jelas boleh diperbaiki, dan jika perlu catatan penerjemah singkat boleh dimasukkan ke subtitle
- Bagian yang tidak bisa dipahami diganti dengan
(unintelligible), dan output diminta dalam code block agar mudah disalin - Cara penggunaannya adalah memasukkan subtitle Korea hasil Whisper ke ChatGPT akun Pro dan meminta terjemahan
Pipeline konsumsi subtitle
-
Batasan subtitle YouTube dan BWKT Client
- Fitur subtitle YouTube sendiri hanya memungkinkan pemilik video menetapkan atau memperbarui subtitle
- Untuk menghindari alur mengunduh video, mengunggah ulang, lalu memasang subtitle, dibuatlah klien terpisah
- UserScript menambahkan tombol ke video YouTube dan mengunduh subtitle terjemahan yang sesuai bila tersedia
- File SRT dan VTT di-parse lalu subtitle ditampilkan di container kecil di bawah player YouTube
- Klien ini diberi nama BWKT Client
-
Pastebin, Google Sheets, Apps Script
- Karena subtitle adalah file teks, Pastebin digunakan sebagai penyimpanan untuk berbagi dengan cepat
- Sederhana, sudah ada akun premium, dan trafik diperkirakan tidak akan menjadi masalah
- Data mapping hanya membutuhkan dua kolom:
YouTube URLdanSubtitle URL - Ke depannya, kolom
Languagebisa ditambahkan - Menggunakan Google Sheets seperti database memudahkan pemeriksaan dan pembaruan manual, serta mudah dibagikan ke orang lain
- Apps Script adalah runtime JavaScript yang bisa mengakses Google Workspace dan juga menyediakan web server bawaan
- Dalam bentuk
function doGet(req) { /* ... */ }, ia menerima ID video YouTube dan mengembalikan URL Pastebin yang sesuai - Database publik read-only disediakan sebagai halaman Google Sites
Ruang perbaikan dan pengujian
- Proyek ini adalah susunan hacking yang dibuat selama sekitar 2 minggu, dengan anggaran sekitar $30 USD
- Biaya dikeluarkan untuk ChatGPT dan waktu GPU tambahan Colab
- Keduanya tidak benar-benar wajib, tetapi membuat pekerjaan lebih nyaman
- Salah satu kandidat perluasan adalah dukungan multibahasa
- Komunitas non-Korea tidak hanya berisi pemain Amerika, tetapi juga pemain dari Meksiko, Polandia, Rumania, Tiongkok, dan Taiwan
- Diperkirakan bisa diterjemahkan ke puluhan bahasa, dengan beban kerja yang tidak besar
- Masih ada perbaikan teknis yang bisa dilakukan
- Saat ini BWKT Client menampilkan tombol bahkan pada video YouTube yang tidak memiliki subtitle
- Jika endpoint yang mengembalikan indeks video yang sudah diterjemahkan ditambahkan ke web server Apps Script, kemunculan tombol bisa dikendalikan
- Subtitle diuji bersama beberapa pengguna Brood War dengan menonton video berdurasi 13 menit
- Setelah sekitar 5 menit, mereka lupa sedang menilai kualitas subtitle dan mulai menonton sambil berdiskusi, memutar ulang klip pendek, serta menjeda untuk berbicara
- Subtitle tersebut lulus pengujian
Sifat proyek
- Performa, skalabilitas, dan latensi bukan masalah inti proyek ini
- Sebagian besar hanyalah glue code yang menyambungkan tool yang sudah ada
- UserScript dan kode Python di notebook Colab pendek serta mudah dirawat
- Web server-nya lebih mirip sistem CRUD produksi sederhana, sehingga tidak banyak alasan untuk menjadi kompleks
- Pembuatnya menganggap proyek ini sebagai proyek paling janky yang pernah ia deploy, tetapi tetap menyukainya
1 komentar
Opini Hacker News
Sebagai pemain Brood War asal Korea sekaligus peneliti pengenalan suara, saya membacanya dengan senang
Transkripsi bahasa Korea aslinya juga punya cukup banyak kesalahan, dan model bahasa besar di belakangnya tampaknya memperbaikinya dengan cukup mengesankan. Misalnya,
build 12 courtyardkemungkinan besar sebenarnyabuild 12 natural, yang akan jauh lebih mudah dipahami oleh pemain Brood War. Demikian pula,build two-eo-cheoritidak masuk akal, dan seharusnya ditranskripsikan sebagaibuild two-hatchery, yaitu build 2 hatcheryJadi contextual biasing yang memasukkan kamus slang langsung ke proses inferensi Whisper juga bisa membantu. Ada banyak cara, tetapi yang paling sederhana adalah menaikkan probabilitas token slang yang ada di kamus sebesar faktor konstan pada lapisan prediksi akhir Whisper. Ini juga relatif mudah diimplementasikan dengan library HuggingFace: https://huggingface.co/docs/transformers/en/internal/generat...
courtyardataufrontyard. Namun di komunitas berbahasa Inggris, nama bangunan, unit, teknologi, dan strategi memang sering disingkat ekstrem. Sepertinya bahasa Korea juga bisa begituBuild 12 barracks biasanya disebut
12 rax, build 2 hatchery mutalisk disebut2 hatch muta, dan serangan timing/all-in 3 hatchery hydralisk disebut3 hatch hydra bustAda PR yang mengimplementasikan fitur yang sama di ctranslate2, dan lewat itu fitur ini bisa terekspos juga ke faster-whisper: https://github.com/OpenNMT/CTranslate2/pull/1789
Sepingat saya, bangunan itu berfungsi untuk memungkinkan hatchery membuat zergling dan unit lain, serta meneliti upgrade. Cukup bangun satu saja, unit terkait akan terbuka di semua hatchery, dan karena bangunan itu sendiri tidak memproduksi unit, membangun banyak pun tidak menambah kapasitas produksi unit
Secara teori, orang bisa membangun beberapa untuk meneliti upgrade secara paralel, tetapi upgrade yang tersedia juga hanya sekitar 3, jadi tidak terlihat ada alasan membangun 12. Kecuali sebagai cadangan agar produksi zergling tetap berjalan meski musuh menghancurkan beberapa, tetapi 12 tetap berlebihan
Jadi saya penasaran apa motivasi tepatnya. Bisa saja saya ngawur karena sudah lama sekali
Jangan tertipu oleh judulnya. Tulisan ini adalah pendekatan yang sangat menyeluruh dan kreatif untuk menerjemahkan komentar StarCraft dan membuatnya lebih mudah diakses
Seperti yang tepat ditunjukkan penulis, selama 27 tahun komentar pertandingan game ini sudah berubah bukan lagi menjadi bahasa Korea atau Inggris, melainkan sebuah bahasa khusus domain. Cara memakai skrip otomatis dan kecerdasan buatan untuk menangkap kira-kira apa yang dikatakan lalu mengubahnya menjadi kalimat yang konsisten benar-benar keren
Sebagai orang yang bahasa ibunya bukan bahasa Inggris, tulisan ini terlihat persis seperti masalah yang dialami dalam penerjemahan di banyak bidang, khususnya penerjemahan tulisan komputer dan pengembangan perangkat lunak
Ada sangat banyak istilah yang sulit diterjemahkan. Kata seperti sharding atau hash termasuk di dalamnya, dan satu-satunya solusi yang realistis adalah meminjamnya seiring waktu dengan penyesuaian tertentu pada masing-masing bahasa. Namun untuk itu dibutuhkan komunitas yang mampu menjembatani kesenjangan antara dua bahasa sampai taraf tertentu, dan dalam kasus ini termasuk belajar bahasa Inggris
Bahasa ibu saya Spanyol, dan ketika membicarakan pengembangan perangkat lunak dalam bahasa Spanyol, istilah yang diambil dari bahasa Inggris terus bermunculan. Sepertinya tidak ada cara pasti untuk menangani ini dengan baik, dan menarik melihat bagaimana terjemahan otomatis menghadapinya. Pada akhirnya, secara sosial kedua bahasa akan bercampur, lalu kita harus melihat istilah mana yang bertahan dalam proses itu
Berdasarkan kriteria dalam tulisan, diperlukan orang yang cukup tahu bahasa Korea walaupun tidak fasih, dan tentu saja orang yang mengenal game itu sendiri
depurar, yang cukup cocok untukdebug, tetapi banyak penutur bahasa Spanyol meminjam langsung dari Inggris dan mengatakandebuguearUntuk membicarakan kinerja komputer atau perangkat lunak, di Meksiko saya belajar
desempeño, tetapi di Argentina saya juga pernah mendengarel performancedipakai dengan arti yang sama. Sepertinya yang paling umum adalah memakai kata serapan Inggris apa adanya alih-alih mencari kata Spanyol yang sudah adashardingYang benar-benar hampir mustahil diterjemahkan adalah kata sehari-hari.
Brotdalam bahasa Jerman memiliki konotasi yang cukup berbeda dari benda mengerikan yang disebut orang Inggris sebagai bread, tetapi tidak ada kata yang lebih baik, dan meminjamnya apa adanya akan terdengar cukup aneh dalam sebagian besar konteks. Jauh lebih aneh daripada meminjamshardingdalam konteks teknisContoh bagus tentang peminjaman yang menyesuaikan diri dengan bahasa seiring waktu bisa dilihat dalam terminologi perkeretaapian bahasa Jerman. Pada awalnya semuanya berbahasa Inggris karena teknologinya diimpor dari Inggris, tetapi seiring waktu sebagian besar berubah menjadi kata yang tampak seperti bahasa Jerman. Ada yang dibentuk ulang dari serapan Yunani/Latin yang sama dengan bahasa Inggris, seperti
Lokomotive, tetapistationsekarang menjadiBahnhof, dantrainmenjadiZugAgak lucu bahwa dalam tulisan tentang terjemahan, penulis memakai istilah rasio sinyal terhadap noise dengan makna yang sepenuhnya terbalik. Rasio sinyal terhadap noise yang tinggi, misalnya lebih dari 9000, itu berarti sangat bagus.
Artinya sinyalnya banyak dan noise-nya sangat sedikit, jadi rasio sinyal terhadap noise yang menurun berarti noise-nya makin banyak.
jargon.Versi Google Translate juga bisa saya pahami dengan baik, tetapi itu karena saya sangat mengenal detail Brood War dan pembukaan Zerg 12 Hatchery.
ChatGPT dan Claude menerjemahkan teks Korea dengan sangat mengesankan:
Today I'll teach you about the 12 Hatchery build. I'll explain the types of 12 Hatchery builds, their advantages and disadvantages, and the build orders in a simple but detailed way. Against Protoss, this is the build you use when you want to start with the most economic advantage. Against Terran, there are several builds you can do with 12 Hatchery, so I'll explain some of the most commonly used builds. The first is the two-hatchery build that starts with 12 Hatchery: 12 Hatchery 11 Spawning Pool 10 Gas This build uses early gas, and it's often used when you want to quickly transition into a three-hatchery build with three gas bases. The second build is: 12 Hatchery 12 Pool 12 Gas This build allows for moderately fast tech tree and moderately fast three-hatchery expansion. This build is commonly known as the "safe three-hatchery" build, and you can think of it as a build that enables both quick Mutalisks and quick third base.Jika penulis melihat ini: dengan yt-dlp, Anda bisa mengunduh versi video berkualitas rendah untuk menghemat bandwidth.
yt-dlp -f "bv[height<=720]"Jika Anda memasukkan URL atau ID video di sini, video akan diunduh dengan kualitas maksimal 720p.
Ini pertanyaan bodoh dari orang yang waktu kecil hanya pernah main di money map: angka di depan bangunan itu artinya apa?
Kalau disebut 12 Hatcheries, secara teori memang mungkin membangun 12 Hatchery, tetapi kelihatannya tidak realistis. 12 Spawning Pool tentu saja tidak ada gunanya. Jadi saya sempat mengira itu posisi dalam daftar urutan build.
Namun ada juga build seperti
12 Hatch, 12 Pool, 12 Gas, jadi tafsiran itu tidak terlalu masuk akal. Sepertinya bukan sekadar daftar; karena ini tree, saya sempat berpikir apakah 12 adalah kedalaman bangunan tersebut, tetapi sulit membayangkan membangun 11 bangunan sebelum gas dan itu tampak terlalu lambat. Saya penasaran apakah unit juga dihitung, atau hanya drone/overlord.4-pooling. Saat bermain Zerg, ketika hanya punya 4 worker, Anda membangun Spawning Pool, lalu membuat worker keempat lagi, kemudian memproduksi Zergling untuk melakukan serangan awal, alias rush.Setelah itu lawan akan mengumpat habis-habisan dan bahkan mempertanyakan orientasi seksual Anda.
12 Spawning Pool tentu saja tidak ada gunanya, saya samar-samar ingat ada video Husky yang benar-benar membangun 9 Spawning Pool untuk melakukan 9 pool.Angka itu berarti jumlah supply yang harus dicapai saat membangun struktur tersebut. Jadi
12 hatch 12 pool 12 gasberarti setelah mencapai 12 worker, Anda membangun tiga bangunan itu secara berurutan begitu resource mencukupi.Karena worker Zerg benar-benar berubah menjadi bangunan, alurnya mungkin mencapai 12, membangun Hatchery, membuat satu worker lagi, lalu membangun Spawning Pool, lalu membuat satu worker lagi dan membangun refinery gas.
Bahkan ketika Google Translate sudah menjadi cukup bagus, teks berbahasa Mandarin dan Jepang terkait Go masih sulit diterjemahkan secara efektif. Masalahnya mirip dengan yang dibahas dalam tulisan ini.
Banyak kata dalam bahasa Mandarin dan Jepang memiliki arti yang sangat spesifik dalam konteks Go, tetapi juga memiliki arti biasa dalam konteks umum. Misalnya
kodalam Go adalah situasi aturan tertentu, tetapi secara umum bisa berarti sepertirobbery, sehingga Google Translate menerjemahkannya dengan cara umum dan membuat keseluruhan teks tidak bisa dipahami.Pada model bahasa besar terbaru, sekarang kita bisa menambahkan instruksi di awal seperti
Saya akan menerjemahkan penjelasan diagram Go berbahasa Mandarin. Terjemahannya harus alami dan jangan menghindari penggunaan istilah teknis Go. Misalnya 拆 = extension, 夹 = pincer, 刺 dan 觑 = peep, dan hasilnya sangat bagus. Praktis sampai pada titik saya bisa membaca hampir semua materi yang saya inginkan. Sepertinya data latihannya cukup banyak memuat materi Go, jadi saya beruntung tidak perlu pekerjaan khusus tambahan.Untuk catur, jika penulis melihat ini, ada beberapa koreksi. Langkah awal dalam catur dalam bahasa Inggris disebut openings, bukan
openers. Juga tidak ada opening terpisah khusus putih dan khusus hitam, meskipun tentu saja pemain individual bisa mempelajari opening tertentu dari sudut pandang salah satu sisi. Studi opening justru dianggap makin fundamental sampai ke level tertinggi. Dan variasi Sicilian tersebut bukanNajdork, melainkan Najdorf.Saya suka tulisan ini. Dulu saya pernah beberapa kali mencoba mengikuti pertandingan kualifikasi regional AS untuk World Cyber Games, dan selalu terkejut melihat betapa cepatnya orang lain
Belakangan, saat menonton siaran langsung dari Korea, saya benar-benar kewalahan oleh kecepatan permainannya. Dari sudut pandang strategi, ketika sebuah blog menjelaskan matematika yang membuat Zealot Protoss bisa membunuh Zergling dalam 2 pukulan, bukan 3, saya menyadari bagian yang sangat mendasar dari gim ini yang selama ini saya lewatkan. Saat itulah saya memahami bahwa ini adalah gim seperti catur dan jadi terpikat
Saya tahu ini terjemahan yang keliru, tetapi saya cukup suka ungkapan yang menerjemahkan
natural expansionmenjadi courtyardfront yard. Itu masuk akal di SC2, yang di beberapa peta terbaru memiliki basis halaman belakangBasis halaman belakang seperti ini juga sering muncul di peta tim, dan menentukan pemain mana yang akan mengambil bagian depan menjadi bagian dari strategi. Protoss dan Terran bisa membangun shield battery dan bunker bersama-sama, tetapi Zerg mendapat efek penguatan di atas creep dan bisa menyebar jauh lebih cepat ke depan