🚀 基于GPT2-Small的土耳其语AI写作器
本项目是一个基于GPT2-Small的土耳其语AI写作器,通过对模型进行微调,使其能够生成高质量的土耳其语文本。它在维基百科土耳其语文章和大量经典小说、戏剧语料上进行训练,具有一定的文本生成能力。
✨ 主要特性
- 基于GPT2-Small模型进行微调,增强了土耳其语的文本生成能力。
- 使用了超过400本土耳其语经典小说和戏剧进行训练,包括陀思妥耶夫斯基、莎士比亚、大仲马等作家的作品。
- 训练代码适配Fastai 2.X,并在Google Colab上进行训练。
- 提供了模型的使用示例,包括安装、单字生成和完整序列生成。
📦 安装指南
from transformers import AutoTokenizer, AutoModelWithLMHead
import torch
tokenizer = AutoTokenizer.from_pretrained("gorkemgoknar/gpt2-turkish-writer")
model = AutoModelWithLMHead.from_pretrained("gorkemgoknar/gpt2-turkish-writer")
tokenizer.model_max_length=1024
model.eval()
💻 使用示例
基础用法
生成1个单词
text = "Bu yazıyı bilgisayar yazdı."
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs, labels=inputs["input_ids"])
loss, logits = outputs[:2]
predicted_index = torch.argmax(logits[0, -1, :]).item()
predicted_text = tokenizer.decode([predicted_index])
print('input text:', text)
print('predicted text:', predicted_text)
高级用法
生成完整序列
text = "Bu yazıyı bilgisayar yazdı."
inputs = tokenizer(text, return_tensors="pt")
sample_outputs = model.generate(inputs.input_ids,
pad_token_id=50256,
do_sample=True,
max_length=50,
top_k=40,
num_return_sequences=1)
for i, sample_output in enumerate(sample_outputs):
print(">> Generated text {}\n\n{}".format(i+1, tokenizer.decode(sample_output.tolist())))
📚 详细文档
模型描述
此模型是gpt2-small-turkish微调版本的增强版。除了2020年10月28日的维基百科土耳其语文章转储外,该模型还使用了400多本土耳其语经典小说和戏剧进行训练(包括陀思妥耶夫斯基、莎士比亚、大仲马的作品)。
基础工作基于Pierre Guillou的教程完成,详情见此页面:(https://github.com/piegu/fastai-projects/blob/master/finetuning-English-GPT2-any-language-Portuguese-HuggingFace-fastaiv2.ipynb)
需要注意的是,由于土耳其语与英语的差异不像葡萄牙语与英语那样接近,因此该模型训练了最后3层,而不是最后2层。
代码已转换为适用于Fastai 2.X的版本,并使用Google Colab进行训练。
当前准确率为36.3%,困惑度为44.75。
演示(使用CPU推理)可在以下网址查看:http://www.metayazar.com
模型可在以下链接获取:
预期用途和局限性
局限性和偏差
该模型使用的训练数据来自土耳其维基百科和书籍。我们知道这些数据包含了大量来自互联网的未经过滤的内容,远非中立。此外,由于对书籍的预处理工作不多,在某些情况下可能会看到章节名称和页码。这是一个正在进行的工作。
训练数据
- 2020年10月28日的维基百科土耳其语文章转储。
- 超过400本土耳其语经典小说的数据集。
评估结果
轮次 |
训练损失 |
验证损失 |
准确率 |
困惑度 |
时间 |
0 |
4.497828 |
4.549605 |
0.277328 |
94.595070 |
2:09:58 |
1 |
4.503929 |
4.519456 |
0.275071 |
91.785645 |
2:04:30 |
2 |
3.612716 |
3.921146 |
0.344802 |
50.458256 |
2:03:22 |
3 |
3.777645 |
4.072006 |
0.326130 |
58.674530 |
1:56:14 |
4 |
2.934462 |
3.801303 |
0.363719 |
44.759476 |
1:58:55 |
注意:使用了1cycle规则进行训练,且各轮次的训练时间不同。
📄 许可证
本项目采用Apache-2.0许可证。