## 诗三百·人工智能在线诗歌写作平台开发教程
一步步教你搭建人工智能写诗平台,支持AI作诗,藏头诗生成,AI填词,自动对联,目录如下:
* 数据集预处理
* 写诗模型搭建
* BeamSearch奖惩机制
* Flask后端发布
* Vue前端开发
* 高并发架构优化
* 敏感词过滤
* 运营推广SEO优化
### 数据集预处理
数据集采用了[Werneror收集的85万古诗词](https://github.com/Werneror/Poetry), [王斌收集的70万首对联](https://github.com/wb14123/couplet-dataset) ,[sheepzh收集的8万首现代诗](https://github.com/sheepzh/poetry) 预处理格式如下:
需要自己写个程序判断一下古诗词输入什么格律或词牌, 并转换成如下格式保存到csv文件
输入: 题目&&格律
输出: 对应的古诗
格律详情如下:
古诗: 五言绝句,七言绝句,五言律诗,七言律诗
藏头诗: 五言绝句_藏头诗,七言绝句_藏头诗, 五言律诗_藏头诗, 七言律诗_藏头诗
词牌: 浣溪沙、鹧鸪天、蝶恋花、西江月、清平乐、菩萨銮、点绛唇、念奴娇、满江红、浪淘沙等
对联: 上联
#### 例子:
输入:相思&&五言绝句
输出:红豆生南国,春来发几枝。愿君多采撷,此物最相思。
输入:春望&&五言律诗
输出:国破山河在,城春草木深。感时花溅泪,恨别鸟惊心。烽火连三月,家书抵万金。白头搔更短,浑欲不胜簪。
输入:早发白帝城&&七言绝句
输出:朝辞白帝彩云间,千里江陵一日还。两岸猿声啼不住,轻舟已过万重山。
输入:锦瑟&&七言律诗
输出:锦瑟无端五十弦,一弦一柱思华年。庄生晓梦迷蝴蝶,望帝春心托杜鹃。沧海月明珠有泪,蓝田日暖玉生烟。此情可待成追忆,只是当时已惘然。
输入:朝千两轻&&七言绝句_藏头诗
输出:朝辞白帝彩云间,千里江陵一日还。两岸猿声啼不住,轻舟已过万重山。
输入:一曲新词酒一杯&&浣溪沙
输出:一曲新词酒一杯,去年天气旧亭台。夕阳西下几时回?无可奈何花落去,似曾相识燕归来。小园香径独徘徊。
输入:一觉睡西天,谁知梦里乾坤大&&上联
输出:只身眠净土,只道其中日月长
输入:只身眠净土,只道其中日月长&&上联
输出:一觉睡西天,谁知梦里乾坤大
经过预处理,大概统计了一下,古诗有70多万首,对应的藏头诗也有70多万首,藏头诗对应的主题不一定取所有字,可以随机取前几个字,词有3万多首,对联有70万副,上下联对调可以扩增到140万副。由于词牌比较少,需要做数据增强,我用tfidf + textrank算法对每首词取top10个主题词作为输入,对应的词内容还是不变,这样扩增到30多万首左右,总共310万的数据集。
### 写诗模型搭建
写诗模型采用苏剑林老师的[bert4keras](https://github.com/bojone/bert4keras/tree/master/)的[seq2seq](https://github.com/bojone/bert4keras/blob/master/examples/task_seq2seq_autotitle.py), 采用[RoBerta_wwm_ext](https://github.com/ymcui/Chinese-BERT-wwm)预训练模型进行训练,对应好古诗数据集的输入输出就可以训练模型了。
每训练一个epoch,可以在训练集里随机找三个样本进行测试,评估效果,参考代码如下:
```
class Evaluate(Callback):
def __init__(self,model, type):
self.lowest = 1e10
self.model = model
self.type = type
def on_epoch_end(self, epoch, logs=None):
idxs = np.random.choice(range(len(newsdata)), 3)
for idx in idxs:
if self.type == 'coupletpoem':
cptype = newsdata['input'].iloc[idx].split('&&')[1]
print('格式:', cptype if cptype !='上联' else '对联')
print('输入:', newsdata['input'].iloc[idx].split('&&')[0])
try:
if cptype == '上联':
res = couplet_gen_sent(self.model, newsdata['input'].iloc[idx][:maxlen])
elif cptype in ['五言绝句','七言绝句','五言律诗','七言律诗','五言绝句_藏头诗','七言绝句_藏头诗','五言律诗_藏头诗','七言律诗_藏头诗']:
res = poem_gen_sent(self.model, newsdata['input'].iloc[idx][:maxlen])
else:
res = ci_gen_sent(self.model, newsdata['input'].iloc[idx][:maxlen])
print('输出:', newsdata['output'].iloc[idx])
print('预测:', res)
except Exception as e:
traceback.print_exc()
print(e)
```
RTX2080Ti下大概训练一天左右,loss降到3.5以下,模型已经基本上能学会写诗了,包含不同格律诗的长度及平仄押韵,但不保证,再训练几天,loss降到2.6以下,写得诗词符合格律的概率就大很多了。
### BeamSearch 奖惩激励
虽然模型基本上学到了古诗的平仄押韵格律,生成的大部分诗都能符合格律,但是不能保证生成的所有诗词都满足格律,所以需要在BeamSearch的时候引入奖惩激励。由于古诗,词牌,对联的格律规则不一样,需要分开写:
#### 古诗规则:
- 古诗里面尽量不出现重复的字,如果出现重复的字,在候选集里面惩罚,但是允许律诗的颔联和颈联出现连续两个字的叠词,如无边落木萧萧下,不仅长江滚滚来;
- 绝句的第二句和第四句最后一个字押韵,律诗每一联的最后一个字押韵。在古诗规则中,一般押韵的字无论采用平水韵还是中华新韵,都是平声,所以第一个位置押韵的字,只要是韵表里的字都奖励,后面押韵的字只对和第一个押韵字同韵的字才奖励;
- 由于生成的古诗第一个字和输入题目第一个字有很大概率会重复,这里引入了惩罚,但是不包括藏头诗
下面还是基于苏老师老版本的beamsearch代码修改的,供参考
```
poemyun = {
'a': '啊腌扒叭巴吧芭岜疤笆粑豝嚓跨叉杈差咖瓜抓胍榻喇哈阿花哗加茄迦痂枷耞珈袈嘉佳家傢葭豭咖夸姱啦妈摩嬷趴凹咱葩杉沙莎痧鲨纱砂他她它哇洼蛙娲虾丫呀鸦哑桠查楂喳呱欻旮笳拉垃吗蚂仨裟砂趿渣揸馇挝阿八捌擦插锸耷哒嗒鎝褡发筏夹嘎刮栝鸹拉邋抹掐袷葜撒杀刹铩煞刷趿塌溻禢踏挖呷瞎鸭压押扎匝咂拶吒哳浃撒答啊茶查搽嵖猹槎楂碴苴垞蛤华哗骅铧麻嘛蟆拿扒杷爬钯耙筢琶娃霞遐瑕暇牙伢芽岈玡蚜崖涯睚衙拔茇菝跋魃察茬檫达鞑沓怛妲笪靼答跶乏伐茷垡砝阀罚嘎滑划猾夹浃郏荚铗蛱恝戛颊旯拉匣狎挟柙侠峡狭硖辖黠杂砸扎札轧闸铡喋剳',
'o': '波播菠玻嶓搓磋蹉瑳多哆呙锅卜埚涡坡颇摸阿陂莎唆娑梭挲疙睃圪嗦嗍鲅蓑拖莴倭唷涡窝蜗踒阿婀痾哥歌戈呵科蝌柯疴苛珂窠轲颗屙菏棵髁的了么呢车奢赊畲遮仡猞拨鱿趵钵饽剥逴踔戳撮咄剟掇裰郭崞聒蝈豁劐擢捋泊泼钹说缩托脱喔拙捉苛桌倬涿焯作嘬鸽割搁喝磕瞌榼脖嵯痤瘥鹾罗萝啰逻脶猡锣椤箩骡螺谟馍馍摹模麽摩磨嬷蘑磨魔挪娜傩婆鄱繁皤驮佗陀坨驼柁砣鸵酡跎蛇鼍鹅蛾娥莪俄峨哦讹和禾何河荷阇膜婆皤沱渮哪挼孛荸伯驳帛瓝泊柏勃钹铂舶博鹁浡渤搏箔膊踣薄馞欂襮礴夺度铎踱怫佛掇咄裰剟国掴帼漍腘虢馘活嗑橐灼彴茁踔卓斫浊酌浞诼着啄琢椓蠋擢濯镯昨作笮阁葛蛤颌合涸盒膜拙棁捽貉曷盍阖壳德得额鹖则舴晢蜇革格鬲隔嗝槅膈滆塥鎘骼纥劾阂核翮壳咳颏舌则责择咋泽啧帻舴箦赜折哲辄蛰谪摺磔辙翟',
'ie': '爹阶皆喈嗟街湝乜咩些靴耶倻椰偕掖瘪憋鳖跌颏疙节截疖角圪结接秸揭噘撅捏撇瞥切缺阙贴得怗贴帖楔歇蝎削薛噎曰约瘸斜邪偕谐鞋携爷耶茄伽鲑踅椰别蹩迭垤昳絰瓞谍堞耋揲喋牒叠碟蝶艓蹀孑节讦劫劼杰诘拮洁结桔桀捷偈玦觉�

高校毕业设计
- 粉丝: 220
最新资源
- 4.1程序设计语言的基础知识课件粤教版高中信息技术必修1(1).pptx
- 全国一级计算机基础及MS-Office应用课件-版(1).ppt
- 完整CAD快捷键-CAD常用快捷键命令大全-推荐文档(1).doc
- 关于全国计算机等级考试报名的通知------(1).pdf
- 雄激素性秃发诊疗指南BASP分型法解读(1).pdf
- 黑龙江移动通信行业媒体广告分析报告(1).docx
- Linux期末复习卷(1).doc
- 网站专题策划书(1)(1).doc
- 巧用Excel公式统计和分析学生考试成绩(1).ppt
- 超市管理系统数据库开发案例(1).doc
- 学习]高中信息技术课件网络数据库的信息检索(1).ppt
- RFID图书管理系统程序源代码样本(1).doc
- UMEYE云平台物联网解决方案(1).doc
- 林地保护利用规划数据库建设方案详细 (1)(1).doc
- 完整版电气工程及其自动化专业英语第一章课文翻译(1).doc
- MATLAB实现改进L-SHADE差分进化算法及其在最优化问题中的应用 - 参数自适应 终极版
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


