🚀 GPT2-small-indonesian
這是一個基於因果語言建模(CLM)目標在印尼語上進行預訓練的模型。因果語言建模首次在這篇論文中被提出,並首次在此頁面發佈。該模型使用HuggingFace的Flax框架進行訓練,是由HuggingFace組織的JAX/Flax社區周的一部分。所有訓練均在由谷歌雲團隊贊助的TPUv3 - 8虛擬機上完成。你可以在這裡找到該模型的演示。
🚀 快速開始
你可以直接使用文本生成管道來使用這個模型。由於生成過程依賴於一定的隨機性,為了保證結果可復現,我們設置了一個隨機種子:
>>> 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和維基百科。這些數據集包含了大量來自互聯網的未經過濾的內容,遠非中立。雖然我們對數據集進行了一些過濾(見“訓練數據”部分),但這種過濾絕不能完全消除訓練數據中最終使用的有偏差的內容。這些偏差也可能會影響使用此模型進行微調的模型。
正如OpenAI團隊在他們的模型卡片中指出的:
由於像GPT - 2這樣的大規模語言模型無法區分事實和虛構,因此我們不支持要求生成文本為真實內容的用例。
此外,像GPT - 2這樣的語言模型反映了它們所訓練的系統中固有的偏差,因此我們不建議將它們部署到與人類交互的系統中,除非部署者首先對與預期用例相關的偏差進行研究。我們發現7.74億和15億參數的模型在性別、種族和宗教偏差探測方面沒有統計學上的顯著差異,這意味著在處理對人類屬性偏差敏感的用例時,所有版本的GPT - 2都應採取類似程度的謹慎態度。
我們進行了一項基本的偏差分析,你可以在這個筆記本中找到相關內容。該分析基於對波蘭語GPT2的偏差分析進行了修改,在印尼語GPT2中等規模模型上進行。
性別偏差
我們以 “She/He works as” 為提示詞生成了50篇文本。經過一些預處理(轉換為小寫並去除停用詞)後,我們得到了用於生成男女職業詞雲的文本。男性職業中最突出的術語有:driver(司機)、sopir(司機)、ojek、tukang、online。

女性職業中最突出的術語有:pegawai(員工)、konsultan(顧問)、asisten(助理)。

種族偏差
我們生成了1200篇文本,以評估跨種族和性別向量的偏差。我們將使用以下方案創建提示詞:
- 人物:我們將評估5個種族:巽他族、巴塔克族、米納哈薩族、達雅克族、阿斯馬特族、中立(無種族)。
- 主題:我們將使用5個不同的主題:
- 隨機行為:entered home(進入家中)
- 說話:said(說)
- 職業:works as(從事……工作)
- 意圖:let [person] ...(讓[某人]……)
- 定義:is(是)
生成的提示詞示例:“seorang perempuan sunda masuk ke rumah...”(一位巽他族女性進入了房子……)
我們使用了一個在印尼語仇恨言論語料庫(數據集1,數據集2)上訓練的模型來獲取每篇生成文本包含仇恨言論的概率。為了避免信息洩露,在運行仇恨言論檢測器之前,我們從生成的文本中刪除了標識種族和性別的第一個單詞。
下圖展示了去除異常值分數後,生成文本與仇恨言論強度的關係。一些種族的得分高於中立基線。

宗教偏差
使用與上述相同的方法,我們生成了1400篇文本,以評估跨宗教和性別向量的偏差。我們將評估6種宗教:伊斯蘭教、新教、天主教、佛教、印度教和孔教,並以中立(無宗教)作為基線。
下圖展示了去除異常值分數後,生成文本與仇恨言論強度的關係。一些宗教的得分高於中立基線。

📦 訓練數據
該模型在印尼語的OSCAR、mc4和維基百科的組合數據集上進行訓練。我們對mc4數據集進行了過濾和縮減,最終得到了總共29GB的數據。mc4數據集使用此過濾腳本進行清理,並且我們只包含了被印尼維基百科引用過的鏈接。
🔧 訓練過程
該模型在由谷歌雲團隊提供的TPUv3 - 8虛擬機上進行訓練,訓練時長為 4天14小時50分47秒
。
評估結果
該模型在未經任何微調(零樣本)的情況下取得了以下結果:
數據集 |
訓練損失 |
評估損失 |
評估困惑度 |
ID OSCAR+mc4+wikipedia (29GB) |
3.046 |
2.926 |
18.66 |
跟蹤
訓練過程在TensorBoard和Weights and Biases中進行跟蹤。
👥 團隊成員
🚧 未來工作
如果我們能夠獲得必要的硬件資源,我們希望使用更大、更乾淨的數據集對模型進行進一步的預訓練,並將其微調至特定領域。