Transformers documentation

NLLB

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

该模型于 2022-07-11 在 HF papers 上发布,并于 2022-07-18 贡献至 Hugging Face Transformers。

NLLB

FlashAttention SDPA

概述

NLLB: No Language Left Behind 是一个多语言翻译模型。它使用专为低资源语言定制的数据挖掘技术对数据进行了训练,并支持 200 多种语言。NLLB 采用基于稀疏门控混合专家(Sparsely Gated Mixture of Experts)的条件计算架构。

您可以在 AI at Meta 组织下找到所有原始的 NLLB 检查点。

该模型由 Lysandre 贡献。 点击右侧边栏中的 NLLB 模型,以查看更多将 NLLB 应用于不同翻译任务的示例。

以下示例演示了如何使用 Pipeline 或 AutoModel 类来翻译文本。

Pipeline
AutoModel
from transformers import pipeline


pipeline = pipeline(task="translation", model="facebook/nllb-200-distilled-600M", src_lang="eng_Latn", tgt_lang="fra_Latn", device=0)
pipeline("UN Chief says there is no military solution in Syria")

量化通过以较低精度表示权重来降低大模型的内存负担。有关更多可用的量化后端,请参阅 量化 概述。

以下示例使用 bitsandbytes 将权重量化为 8 位。

from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, BitsAndBytesConfig


bnb_config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-1.3B", quantization_config=bnb_config, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-200-distilled-1.3B")

article = "UN Chief says there is no military solution in Syria"
inputs = tokenizer(article, return_tensors="pt").to(model.device)
translated_tokens = model.generate(
    **inputs, forced_bos_token_id=tokenizer.convert_tokens_to_ids("fra_Latn"), max_length=30,
)
print(tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0])

使用 AttentionMaskVisualizer 可以更直观地了解模型能够和不能关注哪些 token。

from transformers.utils.attention_visualizer import AttentionMaskVisualizer


visualizer = AttentionMaskVisualizer("facebook/nllb-200-distilled-600M")
visualizer("UN Chief says there is no military solution in Syria")

备注

  • 分词器已于 2023 年 4 月更新,现在会在源序列前添加源语言标识,而非目标语言标识。这一更改优先提升了零样本性能,仅对监督性能造成轻微影响。

    from transformers import NllbTokenizer
    
    tokenizer = NllbTokenizer.from_pretrained("facebook/nllb-200-distilled-600M")
    tokenizer("How was your day?").input_ids
    [256047, 13374, 1398, 4260, 4039, 248130, 2]

    若要恢复为旧版行为,请使用以下代码示例。

    from transformers import NllbTokenizer
    
    tokenizer = NllbTokenizer.from_pretrained("facebook/nllb-200-distilled-600M", legacy_behaviour=True)
  • 对于非英语语言,请按照下方所示,使用 src_lang 关键字指定该语言的 BCP-47 代码。

  • 请参阅下方从罗马尼亚语翻译到德语的示例。

    from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
    
    tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-200-distilled-600M")
    model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-distilled-600M", device_map="auto")
    
    article = "UN Chief says there is no military solution in Syria"
    inputs = tokenizer(article, return_tensors="pt").to(model.device)
    
    translated_tokens = model.generate(
        **inputs, forced_bos_token_id=tokenizer.convert_tokens_to_ids("fra_Latn"), max_length=30
    )
    tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]
    Le chef de l'ONU dit qu'il n'y a pas de solution militaire en Syrie

NllbTokenizer

class transformers.NllbTokenizer

< >

( vocab: str | dict[str, int] | None = Nonemerges: str | list[str] | None = Nonebos_token = '<s>'eos_token = '</s>'sep_token = '</s>'cls_token = '<s>'unk_token = '<unk>'pad_token = '<pad>'mask_token = '<mask>'src_lang = Nonetgt_lang = None_spm_precompiled_charsmap: str | None = Noneadditional_special_tokens = Noneextra_special_tokens = Nonelegacy_behaviour = False**kwargs )

参数

  • vocab_file (str, 可选) — 词汇表文件的路径。
  • bos_token (str,可选,默认为 "<s>") — 预训练期间使用的序列起始标记。
  • eos_token (str,可选,默认为 "</s>") — 序列结束标记。
  • sep_token (str,可选,默认为 "</s>") — 分隔符 token。
  • cls_token (str,可选,默认为 "<s>") — 分类器标记。
  • unk_token (str,可选,默认为 "<unk>") — 未知标记。
  • pad_token (str,可选,默认为 "<pad>") — 用于填充的标记。
  • mask_token (str,可选,默认为 "<mask>") — 用于掩码值的标记。
  • src_lang (str, 可选) — 用作翻译源语言的语言。
  • tgt_lang (str, 可选) — 用于翻译的目标语言。
  • legacy_behaviour (bool,可选,默认为 False) — 是否使用旧行为(后缀模式)还是新行为(前缀模式)。

构建一个 NLLB 分词器(基于 HuggingFace 的 tokenizers 库)。基于 Unigram。

该分词器继承自 TokenizersBackend,其中包含了大部分主要方法。用户应参考该父类以获取有关这些方法的更多信息。

源语言文档的分词方法为 <tokens> <eos> <language code>,而

<tokens> <eos>` for target language documents.

示例:

>>> from transformers import NllbTokenizer

>>> tokenizer = NllbTokenizer.from_pretrained(
...     "facebook/nllb-200-distilled-600M", src_lang="eng_Latn", tgt_lang="fra_Latn"
... )
>>> example_english_phrase = " UN Chief Says There Is No Military Solution in Syria"
>>> expected_translation_french = "Le chef de l'ONU affirme qu'il n'y a pas de solution militaire en Syrie."
>>> inputs = tokenizer(example_english_phrase, text_target=expected_translation_french, return_tensors="pt")

set_src_lang_special_tokens

< >

( src_lang )

将特殊标记重置为源语言设置。

  • 在旧版模式下:无前缀,后缀为 [eos, src_lang_code]。
  • 在默认模式下:前缀=[src_lang_code],后缀=[eos]

set_tgt_lang_special_tokens

< >

( lang: str )

将特殊标记重置为目标语言设置。

  • 在旧版模式下:没有前缀,且后缀为 [eos, tgt_lang_code]。
  • 在默认模式下:前缀=[tgt_lang_code],后缀=[eos]
Update on GitHub