智能对联模型太难完成?华为云ModelArts助你实现!手把手教学
摘要:农历新年将至,听说华为云 AI 又将开启智能对对联迎接牛气冲天,让我们拭目以待!作为资深 Copy 攻城狮,想要自己实现一个对对联的模型,是不能可能完成的任务,因此我搜罗了不少前人的实践案例,今天想和大家分享的是 和鲸社区的 rua年糕 贡献的项目-AI 对联,基于 ModelArts 的 「我的笔记本」实现。
华为云EI专家胡琦
一、环境准备
准备环境前,先唠叨几句:ModelArts 是面向开发者的一站式AI开发平台,ModelArts 在人工智能三要素中都有非常出色的表现,数据方面提供海量数据预处理及半自动化标注,算法方面除了开发者自己开发还=提供大量的预置算法和订阅算法可供选择,算力方面目前开发环境提供免费算力以及即点即用的「我的笔记本」。目前个人比较中意的功能就是「我的笔记本」,如果您体验过 MindSpore 教程的 「Run in ModelArts」,您会发现其实教程中链接的就是 ModelArts 的 「我的笔记本」模块,具体体验可阅读我的历史文章5分钟在线体验MindSpore的图层IR--MindIR。
相比常规的开发先要装一堆的环境和软件,基于 ModelArts 的 AI 开发似乎变得更简单,理论上有能上网的设备就够了,比如 pad,然后仅仅需要注册一个华为云账号并实名认证。当然,ModelArts准备工作并不仅仅是这些,比如如需用到 OBS 还需生成访问密钥并完成 ModelArts 全局配置。具体操作请参考ModelArts-Lab:https://gitee.com/ModelArts/ModelArts-Lab。
Free 的「我的笔记本」就在 ModelArts 总览页底部的开发工具卡片中,点击「立即体验」即可开启一个默认的 CPU 环境的 JupyterLab,我们可以在右边的「切换规格」栏进行环境或者规格的切换。需要注意的是:切换资源后,将影响实例下所有Notebook与Terminal。Notebook中执行的所有变量将失效,Terminal需要重新打开,手动安装包不再生效,需要重新执行。 目前, CPU 和 GPU 环境支持 Conda-python3 、Pytorch-1.0.0、TensorFlow-1.13.1等8种Notebook环境,不过使用 GPU 需要注意:1、免费规格用于使用体验,会在1小时后自动停止;2、免费算力不包含对象存储服务(OBS)存储资源费用。 如果想使用 MindSpore 框架,可以从 MindSpore 官方文档教程中的 「Run in ModelArts」进行跳转到带有 MindSpore 框架的 JupyterLab。

二、Seq2Seq 简介
Seq2Seq是 Google 在 2017年开源的一款用于 TensorFlow 的通用编码器&解码器框架(encoder-decoder framework),可用于机器翻译、文本摘要、会话建模、图像描述等。

论文地址: https://arxiv.org/abs/1703.03906
三、Copy 实践
新建 TensorFlow 1.13.1 环境的 notebook 文件,开始代码编(kao)写(bei)。

