Annotazione multilingue e per lingue a bassa disponibilità di risorse
Annotare in lingue diverse dall'inglese: il divario di risorse, i metodi partecipativi con parlanti nativi e come localizzare l'interfaccia di Potato con scrittura da destra a sinistra, font ed etichette tradotte.
Annotare in una lingua diversa dall'inglese sono due problemi in uno. Quello scientifico: la maggior parte delle risorse NLP copre una manciata di lingue, le categorie non si trasferiscono in modo pulito da una cultura all'altra e per ottenere buone etichette servono parlanti veri, non semplici bilingui. Quello pratico: far sì che lo strumento visualizzi la lingua correttamente, comprese le scritture da destra a sinistra e i font non latini. Il secondo Potato lo risolve con la configurazione; il primo tocca a te. Questa guida tratta entrambi.
Il divario di risorse esiste ed è ampio
Al mondo si contano circa 7.000 lingue e l'NLP ne serve davvero qualche decina. Joshi et al. (2020) hanno quantificato il fenomeno: poche lingue dispongono di dati etichettati in abbondanza, mentre la stragrande maggioranza, parlata da miliardi di persone, non ne ha quasi nessuno, e il divario si autoalimenta perché le risorse vanno alle lingue che già le hanno. Di solito il collo di bottiglia è l'annotazione. Se vuoi che un modello funzioni in una lingua a bassa disponibilità di risorse, qualcuno deve etichettare dati in quella lingua, ed è lì che la qualità si guadagna o si perde.
Annota con la comunità linguistica, non solo nella sua lingua
L'istinto porta ad assumere crowdworker bilingui a poco prezzo e a tradurre una linea guida inglese. Entrambe le mosse sono rischiose. Bird (2020) critica gli approcci estrattivi che trattano una comunità linguistica come una fonte di dati, e il modello partecipativo del progetto Masakhane (Nekoto et al., 2020) mostra l'alternativa che funziona su larga scala per le lingue africane: i parlanti nativi contribuiscono a progettare il task, scrivono le linee guida e sono titolari delle etichette, invece di limitarsi a convalidare scelte fatte altrove. Ne discendono due conseguenze pratiche:
- Recluta parlanti fluenti, possibilmente della varietà giusta. Una lingua non è un blocco unico: dialetto, area geografica e registro contano, e chi parla una varietà può etichettare male un'altra. Bilingue non equivale a nativo.
- Non dare per scontato che le categorie si trasferiscano. Sentiment, offensività, cortesia e perfino i tipi di entità nominate sono legati alla cultura. Una linea guida che regge per la cortesia in inglese può rompersi senza avvisare in una lingua dove la cortesia è codificata nella grammatica. Fai adattare ai parlanti lo schema, non solo le parole. È una scelta di progettazione dello schema, non un lavoro di traduzione.
Diversi task della vetrina riproducono questo tipo di dati multilingui e sono buoni punti di partenza: inferenza linguistica cross-lingue in 15 lingue (XNLI), qualità della traduzione su 200 lingue (FLORES) e sentiment per le lingue regionali dell'Indonesia (NusaX).
Localizzare l'interfaccia di Potato
La metà pratica. Potato localizza l'interfaccia che vede l'annotatore tramite configurazione, senza toccare il codice, anche se conviene conoscerne i limiti da subito.
Testo dell'interfaccia. Il blocco ui_language è una tabella di stringhe per le parti fisse dell'interfaccia. Imposta la lingua del documento e traduci i pulsanti e i titoli che l'annotatore ha davanti:
ui_language:
html_lang: ar
html_dir: rtl # right-to-left for Arabic, Hebrew, etc.
submit_button: "إرسال"
instructions_heading: "التعليمات"Con html_dir: rtl l'intero documento si ribalta per le scritture da destra a sinistra, sfruttando la gestione bidirezionale nativa del browser. Un limite da dichiarare: ui_language copre le schermate principali di annotazione e di login, ma diverse pagine lato amministrazione (dashboard, aggiudicazione, addestramento e logout) sono ancora solo in inglese, quindi tienine conto se i tuoi annotatori ci passeranno.
Font per le scritture non latine. I browser non sempre hanno un buon font predefinito per le scritture CJK, araba o indiane. Caricane uno con un foglio di stile di progetto usando base_css:
base_css: "css/noto_font.css"Dati non in inglese. Potato legge i file di dati come UTF-8 per impostazione predefinita e rende qualsiasi Unicode nel campo di testo, quindi i contenuti non inglesi si vedono così come sono. Se un file usa una codifica diversa, puoi cambiarla per singolo file (encoding:) o a livello globale (data_directory_encoding:).
Etichette tradotte. Qui sta la trappola meno evidente. Per impostazione predefinita Potato «umanizza» i nomi delle etichette, riformattandoli e mettendo le iniziali maiuscole, e questo può storpiare le scritture non latine. Tieni nomi (name) inglesi leggibili dalla macchina per i tuoi dati e mostra all'annotatore un'etichetta tradotta con displayed_label, disattivando l'umanizzazione:
annotation_schemes:
- name: sentiment
annotation_type: radio
description: "ما هو شعور هذا النص؟"
humanize_labels: false
labels:
- name: positive
displayed_label: "إيجابي"
- name: negative
displayed_label: "سلبي"
- name: neutral
displayed_label: "محايد"L'annotazione salvata resta positive, così i dati restano puliti mentre l'annotatore lavora interamente in arabo.
Istruzioni e consenso. Scrivi le pagine di consenso e istruzioni di surveyflow direttamente nella lingua di destinazione: sono file HTML scritti da te, e niente ti obbliga all'inglese. Per eseguire lo stesso task in più lingue, Potato include lo script setup_multilingual_config.py, che genera una configurazione per lingua a partire da un modello.
Approfondimenti
- Scegliere uno schema di annotazione, perché le categorie raramente passano da una lingua all'altra senza modifiche.
- Scrivere le linee guida di annotazione, che i parlanti nativi dovrebbero contribuire a scrivere, non solo a tradurre.
- Condurre uno studio su Prolific e MTurk, per reclutare parlanti della lingua e della varietà giuste.
- Personalizzazione del Layout, per i font e i template personalizzati.