Cách Roblox sử dụng AI để dịch 16 ngôn ngữ trong 100 mili giây
AI/ML·ByteByteGo Newsletter·2 lượt xem

Cách Roblox sử dụng AI để dịch 16 ngôn ngữ trong 100 mili giây

How Roblox Uses AI to Translate 16 Languages in 100 Milliseconds

AI Summary

Roblox đã đạt được khả năng dịch thuật AI siêu tốc, độ trễ thấp sang 16 ngôn ngữ nhờ sử dụng các mô hình AI tiên tiến cùng hạ tầng được tối ưu hóa mạnh mẽ. Tính năng này cực kỳ quan trọng đối với nền tảng toàn cầu của họ, giúp hàng triệu người dùng trên khắp thế giới giao tiếp và khám phá nội dung một cách liền mạch. Các developer nên xem xét các architectural patterns và lựa chọn hạ tầng đã giúp Roblox đạt được hiệu suất này, đặc biệt là việc triển khai model hiệu quả, xử lý song song (parallel processing) và có thể cân nhắc sử dụng phần cứng chuyên dụng cho các tác vụ AI thời gian thực (real-time AI workloads).

Trong bài viết này, chúng ta sẽ xem xét những gì Roblox đã xây dựng và những đánh đổi mà họ đã thực hiện.


Việc dịch giữa 16 ngôn ngữ có nghĩa là hỗ trợ 256 cặp ngôn ngữ khả dĩ, chẳng hạn như tiếng Hàn sang tiếng Anh, tiếng Pháp sang tiếng Thái, tiếng Bồ Đào Nha sang tiếng Nhật, v.v. Một giải pháp là xây dựng một mô hình riêng cho mỗi cặp. Tuy nhiên, Roblox đã quyết định chỉ xây dựng một.

Roblox là một nền tảng toàn cầu nơi hơn 70 triệu người chơi, sáng tạo và giao lưu mỗi ngày trên hơn 15 triệu trải nghiệm hoạt động. Người dùng đến từ 180 quốc gia và giao tiếp liên tục thông qua trò chuyện văn bản trong trải nghiệm. Và một mô hình thống nhất duy nhất hiện đang xử lý dịch thuật trò chuyện theo thời gian thực cho tất cả người dùng đó, với tốc độ khoảng 100 mili giây cho mỗi bản dịch và hơn 5.000 cuộc trò chuyện mỗi giây.

Tuy nhiên, thách thức kỹ thuật thực sự của Roblox không phải là xây dựng một mô hình có thể dịch. Đó là xây dựng một hệ thống có thể dịch với tốc độ của một cuộc trò chuyện mà không làm gián đoạn trải nghiệm người dùng. Trong bài viết này, chúng ta sẽ xem xét những gì Roblox đã xây dựng và những đánh đổi mà họ đã thực hiện.

Tuyên bố miễn trừ trách nhiệm: Bài đăng này dựa trên các chi tiết được chia sẻ công khai từ Nhóm Kỹ thuật Roblox. Vui lòng bình luận nếu bạn nhận thấy bất kỳ điểm không chính xác nào.

Một Mô hình so với Nhiều Mô hình

Xây dựng một mô hình riêng cho từng cặp ngôn ngữ là điểm khởi đầu rõ ràng. Một mô hình cho tiếng Anh sang tiếng Hàn, một mô hình khác cho tiếng Hàn sang tiếng Pháp, một mô hình khác cho tiếng Pháp sang tiếng Thái, v.v.

Với 16 ngôn ngữ, đó là 16 nhân 16, hoặc 256 mô hình riêng lẻ. Mỗi mô hình cần dữ liệu đào tạo riêng, cơ sở hạ tầng riêng, bảo trì riêng. Và khi Roblox thêm ngôn ngữ thứ 17, họ không cần một mô hình mới. Họ cần 32. Cách tiếp cận này tăng theo cấp số nhân và nó sụp đổ dưới sức nặng của chính nó trước khi bạn đến được giai đoạn sản xuất.

