Transformers 文档

NLLB

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

该模型于 2022-07-11 发布,并于 2022-07-18 添加到 Hugging Face Transformers。

NLLB

PyTorch FlashAttention SDPA

概述

NLLB:No Language Left Behind 是一个多语言翻译模型。它在针对低资源语言量身定制的数据挖掘技术的数据上进行训练,并支持 200 多种语言。NLLB 采用了一种条件计算架构,使用了稀疏门控专家混合模型。

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

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

以下示例演示了如何使用 PipelineAutoModel 类进行文本翻译。

流水线
自动模型
Transformers CLI
import torch
from transformers import pipeline

pipeline = pipeline(task="translation", model="facebook/nllb-200-distilled-600M", src_lang="eng_Latn", tgt_lang="fra_Latn", dtype=torch.float16, 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)
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")
    
    >>> article = "UN Chief says there is no military solution in Syria"
    >>> inputs = tokenizer(article, return_tensors="pt")
    
    >>> 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 = None merges: str | list[str] | None = None bos_token = '<s>' eos_token = '</s>' sep_token = '</s>' cls_token = '<s>' unk_token = '<unk>' pad_token = '<pad>' mask_token = '<mask>' src_lang = None tgt_lang = None additional_special_tokens = None extra_special_tokens = None legacy_behaviour = False **kwargs )

参数

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

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

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

源语言文档的分词方法是 <tokens> <eos> <language code>,目标语言文档的分词方法是 `<language code>

<tokens> <eos>`。

示例

>>> 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]

NllbTokenizerFast

class transformers.NllbTokenizer

< >

( vocab: str | dict[str, int] | None = None merges: str | list[str] | None = None bos_token = '<s>' eos_token = '</s>' sep_token = '</s>' cls_token = '<s>' unk_token = '<unk>' pad_token = '<pad>' mask_token = '<mask>' src_lang = None tgt_lang = None additional_special_tokens = None extra_special_tokens = None legacy_behaviour = False **kwargs )

参数

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

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

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

源语言文档的分词方法是 <tokens> <eos> <language code>,目标语言文档的分词方法是 `<language code>

<tokens> <eos>`。

示例

>>> 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]
在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.