Chrome รู้ได้อย่างไรว่ามีหน้าภาษาอะไร


10

ฉันเพิ่งเปิดหน้าเว็บใน Google Chrome และมีข้อความแจ้งว่า "หน้านี้เป็นภาษาญี่ปุ่นคุณต้องการแปลหรือไม่"

การขอคำแปลอาจส่งเนื้อหาไปยัง Google แต่ภาษาใดที่ถูกระบุไว้ในตอนแรก สิ่งนี้ทำได้ในพื้นที่ในเบราว์เซอร์หรือไม่ หรือสิ่งนี้ส่งหน้าไปยัง Google ด้วยหรือไม่ ถ้าเป็นเช่นนั้นฉันจะไม่ได้รับอนุญาตก่อนหรือไม่? หน้านั้นไม่มีมาร์กอัปเพื่อระบุภาษาและเป็นหน้าอินทราเน็ตภายในดังนั้นฉันจึงไม่แน่ใจว่า Google ควรจะสามารถเข้าถึงเนื้อหาของมันได้


คำถามที่ว่าทำไม Chrome จึงกำหนดหน้าไม่ถูกต้องเป็นภาษาอื่นและเสนอให้แปล ใน StackOverflow ให้ข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้โดยเฉพาะคำตอบที่ได้รับการยอมรับจากEmile
Owen Blacker

คำตอบ:


10

เบราว์เซอร์ Chrome สามารถระบุภาษาของหน้าเว็บหรืออย่างน้อยก็เดาได้โดยดูจากจำนวนของปัจจัยในหน้า:

  • http ส่วนหัวhttp://en.wikipedia.org/wiki/List_of_HTTP_header_fields
  • การเข้ารหัสอักขระที่ใช้
  • เมตาแท็กการเข้ารหัส
  • การวิเคราะห์ทางสถิติของตัวละครหรือคำที่แท้จริงในหน้า

สามารถทำได้ในพื้นที่โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ตหรือรายงานไปยัง Google

การแปลเนื้อหาจะส่งเนื้อหาของหน้าไปยังเซิร์ฟเวอร์ของ Google เพื่อทำการแปล


ฉันเคยดูไฟล์ XML ใน Chrome และมันบอกฉันว่าฉันกำลังดูหน้าเว็บใน ... บางภาษาในยุโรปอาจเป็นภาษาเบลเยียมหรือไม่ นี่จะแนะนำให้ฉันว่าการวิเคราะห์ข้อความบางอย่างเกิดขึ้นและผิดพลาดเล็กน้อยในกรณีของฉัน ฉันไม่เห็นสาเหตุที่ XML ภาษาอังกฤษมีการเข้ารหัสที่บ่งบอกถึงเบลเยียม แต่ใช่สำหรับบางอย่างเช่นญี่ปุ่นการเข้ารหัสจะเป็นของแจกที่ตายแล้ว
Cam Jackson

UTF-8 เป็นของแถมสำหรับคนญี่ปุ่นอย่างไร
Thilo

@CamJackson ฉันแน่ใจว่ามันไม่ได้แนะนำเบลเยียม ... บางทีมันอาจเป็นภาษาดัตช์และโครมพบจดหมายฉบับเดียว 'ij'
Peter Smit

1
มันไม่ได้ทั้งหมดจากการเข้ารหัสหน้า ฉันมีบล็อก (ภาษาอังกฤษ) ที่ได้รับสแปมความคิดเห็นรัสเซียในปริมาณที่เหมาะสม บ่อยครั้งที่ฉันดูถังขยะ Chrome แจ้งให้ฉันแปลหน้าเว็บ เห็นได้ชัดว่า (สำหรับฉัน) ตรวจสอบเนื้อหาและถูกเรียกใช้กับเนื้อหา "ภาษาอื่น" เกินขีด จำกัด เปอร์เซ็นต์ที่แน่นอน
เบียร์

