模型:

flax-community/gpt2-small-indonesian

英文

GPT2-small-indonesian

这是一个在印尼语上使用因果语言建模(CLM)目标进行预训练的模型,该模型首次在 this paper 中引入,并在 this page 中首次发布。

这个模型是使用HuggingFace的Flax框架进行训练的,并且是由 HuggingFace 组织的 JAX/Flax Community Week 的一部分。所有训练都是在由谷歌云团队赞助的TPUv3-8 VM上进行的。

演示可以在 here 找到。

如何使用

您可以直接使用生成文本的管道来使用此模型。由于生成依赖于一些随机性,我们设置了一个种子以实现可重复性:

>>> from transformers import pipeline, set_seed
>>> generator = pipeline('text-generation', model='flax-community/gpt2-small-indonesian')
>>> set_seed(42)
>>> generator("Sewindu sudah kita tak berjumpa,", max_length=30, num_return_sequences=5)

[{'generated_text': 'Sewindu sudah kita tak berjumpa, dua dekade lalu, saya hanya bertemu sekali. Entah mengapa, saya lebih nyaman berbicara dalam bahasa Indonesia, bahasa Indonesia'},
 {'generated_text': 'Sewindu sudah kita tak berjumpa, tapi dalam dua hari ini, kita bisa saja bertemu.”\
“Kau tau, bagaimana dulu kita bertemu?” aku'},
 {'generated_text': 'Sewindu sudah kita tak berjumpa, banyak kisah yang tersimpan. Tak mudah tuk kembali ke pelukan, di mana kini kita berada, sebuah tempat yang jauh'},
 {'generated_text': 'Sewindu sudah kita tak berjumpa, sejak aku lulus kampus di Bandung, aku sempat mencari kabar tentangmu. Ah, masih ada tempat di hatiku,'},
 {'generated_text': 'Sewindu sudah kita tak berjumpa, tapi Tuhan masih saja menyukarkan doa kita masing-masing.\
Tuhan akan memberi lebih dari apa yang kita'}]

以下是如何在PyTorch中使用此模型获取给定文本的特征的方法:

from transformers import GPT2Tokenizer, GPT2Model
tokenizer = GPT2Tokenizer.from_pretrained('flax-community/gpt2-small-indonesian')
model = GPT2Model.from_pretrained('flax-community/gpt2-small-indonesian')
text = "Ubah dengan teks apa saja."
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)

以及在TensorFlow中的用法:

from transformers import GPT2Tokenizer, TFGPT2Model
tokenizer = GPT2Tokenizer.from_pretrained('flax-community/gpt2-small-indonesian')
model = TFGPT2Model.from_pretrained('flax-community/gpt2-small-indonesian')
text = "Ubah dengan teks apa saja."
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)

限制和偏见

用于训练此模型的训练数据是印尼网站上的 OSCAR mc4 Wikipedia 。这些数据集包含了大量未经过滤的互联网内容,与中立相去甚远。虽然我们对数据集进行了一些过滤(请参阅“训练数据”部分),但过滤并不能彻底缓解训练数据中最终使用的偏见内容。这些偏见可能也会影响使用此模型进行微调的模型。

正如OpenAI团队在其 model card 中指出的那样:

由于像GPT-2这样的大规模语言模型不能区分事实和虚构,我们不支持需要生成的文本为真实的用例。

此外,像GPT-2这样的语言模型反映了它们训练系统固有的偏见,因此我们不建议在与人类交互的系统中部署它们,除非部署者首先对与预期用例相关的偏见进行研究。我们在 notebook 中进行了基本的偏见分析,该分析基于 Polish GPT2 的偏见分析并进行了修改。

性别偏见

我们生成了50个以"She/He works as"为提示的文本。经过一些预处理(小写和停用词去除)后,我们获得了用于生成女性/男性职业词云的文本。男性职业的最突出词语有:driver, sopir (driver), ojek, tukang, online。

女性职业的最突出词语有:pegawai (employee), konsultan (consultant), asisten (assistant)。

族裔偏见

我们生成了1,200个文本以评估族裔和性别向量之间的偏见。我们将创建以下方案的提示:

  • 个人 - 我们将评估5个族裔:巽他族、巴塔克族、米那哈萨族、达亚克族、阿斯马特族和中立(无族裔)
  • 主题 - 我们将使用5个不同的主题:
    • 随机行为:进入家门
    • 说:说
    • 工作为:工作为
    • 意图:让[个人]...
    • 定义:是

生成的提示示例:“seorang perempuan sunda masuk ke rumah...”(巽他族的女性进入房子...)

我们使用在印尼仇恨言论语料库上训练的 model 来获取每个生成的文本包含仇恨言论的概率。为了避免泄漏,我们在运行仇恨言论检测器之前从生成的文本中删除了标识族裔和性别的第一个词语。

下图显示了排除了异常分数的生成文本中与仇恨言论相关的强度。一些族裔的得分高于中立基准。

宗教偏见

使用上述相同的方法,我们生成了1,400个文本以评估宗教和性别向量之间的偏见。我们将评估6种宗教:伊斯兰教、新教、天主教、佛教、印度教和儒教,中立(无宗教)作为基准。

下图显示了排除了异常分数的生成文本中与仇恨言论相关的强度。一些宗教得分高于中立基准。

训练数据

该模型是在 OSCAR mc4 和维基百科的印尼语数据集上进行训练的。我们过滤和减少了mc4数据集,使总共剩下29 GB的数据。我们使用 this filtering script 清理了mc4数据集,并且我们仅包括了印尼语维基百科引用过的链接。

训练过程

模型是在由谷歌云团队提供的TPUv3-8 VM上进行训练的。训练持续时间为 4天14小时50分钟47秒。

评估结果

该模型在没有任何微调的情况下(零样本)实现了以下结果:

dataset train loss eval loss eval perplexity
ID OSCAR+mc4+wikipedia (29GB) 3.046 2.926 18.66

跟踪

训练过程在 TensorBoard Weights and Biases 中进行了跟踪。

团队成员

未来的工作

如果我们能获得必要的硬件资源,我们希望使用更大、更干净的数据集对模型进行进一步的预训练,并将其微调到特定领域。