Skip to content

多语言与低资源语言标注

用英语以外的语言进行标注:多样性鸿沟、与母语者协作的参与式方法,以及如何通过从右到左支持、字体和翻译标签来本地化 Potato 界面。

用英语以外的语言进行标注,是同时面对两个难题。科学层面:大多数 NLP 资源只覆盖少数几种语言,类别无法在文化之间干净地迁移,而要产出高质量标签,你需要真正的母语者,而不只是双语者。实践层面:让工具正确显示该语言,包括从右到左的文字和非拉丁字体。Potato 通过配置解决后者;前者则要靠你自己。 本指南两者兼顾。

多样性鸿沟真实而巨大

世界上大约有 7000 种语言,而 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 读取数据文件,并在文本字段中渲染任意 Unicode,因此非英语内容会照原样显示。如果某个文件使用了不同的编码,可按文件(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 辅助脚本,可从模板生成各语言的配置。

延伸阅读