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:
- 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")
- Viết hàm hash để băm chuỗi
hash_str = hash(input: string): string
- Khi tạo một entry mới có giá trị là
x
, ở ngôn ngữy
vào bảngtopic
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)
- Khi entry đã tồn tại trong bảng
topic
thay đổi giá trị từx
sangX
:
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ảngtrans
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.
Bình luận