中文对联生成任务,是文本生成中一个比较常见的任务。下面基于该任务做生成模型对比调研。
couplet.tar.gz ,包含770491个对联。
样本:
==> .//couplet_files/couplet/train/in.txt <==
晚 风 摇 树 树 还 挺
==> .//couplet_files/couplet/train/out.txt <==
晨 露 润 花 花 更 红
T5模型一种Encoder-Decoder架构,其中输入和输出都是文本序列。 这使它能够灵活地执行任何自然语言处理任务,而无需以任何方式修改模型架构。这也意味着训练一个T5模型可以同时执行多个任务,只需要给它不同prefix即可。
关于T5模型可以参考paper:Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
Tip: 文章 asking-the-right-questions-training-a-t5-transformer-model-on-a-new-task 介绍了训练T5模型来执行一个新任务
Tip: 文章 the-guide-to-multi-tasking-with-the-t5-transformer 介绍了训练T5模型来执行多个任务的方法
T5模型可以在开头添加prefix来执行某个特定任务,同一个任务使用的prefix相同,对于多个任务,则使用不同的prefix区分。
Example prefixes:
binary classification
predict sentiment
answer question
预测时,模型将根据不同的prefix来生成相应的输出。
使用步骤:
- 初始化
T5Model
- 训练模型
train_model()
- 评估模型
eval_model()
- 预测
predict()
查看 examples/T5/T5_Finetune_Chinese_Couplet.ipynb ,里面包括训练和预测。
使用全量数据训练5个epochs。
prefix | input_text | target_text | pred |
---|---|---|---|
对联: | 书香醉我凌云梦 | 诗韵酬余壮志心 | 墨韵迷人醉月心 |
GPT2模型也是从Transformer改进来的,T5同时有编码器和解码器,GPT2只有解码器,所以对于单向的文本生成任务特别适合。
由于GPT2模型本质是训练一个语言模型,所以训练时用textgen.language_generation.LanguageModelingModel
,
预测时用textgen.language_modeling.LanguageGenerationModel
。
使用步骤:
- 初始化
LanguageModelingModel
和对应的tokenizer
- 训练模型
train_model()
- 评估模型
eval_model()
- 预测,调用
LanguageGenerationModel
的generate
方法
查看 examples/language_generation/GPT2_Finetune_Chinese_Couplet.ipynb ,里面包括训练和预测。
使用全量数据训练5个epochs。
input_text | target_text | pred |
---|---|---|
书香醉我凌云梦 | 诗韵酬余壮志心 | 情系流年醉海魂 |
input_text | target_text | GPT2预测 | T5预测 | 哪个模型效果好 |
---|---|---|---|---|
书香醉我凌云梦 | 诗韵酬余壮志心 | 情系流年醉海魂 | 墨韵迷人醉月心 | 都差 |
春回大地,对对黄莺鸣暖树 | 日照神州,群群紫燕衔新泥 | 月下荷塘,笑笑白鸟唱青山 | 福至人间,家家紫燕舞和风 | T5好 |
松风吼夜潮,巧剜明月染春水 | 小阁烹香茗,闲对茶经忆古人 | 水色染春风,明敲红线报春声 | 柳浪翻花浪,漫卷残阳湿画屏 | 都差 |
庙貌遍海澨山陬,虽僻处剡西,犹不废千秋俎豆 | 志业在平吴抑魏,只乃心王室,洵足扶万古纲常 | 春风沐园桃李绿,且欣时来时,且知时作一道菜肴 | 庙貌并云龙漳水,有灵山灵秀,更何分万古馨香 | 都差 |
磊落 | 光明 | 雄浑 | 清廉 | 都差 |
伤积在骨何依托 | 情结成茧怎生抽 | 难为人言自可言 | 痛饮于胸不动摇 | 都差 |
已彻骨深寒,倩影依稀,有我空庭长饮月 | 还伤情正浓,珠泪难拂,无君绣帘尽卷风 | 已醉诗酣睡,梅香未尽,无人半夜饮花 | 莫伤怀寂寞,愁容寂寞,无君旧梦又思乡 | 都差 |
紫气蒸茶山,芽鲜叶秀 | 清泉润竹海,笋嫩篁幽 | 香源涌水岭,绿浪涟涟 | 红霞映碧水,水秀山青 | T5好 |
来生后世无因果 | 乱语胡言惹是非 | 生死后世有缘人 | 东倒西歪有缘由 | T5好 |
雪盖梅梢,愿与红颜同白首 | 霞披芦顶,心仪鹤发度金婚 | 山边烟雾,听从绿叶逐清声 | 风梳柳辫,愿同碧水共青天 | T5好 |
分析:
- 10个预测case,6个效果都差,说明中文古文的对联生成任务很难,两个模型无法准确理解上联的语义,生成的结果只是满足了字数相同、词性对齐、词面对齐,形似, 语义对仗工整还差点儿,平仄合律也不满足。
- 剩下4个case都是T5模型效果好些,说明双向的encoder-decoder网络结构(T5)比单向的decoder结构(GPT2)更适合对联生成任务。
对联创作的基本要求是:平仄合律,对仗工整,文意切题。
三者相互依存,不可偏废。平仄合律是基础,不合律的对联就是不合格的对联。对仗工整是关键, 对仗不工整,即使平仄合律,也只能滥竽充数。文意切题是目的,平仄合律、对仗工整而文意不切题,就是无的放矢,甚至会产生相反的效果。
后续调研SongNet,该模型加入了模板和韵律特征,可以同时保证生成文本的格式正确、韵律合理、句子完整等基本的质量要求。