Làm cách nào Chrome biết ngôn ngữ của một trang?


10

Tôi vừa mở một trang web trong Google Chrome và thông báo "Trang này bằng tiếng Nhật, bạn có muốn dịch nó không?".

Yêu cầu bản dịch có lẽ sẽ gửi nội dung tới Google, nhưng ngôn ngữ được xác định ở vị trí đầu tiên như thế nào? Điều này được thực hiện tại địa phương, trong trình duyệt? Hay điều này cũng gửi trang đến Google? Nếu vậy, tôi không nên xin phép trước? Bản thân trang không có đánh dấu để chỉ ngôn ngữ và đó là trang mạng nội bộ, do đó tôi không chắc chắn rằng Google sẽ có quyền truy cập vào nội dung của nó.


Câu hỏi Tại sao Chrome xác định không chính xác trang bằng ngôn ngữ khác và đề nghị dịch? trên StackOverflow cung cấp thêm một loạt thông tin về chủ đề này, đặc biệt là câu trả lời được chấp nhận từ Emile
Owen Blacker

Câu trả lời:


10

Trình duyệt Chrome có thể xác định hoặc ít nhất là đoán ngôn ngữ trang bằng cách xem xét một số yếu tố trên trang:

Điều này có thể được thực hiện tại địa phương mà không cần kết nối internet hoặc báo cáo với Google.

Dịch nội dung chắc chắn sẽ gửi nội dung trang đến máy chủ Google để dịch.


Tôi đã từng xem một tệp XML trong Chrome và nó nói với tôi rằng tôi đang xem một trang bằng ... một số ngôn ngữ châu Âu, tiếng Bỉ có thể? Điều này sẽ gợi ý cho tôi rằng một số phân tích của văn bản xảy ra, và đã sai một chút trong trường hợp của tôi. Tôi không thể hiểu tại sao XML tiếng Anh lại có mã hóa chỉ ra tiếng Bỉ. Nhưng vâng, đối với một cái gì đó như tiếng Nhật, mã hóa sẽ là một tặng cho chết.
Cam Jackson

UTF-8 là một món quà cho người Nhật như thế nào?
Thilo

@CamJackson Tôi chắc chắn rằng nó không gợi ý tiếng Bỉ ... Có thể đó là tiếng Hà Lan và chrome đã tìm thấy một chữ cái 'ij'
Peter Smit

1
Nó không hoàn toàn bằng mã hóa trang. Tôi có một blog (bằng tiếng Anh) nhận được một lượng lớn bình luận spam Nga. Thông thường khi tôi đang xem thùng thư rác, Chrome sẽ nhắc tôi dịch trang. Rõ ràng (đối với tôi) kiểm tra nội dung và được kích hoạt với nội dung "ngôn ngữ khác" là vượt quá một tỷ lệ phần trăm nhất định.
ale

1
@Thilo, không phải UTF-8 cho thấy đó là tiếng Nhật, nhưng nếu một tỷ lệ lớn các ký tự trên một trang thuộc phạm vi Unicode của Nhật Bản, thì bạn đã có câu trả lời của mình (phát hiện ngôn ngữ tự động luôn là công việc đoán) . Không thực hiện được phương pháp rõ ràng để kiểm tra mã hóa ký tự, tôi không nghĩ rằng nó (hoặc ít nhất là cần phải) gửi trang đến máy chủ để phát hiện. Bạn đã thấy kích thước của chrome.dllgần đây? Nó rất lớn! Gần đây tôi đã xem qua mã (đồ sộ), nhưng không nghi ngờ gì nữa, có một chức năng hoặc hai chức năng tích hợp sẵn để phát hiện ngôn ngữ (nó không khó lắm).
Synetech

1

Hàm được gọi DeterminePageLanguage. Nó có trong tập tincomponents/translate/core/language_detection/language_detection_util.cc

Trước tiên, Chrome sẽ kiểm tra thuộc tính HTMLlang và nếu không có, nó sẽ kiểm tra Content-Languagetiêu đề HTTP . Sau đó, nó nhận được một dự đoán từ cld3.

Bộ phát hiện ngôn ngữ nhỏ gọn v3 (hoặc CLD3) là một mô hình mạng thần kinh để nhận dạng ngôn ngữ. Các README tuyên bố:

Mã suy luận trích xuất các ký tự từ các văn bản đầu vào và tính tỷ lệ số lần mỗi lần xuất hiện. Ví dụ, như trong hình bên dưới, nếu văn bản đầu vào là "chuối", thì một trong những bát quái được trích xuất là "ana" và phân số tương ứng là 2/4. Các ngram được băm xuống một id trong một phạm vi nhỏ và mỗi id được thể hiện bằng một vectơ nhúng dày đặc ước tính trong quá trình đào tạo.

Mô hình tính trung bình các nhúng tương ứng với từng loại ngram theo các phân số và các nhúng nhúng trung bình được nối để tạo ra lớp nhúng.

Vì vậy, về cơ bản, họ đã tải xuống các bản sao của một loạt các trang web và trả tiền cho ai đó để xem văn bản trên các trang web đó và nói ngôn ngữ nào họ viết. Tiếp theo, họ chia văn bản thành n-gram (nhóm n chữ cái), v.v. và đã sử dụng một mạng lưới thần kinh để tìm hiểu ánh xạ giữa các phân phối n-gram và ngôn ngữ.

Vì vậy, bây giờ họ có 2 biến:

  • language được đặt từ HTML hoặc tiêu đề (nhắc lại rằng thuộc tính HTML được ưu tiên nếu có cả hai)
  • cld_language đó là một dự đoán dựa trên tần số của các nhóm chữ cái trên trang

Sau đó, chúng tôi nhấn vào loạt câu lệnh if này (Tôi đã chỉnh sửa phần mà họ gửi dữ liệu phân tích về sự không phù hợp ngôn ngữ)

  if (language.empty()) {
    return cld_language;
  }

  if (cld_language == kUnknownLanguageCode) {
    return language;
  }

  if (CanCLDComplementSubCode(language, cld_language)) {
    return cld_language;
  }

  if (IsSameOrSimilarLanguages(language, cld_language)) {
    return language;
  }

  if (MaybeServerWrongConfiguration(language, cld_language)) {
    return cld_language;
  }

  // Content-Language value might be wrong because CLD says that this page is
  // written in another language with confidence. In this case, Chrome doesn't
  // rely on any of the language codes, and gives up suggesting a translation.
  return kUnknownLanguageCode;

CLD3 nhỏ và được chạy cục bộ. Trên thực tế, đó là nguồn mở và họ phân phối một mô hình được đào tạo trước (mặc dù mã đào tạo mô hình và dữ liệu họ sử dụng không có sẵn). Bạn có thể sử dụng nó trong các dự án của bạn.

Thậm chí còn có các ràng buộc Python (không chính thức và không rõ ràng) cho mã C ++ gốc (bạn sẽ cần cài đặt Cython )

pip install cld3
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.