Transformers 多語言模型 | 十一

該庫中可用的大多數模型都是單語言模型(英語,中文和德語)。有一些多語言模型可用,並且與單語言模型具有不同的機制。本頁詳細介紹了這些模型的用法。

當前支持多種語言的兩個模型是BERT和XLM。

XLM

XLM共有10個不同的checkpoints,其中只有一個是單語言的。剩下的9個模型checkpoints可以分為兩類:使用語言嵌入的checkpoints和不使用語言嵌入的checkpoints

XLM和語言嵌入

本節涉及以下checkpoints:

  • xlm-mlm-ende-1024(掩碼語言建模,英語-德語)
  • xlm-mlm-enfr-1024(掩碼語言建模,英語-法語)
  • xlm-mlm-enro-1024(掩碼語言建模,英語-羅馬尼亞語)
  • xlm-mlm-xnli15-1024(掩碼語言建模,XNLI語言)
  • xlm-mlm-tlm-xnli15-1024(掩碼語言建模+翻譯,XNLI語言)
  • xlm-clm-enfr-1024(因果語言建模,英語-法語)
  • xlm-clm-ende-1024(因果語言建模,英語-德語)

這些checkpoints需要語言嵌入,這些語言嵌入將指定推理時使用的語言。這些語言嵌入表示為張量,其形狀與傳遞給模型的輸入idS相同。這些張量中的值取決於所使用的語言,並且可以使用tokenizers中的lang2id和 id2lang屬性

這是一個使用xlm-clm-enfr-1024checkpoints的示例(因果語言建模,英語-法語):

<code>import torch
from transformers import XLMTokenizer, XLMWithLMHeadModel

tokenizer = XLMTokenizer.from_pretrained("xlm-clm-1024-enfr")/<code>

該模型/tokenizer處理不同語言以及這些語言的ID可以使用lang2id屬性標明:

<code>print(tokenizer.lang2id)  # {'en': 0, 'fr': 1}/<code>

在模型傳遞語言參數時,應使用這些ID。讓我們定義輸入:

<code>input_ids = torch.tensor([tokenizer.encode("Wikipedia was used to")]) # batch大小為1/<code>

現在,我們應該使用先前定義的語言ID來定義語言嵌入。我們想創建一個張量填充適當的語言ID,其大小與input_ids相同。對於英語,id為0:

<code>language_id = tokenizer.lang2id['en']  # 0
langs = torch.tensor([language_id] * input_ids.shape[1])  # torch.tensor([0, 0, 0, ..., 0])

langs = langs.view(1, -1) # 現在是 [1, sequence_length] /<code>

然後,你可以將其作為模型的輸入:

<code>outputs = model(input_ids, langs=langs)/<code>

示例run_generation.py可以使用語言嵌入從XLM使用CLM checkpoints生成文本。

沒有語言嵌入的XLM

本節涉及以下checkpoints:

-xlm-mlm-17-1280(掩碼語言建模,17種語言) -xlm-mlm-100-1280(掩碼語言建模,100種語言)

這些checkpoints在推理時不需要語言嵌入。這些模型用於具有通用句子表示形式,與前面提到的XLM checkpoints不同。

BERT

BERT具有兩個可用於多語言任務的checkpoints:

-bert-base-multilingual-uncased(掩碼語言建模+下一個句子預測,102種語言) -基於bert-base-multilingual-cased(掩碼語言建模+下一句預測,104種語言)

這些checkpoints在推理時不需要語言嵌入。他們會識別在上下文中使用的語言並據此進行推斷。

原文鏈接:https://huggingface.co/transformers/multilingual.html


分享到:


相關文章: