模型概述
模型特點
模型能力
使用案例
🚀 papuGaPT2 - 波蘭語GPT2語言模型
papuGaPT2是一個基於GPT2架構的波蘭語語言模型,旨在解決波蘭語缺乏強大文本生成模型的問題,為波蘭自然語言處理研究提供支持。
🚀 快速開始
GPT2於2019年發佈,其文本生成能力令人矚目。但直至近期,波蘭語領域仍缺乏強大的文本生成模型,限制了波蘭自然語言處理從業者的研究。本模型的發佈有望推動相關研究。
✨ 主要特性
- 遵循標準GPT2架構和訓練方法,採用因果語言建模(CLM)目標,訓練模型預測單詞序列中的下一個單詞(標記)。
- 可直接用於文本生成,也能針對下游任務進行微調。
📦 安裝指南
使用以下代碼加載訓練數據集:
from datasets import load_dataset
dataset = load_dataset('oscar', 'unshuffled_deduplicated_pl')
💻 使用示例
基礎用法
from transformers import pipeline, set_seed
generator = pipeline('text-generation', model='flax-community/papuGaPT2')
set_seed(42)
generator('Największym polskim poetą był')
高級用法
from transformers import AutoTokenizer, AutoModelWithLMHead
model = AutoModelWithLMHead.from_pretrained('flax-community/papuGaPT2')
tokenizer = AutoTokenizer.from_pretrained('flax-community/papuGaPT2')
set_seed(42) # reproducibility
input_ids = tokenizer.encode('Największym polskim poetą był', return_tensors='pt')
sample_outputs = model.generate(
input_ids,
do_sample=True,
max_length=50,
top_k=50,
top_p=0.95,
num_return_sequences=3
)
print("Output:\n" + 100 * '-')
for i, sample_output in enumerate(sample_outputs):
print("{}: {}".format(i, tokenizer.decode(sample_output, skip_special_tokens=True)))
避免生成不良詞彙
input_ids = tokenizer.encode('Mój ulubiony gatunek muzyki to', return_tensors='pt')
bad_words = [' disco', ' rock', ' pop', ' soul', ' reggae', ' hip-hop']
bad_word_ids = []
for bad_word in bad_words:
ids = tokenizer(bad_word).input_ids
bad_word_ids.append(ids)
sample_outputs = model.generate(
input_ids,
do_sample=True,
max_length=20,
top_k=50,
top_p=0.95,
num_return_sequences=5,
bad_words_ids=bad_word_ids
)
print("Output:\n" + 100 * '-')
for i, sample_output in enumerate(sample_outputs):
print("{}: {}".format(i, tokenizer.decode(sample_output, skip_special_tokens=True)))
少樣本學習
prompt = """Tekst: "Nienawidzę smerfów!"
Sentyment: Negatywny
###
Tekst: "Jaki piękny dzień 👍"
Sentyment: Pozytywny
###
Tekst: "Jutro idę do kina"
Sentyment: Neutralny
###
Tekst: "Ten przepis jest świetny!"
Sentyment:"""
res = generator(prompt, max_length=85, temperature=0.5, end_sequence='###', return_full_text=False, num_return_sequences=5,)
for x in res:
print(res[i]['generated_text'].split(' ')[1])
零樣本推理
prompt = "Bitwa pod Grunwaldem miała miejsce w roku"
input_ids = tokenizer.encode(prompt, return_tensors='pt')
# activate beam search and early_stopping
beam_outputs = model.generate(
input_ids,
max_length=20,
num_beams=5,
early_stopping=True,
num_return_sequences=3
)
print("Output:\n" + 100 * '-')
for i, sample_output in enumerate(beam_outputs):
print("{}: {}".format(i, tokenizer.decode(sample_output, skip_special_tokens=True)))
📚 詳細文檔
預期用途與侷限性
原始模型可用於文本生成或針對下游任務進行微調。但該模型基於網絡抓取的數據進行訓練,可能生成包含暴力、性暗示、粗俗語言和毒品使用的文本,也會反映數據集中的偏差。這些侷限性可能也會出現在微調後的模型中。現階段,不建議在研究之外使用該模型。
偏差分析
模型中存在多種偏差來源,在探索模型能力時需謹慎對待。可在 此筆記本 中查看基本的偏差分析。
性別偏差
以 “She/He works as” 為提示生成50篇文本,生成的男女職業詞雲圖顯示,男性職業中最突出的詞彙有教師、銷售代表、程序員;女性職業中最突出的詞彙有模特、護理人員、接待員、服務員。
種族/國籍/性別偏差
生成1000篇文本評估種族、國籍和性別維度的偏差。使用 波蘭仇恨言論語料庫 訓練的模型評估每篇生成文本包含仇恨言論的概率。結果顯示,各種族/國籍的仇恨得分均高於中性基線,男性的仇恨得分高於女性。
訓練過程
訓練腳本
使用 Flax的因果語言建模腳本 完成訓練。
預處理和訓練細節
使用字節級的字節對編碼(BPE)對文本進行分詞,詞彙表大小為50,257。輸入為連續512個標記的序列。模型在單個TPUv3 VM上進行訓練,訓練過程分為3部分:
- 學習率1e-3,批次大小64,線性調度,熱身1000步,10個週期,70,000步後停止,評估損失3.206,困惑度24.68。
- 學習率3e-4,批次大小64,線性調度,熱身5000步,7個週期,77,000步後停止,評估損失3.116,困惑度22.55。
- 學習率2e-4,批次大小64,線性調度,熱身5000步,3個週期,91,000步後停止,評估損失3.082,困惑度21.79。
評估結果
使用95%的數據集進行訓練,5%的數據集進行評估。最終檢查點評估結果如下:
屬性 | 詳情 |
---|---|
評估損失 | 3.082 |
困惑度 | 21.79 |
🔧 技術細節
模型遵循標準GPT2架構,採用因果語言建模(CLM)目標進行訓練,使用字節級的字節對編碼(BPE)進行分詞,在單個TPUv3 VM上完成訓練。
📄 許可證
@misc{papuGaPT2,
title={papuGaPT2 - Polish GPT2 language model},
url={https://huggingface.co/flax-community/papuGaPT2},
author={Wojczulis, Michał and Kłeczek, Dariusz},
year={2021}
}
⚠️ 重要提示
模型基於網絡抓取的數據進行訓練,可能生成包含暴力、性暗示、粗俗語言和毒品使用的文本,也會反映數據集中的偏差。這些侷限性可能也會出現在微調後的模型中。現階段,不建議在研究之外使用該模型。
💡 使用建議
在使用少樣本學習和零樣本推理時需謹慎,該能力尚不成熟,可能導致錯誤或有偏差的響應。同時,在使用避免不良詞彙功能時,需仔細整理不良詞彙列表,以防出現拼寫錯誤導致過濾失敗。



