基于seq2seq的中国对联自动配对技术实践
2017-05-03 11:00
323 查看
Sequence to Sequence模型这种基于编码--解码的模型已经被谷歌成功应用于机器翻译上。而理论上任意的序列到序列的有监督问题都可以用这种模型。如上一篇文章写的古诗生成。包括这一篇实践性的对联配对。
对对联生成过程中,需要使用LSTM来实现,然后需要设置其编码与解码的相关参数。如下所示:
# 创建基本的LSTM单元
cells = [tf.contrib.rnn.DropoutWrapper(
tf.contrib.rnn.BasicLSTMCell(embedding_dim), output_keep_prob=keep_prob
) for i in range(3)]
stacked_lstm = tf.contrib.rnn.MultiRNNCell(cells)
with tf.variable_scope('decoders') as scope:
# feed_previous=False, for training
decode_outputs, decode_state = tf.contrib.legacy_seq2seq.embedding_rnn_seq2seq(
encode_input,
decode_input,
stacked_lstm,
num_encoder_symbols=input_vocab_size,
num_decoder_symbols=output_vocab_size,
embedding_size=embedding_dim)
scope.reuse_variables()
decode_outputs_test, decode_state_test = tf.contrib.legacy_seq2seq.embedding_rnn_seq2seq(
encode_input,
decode_input,
stacked_lstm,
num_encoder_symbols=input_vocab_size,
num_decoder_symbols=output_vocab_size,
embedding_size=embedding_dim,
feed_previous=True)
loss_weights = [tf.ones_like(l, dtype=tf.float32) for l in labels]
loss = tf.contrib.legacy_seq2seq.sequence_loss(decode_outputs, labels, loss_weights, output_vocab_size)
optimizer = tf.train.AdamOptimizer(0.001)
train_op = optimizer.minimize(loss)
(2) 测试例子如下:其中挂号内为原有的配对。
测试例子:
悼念先严三周年▁▁▁(痛表后生一片心▁▁▁) -> 诗留人间百年诗▁▁▁
百岁人歌长寿酒▁▁▁(万载花开太平春▁▁▁) -> 千秋再爱自长春▁▁▁
黄花酿酒三杯醉▁▁▁(绣阁增辉两烛燃▁▁▁) -> 碧水池霜百岁人▁▁▁
艳阳照大厦春华竞发▁(甘露洒人间瑞气勃生▁) -> 看日开新地壮天更高▁
延龄人种神仙草▁▁▁(纪竹新开甲子花▁▁▁) -> 蜜月欣逢百岁图▁▁▁
测试例子:
白发朱颜喜登上寿▁▁(丰衣足食乐享晚年▁▁) -> 丰山足食享享高秋▁▁
体健神恰晚景好▁▁▁(书声墨韵老来红▁▁▁) -> 天明萱草喜无鸯▁▁▁
大好良辰春光明媚▁▁(重开令甲上寿期颐▁▁) -> 文明盛世喜此如山▁▁
宝马迎来云外客▁▁▁(香车送出月中仙▁▁▁) -> 金牛犁栋喜雄风▁▁▁
莲子杯中金各酒▁▁▁(桃花盏上玉台诗▁▁▁) -> 桃香嫩柳柳丝凰▁▁▁
测试例子:
赏灯极乐繁华地▁▁▁(秉灯同游不夜天▁▁▁) -> 养手同来幸福花▁▁▁
寒笳送走人间腊▁▁▁(晓角吹回雪里春▁▁▁) -> 夜雨梅花蝶萝香▁▁▁
知识鼓满青春风帆▁▁(劳动展开爱情羽翼▁▁) -> 赤策文章浩气清风▁▁
贮在玉壶由人造▁▁▁(结成晶块夺天工▁▁▁) -> 誓知甘作口子余▁▁▁
灰飞薛管声谐凤▁▁▁(玉种蓝田兆梦熊▁▁▁) -> 何洁堪媳荐良仑▁▁▁
针对这两种测试,也验证了人工智能是否真的会创作。利用这种seq2seq写出的古诗或者对联,的确会出现训练集合外的句子,非常有意思,完全是创作的味道。不过呢,目前的仅仅还是测试例子,对语义上有些地方,特别是里面的思想和语义理解还有待深入。这可能需要更多的知识、常识、典故等的配合。
对对联生成过程中,需要使用LSTM来实现,然后需要设置其编码与解码的相关参数。如下所示:
# 创建基本的LSTM单元
cells = [tf.contrib.rnn.DropoutWrapper(
tf.contrib.rnn.BasicLSTMCell(embedding_dim), output_keep_prob=keep_prob
) for i in range(3)]
stacked_lstm = tf.contrib.rnn.MultiRNNCell(cells)
with tf.variable_scope('decoders') as scope:
# feed_previous=False, for training
decode_outputs, decode_state = tf.contrib.legacy_seq2seq.embedding_rnn_seq2seq(
encode_input,
decode_input,
stacked_lstm,
num_encoder_symbols=input_vocab_size,
num_decoder_symbols=output_vocab_size,
embedding_size=embedding_dim)
scope.reuse_variables()
decode_outputs_test, decode_state_test = tf.contrib.legacy_seq2seq.embedding_rnn_seq2seq(
encode_input,
decode_input,
stacked_lstm,
num_encoder_symbols=input_vocab_size,
num_decoder_symbols=output_vocab_size,
embedding_size=embedding_dim,
feed_previous=True)
loss_weights = [tf.ones_like(l, dtype=tf.float32) for l in labels]
loss = tf.contrib.legacy_seq2seq.sequence_loss(decode_outputs, labels, loss_weights, output_vocab_size)
optimizer = tf.train.AdamOptimizer(0.001)
train_op = optimizer.minimize(loss)
(2) 测试例子如下:其中挂号内为原有的配对。
测试例子:
悼念先严三周年▁▁▁(痛表后生一片心▁▁▁) -> 诗留人间百年诗▁▁▁
百岁人歌长寿酒▁▁▁(万载花开太平春▁▁▁) -> 千秋再爱自长春▁▁▁
黄花酿酒三杯醉▁▁▁(绣阁增辉两烛燃▁▁▁) -> 碧水池霜百岁人▁▁▁
艳阳照大厦春华竞发▁(甘露洒人间瑞气勃生▁) -> 看日开新地壮天更高▁
延龄人种神仙草▁▁▁(纪竹新开甲子花▁▁▁) -> 蜜月欣逢百岁图▁▁▁
测试例子:
白发朱颜喜登上寿▁▁(丰衣足食乐享晚年▁▁) -> 丰山足食享享高秋▁▁
体健神恰晚景好▁▁▁(书声墨韵老来红▁▁▁) -> 天明萱草喜无鸯▁▁▁
大好良辰春光明媚▁▁(重开令甲上寿期颐▁▁) -> 文明盛世喜此如山▁▁
宝马迎来云外客▁▁▁(香车送出月中仙▁▁▁) -> 金牛犁栋喜雄风▁▁▁
莲子杯中金各酒▁▁▁(桃花盏上玉台诗▁▁▁) -> 桃香嫩柳柳丝凰▁▁▁
测试例子:
赏灯极乐繁华地▁▁▁(秉灯同游不夜天▁▁▁) -> 养手同来幸福花▁▁▁
寒笳送走人间腊▁▁▁(晓角吹回雪里春▁▁▁) -> 夜雨梅花蝶萝香▁▁▁
知识鼓满青春风帆▁▁(劳动展开爱情羽翼▁▁) -> 赤策文章浩气清风▁▁
贮在玉壶由人造▁▁▁(结成晶块夺天工▁▁▁) -> 誓知甘作口子余▁▁▁
灰飞薛管声谐凤▁▁▁(玉种蓝田兆梦熊▁▁▁) -> 何洁堪媳荐良仑▁▁▁
针对这两种测试,也验证了人工智能是否真的会创作。利用这种seq2seq写出的古诗或者对联,的确会出现训练集合外的句子,非常有意思,完全是创作的味道。不过呢,目前的仅仅还是测试例子,对语义上有些地方,特别是里面的思想和语义理解还有待深入。这可能需要更多的知识、常识、典故等的配合。
相关文章推荐
- 基于seq2seq的中国古诗词自动生成技术
- 基于React.js实现webapp的技术实践
- 图片流量节省大杀器:基于腾讯云CDN的sharpP自适应图片技术实践
- 【数字经济】概念、技术、实践:中国 500强泰康集团背后的数据驱动
- 京东基于Spark的风控系统架构实践和技术细节
- 基于hadoop生态圈的数据仓库实践 —— 进阶技术(十五)
- 大数据:技术与应用实践指南(中国工程院院士倪光南倾情作序,雷万云、毛新生、段永朝、安晖联合力荐)
- 基于PNP自动映射分区的安全USB技术研究与实现
- 基于web的全景漫游自动生成加编辑平台的技术实现(四)----添加热点
- 微软开放技术(中国)携 CKAN 和 OData 技术引入基于 Azure 的开放数据平台
- 图片流量节省大杀器:基于CDN的sharpP自适应图片技术实践
- 中小型企业基于大数据技术的项目实践
- 基于Spark的公安大数据实时运维技术实践
- 基于贝叶斯方法的英文单词模糊自动校对技术及其应用研究
- Unity中国技术总监刘钢:如何优化基于Unity开发的3D移动游戏
- 基于OpenStack+Docker设计与实现CI/CD——基于Docker技术的CI&CD实践
- 京东基于Spark的风控系统架构实践和技术细节
- 基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]
- 图片流量节省60%:基于CDN的sharpP自适应图片技术实践
- 基于构件技术的软件工程 - Small Team Practice小型团队项目实践标准