🚀 阿拉伯語GPT2
阿拉伯語GPT2是一個用於阿拉伯語語言生成的預訓練Transformer模型。它基於不同規模的GPT2架構進行訓練,可用於多種自然語言處理任務。該模型在大規模阿拉伯語數據集上進行訓練,支持在GPU和TPU上進行訓練和微調。
🚀 快速開始
你可以在我們的論文 AraGPT2 中找到更多信息。本倉庫中的代碼用於訓練所有GPT2變體,支持通過TPUEstimator API在GPU和TPU上對GPT2進行訓練和微調。
✨ 主要特性
- 多架構支持:GPT2-base和medium使用
gpt2
文件夾中的代碼,基於minimaxir/gpt - 2 - simple倉庫訓練;GPT2-large和GPT2-mega使用imcaspar/gpt2-ml庫,遵循grover
架構。
- 多優化器適配:GPT2-base和medium使用
lamb
優化器;GPT2-large和GPT2-mega使用adafactor
優化器,以解決內存問題。
- 多格式兼容:模型檢查點支持PyTorch、TF2和TF1格式,並且與
transformers
庫兼容。
📦 安裝指南
使用transformers
庫測試模型
from transformers import GPT2TokenizerFast, pipeline
from transformers import GPT2LMHeadModel
from arabert.aragpt2.grover.modeling_gpt2 import GPT2LMHeadModel
from arabert.preprocess import ArabertPreprocessor
MODEL_NAME='aubmindlab/aragpt2-medium'
arabert_prep = ArabertPreprocessor(model_name=MODEL_NAME)
text=""
text_clean = arabert_prep.preprocess(text)
model = GPT2LMHeadModel.from_pretrained(MODEL_NAME)
tokenizer = GPT2TokenizerFast.from_pretrained(MODEL_NAME)
generation_pipeline = pipeline("text-generation",model=model,tokenizer=tokenizer)
generation_pipeline(text,
pad_token_id=tokenizer.eos_token_id,
num_beams=10,
max_length=200,
top_p=0.9,
repetition_penalty = 3.0,
no_repeat_ngram_size = 3)[0]['generated_text']
使用transformers
庫進行微調
請遵循此指南。
使用我們的代碼和TF 1.15.4進行微調
創建訓練TFRecords
python create_pretraining_data.py
--input_file=<RAW TEXT FILE with documents/article separated by an empty line>
--output_file=<OUTPUT TFRecord>
--tokenizer_dir=<Directory with the GPT2 Tokenizer files>
微調
python3 run_pretraining.py \
--input_file="gs://<GS_BUCKET>/pretraining_data/*" \
--output_dir="gs://<GS_BUCKET>/pretraining_model/" \
--config_file="config/small_hparams.json" \
--batch_size=128 \
--eval_batch_size=8 \
--num_train_steps= \
--num_warmup_steps= \
--learning_rate= \
--save_checkpoints_steps= \
--max_seq_length=1024 \
--max_eval_steps= \
--optimizer="lamb" \
--iterations_per_loop=5000 \
--keep_checkpoint_max=10 \
--use_tpu=True \
--tpu_name=<TPU NAME> \
--do_train=True \
--do_eval=False
💻 使用示例
基礎用法
from transformers import GPT2TokenizerFast, pipeline
from transformers import GPT2LMHeadModel
from arabert.aragpt2.grover.modeling_gpt2 import GPT2LMHeadModel
from arabert.preprocess import ArabertPreprocessor
MODEL_NAME='aubmindlab/aragpt2-medium'
arabert_prep = ArabertPreprocessor(model_name=MODEL_NAME)
text=""
text_clean = arabert_prep.preprocess(text)
model = GPT2LMHeadModel.from_pretrained(MODEL_NAME)
tokenizer = GPT2TokenizerFast.from_pretrained(MODEL_NAME)
generation_pipeline = pipeline("text-generation",model=model,tokenizer=tokenizer)
generation_pipeline(text,
pad_token_id=tokenizer.eos_token_id,
num_beams=10,
max_length=200,
top_p=0.9,
repetition_penalty = 3.0,
no_repeat_ngram_size = 3)[0]['generated_text']
高級用法
可參考使用transformers
庫進行微調的指南:此指南 ,或使用我們的代碼和TF 1.15.4進行微調的步驟。
📚 詳細文檔
模型規格
屬性 |
詳情 |
模型類型 |
AraGPT2-base、AraGPT2-medium、AraGPT2-large、AraGPT2-mega |
優化器 |
base和medium使用lamb ;large和mega使用adafactor |
上下文大小 |
1024 |
嵌入大小 |
base: 768;medium: 1024;large: 1280;mega: 1536 |
頭數 |
base: 12;medium: 16;large: 20;mega: 25 |
層數 |
base: 12;medium: 24;large: 36;mega: 48 |
模型大小/參數數量 |
base: 527MB / 135M;medium: 1.38G/370M;large: 2.98GB/792M;mega: 5.5GB/1.46B |
計算資源
模型 |
硬件 |
示例數量 (序列長度 = 1024) |
批量大小 |
步數 |
時間 (天) |
AraGPT2-base |
TPUv3 - 128 |
9.7M |
1792 |
125K |
1.5 |
AraGPT2-medium |
TPUv3 - 8 |
9.7M |
80 |
1M |
15 |
AraGPT2-large |
TPUv3 - 128 |
9.7M |
256 |
220k |
3 |
AraGPT2-mega |
TPUv3 - 128 |
9.7M |
256 |
780K |
9 |
數據集
預訓練數據也用於AraBERTv2和AraELECTRA。數據集包含77GB、200,095,961行、8,655,948,860個單詞或82,232,988,358個字符(應用Farasa分割之前)。新數據集在AraBERTv1使用的數據集基礎上,添加了未打亂的OSCAR語料庫,並進行了徹底過濾,同時去除了之前爬取的網站:
🔧 技術細節
該模型基於Transformer架構,使用不同的優化器和架構進行訓練。GPT2-base和medium遵循gpt2
架構,使用lamb
優化器;GPT2-large和GPT2-mega遵循grover
架構,使用adafactor
優化器以解決內存問題。模型通過TPUEstimator API支持在GPU和TPU上進行訓練和微調。
📄 許可證
請遵循代碼倉庫中的相關許可證信息。
免責聲明
AraGPT2生成的文本是由在大量文本上訓練的神經網絡模型自動生成的,不代表作者或其機構的官方態度和偏好。AraGPT2生成的文本僅應用於研究和科學目的。如果它侵犯了您的權益或違反了社會道德,請不要傳播它。
引用說明
如果您使用了此模型,請按以下方式引用我們:
@inproceedings{antoun-etal-2021-aragpt2,
title = "{A}ra{GPT}2: Pre-Trained Transformer for {A}rabic Language Generation",
author = "Antoun, Wissam and
Baly, Fady and
Hajj, Hazem",
booktitle = "Proceedings of the Sixth Arabic Natural Language Processing Workshop",
month = apr,
year = "2021",
address = "Kyiv, Ukraine (Virtual)",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/2021.wanlp-1.21",
pages = "196--207",
}
致謝
感謝TensorFlow Research Cloud (TFRC) 免費提供Cloud TPU訪問權限,沒有這個項目我們無法完成這項工作;感謝AUB MIND Lab成員的持續支持;感謝Yakshof和Assafir提供數據和存儲訪問權限;感謝Habib Rahal (https://www.behance.net/rahalhabib) 為AraBERT設計形象。
聯繫方式
Wissam Antoun:領英 | 推特 | Github | wfa07@mail.aub.edu | wissam.antoun@gmail.com
Fady Baly:領英 | 推特 | Github | fgb06@mail.aub.edu | baly.fady@gmail.com