Roblox đã đi theo một hướng khác.

Họ đã xây dựng một mô hình dịch thống nhất, duy nhất dựa trên transformer, xử lý tất cả 256 hướng ngôn ngữ. Chìa khóa để làm cho điều này hoạt động là một kiến trúc gọi là Mixture of Experts (MoE). Thay vì mỗi yêu cầu dịch đều đi qua tất cả các tham số trong mô hình, một cơ chế định tuyến chỉ kích hoạt một tập hợp con các mạng con chuyên biệt "chuyên gia" tùy thuộc vào đầu vào. Nghĩ nó giống như một đội ngũ các dịch giả chuyên ngành ngồi sau một quầy lễ tân duy nhất. Một yêu cầu đến, lớp định tuyến sẽ gửi nó đến đúng chuyên gia và chỉ chuyên gia đó thực hiện công việc. Toàn bộ đội ngũ có kiến thức chuyên môn rộng, nhưng bất kỳ bản dịch đơn lẻ nào cũng chỉ kích hoạt một phần nhỏ trong đó.

Các chuyên gia khác nhau chuyên về các nhóm ngôn ngữ tương tự. Với một câu nguồn và một ngôn ngữ đích, hệ thống sẽ kích hoạt chuyên gia (hoặc sự kết hợp của các chuyên gia) có liên quan để tạo ra bản dịch. Hãy coi nó như một đội ngũ các dịch giả chuyên nghiệp ngồi sau một quầy lễ tân duy nhất. Một yêu cầu đến, lớp định tuyến sẽ gửi nó đến đúng chuyên gia và chỉ chuyên gia đó thực hiện công việc. Toàn bộ đội ngũ có kiến thức chuyên môn rộng, nhưng bất kỳ bản dịch đơn lẻ nào cũng chỉ kích hoạt một phần nhỏ trong đó.

Cách tiếp cận thống nhất này tạo ra một số lợi ích tuyệt vời. Khi tất cả các ngôn ngữ được huấn luyện cùng nhau, các ngôn ngữ tương tự thực sự giúp đỡ lẫn nhau. Ví dụ, tiếng Tây Ban Nha và tiếng Bồ Đào Nha có cấu trúc đủ giống nhau nên việc huấn luyện chúng trong cùng một mô hình sẽ cải thiện chất lượng dịch cho cả hai. Mô hình cũng học đủ về các mẫu của từng ngôn ngữ để có thể tự động phát hiện ngôn ngữ nguồn, ngay cả khi cài đặt ngôn ngữ bị sai hoặc thiếu. Nó thậm chí có thể xử lý đầu vào lẫn ngôn ngữ, khi ai đó gõ hai ngôn ngữ trong cùng một tin nhắn và vẫn đưa ra bản dịch hợp lý sang ngôn ngữ đích.

Tuy nhiên, có một cái giá phải trả cho việc hợp nhất. Một mô hình giờ đây mang gánh nặng của tất cả 256 hướng. Để xử lý sự đa dạng đó với chất lượng chấp nhận được, mô hình của Roblox đã có khoảng 1 tỷ tham số. Chạy suy luận qua một mô hình lớn như vậy quá chậm và quá tốn kém cho dịch vụ chat thời gian thực ở quy mô lớn. Bài toán kiến trúc đã được giải quyết, nhưng bài toán phục vụ chỉ mới bắt đầu.


Unblocked: Ngữ cảnh giúp bạn tiết kiệm thời gian và token (Được tài trợ)

Ngừng việc "nuôi dạy" các AI lập trình của bạn. Unblocked cung cấp cho chúng kiến thức tổ chức để tạo ra mã có thể hợp nhất mà không cần qua lại nhiều lần. Nó kéo ngữ cảnh từ toàn bộ ngăn xếp kỹ thuật của bạn, giải quyết xung đột và cắt giảm chu kỳ làm lại bằng cách cung cấp chỉ những gì các AI cần cho nhiệm vụ trước mắt.

