Transformers documentation

NLLB

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Эта модель была опубликована в HF papers 11 июля 2022 года и добавлена в Hugging Face Transformers 18 июля 2022 года.

NLLB

FlashAttention SDPA

Обзор

NLLB: No Language Left Behind — это модель многоязычного перевода. Она обучена на данных с использованием методов добычи данных, адаптированных для языков с малым объёмом данных, и поддерживает более 200 языков. NLLB использует архитектуру условных вычислений на основе разреженно-шлюзованной смеси экспертов (Sparsely Gated Mixture of Experts).

Все исходные контрольные точки NLLB можно найти в организации AI at Meta.

Эта модель была добавлена пользователем Lysandre. Нажмите на модели NLLB в боковой панели справа, чтобы увидеть больше примеров применения NLLB к различным задачам перевода.

Приведённый ниже пример показывает, как переводить текст с помощью Pipeline или класса AutoModel.

Пайплайн
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, чтобы лучше понять, к каким токенам модель может и не может обращать внимание.

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 года: теперь исходная последовательность дополняется префиксом с указанием языка источника, а не языка цели. Это позволяет повысить качество работы в режиме zero-shot незначительной ценой для контролируемого обучения.

    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)
  • Для языков, отличных от английского, укажите код языка BCP-47 с помощью ключевого слова src_lang, как показано ниже.

  • См. пример ниже с переводом с румынского на немецкий.

    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

класс 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>") — Токен-разделитель.
  • 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 (на базе библиотеки tokenizers от HuggingFace). Основан на Unigram.

Этот токенизатор наследуется от TokenizersBackend, который содержит большинство основных методов. За дополнительной информацией об этих методах следует обращаться к этому суперклассу.

Метод токенизации для документов на исходном языке — <tokens> <eos> <language code>, а для целевого языка — `<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 )

Сбросьте специальные токены до настроек исходного языка.

  • В режиме legacy: префикс отсутствует, а суффикс=[eos, src_lang_code].
  • В режиме по умолчанию: префикс=[src_lang_code], суффикс = [eos]

set_tgt_lang_special_tokens

< >

( lang: str )

Сбросьте специальные токены до настроек целевого языка.

  • В режиме legacy: префикс отсутствует, а суффикс = [eos, tgt_lang_code].
  • В режиме по умолчанию: префикс=[tgt_lang_code], суффикс = [eos]
Update on GitHub