Chuyển đến nội dung chính

Ngôn ngữ nhân tạo, Chữ viết & Chính tả

rosetta hỗ trợ tối ưu cho các ngôn ngữ nhân tạo (constructed languages) thông qua các register của LLM và các bộ chuyển đổi chữ viết tất định (deterministic script converters). Hướng dẫn này trình bày cách hoạt động của tính năng hỗ trợ ngôn ngữ nhân tạo, các phông chữ bạn cần và cách thêm ngôn ngữ của riêng bạn.

:::tip Tại sao ngôn ngữ nhân tạo lại quan trọng Ngôn ngữ nhân tạo không chỉ là sự mới lạ — chúng vận hành trên cùng một cơ sở hạ tầng được sử dụng cho các ngôn ngữ thực tế ít được hỗ trợ. Cổng chất lượng (quality gate), hệ thống huấn luyện (coaching system) và luồng chuyển đổi chữ viết hoạt động hoàn toàn giống nhau đối với tiếng Klingon và tiếng Plains Cree. Nếu luồng xử lý ngôn ngữ nhân tạo của bạn hoạt động tốt, thì luồng xử lý ngôn ngữ tài nguyên thấp của bạn cũng vậy. :::


Các ngôn ngữ nhân tạo được hỗ trợ

Ngôn ngữBộ chuyển đổi chữ viếtPhông chữ yêu cầu
Klingontlh✅ Latin hóa → pIqaDPhông chữ PUA (VD: pIqaD qolqoS)
Sindarin (Tiếng Elf của Tolkien)x-elvish-s✅ Latin → TengwarPhông chữ CSUR PUA
Kryptonianx-kryptonian✅ Latin → KryptonianPhông chữ PUA
Tiếng Anh Hải tặcx-pirate❌ chỉ registerKhông
Tiếng Anh Shakespearex-shakespeare❌ chỉ registerKhông
Tiếng Yodax-yoda❌ chỉ registerKhông

Các mã ngôn ngữ nhân tạo sử dụng tiền tố x- theo quy ước sử dụng riêng của BCP-47, ngoại trừ tiếng Klingon (tlh) có mã ISO 639-3 được cấp bởi SIL International.


Yêu cầu về Unicode, PUA và Phông chữ

Vùng sử dụng riêng (Private Use Area)

Tiếng Klingon (pIqaD), Sindarin (Tengwar) và Kryptonian sử dụng các ký tự Private Use Area (PUA) của Unicode. PUA là dải U+E000–U+F8FF — các điểm mã này không được gán tiêu chuẩn. ConScript Unicode Registry (CSUR) duy trì các ánh xạ được cộng đồng thống nhất cho các chữ viết hư cấu, nhưng chúng không thuộc tiêu chuẩn Unicode.

Điều này có ý nghĩa gì trong thực tế:

  • Văn bản PUA sẽ hiển thị thành các ô trống (□□□) nếu không tải đúng phông chữ
  • Các phông chữ khác nhau có thể ánh xạ các glyph khác nhau vào cùng một điểm mã PUA
  • rosetta KHÔNG tích hợp sẵn các phông chữ PUA — bạn phải tự tải chúng
  • Các phông chữ hệ thống sẽ không bao giờ hiển thị được các ký tự này

Dải PUA theo Chữ viết

Chữ viếtDải PUATham chiếu CSUR
Klingon (pIqaD)U+F8D0–U+F8FFCSUR Klingon
Tengwar (Tiếng Elf)U+E000–U+E07FCSUR Tengwar
KryptonianThay đổi theo phông chữKhông có tiêu chuẩn CSUR

Tải Phông chữ Web PUA

Để hiển thị văn bản ngôn ngữ nhân tạo dựa trên PUA trong ứng dụng web của bạn, hãy tải phông chữ phù hợp thông qua CSS:

/* Load a Klingon PUA font */
@font-face {
font-family: 'pIqaD';
src: url('/fonts/piqad.woff2') format('woff2');
unicode-range: U+F8D0-U+F8FF;
}

/* Apply to Klingon text elements */
[lang="tlh"] {
font-family: 'pIqaD', sans-serif;
}

:::warning Hỗ trợ Unicode KHÔNG được đảm bảo Unicode Consortium đã từ chối rõ ràng việc mã hóa các chữ viết hư cấu vào tiêu chuẩn. Các gán mã PUA do cộng đồng duy trì và có thể xung đột giữa các bản triển khai phông chữ. Luôn chỉ định chính xác phông chữ mà dự án của bạn sử dụng và kiểm tra khả năng hiển thị trên nhiều trình duyệt. :::


