CoolFace
Modelpublic

Sanool/tang-poem-lite

sourceHugging Facemitupdated 2d agoView on Hugging Face
0likes21downloads
Model Card

唐诗轻量版 tang-poem-lite

一个 1300 万参数的 GPT-2,从零训练,只做一件事:写五言、七言的绝句和律诗。 模型文件 50MB,普通电脑的 CPU 上也能秒出一首。

大漠孤烟起夕阴,一番风卷一番深。天公不用催行色,却问人间有许心。
明月清风一钓舟,钓矶深水白云秋。夜深不锁寒溪路,时有渔翁载月舟。
春阴晴野淡春光,夏木阴阴一夜凉。秋月不知人事换,冬衣犹自客毡香。  (藏头:春夏秋冬)

用法

python
from transformers import pipeline

gen = pipeline("text-generation", model="Sanool/tang-poem-lite")
print(gen("\n大漠孤烟")[0]["generated_text"].strip().split("\n")[0])

输入前面加一个换行符 \n,它代表「一首新诗的开头」。 输出遇到下一个换行就是一首诗写完了。 不给开头、只输入 \n,模型会从第一个字开始自由创作。

默认采样参数写在 generation_config.json 里:temperature 0.8,top_k 40。

训练

项目数值
结构GPT-2,6 层,8 头,宽 384,上下文 128 字
参数量13.1M
分词一个汉字一个 token,词表 6350 字
数据全唐诗 + 全宋诗中的五言、七言绝句和律诗,219,615 首,转为简体,约 1000 万字
训练10,000 步,batch 64 × 128 字,AdamW,学习率 1e-3 余弦衰减
硬件一张 RTX 3060 12GB,10 分钟
最终 loss训练 3.59,验证 3.91

[image]

数据来自 chinese-poetry(MIT 许可)。 筛选规则:全文只含汉字和逗号句号,4 句或 8 句,每句同为 5 字或 7 字。 出现次数少于 10 次的字所在的诗被丢掉。

局限

  • —只会格律诗的「形」:字数、断句、常见意象都对,平仄和押韵大多不严格,意思常常经不起细读。
  • —词表外的字(比如「卡」「咖」这类古诗里没有的字)会变成 [UNK],作为开头输入时效果会变差。
  • —生成的诗偶尔会和训练集里的原句撞上。

和 gpt2-chinese-poem 的区别

uer/gpt2-chinese-poem 用了 80 万首诗、约 1 亿参数、20 万步训练,覆盖各种体裁。 这个模型只有它的八分之一大,只学格律诗,输出简体,定位是轻量和可复现。 训练代码不到 300 行,一张家用显卡十分钟就能从头跑一遍。