Dịch phần bình luận tiếng Hàn của StarCraft: Brood War
(blog.sourcedive.net)- Các cuộc thảo luận chiến thuật cấp cao của StarCraft: Brood War từ lâu tập trung ở video và stream tiếng Hàn, khiến cộng đồng không dùng tiếng Hàn khó theo kịp kiến thức chiến thuật
- Các bản dịch trước đây phải dựa vào người biết tiếng Hàn làm thủ công hoặc Google Translate, và build order cùng tiếng lóng cộng đồng thường bị dịch từng chữ làm hỏng ngữ cảnh
- Hướng tiếp cận mới kết hợp
yt-dlp, Whisper, Google Colab, LLM và bảng thuật ngữ TeamLiquid để chép lời tiếng Hàn rồi chuyển thành phụ đề tiếng Anh mà người chơi Brood War có thể hiểu - Việc phân phối phụ đề được xử lý bằng BWKT Client, nối TamperMonkey UserScript, Pastebin, Google Sheets và Apps Script để không bị chặn bởi quyền sở hữu YouTube
- Đây là một dự án mang tính hack làm trong khoảng 2 tuần, nhưng chỉ với khoảng 30 USD và bộ công cụ miễn phí, đã có thể dịch khoảng 7 video mỗi ngày và vẫn còn dư địa mở rộng như hỗ trợ đa ngôn ngữ
Vì sao khó tiếp cận tri thức Brood War bằng tiếng Hàn
- StarCraft: Brood War là một RTS cạnh tranh phát hành năm 1998 và đến nay vẫn có cộng đồng rất sôi động
- Hệ sinh thái Brood War đỉnh cao trên thực tế vận hành theo hướng lấy Hàn Quốc làm trung tâm
- Phần lớn tuyển thủ chuyên nghiệp, đội tuyển và giải đấu đều đặt ở Hàn Quốc
- Người xem nhiệt thành và cộng đồng cũng phần lớn ở Hàn Quốc
- Thành viên cộng đồng không phải người Hàn tự gọi mình là “foreigners”
- Giống như cờ vua, Brood War coi trọng lịch sử thi đấu tích lũy lâu dài và nghiên cứu chiến thuật
- Ở trình độ cao, học game quan trọng không kém việc chơi game
- Phần lớn diễn ngôn hiện đại diễn ra trong video và livestream của các tuyển thủ Brood War chuyên nghiệp
- Giống như “Sicilian defense”, “Najdorf variation” trong cờ vua, Brood War cũng có ngôn ngữ chuyên ngành đặc thù do cộng đồng tạo ra
- Những thuật ngữ này không phải cách viết trong sách hướng dẫn, mà là ngôn ngữ nén lại quá trình nghiên cứu và phân tích kéo dài nhiều năm
Vấn đề Foreigner Knowledge
- Trong cộng đồng không dùng tiếng Hàn, người nói tiếng Hàn lưu loát là cực kỳ hiếm
- Nếu đã nói tiếng Hàn lưu loát thì cũng ít có lý do để chỉ bám vào nguồn tư liệu không phải tiếng Hàn vốn hạn chế và chất lượng thấp hơn
- Cộng đồng lâu nay gom tiền thuê người biết tiếng Hàn dịch phụ đề YouTube
- Công việc dịch rất vất vả và chậm
- Thù lao xét khách quan cũng không cao
- Dù vậy, bằng cách này mỗi năm vẫn chỉ dịch được vài chục video
- Dịch máy như Google Translate hữu ích với câu văn đời thường, nhưng không hợp với thuật ngữ chuyên môn của Brood War
- Có rất nhiều tiếng lóng và thuật ngữ build mà công cụ chưa từng gặp
- Dịch từng chữ còn làm hỏng ngữ cảnh nhiều hơn
Khi dịch từng chữ thất bại
- Trong các tutorial tiếng Hàn có những thuật ngữ build của Brood War như
12 앞마당,11 스포닝풀,10가스,투해처리,3해처리,안 3해처리 - Google Translate biến chúng thành các cách diễn đạt như
12 courtyard,two-processing,3-point processing, hoàn toàn lệch khỏi ngữ cảnh trò chơi- Trong Brood War không có khái niệm “courtyard”
- “starting off the most affluently” là cách diễn đạt vụng về, dài dòng của “economic opener/build”
- “3-point processing” cũng không có nghĩa gì với người chơi Brood War
- Một số từ vẫn còn nhận ra được
Toss,build,fast gas,moderately fast tech-tree,Terranvẫn xuất hiện- Nhưng phần lớn là nhiễu do dịch từng chữ, khiến cả ngữ cảnh của những từ còn nhận ra được cũng bị mờ đi
- Khi phụ đề tự động chất lượng thấp chồng lên thuật ngữ chuyên môn bị dịch cứng nhắc, tác giả cho rằng điều đó đã khiến cộng đồng không dùng tiếng Hàn tụt lại hàng chục năm so với cộng đồng Hàn Quốc
Quy trình dịch mới
- Quy trình mới chuyển cùng những phụ đề đó sang các cách diễn đạt mà người chơi Brood War có thể hiểu như
12 Natural,economic opener,Protoss,two-Hatchery build,11 Spawning Pool,10 Gas,third Hatchery - Bản dịch không hoàn hảo, nhưng tỷ lệ tín hiệu trên nhiễu được cải thiện rõ rệt đến mức chủ đề của video hiện ra ngay
- Trước đây dịch được vài chục video mỗi năm đã là giới hạn, còn với cách mới thì một người có thể dịch khoảng 7 video mỗi ngày trong thời gian rảnh
Pipeline tạo phụ đề
-
yt-dlp và Whisper
- Ban đầu tác giả định dùng
yt-dlpđể tải phụ đề tiếng Hàn tự động của YouTube về rồi dịch, nhưng chất lượng phụ đề tự động không đủ hữu ích - Thay vào đó, tác giả dùng
yt-dlpđể tải track âm thanh của video rồi tự chép lời bằng Whisper - Kết quả sạch và đầy đủ hơn phụ đề YouTube, đồng thời có vẻ bỏ qua tạp âm như âm thanh trong game và tiếng click chuột tốt hơn
- Lúc đầu Whisper chạy cục bộ và dùng khoảng 10GB VRAM
- Vì phải cài Python, venv, CUDA, git... trên Windows nên khá khó để cộng tác viên khác sử dụng
- Ban đầu tác giả định dùng
-
Google Colab
- Whisper có thể cài bằng Python
pip, còn Google Colab cung cấp dịch vụ notebook Jupyter miễn phí cùng GPU miễn phí - GPU của Colab có đủ VRAM để chạy Whisper
- Mô hình phân phối phù hợp là chia sẻ notebook chỉ đọc đã được tham số hóa
- Người dùng không rành kỹ thuật vẫn chạy được bất kể phần cứng, và chỉ cần cập nhật notebook là nhận được tính năng mới nhất
- Không cần
git clonehay tải lặp đi lặp lại - Notebook nhận đầu vào là một YouTube URL, tạo file SRT tiếng Hàn rồi cho tải xuống
- Whisper có thể cài bằng Python
-
LLM và từ điển tiếng lóng tiếng Hàn
- TeamLiquid là một cộng đồng Brood War lâu đời ngoài Hàn Quốc
- Khoảng 15 năm trước, thành viên TeamLiquid konadora đã tạo bài viết diễn đàn từ điển “thuật ngữ tiếng Hàn mà caster BW dùng”
- Bài viết này được chép thành file Markdown tên
KoreanSlang.txtvà đưa cho LLM - Prompt yêu cầu dịch phụ đề tiếng Hàn sang tiếng Anh, có tham chiếu
KoreanSlang.txtvà ngữ cảnh StarCraft: Brood War - Ưu tiên sự rõ ràng hơn dịch sát chữ, đồng thời giữ nguyên timestamp và định dạng file
- Có thể sửa phụ đề trùng lặp hoặc lỗi hiển nhiên, và khi cần thì chèn ghi chú dịch giả ngắn vào phụ đề
- Phần không nghe ra được sẽ thay bằng
(unintelligible), và đầu ra được đặt trong code block để dễ sao chép - Cách dùng là đưa phụ đề tiếng Hàn do Whisper tạo vào ChatGPT bản Pro rồi yêu cầu dịch
Pipeline tiêu thụ phụ đề
-
Ràng buộc phụ đề trên YouTube và BWKT Client
- Tính năng phụ đề gốc của YouTube chỉ cho chủ sở hữu video thiết lập hoặc cập nhật phụ đề
- Để tránh quy trình tải video xuống rồi đăng lại chỉ để thêm phụ đề, tác giả tạo một client riêng
- UserScript thêm nút vào video YouTube và tải phụ đề dịch tương ứng nếu có
- Nó phân tích file SRT và VTT rồi hiển thị phụ đề trong một khung nhỏ dưới trình phát YouTube
- Client này có tên là BWKT Client
-
Pastebin, Google Sheets, Apps Script
- Vì phụ đề là file văn bản nên tác giả dùng Pastebin làm nơi lưu trữ để chia sẻ nhanh
- Nó đơn giản, tác giả đã có tài khoản premium sẵn, và không dự đoán lưu lượng sẽ thành vấn đề
- Dữ liệu ánh xạ chỉ cần 2 cột:
YouTube URLvàSubtitle URL - Về sau có thể thêm cột
Language - Dùng Google Sheets như cơ sở dữ liệu giúp dễ kiểm tra, cập nhật thủ công và chia sẻ với người khác
- Apps Script là runtime JavaScript có thể truy cập Google Workspace, đồng thời cung cấp cả web server tích hợp
- Dưới dạng
function doGet(req) { /* ... */ }, nó nhận video ID của YouTube và trả về Pastebin URL tương ứng - Cơ sở dữ liệu công khai chỉ đọc được cung cấp qua trang Google Sites
Khả năng cải thiện và thử nghiệm
- Dự án là một cấu trúc mang tính hack được làm trong khoảng 2 tuần, với ngân sách khoảng 30 USD
- Chi phí phát sinh cho ChatGPT và thêm thời gian GPU trên Colab
- Cả hai không hẳn là bắt buộc, nhưng có thì tiện hơn
- Một hướng mở rộng là hỗ trợ đa ngôn ngữ
- Cộng đồng không dùng tiếng Hàn không chỉ có người chơi Mỹ mà còn có người chơi từ Mexico, Ba Lan, Romania, Trung Quốc và Đài Loan
- Tác giả cho rằng có thể dịch sang hàng chục ngôn ngữ mà khối lượng công việc cũng không quá lớn
- Vẫn còn điểm cần cải thiện về kỹ thuật
- Hiện tại BWKT Client vẫn hiển thị nút cả ở video YouTube không có phụ đề
- Nếu thêm một endpoint vào web server Apps Script để trả về chỉ mục video đã dịch, có thể điều khiển việc có hiển thị nút hay không
- Tác giả đã cùng một vài người chơi Brood War xem thử một video dài 13 phút với phụ đề này
- Sau khoảng 5 phút, họ quên mất việc đang đánh giá chất lượng phụ đề và bắt đầu vừa xem vừa thảo luận, tua lại clip ngắn, tạm dừng để nói chuyện
- Phụ đề đã vượt qua bài kiểm tra
Bản chất của dự án
- Hiệu năng, khả năng mở rộng và độ trễ không phải vấn đề cốt lõi của dự án này
- Phần lớn chỉ là glue code để nối các công cụ đã có sẵn
- Mã Python trong user script và notebook Colab đều ngắn và dễ bảo trì
- Web server gần như chỉ là một hệ CRUD production đơn giản nên không có nhiều lý do để trở nên phức tạp
- Người tạo ra nó xem đây là dự án janky nhất mình từng phát hành, nhưng vẫn rất thích nó
1 bình luận
Ý kiến trên Hacker News
Là một người chơi Brood War Hàn Quốc đồng thời là nhà nghiên cứu nhận dạng giọng nói, tôi đọc thấy rất thú vị
Bản chép lời tiếng Hàn ban đầu cũng có khá nhiều lỗi, và có vẻ mô hình ngôn ngữ lớn ở phía sau đã sửa chúng khá ấn tượng. Ví dụ
12 안마당 빌드nhiều khả năng thực ra là12 앞마당 빌드, và với người chơi Brood War thì sẽ dễ hiểu hơn nhiều. Tương tự,투에처리 빌드không có nghĩa gì, lẽ ra phải được chép thành투해처리 빌드, tức build 2 HatcheryVì vậy, thiên lệch theo ngữ cảnh (contextual biasing), tức đưa trực tiếp từ điển tiếng lóng vào quá trình suy luận của Whisper, cũng có thể hữu ích. Có nhiều cách, nhưng đơn giản nhất là tăng xác suất của các token tiếng lóng có trong từ điển lên một hệ số hằng số ở lớp dự đoán cuối của Whisper. Cũng có thể triển khai tương đối dễ bằng thư viện HuggingFace: https://huggingface.co/docs/transformers/en/internal/generat...
courtyardhayfrontyardnghĩa là gì. Tuy vậy, trong cộng đồng nói tiếng Anh, việc rút gọn mạnh tên công trình, đơn vị, công nghệ và chiến thuật là rất phổ biến. Tiếng Hàn có vẻ cũng có thể như vậyBuild 12 Barracks thường được gọi là
12 rax, build 2 Hatchery Mutalisk là2 hatch muta, đợt tấn công timing/all-in 3 Hatchery Hydralisk là3 hatch hydra bustCó một PR triển khai tính năng tương tự trong ctranslate2, qua đó nó cũng có thể được đưa ra faster-whisper: https://github.com/OpenNMT/CTranslate2/pull/1789
Theo trí nhớ của tôi, công trình đó dùng để cho phép Hatchery tạo Zergling và các đơn vị khác, cũng như nghiên cứu nâng cấp. Chỉ cần xây một cái là mở khóa đơn vị đó ở mọi Hatchery, và nó cũng không tự sản xuất đơn vị, nên xây nhiều cái cũng không tăng sản lượng đơn vị
Về lý thuyết có thể xây nhiều cái để nghiên cứu nâng cấp song song, nhưng các nâng cấp khả dụng cũng chỉ khoảng 3 cái, nên không thấy có lý do gì để xây 12 cái. Trừ khi là dự phòng để đối thủ phá vài cái vẫn tiếp tục sản xuất Zergling, nhưng dù vậy 12 cái vẫn là quá nhiều
Vì thế tôi tò mò chính xác động cơ là gì. Cũng có thể tôi đang nói nhảm vì chuyện đã quá lâu
Đừng để bị tựa đề đánh lừa. Bài này là một cách tiếp cận rất kỹ lưỡng và sáng tạo đối với việc dịch bình luận StarCraft và làm cho nó dễ tiếp cận hơn
Như tác giả đã chỉ ra đúng, trong 27 năm qua, bình luận game đã không còn là tiếng Hàn hay tiếng Anh nữa mà trở thành một ngôn ngữ chuyên biệt theo miền. Cách dùng script tự động và AI để nắm đại ý rồi biến thành câu văn nhất quán thật sự rất hay
Với tư cách người không nói tiếng Anh bản ngữ, bài này trông giống hệt những vấn đề gặp phải trong dịch thuật ở nhiều lĩnh vực, đặc biệt là dịch bài viết máy tính và phát triển phần mềm
Có cực kỳ nhiều thuật ngữ khó dịch. Những từ như sharding hay hash là ví dụ, và giải pháp thực tế duy nhất là theo thời gian vay mượn chúng ở mức nào đó cho phù hợp với từng ngôn ngữ. Nhưng để làm vậy cần có một cộng đồng có thể phần nào vượt qua khoảng cách giữa hai ngôn ngữ, và trong trường hợp này bao gồm cả việc học tiếng Anh
Tiếng mẹ đẻ của tôi là tiếng Tây Ban Nha, và khi nói về phát triển phần mềm bằng tiếng Tây Ban Nha thì các thuật ngữ lấy từ tiếng Anh cứ nối tiếp nhau xuất hiện. Dường như không có cách chắc chắn nào để xử lý tốt chuyện này, và tôi thấy thú vị khi xem dịch máy sẽ xử lý ra sao. Rốt cuộc phải trải qua một quá trình xã hội trong đó hai ngôn ngữ hòa trộn với nhau, rồi xem thuật ngữ nào sống sót trong quá trình đó
Theo tiêu chí trong bài, cần có người biết tiếng Hàn ở mức nào đó dù không nhất thiết thành thạo, và tất nhiên là người biết chính trò chơi này
depurar, khá khớp vớidebug, nhưng nhiều người nói tiếng Tây Ban Nha lại mượn thẳng tiếng Anh và nóidebuguearKhi nói về hiệu năng của máy tính hay phần mềm, ở Mexico tôi học từ
desempeño, nhưng ở Argentina tôi cũng nghe người ta nóiel performancevới cùng nghĩa đó. Có vẻ trường hợp phổ biến nhất là dùng nguyên từ vay mượn tiếng Anh thay vì tìm từ Tây Ban Nha sẵn cóshardingThứ gần như thật sự không thể dịch là từ ngữ đời thường. Từ
Brottrong tiếng Đức có hàm ý khá khác với thứ kinh khủng mà người Anh gọi là bread, nhưng cũng không có từ nào tốt hơn, còn vay mượn nguyên xi thì nghe khá kỳ trong hầu hết ngữ cảnh. Nó kỳ hơn nhiều so với việc mượnshardingtrong ngữ cảnh kỹ thuậtMột ví dụ hay về việc từ vay mượn dần thích nghi với ngôn ngữ theo thời gian có thể thấy trong thuật ngữ đường sắt của tiếng Đức. Ban đầu vì công nghệ được nhập từ Anh nên toàn bộ đều là tiếng Anh, nhưng theo thời gian phần lớn đã chuyển thành những từ trông giống tiếng Đức. Có những từ được tạo lại từ cùng nguồn vay mượn Hy Lạp/Latin như tiếng Anh, như
Lokomotive, nhưngstationnay làBahnhof, còntrainlàZugTrong một bài viết về dịch thuật, việc tác giả dùng tỷ lệ tín hiệu trên nhiễu hoàn toàn ngược lại hơi buồn cười. Tỷ lệ tín hiệu trên nhiễu cao, chẳng hạn vượt 9000, là một điều rất tốt
Vì nó có nghĩa là tín hiệu nhiều và nhiễu rất ít; nên tỷ lệ tín hiệu trên nhiễu giảm nghĩa là nhiễu nhiều hơn
jargonPhiên bản Google Translate cũng có thể hiểu khá tốt, nhưng đó là vì tôi biết rất rõ Brood War và các chi tiết của mở đầu 12 Hatchery của Zerg
ChatGPT và Claude đã dịch văn bản tiếng Hàn tốt đến đáng kinh ngạc:
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.Nếu tác giả đọc được: có thể dùng yt-dlp để tải phiên bản video chất lượng thấp nhằm tiết kiệm băng thông
yt-dlp -f "bv[height<=720]"Nếu đưa URL hoặc ID video vào đây, nó sẽ tải xuống với chất lượng tối đa 720p
Một câu hỏi ngớ ngẩn của người hồi nhỏ chỉ chơi money map: con số trước tên công trình có nghĩa là gì?
Nếu nói 12 Hatcheries thì về lý thuyết xây 12 Hatchery cũng có thể, nhưng trông rất phi thực tế. 12 Spawning Pool thì hiển nhiên là vô dụng. Vì vậy tôi tưởng đó là vị trí trong danh sách thứ tự build
Nhưng rồi lại có các build như
12 Hatch, 12 Pool, 12 Gas, nên cách hiểu đó không hợp lý lắm. Có vẻ không phải chỉ là danh sách đơn thuần; tôi tự hỏi vì nó là cây nên 12 có phải độ sâu của công trình đó không, nhưng xây 11 công trình trước gas thì khó tưởng tượng và có vẻ quá muộn. Tôi thắc mắc liệu có tính cả unit không, hay chỉ đếm drone/overlord4-pooling. Khi chơi Zerg, lúc chỉ có 4 worker thì xây Spawning Pool, rồi tạo lại worker thứ tư, sau đó sản xuất Zergling để tấn công sớm, tức rushKhi đó đối thủ sẽ chửi đủ thứ thậm tệ và còn nghi ngờ cả xu hướng tính dục của bạn
12 Spawning Pool thì hiển nhiên là vô dụng, tôi mang máng nhớ trong một video của Husky có người thật sự xây 9 Spawning Pool để làm 9 poolCon số chỉ mức supply cần đạt tới khi xây cấu trúc đó. Vì vậy
12 hatch 12 pool 12 gasnghĩa là lên tới 12 worker rồi, hễ đủ tài nguyên thì xây ba công trình đó theo thứ tựVới Zerg, worker thực sự biến thành công trình, nên có lẽ luồng sẽ là đạt 12 rồi xây Hatchery, tạo thêm một worker rồi xây Spawning Pool, lại tạo thêm một worker rồi xây nhà khai thác gas
Ngay cả khi Google Translate đã khá hơn nhiều, các văn bản tiếng Trung và tiếng Nhật liên quan đến cờ vây vẫn khó dịch hiệu quả. Có vấn đề tương tự như trong bài viết này
Nhiều từ trong tiếng Trung và tiếng Nhật có nghĩa rất cụ thể trong ngữ cảnh cờ vây, nhưng trong ngữ cảnh thông thường cũng có nghĩa bình thường. Ví dụ
kotrong cờ vây là một tình huống luật cụ thể, nhưng thông thường lại có nghĩa nhưrobbery, nên Google Translate dịch theo nghĩa thông thường và khiến toàn bộ không thể hiểu đượcVới các mô hình ngôn ngữ lớn hiện nay, giờ có thể thêm chỉ dẫn ở đầu kiểu
tôi sẽ dịch phần giải thích sơ đồ cờ vây tiếng Trung. Bản dịch phải tự nhiên và không né tránh thuật ngữ cờ vây. Ví dụ 拆 = extension, 夹 = pincer, 刺 và 觑 = peep, và kết quả rất tuyệt. Thực tế là gần như tôi có thể đọc được hầu hết tài liệu mình muốn. Có vẻ trong dữ liệu huấn luyện đã có đủ tài liệu cờ vây, nên may mắn là không cần làm gì đặc biệt hơnVề cờ vua, nếu tác giả đọc được thì có vài điểm cần sửa. Các nước khai cuộc trong cờ vua tiếng Anh không gọi là
openersmà gọi là openings. Cũng không có opening riêng cho trắng và riêng cho đen; dĩ nhiên từng người chơi có thể học một opening cụ thể từ góc nhìn của một bên. Việc nghiên cứu opening được xem là càng lên trình độ cao nhất thì càng mang tính nền tảng hơn. Và biến thể Sicilian đó không phảiNajdorkmà là NajdorfTôi thích bài này. Trước đây tôi từng thử chơi vài trận vòng loại khu vực Mỹ của World Cyber Games, và lúc nào cũng kinh ngạc vì người khác nhanh đến thế nào
Sau này xem các trận được phát trực tiếp từ Hàn Quốc, tôi hoàn toàn choáng ngợp trước tốc độ chơi. Xét từ góc độ chiến thuật, khi một blog nào đó giới thiệu phép tính khiến Zealot của Protoss hạ Zergling trong 2 đòn thay vì 3 đòn, tôi mới nhận ra một phần rất cơ bản của trò chơi mà mình đã bỏ lỡ. Khi đó tôi hiểu rằng đây là một trò chơi giống cờ vua và bị cuốn hút
Tôi biết đó là bản dịch sai, nhưng tôi khá thích cách dịch
natural expansionthành courtyardfront yard. Trong SC2, nơi một số bản đồ gần đây có căn cứ sân sau, cách gọi này hợp lýNhững căn cứ sân sau như vậy cũng thường xuất hiện trên bản đồ đội, và việc quyết định người chơi nào sẽ chiếm phía trước trở thành một phần chiến thuật. Protoss và Terran có thể xây trạm sạc khiên và bunker cùng nhau, còn Zerg thì nhận hiệu ứng tăng cường trên creep và có thể lan ra phía trước nhanh hơn nhiều