1
@Thilo ไม่ใช่ UTF-8 ที่แสดงว่าเป็นภาษาญี่ปุ่น แต่ถ้าเปอร์เซ็นต์ของอักขระในหน้านั้นมาจากช่วง Unicode ของญี่ปุ่นคุณก็จะได้คำตอบของคุณ (การตรวจจับภาษาอัตโนมัติจะคาดเดาเสมอ) . ความล้มเหลวของวิธีการที่ชัดเจนในการตรวจสอบการเข้ารหัสอักขระฉันไม่คิดว่าจะทำ (หรืออย่างน้อยก็ต้อง ) ส่งหน้าไปยังเซิร์ฟเวอร์เพื่อตรวจจับ คุณเห็นขนาดของchrome.dllเมื่อเร็ว ๆ นี้? มันใหญ่! ฉันไม่ได้ดูรหัส (ขนาดใหญ่) เมื่อเร็ว ๆ นี้ แต่ไม่ต้องสงสัยเลยว่ามีฟังก์ชั่นหรือสองตัวในการตรวจจับภาษา (ไม่ยากอย่างนั้น)
Synetech

1

DeterminePageLanguageฟังก์ชั่นที่เรียกว่า มันอยู่ในไฟล์components/translate/core/language_detection/language_detection_util.cc

โครเมี่ยมการตรวจสอบครั้งแรกHTML langแอตทริบิวต์และถ้ามันไม่ได้อยู่มันตรวจสอบหัวContent-Language HTTP cld3จากนั้นก็จะได้รับการคาดการณ์จาก

ตรวจจับภาษากระชับ v3 (หรือ CLD3) เป็นรูปแบบเครือข่ายประสาทเทียมสำหรับการระบุภาษา สถานะ README:

รหัสการอนุมานจะแยกอักขระ ngrams ออกจากข้อความอินพุตและคำนวณเศษส่วนของแต่ละครั้งที่ปรากฏขึ้น ตัวอย่างเช่นดังที่แสดงในภาพด้านล่างหากข้อความอินพุตคือ "Banana" ดังนั้นหนึ่งใน trigrams ที่สกัดคือ "ana" และเศษส่วนที่เกี่ยวข้องคือ 2/4 ngrams จะถูกแฮชให้เป็น id ภายในช่วงเล็ก ๆ และแต่ละ id จะถูกแสดงด้วยเวกเตอร์การฝังที่หนาแน่นโดยประมาณระหว่างการฝึก

แบบจำลองเฉลี่ย embeddings ที่สอดคล้องกับแต่ละประเภท ngram ตามเศษส่วนและ embeddings เฉลี่ยจะถูกตัดแบ่งเพื่อสร้างชั้นฝัง

พวกเขาดาวน์โหลดสำเนาของเว็บไซต์จำนวนมากและจ่ายเงินให้คนดูข้อความบนเว็บไซต์เหล่านั้นและพูดภาษาที่พวกเขาเขียนมาจากนั้นพวกเขาแบ่งข้อความออกเป็นn-grams (กลุ่มตัวอักษรn ) และอื่น ๆ และใช้เครือข่ายประสาทเทียมเพื่อเรียนรู้การแมประหว่างการแจกแจง n-gram และภาษา

ดังนั้นตอนนี้พวกเขามี 2 ตัวแปร:

  • language ซึ่งถูกตั้งค่าจาก HTML หรือส่วนหัว (จำได้ว่าแอตทริบิวต์ HTML มีความสำคัญกว่าหากมีทั้งคู่)
  • cld_language ซึ่งเป็นคำทำนายตามความถี่ของกลุ่มตัวอักษรในหน้า

จากนั้นเราก็ตีชุดคำสั่ง if นี้ (ฉันได้แก้ไขส่วนที่พวกเขาส่งข้อมูลการวิเคราะห์เกี่ยวกับภาษาที่ไม่ตรงกัน)

  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 มีขนาดเล็กและทำงานในเครื่อง อันที่จริงมันเป็นโอเพนซอร์ซและพวกเขาแจกจ่ายแบบจำลองที่ผ่านการฝึกอบรมมาก่อน (แม้ว่าจะไม่มีรหัสสำหรับการฝึกอบรมรูปแบบและข้อมูลที่ใช้) คุณสามารถใช้มันในโครงการของคุณ

แม้จะมีการผูก Python (ไม่เป็นทางการและไม่มีการระบาย) สำหรับรหัส C ++ ดั้งเดิม (คุณจะต้องติดตั้งCython )

pip install cld3
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.