语言: 阿拉伯语
数据集:
- 维基百科
- Osian
- 15亿阿拉伯语语料库
- 未打乱的OSCAR阿拉伯语语料
- Assafir(私有)
小部件示例:
- 文本: "相传有个狡猾的农夫将自家地里的水井以高价卖给了邻居"
- 文本: "耶路撒冷是一座历史名城,由迦南人建于"
- 文本: "在很久很久以前"
阿拉伯语GPT2模型
更多信息请参阅我们的论文AraGPT2
本仓库代码用于训练所有GPT2变体,支持通过TPUEstimator API在GPU和TPU上进行GPT2的训练与微调。
基础版和中型GPT2使用gpt2
目录下的代码,可训练minimaxir/gpt-2-simple库中的模型。这些模型采用lamb
优化器,架构与gpt2
一致,完全兼容transformers
库。
大型和巨型GPT2使用imcaspar/gpt2-ml库训练,遵循grover
架构。可用grover/modeling_gpt2.py
中的PyTorch类直接替换transformers
库(支持transformers
的v4.x
版本)。因adam
和lamb
优化器内存消耗过大,导致TPU核心无法处理单批次数据,故采用adafactor
优化器。
AraGPT2训练数据与AraBERTv2相同,均为大规模阿拉伯语数据集。
使用方法
使用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-base'
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=<原始文本文件,文档/文章间用空行分隔>
--output_file=<输出TFRecord>
--tokenizer_dir=<包含GPT2分词器文件的目录>
微调:
python3 run_pretraining.py \\r\n --input_file="gs://<GS存储桶>/pretraining_data/*" \\r\n --output_dir="gs://<GS存储桶>/pretraining_model/" \\r\n --config_file="config/small_hparams.json" \\r\n --batch_size=128 \\r\n --eval_batch_size=8 \\r\n --num_train_steps= \\r\n --num_warmup_steps= \\r\n --learning_rate= \\r\n --save_checkpoints_steps= \\r\n --max_seq_length=1024 \\r\n --max_eval_steps= \\r\n --optimizer="lamb" \\r\n --iterations_per_loop=5000 \\r\n --keep_checkpoint_max=10 \\r\n --use_tpu=True \\r\n --tpu_name=<TPU名称> \\r\n --do_train=True \\r\n --do_eval=False
模型规格
模型 |
优化器 |
上下文长度 |
嵌入维度 |
头数 |
层数 |
模型大小/参数量 |
AraGPT2基础版 |
lamb |
1024 |
768 |
12 |
12 |
527MB/1.35亿 |
AraGPT2中型 |
lamb |
1024 |
1024 |
16 |
24 |
1.38GB/3.7亿 |
AraGPT2大型 |
adafactor |
1024 |
1280 |
20 |
36 |
2.98GB/7.92亿 |
AraGPT2巨型 |
adafactor |
1024 |
1536 |
25 |
48 |
5.5GB/14.6亿 |
所有模型均可在HuggingFace模型页获取,提供PyTorch、TF2和TF1格式的检查点。
计算资源
模型 |
硬件 |
样本数(序列长1024) |
批次大小 |
训练步数 |
耗时(天) |
AraGPT2基础版 |
TPUv3-128 |
970万 |
1792 |
12.5万 |
1.5 |
AraGPT2中型 |
TPUv3-8 |
970万 |
1152 |
8.5万 |
1.5 |
AraGPT2大型 |
TPUv3-128 |
970万 |
256 |
22万 |
3 |
AraGPT2巨型 |
TPUv3-128 |
970万 |
256 |
78万 |
9 |
数据集
新AraGPT2模型的预训练数据亦用于AraBERTv2和AraELECTRA。
数据集包含77GB或200,095,961行或8,655,948,860词或82,232,988,358字符(未应用Farasa分词前)。
新数据集在AraBERTv1所用数据基础上添加了严格过滤后的未打乱OSCAR语料(不含先前爬取的网站):
免责声明
AraGPT2生成的文本由基于海量文本训练的神经网络自动生成,不代表作者或其所属机构的官方态度与偏好。该生成文本仅限科研用途,若侵犯您的权益或违背公序良俗,请勿传播。
引用
若使用本模型,请引用:
@inproceedings{antoun-etal-2021-aragpt2,
title = "{A}ra{GPT}2: 阿拉伯语生成的预训练Transformer",
author = "Antoun, Wissam and Baly, Fady and Hajj, Hazem",
booktitle = "第六届阿拉伯自然语言处理研讨会论文集",
month = 4月,
year = "2021",
address = "乌克兰基辅(线上)",
publisher = "计算语言学协会",
url = "https://www.aclweb.org/anthology/2021.wanlp-1.21",
pages = "196--207",
}
致谢
感谢TensorFlow研究云(TFRC)提供免费Cloud TPU访问,以及AUB MIND实验室成员的持续支持。同时感谢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