See how Unblocked works


Making a Billion Parameters Fast Enough for a Conversation

Một mô hình 1 tỷ tham số có thể tạo ra bản dịch tốt. Tuy nhiên, nó không tạo ra chúng đủ nhanh cho hai người trò chuyện theo thời gian thực.

Với hơn 5.000 cuộc trò chuyện mỗi giây và giới hạn độ trễ khoảng 100 mili giây, Roblox cần thu hẹp một khoảng cách đáng kể để làm cho mọi thứ sẵn sàng cho sản xuất. Họ đã làm được điều đó với hai động thái. Đầu tiên, họ làm cho mô hình nhỏ hơn. Sau đó, họ bọc nó trong một cơ sở hạ tầng giúp tận dụng tối đa từng mili giây còn lại.

Roblox đã sử dụng một kỹ thuật gọi là knowledge distillation, đôi khi được mô tả là phương pháp thầy-trò. Ý tưởng rất đơn giản. Bạn huấn luyện một mô hình lớn, chất lượng cao trước (người thầy). Sau đó, bạn huấn luyện một mô hình nhỏ hơn (người trò) để bắt chước đầu ra của người thầy. Chi tiết quan trọng là người trò thực sự học được gì. Nó không chỉ học các câu trả lời cuối cùng của người thầy. Nó học cách phân phối xác suất của người thầy, nói cách khác, là mức độ tin cậy của người thầy trên tất cả các bản dịch có thể có cho một đầu vào nhất định.

Thông qua quá trình này, Roblox đã nén mô hình từ khoảng 1 tỷ tham số xuống còn dưới 650 triệu tham số. Song song với việc distillation, họ cũng áp dụng quantization (giảm độ chính xác số học của trọng số mô hình) và model compilation (tối ưu hóa đồ thị tính toán cho phần cứng cụ thể). Đây là các lớp nén bổ sung được xếp chồng lên trên distillation.

Tuy nhiên, cơ sở hạ tầng phục vụ chỉ là một nửa câu chuyện. Ngay cả một mô hình đã được distillation cũng không đạt 100ms một mình ở quy mô này. Mô hình chỉ là một thành phần trong một quy trình dài hơn, và hầu hết việc tối ưu hóa độ trễ xảy ra bên ngoài bản thân mô hình.

Khi một tin nhắn trò chuyện cần dịch, nó sẽ đi qua RCC (dịch vụ backend của Roblox). Trước khi mô hình được sử dụng, hệ thống sẽ kiểm tra bộ nhớ cache bản dịch. Nếu bản dịch chính xác từ văn bản nguồn sang ngôn ngữ đích này đã được thực hiện trước đó, kết quả trong bộ nhớ cache sẽ được trả về ngay lập tức và không cần suy luận mô hình.

Nếu không tìm thấy trong bộ nhớ cache, yêu cầu sẽ được gửi đến backend, nơi một bộ phận phân lô động nhóm nhiều yêu cầu dịch lại với nhau. Việc phân lô là rất quan trọng vì GPU hiệu quả hơn nhiều khi xử lý nhiều đầu vào cùng một lúc so với xử lý từng cái một. Các yêu cầu đã được nhóm sau đó sẽ đi qua ngăn xếp bộ mã hóa của mô hình, chuyển đổi văn bản nguồn thành biểu diễn số.

Đây là lúc một bộ nhớ đệm thứ hai, khác biệt phát huy tác dụng. Roblox đã thêm một bộ nhớ đệm nhúng giữa bộ mã hóa và bộ giải mã. Điều này quan trọng đối với một tình huống cụ thể xảy ra liên tục trên nền tảng. Hãy tưởng tượng một người nói tiếng Hàn gửi tin nhắn trên một máy chủ có những người nói tiếng Anh, tiếng Đức và tiếng Pháp. Tin nhắn tiếng Hàn duy nhất đó cần ba bản dịch riêng biệt. Nếu không có bộ nhớ đệm nhúng, bộ mã hóa sẽ xử lý cùng một tin nhắn tiếng Hàn ba lần. Với nó, quá trình mã hóa chỉ diễn ra một lần, biểu diễn trung gian được lưu vào bộ nhớ đệm, và bộ giải mã tạo ra cả ba bản dịch từ quá trình mã hóa đơn lẻ đó. Với quy mô lưu lượng trò chuyện của Roblox, việc tối ưu hóa này rất đáng kể.