数据集下载
couplet-dataset 尽管比较陈旧,但拥有 70 万条数据,应该够实现一个简单的对对联模型。
!wget https://github.com/wb14123/couplet-dataset/releases/download/1.0/couplet.tar.gz
!tar -xzvf couplet.tar.gz
!mkdir couplet/model
依赖安装及引用
!pip install klab-autotime
!pip install backcall
import codecs
import numpy as np
from keras.models import Model
from keras.layers import *
from keras.callbacks import Callback
# 显示cell运行时长
%load_ext klab-autotime # 使用GPU
import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
# The GPU id to use, usually either "0" or "1"
os.environ["CUDA_VISIBLE_DEVICES"]="0"
数据处理
# 定义参数
min_count = 2
maxlen = 16
batch_size = 64
char_size = 128
train_input_path = 'couplet/train/in.txt'
train_output_path = 'couplet/train/out.txt'
test_input_path = 'couplet/test/in.txt'
test_output_path = 'couplet/test/out.txt'
# 数据读取与切分
def read_data(txtname):
txt = codecs.open(txtname, encoding='utf-8').readlines()
txt = [line.strip().split(' ') for line in txt] # 每行按空格切分
txt = [line for line in txt if len(line) <= maxlen] # 过滤掉字数超过maxlen的对联
return txt
模型定义
def gated_resnet(x, ksize=3):
# 门卷积 + 残差
x_dim = K.int_shape(x)[-1]
xo = Conv1D(x_dim*2, ksize, padding='same')(x)
return Lambda(lambda x: x[0] * K.sigmoid(x[1][..., :x_dim]) \
+ x[1][..., x_dim:] * K.sigmoid(-x[1][..., :x_dim]))([x, xo]) x_in = Input(shape=(None,))
x = x_in
x = Embedding(len(chars)+1, char_size)(x)
x = Dropout(0.25)(x) x = gated_resnet(x)
x = gated_resnet(x)
x = gated_resnet(x)
x = gated_resnet(x)
x = gated_resnet(x)
x = gated_resnet(x) x = Dense(len(chars)+1, activation='softmax')(x)
其他代码此处就不再贴了,建议直接参考源码出处,或者访问https://github.com/hu-qi/modelarts-couplet。此处我选择 200 个 Epoch,训练过程如下图:

从图中明显可以看出评估函数输出的下联不断地在调整。当训练完成之后我们便炼的了简单能使用的丹--AI 对对联模型,紧接着测试一下:
上联:天增岁月人增寿
下联:国满春秋我成春
上联:鼠去牛来闻虎啸
下联:羊来马去看龙吟
上联:流光溢彩气冲斗牛
下联:春色流辉风震春虫

不错不错,还是挺工整通顺的!
当然实践中也并不是一帆风顺,训练过程中如果遇到续期提示,请务必要手动点击,不然又得重启 Notebook 。续期就对了,尽管我不太清除能续几次,但续期就不会导致训练中断。

