1. Vấn đề

Giả sử bạn xây dựng một ứng dụng hỗ trợ hiển thị đến 30 ngôn ngữ. Khi bắt tay vào tạo, dịch dữ liệu bạn sẽ gặp vấn đề mất đồng bộ giữa dữ liệu gốc và bản dịch.
Ví dụ: ban đầu dữ liệu gốc là “xin chào”, bản dịch sang tiếng Anh là “hello”. Nhưng khi bạn đổi “xin chào” sang thành “tạm biệt”, bạn quên không cập nhật “good bye” thay thế cho “hello”, kết quả là bản dịch sẽ sai nghĩa với bản gốc.

2. Cách giải quyết

Hệ thống của chúng ta có thể có rất nhiều bảng, ví dụ A, B, C, D. Mỗi bảng sẽ có những trường “name”, “title”,…chứa text ở ngôn ngữ được xác định bởi trường “lang”. Tôi sẽ bổ xung thêm trường “hash”:

hash_str = hash(input: string): string

Đặc điểm của mã băm này là:

  • Xác suất để 2 giá trị “name” khác nhau có cùng một giá trị “hash” là cực kỳ thấp
  • Độ dài mã băm là không đổi tùy theo bạn cấu hình hàm băm hash_function

Các bước để tự động dịch sang 30 ngôn ngữ, chuỗi gốc sẽ lưu vào bảng topic còn bản dịch lưu ở bảng trans như sau:
Cấu trúc bảng

  1. Viết một hàm gọi vào OpenAI để dịch chuỗi từ ngôn ngữ A sang B
translate(input: string, from_lang: string(2), to_lang: string(2)): string
translate("xin chào", "vi", "en")
  1. Viết hàm hash để băm chuỗi
hash_str = hash(input: string): string
  1. Khi tạo một entry mới có giá trị là x, ở ngôn ngữ y vào bảng topic
hash_str = hash(x)

ghi vào bảng `topic` (x, y, hash_str). Bản ghi mới được ra có unique id là `id`

loop qua tất cả các ngôn ngữ `z` khác `y` để dịch chuỗi `x`
    trans_str = translate(x, y, z)
    ghi vào bảng `trans`(id, hash_str, trans_str, z)
  1. Khi entry đã tồn tại trong bảng topic thay đổi giá trị từ x sang X:
lưu lại hash_str trước đây của x
tính toán lại new_hash_str = hash(X)
cập nhật bảng `topic` (id, X, new_hash_str)
duyệt qua tất cả bảng ghi trong bảng `trans` có cùng `id`, `hash_str`
   new_trans_str = translate(X, y, z)
   cập nhật bảng `trans`(id, new_hash_str, new_trans_str, z)

3. Đánh giá

Với cách giải quyết ở trên, chúng ta sẽ đảm bảo khi một giá trị text thay đổi chúng ta có thể cập nhật bản dịch cho các ngôn ngữ còn lại. Trường hợp không thể cập nhật bản dịch ngay lúc đó, chúng ta có thể viết hàm định thời chạy batch để so sánh hash string giữa bảng trans và các bản còn lại:

  • Nếu cùng giá trị id nhưng hash_str khác nhau chứng tỏ bảng trans cần cập nhật lại

Phương pháp này đảm bảo bất kỳ lúc nào chúng ta muốn sẽ có bản dịch cập nhật nhất và luôn phát hiện ra bản dịch lỗi thời để cập nhật lại.