Cuối cùng, bản dịch đã giải mã sẽ đi qua các hệ thống tin cậy và an toàn của Roblox, quy trình kiểm tra nghiêm ngặt tương tự được áp dụng cho tất cả văn bản trên nền tảng, để phát hiện bất kỳ nội dung nào vi phạm chính sách của họ. Cả tin nhắn đã dịch và tin nhắn gốc đều được gửi đến thiết bị của người nhận, cho phép người dùng chuyển đổi giữa bản dịch và lời gốc của người gửi.

Đo lường chất lượng

Một mô hình dịch thuật chỉ tốt dựa trên hai yếu tố. Dữ liệu mà nó được huấn luyện, và khả năng của bạn để đo lường xem nó có hoạt động hay không. Đối với 256 hướng ngôn ngữ với quy mô của Roblox, cả hai điều này đều là những vấn đề khó khăn. Và Roblox đã phải xây dựng các giải pháp tùy chỉnh cho từng vấn đề.

Các chỉ số chất lượng dịch thuật tiêu chuẩn hoạt động bằng cách so sánh kết quả của mô hình với bản dịch "đúng" của con người, được gọi là tài liệu tham khảo. Nhưng việc tạo ra các bản dịch tham khảo cho tất cả 256 hướng ngôn ngữ, trên khối lượng và sự đa dạng của các tin nhắn trò chuyện của Roblox, là không thể. Bạn sẽ cần những người dịch thuật tạo ra sự thật nền tảng cho mọi sự kết hợp, liên tục. Roblox đã giải quyết vấn đề này bằng cách xây dựng mô hình ước lượng chất lượng của riêng mình, mô hình này chấm điểm các bản dịch chỉ sử dụng văn bản nguồn và đầu ra của máy dịch. Không cần bản dịch tham khảo.

Mô hình chất lượng này đánh giá các bản dịch theo nhiều khía cạnh.

Nó kiểm tra tính chính xác (có bổ sung, bỏ sót hoặc dịch sai không?), tính trôi chảy (ngữ pháp, chính tả, dấu câu) và tính nhất quán với tài liệu tham khảo (bản dịch có hợp lý trong ngữ cảnh của cuộc trò chuyện còn lại không?).

Các lỗi được phân loại theo mức độ nghiêm trọng thành các danh mục nghiêm trọng, chính và nhỏ. Mô hình hoạt động ở mức độ chi tiết từng từ, không chỉ từng câu. Nó không chỉ đơn giản là đánh dấu một bản dịch là "tệ". Nó chỉ rõ những từ nào sai và mức độ nghiêm trọng của chúng.

Để xây dựng điều này, Roblox đã huấn luyện một mô hình ML dựa trên các loại lỗi và điểm số được gắn nhãn thủ công, sau đó tinh chỉnh một mô hình ngôn ngữ đa ngôn ngữ để dự đoán các lỗi ở cấp độ từ này và tính toán điểm số theo các tiêu chí đa chiều của họ.

Các cặp ngôn ngữ phổ biến như Anh-Tây Ban Nha có rất nhiều dữ liệu đào tạo song song. Hàng tỷ cặp câu được dịch tồn tại trên web. Tuy nhiên, cũng có những cặp hiếm như Pháp-Thái. Rất khó để đào tạo một trình dịch tốt giữa hai ngôn ngữ nếu bạn không có các ví dụ về bản dịch giữa chúng.

