HuggingFace Transformers 4.5 : 利用方法 : 多言語モデル (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 05/14/2021 (4.5.1)
* 本ページは、HuggingFace Transformers の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
- Using Transformers : Multi-lingual models
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
スケジュールは弊社 公式 Web サイト でご確認頂けます。
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
- ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。
人工知能研究開発支援 | 人工知能研修サービス | テレワーク & オンライン授業を支援 |
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。) |
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション |
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/ ; Facebook |
HuggingFace Transformers : 利用方法 : 多言語モデル
このライブラリで利用可能な殆どのモデルは単一言語モデルです (英語、中国語そしてドイツ語)。幾つかの多言語モデルが利用可能で単一言語モデルとは異なるメカニズムを持ちます。このページはこれらのモデルの使用方法を詳述します。
多言語を現在サポートする 2 つのモデルは BERT と XLM です。
XLM
XML は合計 10 の異なるチェックポイントを持ち、その一つだけが単言語です。残りの 9 モデルのチェックポイントは 2 つのカテゴリーに分けられます : 言語埋め込みを利用するチェックポイントと、そうでないものです。
XLM & 言語埋め込み
このセクションは以下のチェックポイントが主題です :
- xlm-mlm-ende-1024 (Masked 言語モデリング, 英独)
- xlm-mlm-enfr-1024 (Masked 言語モデリング, 英仏)
- xlm-mlm-enro-1024 (Masked 言語モデリング、英語-ルーマニア語)
- xlm-mlm-xnli15-1024 (Masked 言語モデリング、XNLI 言語)
- xlm-mlm-tlm-xnli15-1024 (Masked 言語モデリング + 翻訳、XNLI 言語)
- xlm-clm-enfr-1024 (因果言語モデリング、英仏)
- xlm-clm-ende-1024 (因果言語モデリング、英独)
これらのチェックポイントは言語埋め込みを必要とします、これは推論時に使用される言語を指定します。これらの言語埋め込みはモデルに渡される入力 id と同じ shape の tensor として表されます。これらの tensor の値は使用される言語に依存してトークナイザーからの lang2id と id2lang 属性を使用して識別可能です。
ここに xlm-clm-enfr-1024 チェックポイントを使用する例があります (因果言語モデリング、英仏) :
import torch
from transformers import XLMTokenizer, XLMWithLMHeadModel
tokenizer = XLMTokenizer.from_pretrained("xlm-clm-enfr-1024")
model = XLMWithLMHeadModel.from_pretrained("xlm-clm-enfr-1024")
このモデル/トークナイザーが処理する様々な言語、そしてこれらの言語の id は lang2id 属性を使用して可視です :
print(tokenizer.lang2id)
{'en': 0, 'fr': 1}
これらの id はモデル・パスの際に言語パラメータを渡すときに使用されるべきです。入力を定義しましょう :
input_ids = torch.tensor([tokenizer.encode("Wikipedia was used to")]) # batch size of 1
今は前に定義された言語 id を使用して言語埋め込みを定義するべきです。input_ids と同じサイズの、適切な言語 id で満たされた tensor を作成することを望みます。英語については、id は 0 です :
language_id = tokenizer.lang2id['en'] # 0
langs = torch.tensor([language_id] * input_ids.shape[1]) # torch.tensor([0, 0, 0, ..., 0])
# We reshape it to be of size (batch_size, sequence_length)
langs = langs.view(1, -1) # is now of shape [1, sequence_length] (we have a batch size of 1)
そしてそれら総てを入力としてモデルに供給できます :
outputs = model(input_ids, langs=langs)
run_generation.py は言語埋め込みを使用して、XLM からの CLM チェックポイントを使用してテキストを生成できます。
言語埋め込みなしの XLM
このセクションは以下のチェックポイントが主題です :
- xlm-mlm-17-1280 (Masked 言語モデリング、17 言語)
- xlm-mlm-100-1280 (Masked 言語モデリング、100 言語)
これらのチェックポイントは推論時に言語埋め込みを必要としません。これらのモデルは、前述の XLM チェックポイントとは異なり、一般的なセンテンス表現を持つために使用されます。
BERT
BERT は 2 つのチェックポイントを持ちます、これらは多言語タスクのために利用できます :
- bert-base-multilingual-uncased (Masked 言語モデリング + 次文予測, 102 言語)
- bert-base-multilingual-cased (Masked 言語モデリング + 次文予測, 104 言語)
これらのチェックポイントは推論時に言語埋め込みを必要としません。それらはコンテキストで使用される言語を識別してそれに従って推論すべきです。
XLM-RoBERTa
XLM-RoBERTa は 2.5TB の新たに作成されたクリーンな 100 言語の CommonCrawl データ上で訓練されました。それは分類、シークエンス・ラベリングと質問応答のような下流タスク上で mBERT や XLM のような以前にリリースされた多言語モデルを越える強力な利益を提供します。
2 つの XLM-RoBERTa チェックポイントが多言語タスクのために利用できます :
- xlm-roberta-base (Masked 言語モデリング、100 言語)
- xlm-roberta-large (Masked 言語モデリング、100 言語)
以上