Sanool/tang-poem-lite
021
唐诗轻量版 tang-poem-lite
一个 1300 万参数的 GPT-2,从零训练,只做一件事:写五言、七言的绝句和律诗。 模型文件 50MB,普通电脑的 CPU 上也能秒出一首。
大漠孤烟起夕阴,一番风卷一番深。天公不用催行色,却问人间有许心。
明月清风一钓舟,钓矶深水白云秋。夜深不锁寒溪路,时有渔翁载月舟。
春阴晴野淡春光,夏木阴阴一夜凉。秋月不知人事换,冬衣犹自客毡香。 (藏头:春夏秋冬)用法
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。
训练
数据来自 chinese-poetry(MIT 许可)。 筛选规则:全文只含汉字和逗号句号,4 句或 8 句,每句同为 5 字或 7 字。 出现次数少于 10 次的字所在的诗被丢掉。
局限
- 只会格律诗的「形」:字数、断句、常见意象都对,平仄和押韵大多不严格,意思常常经不起细读。
- 词表外的字(比如「卡」「咖」这类古诗里没有的字)会变成
[UNK],作为开头输入时效果会变差。 - 生成的诗偶尔会和训练集里的原句撞上。
和 gpt2-chinese-poem 的区别
uer/gpt2-chinese-poem 用了 80 万首诗、约 1 亿参数、20 万步训练,覆盖各种体裁。 这个模型只有它的八分之一大,只学格律诗,输出简体,定位是轻量和可复现。 训练代码不到 300 行,一张家用显卡十分钟就能从头跑一遍。