Roblox đã giải quyết vấn đề này bằng phương pháp dịch ngược lặp lại. Lấy một văn bản tiếng Pháp, dịch nó sang tiếng Thái bằng mô hình hiện tại, sau đó dịch văn bản tiếng Thái đó ngược trở lại tiếng Pháp. So sánh kết quả hai chiều với văn bản tiếng Pháp gốc. Nếu nó khớp chặt chẽ, cặp Pháp-Thái trung gian có lẽ là một ví dụ đào tạo tổng hợp tốt.

Từ khóa quan trọng cần lưu ý ở đây là "lặp lại". Roblox đã không làm điều này một lần. Họ lặp đi lặp lại quá trình này qua nhiều vòng, sử dụng kết hợp dữ liệu dịch ngược tổng hợp này và dữ liệu có giám sát được gắn nhãn bởi con người để mở rộng dần tập dữ liệu đào tạo. Tỷ lệ giữa dữ liệu tổng hợp và dữ liệu thực rất quan trọng. Quá nhiều dữ liệu tổng hợp làm giảm chất lượng vì mô hình bắt đầu học từ những sai lầm của chính nó.

Dữ liệu dịch thuật chung không bao gồm các từ như "obby" (một khóa học vượt chướng ngại vật của Roblox) hoặc tiếng lóng và viết tắt dành riêng cho nền tảng. Roblox đã đưa người đánh giá là con người vào để dịch các thuật ngữ phổ biến và thịnh hành cho từng ngôn ngữ trong số 16 ngôn ngữ, sau đó đưa các bản dịch đó vào dữ liệu đào tạo. Đây là một quá trình liên tục vì tiếng lóng phát triển nhanh hơn bất kỳ việc đào tạo lại mô hình nào.

Kết luận

Mô hình dịch thuật hợp nhất của Roblox đi kèm với chi phí thực tế và việc hiểu những chi phí đó quan trọng không kém việc hiểu kiến trúc.

  • Chất lượng so với độ trễ là một sự căng thẳng vĩnh viễn. Mô hình học sinh được chắt lọc vốn dĩ kém chính xác hơn mô hình giáo viên. Mỗi khi Roblox cải thiện mô hình giáo viên, họ phải đối mặt với câu hỏi liệu những cải tiến đó có tồn tại sau quá trình nén hay không. Và 100 mili giây là giới hạn cứng cản trở kích thước và độ chính xác của mô hình phục vụ có thể đạt được.

  • Các cặp có tài nguyên thấp vẫn là điểm yếu. Dịch ngược giúp ích, nhưng Pháp-Thái sẽ không bao giờ tốt bằng Anh-Tây Ban Nha. Mô hình có thể xử lý đầu vào đa ngôn ngữ, nhưng độ chính xác giảm. Hợp nhất không có nghĩa là chất lượng đồng nhất.

  • Gánh nặng bảo trì là có thật. Xây dựng một mô hình dịch thuật tùy chỉnh có nghĩa là sở hữu toàn bộ ngăn xếp. Đào tạo, đánh giá, phục vụ, cập nhật tiếng lóng, tích hợp an toàn, tất cả đều vậy. Sử dụng API dịch thuật thương mại có nghĩa là người khác xử lý sự phức tạp đó. Lựa chọn của Roblox là hợp lý vì họ cần độ chính xác theo lĩnh vực cụ thể (mô hình của họ vượt trội hơn các API thương mại trên nội dung Roblox, theo số liệu của riêng họ) và độ trễ cực kỳ thấp ở quy mô lớn. Hầu hết các công ty nên sử dụng dịch vụ dịch thuật có sẵn và dành nỗ lực kỹ thuật của họ vào những việc khác.

  • Mô hình ước lượng chất lượng không cần tham chiếu, mặc dù thông minh, nhưng có một hạn chế cố hữu. Nó có thể có những sai lệch hệ thống trùng lặp với những điểm yếu của chính mô hình dịch thuật. Đây là một giải pháp thực tế, không phải là một giải pháp hoàn hảo.

Tham khảo:

Tác giả: ByteByteGo

#substack#newsletter