Skip to content

다국어 및 저자원 언어 어노테이션

영어 이외의 언어로 어노테이션하기: 다양성 격차, 원어민과 함께하는 참여형 방법론, 그리고 오른쪽에서 왼쪽 쓰기 지원, 폰트, 번역된 레이블로 Potato 인터페이스를 현지화하는 방법.

영어가 아닌 언어로 어노테이션하는 일은 두 가지 문제를 동시에 안습니다. 과학적 문제로는, 대부분의 NLP 자원이 소수의 언어만 다루고, 범주가 문화를 넘어 깔끔하게 전이되지 않으며, 좋은 레이블을 만들려면 이중언어 사용자가 아니라 실제 화자가 필요하다는 점입니다. 실무적 문제로는, 오른쪽에서 왼쪽으로 쓰는 문자와 비라틴 폰트를 포함해 도구가 언어를 올바르게 표시하도록 만드는 일입니다. Potato는 두 번째 문제를 설정으로 해결하지만, 첫 번째 문제는 여러분의 몫입니다. 이 가이드는 두 가지를 모두 다룹니다.

다양성 격차는 실재하며 크다

세계에는 약 7,000개의 언어가 있지만 NLP가 의미 있게 다루는 것은 수십 개에 불과합니다. Joshi et al. (2020)은 이를 정량화했습니다. 소수의 언어는 풍부한 레이블 데이터를 갖는 반면, 수십억 명이 사용하는 절대다수의 언어는 거의 아무것도 갖지 못하며, 자원이 이미 자원을 가진 언어로 흘러가기 때문에 이 격차는 스스로 강화됩니다. 대개 어노테이션이 병목입니다. 모델이 저자원 언어에서 작동하기를 바란다면 누군가 그 언어로 데이터에 레이블을 붙여야 하며, 품질은 바로 그 레이블링에서 결정됩니다.

언어로만이 아니라 언어 공동체와 함께 어노테이션하라

값싼 이중언어 크라우드워커를 고용하고 영어 지침을 번역하려는 충동이 듭니다. 그러나 두 가지 모두 위험합니다. Bird (2020)은 언어 공동체를 데이터 공급원으로 취급하는 추출적 접근을 반대하며, Masakhane 프로젝트의 참여형 모델 (Nekoto et al., 2020)은 그 대안이 아프리카 언어에서 대규모로 작동함을 보여 줍니다. 즉 원어민이 다른 곳에서 내려진 결정을 검증만 하는 것이 아니라, 과제를 설계하고 지침을 작성하며 레이블을 스스로 소유하는 것입니다. 두 가지 실무적 함의가 있습니다.

  • 유창한 화자를, 이상적으로는 올바른 변종의 화자를 모집하라. 언어는 단일체가 아닙니다. 방언, 지역, 화계가 중요하며, 한 변종의 화자가 다른 변종을 잘못 레이블링할 수 있습니다. 이중언어 사용자는 원어민과 같지 않습니다.
  • 범주가 전이된다고 가정하지 마라. 감정, 공격성, 공손함, 나아가 개체명 유형까지도 문화에 특화되어 있습니다. 영어의 공손함에 통하는 지침이 공손함이 문법적으로 부호화되는 언어에서는 조용히 무너질 수 있습니다. 화자에게 단어만 번역하게 하지 말고 스킴 자체를 적응시키게 하십시오. 이는 번역 작업이 아니라 스킴 설계 결정입니다.

Potato 인터페이스 현지화

실무적인 절반입니다. Potato는 코드 변경 없이 설정을 통해 어노테이터 대면 인터페이스를 현지화하지만, 한계를 미리 알아 두는 편이 좋습니다.

인터페이스 텍스트. ui_language 블록은 인터페이스 골격을 위한 문자열 테이블입니다. 문서 언어를 설정하고 어노테이터가 보는 버튼과 제목을 번역하십시오.

yaml
ui_language:
  html_lang: ar
  html_dir: rtl            # right-to-left for Arabic, Hebrew, etc.
  submit_button: "إرسال"
  instructions_heading: "التعليمات"

html_dir: rtl을 설정하면 브라우저의 기본 양방향 처리 기능을 사용해 오른쪽에서 왼쪽으로 쓰는 문자를 위해 문서 전체가 뒤집힙니다. 솔직히 밝혀 둘 한 가지 한계가 있습니다. ui_language는 핵심 어노테이션 화면과 로그인 화면을 다루지만, 관리자 측의 여러 페이지(대시보드, 판정, 훈련, 로그아웃 화면)는 여전히 영어 전용이므로, 어노테이터가 이를 보게 된다면 이를 감안하십시오.

비라틴 문자를 위한 폰트. 브라우저가 CJK, 아랍, 인도계 문자에 적합한 기본 폰트를 항상 제공하지는 않습니다. base_css를 사용해 프로젝트 스타일시트를 통해 폰트를 불러오십시오.

yaml
base_css: "css/noto_font.css"

비영어 데이터. Potato는 기본적으로 데이터 파일을 UTF-8로 읽고 텍스트 필드에 임의의 유니코드를 렌더링하므로, 비영어 콘텐츠가 있는 그대로 표시됩니다. 파일이 다른 인코딩을 사용한다면 파일별(encoding:) 또는 전역(data_directory_encoding:)으로 재정의하십시오.

번역된 레이블. 이것이 유일하게 미묘한 함정입니다. Potato는 기본적으로 레이블 이름을 "인간 친화적으로" 만들어, 형식을 재구성하고 첫 글자를 대문자로 바꾸는데, 이 과정에서 비라틴 문자가 훼손될 수 있습니다. 데이터에는 기계가 읽을 수 있는 영어 name을 유지하고, displayed_label로 어노테이터에게 번역된 레이블을 보여 주되 인간 친화 처리는 끄십시오.

yaml
annotation_schemes:
  - name: sentiment
    annotation_type: radio
    description: "ما هو شعور هذا النص؟"
    humanize_labels: false
    labels:
      - name: positive
        displayed_label: "إيجابي"
      - name: negative
        displayed_label: "سلبي"
      - name: neutral
        displayed_label: "محايد"

저장되는 어노테이션은 여전히 positive이므로, 어노테이터가 전적으로 아랍어로 작업하는 동안에도 데이터는 깔끔하게 유지됩니다.

지침과 동의. surveyflow 동의 페이지와 지침 페이지를 대상 언어로 직접 작성하십시오. 이는 여러분이 직접 쓰는 HTML 파일이며, 영어를 강제하는 것은 아무것도 없습니다. 동일한 과제를 여러 언어에 걸쳐 실행하려면, Potato에는 템플릿으로부터 언어별 설정을 생성하는 setup_multilingual_config.py 도우미가 함께 제공됩니다.

더 읽어보기