Bộ chuyển đổi chữ viết

Cách chúng hoạt động

Tính năng chuyển đổi chữ viết của rosetta là một hook sau dịch thuật (post-translation hook):

  1. LLM dịch văn bản sang một chữ viết làm việc (thường là Latin hoặc SRO)
  2. Cổng chất lượng xác thực đầu ra
  3. Bộ chuyển đổi tất định biến đổi văn bản đã xác thực thành chữ viết hiển thị
  4. Văn bản đã chuyển đổi được ghi vào ổ đĩa

Cách tiếp cận hai bước này hiệu quả vì các LLM tạo ra đầu ra tốt hơn khi làm việc với các chữ viết dựa trên hệ Latin. Bộ chuyển đổi tất định đảm bảo đầu ra chữ viết chính xác mà không phụ thuộc vào kiến thức về chữ viết (thường không đáng tin cậy) của mô hình.

Cả năm bộ chuyển đổi

rosetta đi kèm với năm bộ chuyển đổi chữ viết tích hợp sẵn:

Plains Cree: SRO → Âm tiết (crk)

Từ Standard Roman Orthography (Chính tả chữ Latin chuẩn) sang Chữ âm tiết của thổ dân Canada.

Input: "tawâw"
Output: "ᑕᐚᐤ"

Các nguyên âm dài sử dụng dấu macron/mũ: ê, î, ô, â. Bộ chuyển đổi xử lý tất cả các dấu phụ SRO và ánh xạ chúng sang các ký tự âm tiết chính xác. Xem Hỗ trợ ngôn ngữ tài nguyên thấp để biết toàn bộ luồng xử lý tiếng Cree.

Tiếng Serbia: Latin → Cyrillic (sr)

Chuyển đổi tất định từ chữ Latin sang chữ Cyrillic cho tiếng Serbia.

Input: "zdravo"
Output: "здраво"

Bộ chuyển đổi này xử lý toàn bộ bảng ánh xạ chữ cái tiếng Serbia bao gồm cả các chữ ghép (lj → љ, nj → њ, dž → џ).

Klingon: Latin hóa → pIqaD (tlh)

Hệ thống Latin hóa của Marc Okrand sang các ký tự pIqaD PUA.

Input: "Qapla'" (romanized Klingon)
Output: [pIqaD PUA] (requires pIqaD font to render)

Sindarin: Latin → Tengwar (x-elvish-s)

Bảng ánh xạ Tengwar chế độ Sindarin của Tolkien.

Input: "elen síla" (Latin Sindarin)
Output: [Tengwar PUA] (requires Tengwar font to render)

Kryptonian: Latin → Kryptonian (x-kryptonian)

Bảng ánh xạ chữ viết Kryptonian theo từ vựng của người hâm mộ.

Input: "Kal-El"
Output: [Kryptonian PUA] (requires Kryptonian font to render)

Kích hoạt một Bộ chuyển đổi

Thiết lập trường scripts trong cấu hình ngôn ngữ của bạn. Đối với các bộ chuyển đổi tích hợp sẵn, trường này được tự động phát hiện từ mã ngôn ngữ:

{
"languages": {
"sr": { "scripts": "sr" },
"crk": {}
}
}

Tiếng Plains Cree (crk) tự động phát hiện — bạn không cần phải thiết lập scripts một cách rõ ràng.


Các ngôn ngữ đa chữ viết

Một số ngôn ngữ thực tế sử dụng nhiều chữ viết đang hoạt động:

Ngôn ngữChữ viếtCách tiếp cận của rosetta
Tiếng SerbiaLatin + CyrillicBộ chuyển đổi chữ viết (sr) — dịch bằng chữ Latin, chuyển đổi sang Cyrillic
Tiếng TrungGiản thể + Phồn thểCác mã locale riêng biệt (zh so với zh-TW) với các register khác nhau

Đối với các ngôn ngữ mà cả hai chữ viết đều phục vụ cùng một đối tượng (tiếng Serbia), hãy sử dụng bộ chuyển đổi chữ viết. Đối với các ngôn ngữ mà các chữ viết phục vụ các đối tượng khác nhau (Tiếng Trung Giản thể cho Trung Quốc đại lục, Phồn thể cho Đài Loan/Hồng Kông), hãy sử dụng các mã locale riêng biệt.


Ghi chú về Chính tả

Các register không chỉ là giọng điệu — chúng mang theo các hướng dẫn chính tả để định hướng LLM tuân theo các quy ước viết chính xác.

