🚀 阿拉伯语GPT2
阿拉伯语GPT2是基于GPT2架构针对阿拉伯语进行训练的模型。它支持在GPU和TPU上进行训练和微调,可用于阿拉伯语的文本生成任务。本项目代码可用于训练所有GPT2变体,且训练数据与AraBERTv2相同。
🚀 快速开始
你可以在我们的论文 AraGPT2 中找到更多信息。
✨ 主要特性
- 支持在GPU和TPUs上进行训练和微调。
- 提供不同规模的模型,包括base、medium、large和mega。
- 与
transformers
库完全兼容。
📦 安装指南
本项目未提供明确的安装步骤,但可根据代码依赖推测,你可能需要安装以下库:
transformers
arabert
pytorch
tensorflow
💻 使用示例
基础用法
使用transformers
库测试模型:
from transformers import AutoModelForCausalLM, pipeline
from arabert.preprocess import ArabertPreprocessor
MODEL_NAME='aubmindlab/aragpt2-large'
arabert_prep = ArabertPreprocessor(model_name=MODEL_NAME)
text=""
text_clean = arabert_prep.preprocess(text)
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, trust_remote_code=True)
tokenizer = GPT2TokenizerFast.from_pretrained(MODEL_NAME)
generation_pipeline = pipeline(
"text-generation", model=MODEL_NAME, trust_remote_code=True
)
generation_pipeline(text,
pad_token_id=pipeline.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']
高级用法
使用我们的代码结合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
📚 详细文档
模型大小
模型 |
优化器 |
上下文大小 |
嵌入大小 |
头数 |
层数 |
模型大小/参数数量 |
AraGPT2-base |
lamb |
1024 |
768 |
12 |
12 |
527MB/135M |
AraGPT2-medium |
lamb |
1024 |
1024 |
16 |
24 |
1.38G/370M |
AraGPT2-large |
adafactor |
1024 |
1280 |
20 |
36 |
2.98GB/792M |
AraGPT2-mega |
adafactor |
1024 |
1536 |
25 |
48 |
5.5GB/1.46B |
所有模型都可以在HuggingFace
模型页面的 aubmindlab 下找到。检查点提供PyTorch、TF2和TF1格式。
计算资源
模型 |
硬件 |
示例数量 (序列长度 = 1024) |
批量大小 |
步数 |
时间 (天) |
AraGPT2-base |
TPUv3-128 |
9.7M |
1792 |
125K |
1.5 |
AraGPT2-medium |
TPUv3-8 |
9.7M |
1152 |
85K |
1.5 |
AraGPT2-large |
TPUv3-128 |
9.7M |
256 |
220k |
3 |
AraGPT2-mega |
TPUv3-128 |
9.7M |
256 |
780K |
9 |
数据集
预训练数据也用于GPT2和ELECTRA。数据集由77GB、200,095,961行、8,655,948,860个单词或82,232,988,358个字符(应用Farasa分割之前)组成。
新数据集在之前用于AraBERTv1的数据集基础上,添加了未打乱的OSCAR语料库,并经过了彻底过滤,同时去掉了之前爬取的网站:
🔧 技术细节
- GPT2-base和medium使用
gpt2
文件夹中的代码,并可以从 minimaxir/gpt-2-simple 仓库训练模型。这些模型使用lamb
优化器,遵循与gpt2
相同的架构,并且与transformers
库完全兼容。
- GPT2-large和GPT2-mega使用 imcaspar/gpt2-ml 库进行训练,遵循
grover
架构。你可以使用grover/modeling_gpt2.py
中的pytorch类直接替换transformers
库中的类(应该支持transformers
的v4.x
版本)。这两个模型都使用adafactor
优化器,因为adam
和lamb
优化器使用的内存过多,导致模型甚至无法在TPU核心上容纳1个批次。
📄 许可证
本项目使用自定义许可证,你可以在 这里 查看详细信息。
⚠️ 重要提示
模型期望输入使用arabert
库进行预处理,否则模型将无法生成正确的输出。
💡 使用建议
@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 TPUs,感谢 AUB MIND Lab 成员的持续支持。也感谢 Yakshof 和Assafir提供数据和存储访问。另外感谢Habib Rahal (https://www.behance.net/rahalhabib) 为AraBERT设计形象。
联系方式