Transformers 文档
NLLB
并获得增强的文档体验
开始使用
该模型于 2022-07-11 发布,并于 2022-07-18 添加到 Hugging Face Transformers。
NLLB
概述
NLLB:No Language Left Behind 是一个多语言翻译模型。它在针对低资源语言量身定制的数据挖掘技术的数据上进行训练,并支持 200 多种语言。NLLB 采用了一种条件计算架构,使用了稀疏门控专家混合模型。
您可以在 AI at Meta 组织下找到所有原始 NLLB 检查点。
此模型由 Lysandre 贡献。点击右侧边栏中的 NLLB 模型,可查看更多关于如何将 NLLB 应用于不同翻译任务的示例。
以下示例演示了如何使用 Pipeline 或 AutoModel 类进行文本翻译。
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
< source >( 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 toFalse) — 是否使用旧版行为(后缀模式)或新版行为(前缀模式)。
构造一个 NLLB 分词器(基于 HuggingFace 的 tokenizers 库)。基于 Unigram。
此分词器继承自 TokenizersBackend,其中包含大部分主要方法。用户应参考此父类了解有关这些方法的更多信息。
源语言文档的分词方法是 <tokens> <eos> <language code>,目标语言文档的分词方法是 `<language code>
示例
>>> 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")重置特殊标记以匹配源语言设置。
- 在旧版模式下:无前缀,后缀为 [eos, src_lang_code]。
- 在默认模式下:前缀为 [src_lang_code],后缀为 [eos]
重置特殊标记以匹配目标语言设置。
- 在旧版模式下:无前缀,后缀为 [eos, tgt_lang_code]。
- 在默认模式下:前缀为 [tgt_lang_code],后缀为 [eos]
NllbTokenizerFast
class transformers.NllbTokenizer
< source >( 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 toFalse) — 是否使用旧版行为(后缀模式)或新版行为(前缀模式)。
构造一个 NLLB 分词器(基于 HuggingFace 的 tokenizers 库)。基于 Unigram。
此分词器继承自 TokenizersBackend,其中包含大部分主要方法。用户应参考此父类了解有关这些方法的更多信息。
源语言文档的分词方法是 <tokens> <eos> <language code>,目标语言文档的分词方法是 `<language code>
示例
>>> 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")重置特殊标记以匹配源语言设置。
- 在旧版模式下:无前缀,后缀为 [eos, src_lang_code]。
- 在默认模式下:前缀为 [src_lang_code],后缀为 [eos]
重置特殊标记以匹配目标语言设置。
- 在旧版模式下:无前缀,后缀为 [eos, tgt_lang_code]。
- 在默认模式下:前缀为 [tgt_lang_code],后缀为 [eos]