四、总结
此次实践的数据集和 notebook 已上传到 github :https://github.com/hu-qi/modelarts-couplet, 另外对联数据也共享到 ModelArts AI Gallery:couplet-dataset:70万对联数据集,欢迎取阅!
智能对联模型太难完成?华为云ModelArts助你实现!手把手教学的更多相关文章
- 华为云ModelArts 2.0全面升级,革新传统AI开发模式
[中国,上海,9月20日] 在HUAWEI CONNECT 2019期间,华为云EI服务产品部总经理贾永利宣布--华为云AI重装升级,并重磅发布一站式AI开发管理平台ModelArts 2.0. 现场 ...
- 自动驾驶轻松开发?华为云ModelArts赋能智慧出行
作为战略新兴产业,人工智能已经开始广泛应用于多个领域.近几年,科技公司.互联网公司等各领域的企业纷纷布局自动驾驶.那么,自动驾驶技术究竟发展得如何了?日前,华为云携手上海交通大学创新中心举办的华为云人 ...
- 本科阶段就挑战自动驾驶开发?华为云ModelArts帮你轻松实现!
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- 走近深度学习,认识MoXing:初识华为云ModelArts的王牌利器 — MoXing
[摘要] 本文为MoXing系列文章第一篇,主要介绍什么是MoXing,MoXing API的优势以及MoXing程序的基本结构. MoXing的概念 MoXing是华为云深度学习服务提供的网络模型开 ...
- 华为云ModelArts图深度学习,学习知识还能考取微认证
作为人工智能最前沿的技术之一,图深度学习被公认是人工智能认识世界实现因果推理的关键,也是深度学习未来发展的方向.但深度学习对图数据模型的支持性差一直是众多研究者难以攻克的难点,因此图深度学习在实际生产 ...
- “洞察千里”,华为云HiLens如何让无人车智行天下
作者:华为云 Rosie 随着人工智能的普及和渗透,"无人"的场景越来越丰富,无人超市.无人车.无人机等已经融入我们的生活. 乘着这股热浪,华为云携手上海交通大学学生创新中心举办了 ...
- 华为云MVP熊保松谈物联网开发:华为云IoT是首选,小熊派是神器
摘要:在AI.5G的技术驱动下,物联网行业的发展愈加如火如荼,开发者在技术的快速更迭间,也得乘风破浪跟上新技术的节奏. 在AI.5G的技术驱动下,物联网行业的发展愈加如火如荼,开发者在技术的快速更迭间 ...
- “3+3”看华为云FusionInsight如何引领“数据新基建”持续发展
摘要:一个统一的现代化的数据基建需要三类架构来实践三种不同的应用场景. 近期,美国知名科技企业风投机构A16Z总结出一套通用的技术架构服务,分为以下三种场景. 一.数据基建架构全景 数据流向显示,左侧 ...
- 产品质量管理利器,华为云发布CodeArts Defect缺陷管理服务
摘要:近日,华为云CodeArts Defect缺陷管理服务正式上线,提供结构化缺陷跟踪流程和标准化的质量度量模型. 本文分享自华为云社区<产品质量管理利器,华为云发布CodeArts Defe ...
- 华为云Volcano:让企业AI算力像火山一样爆发
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
随机推荐
- Python:利用math和random模块实现RSA加密算法
实验五报告: 利用math和random模块实现RSA加密算法 实验目标 本实验的主要目标是熟悉RSA(Rivest-Shamir-Adleman)密码算法的编写,其中包括求最大公因子.模逆的扩展欧几 ...
- 老派Sql之必要,逆天,我在ef core中使用ado.net!
Wlkr.Core.EFCore 逆天,我在ef core中使用ado.net! 老派Sql之必要 当你开发生涯中基本只用一两种数据库 当你觉得用EF的类写报表时很别扭 当你觉自己的Sql( Serv ...
- 机器学习实战1-kNN最近邻算法
目录 机器学习基础 机器学习的关键术语 k-近邻算法(KNN) 准备:使用python导入数据 实施kNN分类算法 示例:使用kNN改进约会网站的配对效果 准备数据:从文本文件中解析数据 分析数据 准 ...
- React生命周期函数(迭代合并:react 16.3)
本文分两部分,上面的是react16.3,下部分是老版本 react 16.3生命周期更新解析 ------ 老react版本生命周期 1.组件生命周期的执行次数 只执行一次: constructor ...
- HTTP请求中浏览器的缓存机制(转)
摘要:在Web开发过程中,我们可能会经常遇到浏览器缓存的问题.本文作者详细解释了浏览器缓存的机制,帮助读者更深层次的认识浏览器的缓存. 流程 当资源第一次被访问的时候,HTTP头部如下 (Reques ...
- 又拍云+PicGo搭建图床教程
具体搭建方法 https://blog.csdn.net/qq_41684621/article/details/114068076 这里有个细节 注意这里一定要加上 http:// 否则在自动生成 ...
- 生成ios证书最简单的方法
使用了hbuilderx的uniapp来开发app很方便,但是官网的文档,生成ios的私钥证书却需要使用mac电脑来生成,假如没有mac电脑就无法使用教程的方法来生成ios证书. 因为hbuilder ...
- Util应用框架基础(六) - 日志记录(一) - 正文
本文介绍Util应用框架如何记录日志. 日志记录共分4篇,本文是正文,后续还有3篇分别介绍写入不同日志接收器的安装和配置方法. 概述 日志记录对于了解系统执行情况非常重要. Asp.Net Core ...
- Dash应用浏览器端回调常用方法总结
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/dash-master 大家好我是费老师,回调函数是我们在Dash应用中实现各种交互功能的核心,在绝大 ...
- Verilog语法基础
FPGA语法 逻辑值: 0:逻辑低电平,条件为假. 1:逻辑高电平,条件为真. z:高阻态,无驱动 x:未知逻辑电平,这既不是0也不是1,只是一个不稳定的状态. 关键字: module:表示模块的开始 ...