Các hình thức xưng hô trang trọng

Các register tích hợp sẵn của rosetta bao gồm cách xưng hô trang trọng phù hợp với văn hóa cho từng ngôn ngữ:

Ngôn ngữHình thức trang trọngHướng dẫn Register
Tiếng ĐứcSieUse Sie-form for formal address
Tiếng PhápvousUse vous-form
Tiếng NgaвыProfessional register with вы-form
Tiếng Thổ Nhĩ KỳsizProfessional register with siz-form
Tiếng Hàn합쇼체Formal Korean (합쇼체)
Tiếng Nhậtです/ますPolite professional register (です/ます form)
Tiếng Ba LanPan/PaniProfessional register with Pan/Pani form

Viết bao hàm giới tính

Mỗi thẻ ngôn ngữ có một trường gender.inclusiveGuidance chứa các lời khuyên dành riêng cho ngôn ngữ đó. Trường này được tiêm vào prompt dịch thuật của LLM tách biệt với preset của register, vì vậy nó áp dụng nhất quán bất kể người dùng chọn preset mức độ trang trọng nào:

  • Tiếng Pháp: Écriture inclusive với ký hiệu dấu chấm giữa (VD: "Connecté·e")
  • Tiếng Đức: Ký hiệu dấu hai chấm (VD: "Benutzer:innen")
  • Tiếng Tây Ban Nha: Ưu tiên cấu trúc lại theo hướng trung lập về giới tính; sử dụng ký hiệu dấu gạch chéo (VD: "usuario/a") làm phương án dự phòng

Đối với các ngôn ngữ không có hướng dẫn cụ thể trong thẻ của chúng (VD: tiếng Hàn, ngôn ngữ nhân tạo), hệ thống sẽ chuyển về quy tắc chung: "ưu tiên các hình thức trung lập về giới tính hoặc tùy chọn bao hàm nhất có sẵn."

Yêu cầu về chữ viết RTL (Phải sang Trái)

Các register của tiếng Ả Rập, tiếng Do Thái, tiếng Ba Tư và tiếng Urdu đều ghi chú các yêu cầu viết từ phải sang trái: Ensure text reads naturally in RTL layout contexts.

Ghi đè bất kỳ Register nào

Mỗi register là một giá trị cấu hình — hãy ghi đè nó để phù hợp với giọng văn của dự án bạn:

{
"languages": {
"fr": {
"register": "Casual French. Use tu-form. Conversational blog tone. Gender-neutral when possible."
},
"de": {
"register": "Informal German. Use du-form. Tech startup voice."
}
}
}

Xem Cấu hình để biết toàn bộ tham chiếu cấu hình.


Thêm một Ngôn ngữ nhân tạo mới

Từng bước thực hiện

  1. Chọn một mã sử dụng riêng BCP-47: Sử dụng tiền tố x- (VD: x-dothraki, x-valyrian).

  2. Thêm vào cấu hình của bạn:

{
"languages": {
"x-dothraki": {
"register": "Dothraki language. Use David J. Peterson's vocabulary from the Living Language Dothraki textbook. Harsh, direct tone. No articles, no verb 'to be'."
}
}
}
  1. (Tùy chọn) Thêm bộ chuyển đổi chữ viết: Nếu ngôn ngữ nhân tạo của bạn sử dụng chữ viết hiển thị không phải hệ Latin, hãy thêm một bộ chuyển đổi trong lib/scripts.js và đăng ký nó trong SCRIPT_CONVERTERS.

  2. Kiểm tra: Chạy i18n-rosetta sync --dry để xem trước các bản dịch mà không cần ghi file.

  3. Kiểm tra cổng chất lượng: Cổng chất lượng có thể cần được tinh chỉnh cho ngôn ngữ nhân tạo của bạn — đặc biệt là bước kiểm tra requireNonLatin nếu ngôn ngữ nhân tạo của bạn sử dụng các ký tự PUA.

:::note Chất lượng ngôn ngữ nhân tạo phụ thuộc vào kiến thức của LLM LLM chỉ có thể dịch sang một ngôn ngữ nhân tạo mà nó đã thấy trong dữ liệu huấn luyện. Các ngôn ngữ nhân tạo được ghi chép đầy đủ (Klingon, Sindarin, Dothraki) sẽ hoạt động tốt. Các ngôn ngữ nhân tạo ít phổ biến hoặc mới được phát minh có thể tạo ra kết quả không nhất quán. Hãy sử dụng dữ liệu huấn luyện để cải thiện chất lượng. :::


Xem thêm