モデル概要
モデル特徴
モデル能力
使用事例
🚀 GPorTuguese-2: ポルトガル語テキスト生成用の言語モデル (その他のNLPタスクも...)
GPorTuguese-2(ポルトガル語版GPT-2 small)は、GPT-2 smallモデルをベースにした最先端のポルトガル語用言語モデルです。このモデルは、わずか1日余りで、NVIDIA V100 32GBのGPU 1台を使用し、約1GB以上の学習データを用いて、ポルトガル語版Wikipediaで転移学習とファインチューニング技術を使って学習されました。これは、低リソースであらゆる言語の最先端の言語モデルを取得できることの概念実証です。
🚀 クイックスタート
このモデルはHugging Faceで利用可能です。詳細情報やリクエストについては、「Faster than training from scratch — Fine-tuning the English GPT-2 in any language with Hugging Face and fastai v2 (practical case with Portuguese)」を参照してください。
✨ 主な機能
- ポルトガル語のテキスト生成やその他のNLPタスクに対応。
- 低リソースでの学習が可能なモデル。
📦 インストール
このモデルを使用するには、Hugging Faceのライブラリ(TransformersとTokenizers)をインストールする必要があります。以下のコードを使用して、モデルとトークナイザーをロードできます。
from transformers import AutoTokenizer, AutoModelWithLMHead
import torch
tokenizer = AutoTokenizer.from_pretrained("pierreguillou/gpt2-small-portuguese")
model = AutoModelWithLMHead.from_pretrained("pierreguillou/gpt2-small-portuguese")
# Get sequence length max of 1024
tokenizer.model_max_length=1024
model.eval() # disable dropout (or leave in train mode to finetune)
💻 使用例
基本的な使用法
単語の生成
# input sequence
text = "Quem era Jim Henson? Jim Henson era um"
inputs = tokenizer(text, return_tensors="pt")
# model output
outputs = model(**inputs, labels=inputs["input_ids"])
loss, logits = outputs[:2]
predicted_index = torch.argmax(logits[0, -1, :]).item()
predicted_text = tokenizer.decode([predicted_index])
# results
print('input text:', text)
print('predicted text:', predicted_text)
# input text: Quem era Jim Henson? Jim Henson era um
# predicted text: homem
完全なシーケンスの生成
# input sequence
text = "Quem era Jim Henson? Jim Henson era um"
inputs = tokenizer(text, return_tensors="pt")
# model output using Top-k sampling text generation method
sample_outputs = model.generate(inputs.input_ids,
pad_token_id=50256,
do_sample=True,
max_length=50, # put the token number you want
top_k=40,
num_return_sequences=1)
# generated sequence
for i, sample_output in enumerate(sample_outputs):
print(">> Generated text {}\n\n{}".format(i+1, tokenizer.decode(sample_output.tolist())))
# >> Generated text
# Quem era Jim Henson? Jim Henson era um executivo de televisão e diretor de um grande estúdio de cinema mudo chamado Selig,
# depois que o diretor de cinema mudo Georges Seuray dirigiu vários filmes para a Columbia e o estúdio.
高度な使用法
TensorFlowを使用した完全なシーケンスの生成
from transformers import AutoTokenizer, TFAutoModelWithLMHead
import tensorflow as tf
tokenizer = AutoTokenizer.from_pretrained("pierreguillou/gpt2-small-portuguese")
model = TFAutoModelWithLMHead.from_pretrained("pierreguillou/gpt2-small-portuguese")
# Get sequence length max of 1024
tokenizer.model_max_length=1024
model.eval() # disable dropout (or leave in train mode to finetune)
# input sequence
text = "Quem era Jim Henson? Jim Henson era um"
inputs = tokenizer.encode(text, return_tensors="tf")
# model output using Top-k sampling text generation method
outputs = model.generate(inputs, eos_token_id=50256, pad_token_id=50256,
do_sample=True,
max_length=40,
top_k=40)
print(tokenizer.decode(outputs[0]))
# >> Generated text
# Quem era Jim Henson? Jim Henson era um amigo familiar da família. Ele foi contratado pelo seu pai
# para trabalhar como aprendiz no escritório de um escritório de impressão, e então começou a ganhar dinheiro
📚 ドキュメント
モデル情報
プロパティ | 詳細 |
---|---|
モデルタイプ | gpt2-small-portuguese |
パラメータ数 | 124M |
モデルファイル (pt/tf) | 487M / 475M |
アーキテクチャ | GPT-2 small |
学習/検証データ (テキスト) | ポルトガル語版Wikipedia (1.28 GB / 0.32 GB) |
評価結果
1日余りで(NVIDIA V100 32GB GPUを1台のみ使用。Distributed Data Parallel (DDP) 学習モードを使用すれば、2台のGPUで時間を10時間に短縮できます)、損失3.17、精度37.99%、パープレキシティ23.76 を達成しました。
エポック数 | 損失 | 精度 (%) | パープレキシティ | エポックごとの時間 | 累積時間 |
---|---|---|---|---|---|
0 | 9.95 | 9.90 | 20950.94 | 00:00:00 | 00:00:00 |
1 | 3.64 | 32.52 | 38.12 | 5:48:31 | 5:48:31 |
2 | 3.30 | 36.29 | 27.16 | 5:38:18 | 11:26:49 |
3 | 3.21 | 37.46 | 24.71 | 6:20:51 | 17:47:40 |
4 | 3.19 | 37.74 | 24.21 | 6:06:29 | 23:54:09 |
5 | 3.17 | 37.99 | 23.76 | 6:16:22 | 30:10:31 |
GPT-2について
GPT-2は、因果言語モデリング (CLM) 目的で英語で事前学習されたモデルです。このモデルは、この論文 で紹介され、このページ で最初に公開されました(2019年2月14日)。
モデルの説明
GPT-2は、非常に大規模な英語データコーパスで自己教師付き学習方式で事前学習されたトランスフォーマーモデルです。つまり、人間によるラベリングが一切ない生テキストのみを使用し、それらのテキストから入力とラベルを自動生成するプロセスで事前学習されました。より具体的には、文の次の単語を推測するように学習されました。
入力は一定の長さの連続テキストのシーケンスで、ターゲットは同じシーケンスを1トークン(単語または単語の一部)右にシフトしたものです。モデルは内部でマスクメカニズムを使用して、トークン i
の予測には 1
から i
までの入力のみを使用し、未来のトークンを使用しないようにしています。
このようにして、モデルは英語の内部表現を学習し、それを下流のタスクに役立つ特徴を抽出するために使用できます。ただし、モデルは事前学習された目的、つまりプロンプトからのテキスト生成に最適です。
🔧 技術詳細
このモデルは、英語で事前学習されたGPT-2 small から、Hugging Faceのライブラリ(TransformersとTokenizers)を fastai v2 ディープラーニングフレームワークにラップしてファインチューニングされました。すべてのfastai v2のファインチューニング技術が使用されました。
📄 ライセンス
このモデルはMITライセンスの下で公開されています。
制限事項とバイアス
このモデルの学習データはポルトガル語版Wikipediaから取得されています。このデータには、ネット上の多くの未フィルタリングのコンテンツが含まれており、中立性に欠ける可能性があります。openAIチーム自身がモデルカードで指摘しているように:
GPT-2のような大規模言語モデルは事実と虚構を区別しないため、生成されたテキストが真実であることを必要とするユースケースはサポートしていません。さらに、GPT-2のような言語モデルは学習データに内在するバイアスを反映しているため、デプロイヤーが最初に意図したユースケースに関連するバイアスの調査を行わない限り、人間と対話するシステムにデプロイすることはお勧めしません。我々は、774Mと1.5Bの間で性別、人種、宗教のバイアスプローブに統計的に有意な差を見つけませんでした。これは、GPT-2のすべてのバージョンが、人間の属性に関するバイアスに敏感なユースケースに対して同程度の注意を払って取り扱われるべきことを意味します。
著者
ポルトガル語版GPT-2 smallは、Pierre GUILLOU によって学習および評価されました。これは、AI Lab(ブラジリア大学)のGPU(NVIDIA V100 32 Go)の計算能力と、NLP戦略の定義におけるそのディレクターであるFabricio Ataides Braz教授とNilton Correia da Silva教授の参加のおかげで可能になりました。
引用
このモデルを使用する場合は、以下のように引用してください。
@inproceedings{pierre2020gpt2smallportuguese,
title={GPorTuguese-2 (Portuguese GPT-2 small): a Language Model for Portuguese text generation (and more NLP tasks...)},
author={Pierre Guillou},
year={2020}
}



