基于华为云智能问答机器人的AI诗歌生成【我的华为云体验之旅】
今天来体验一下华为云的对话机器人服务,调用了NLP的诗歌生成API接口,话不多说,走着!
那么,什么是对话机器人服务?
对话机器人服务(Conversational Bot Service) 是一款基于人工智能技术,针对企业应用场景开发的云服务,主要包括智能问答、智能质检、定制对话机器人和任务型对话等功能。对话机器人服务中的技能工坊是打造任务型对话技能的工具平台。通过创建管理不同技能和词典,满足不同的用户需求,实现不同场景下的多轮对话能力。
简单来说,就是训练了一个有指定功能的ai机器人,会根据你设置的词典和回复模板来操作,并随着问答能不断学习提升。
基础环境准备
在使用 ModelArts 进行 AI 开发前,需先完成以下基础操作哦(如有已完成部分,请忽略),主要分为4步(注册–>实名认证–>服务授权–>领代金券):
准备数据
下载附件至本地,解压。可以看到 poetry_code 文件夹下有以下三个文件:
├── acrostic_dict.txt
├── poetry_demo.py
└── poetry_type_dict.txt
单击https://console.huaweicloud.com/cbs/?region=cn-north-4&&locale=zh-cn#/cbs/management/qabot/home进入,进入对话机器人服务智能问答机器人页面,点击右上角的购买问答机器人,进入问答机器人购买页面。如下所示
分别输入问答机器人名称,选择试用的计费模式,并点击立即购买完成支付,即完成试用专业版机器人创建
购买成功后如图所示:
添加诗歌类型词典
创建词典
接着点击机器人管理按钮进入机器人管理页面,进入左侧标签栏中的词典管理。点击“创建词典”按钮,按照下图指导添加诗歌类型词典:
词典标注:POETRYY_TYPE
词典名称:诗歌类型
点击“确认并添加词条”按钮,创建该条词典,并进入添加词条页面。
添加词条
点击页面上的“导入词条”按钮,然后点击“...”按钮,上传本地 poetry_code 文件夹下的 poetry_type_dict.txt 文件,导入模式选“追加”,最后点击“确定”按钮,即可完成诗歌类型词典词条导入。如下图所示:
导入成功后,可以看到如下词条:
添加藏头诗词典
创建词典
参看上述创建诗歌类型词典的方式,创建藏头诗词典。点击“创建词典”按钮,填写内容如下:
词典标识:ACROSTIC 词典名称 :藏头诗判断
点击“确认并添加词条”按钮。
添加词条
点击“导入词条”按钮,点击“...”按钮,选择本地 poetry_code 文件夹中的 acrostic_dict.txt 文件,导入模式选追加,最后点“确定”按钮,完成藏头诗判断词典词条导入,如下图所示:
至此,两条词典创建成功。词典因仅用于技能中,可暂时不发布。
这里将添加语料,并标注,配置作诗机器人的技能。
在机器人管理页面,进入左侧标签栏中的技能管理页面,新建写诗技能并进行技能配置。
创建技能
点击“创建技能”按钮,添加自定义技能,输入技能名称:作诗技能,如下图所示:
创建意图
技能创建完成后,点击进入写诗技能,在意图管理中点击“创建意图”按钮,如下图指导填写:
意图标识:poem
意图名称:作诗
然后点击“确认并继续设置”按钮,继续配置该意图。
添加用户问法语料
进入“poem”意图的“用户问法管理”,点击“用户问法语料”输入框下方的蓝色字体“批量添加用户问法语料”,复制下方的语料至弹出对话框,点击“确认”完成用户问法预料导入。
以秋思为题写首诗
作诗一首
写一首五言绝句
写一首诗
写个诗
写首七言绝句
来一个七言律诗
来首诗吧
用白云写一首诗
用秋思写个五言律诗
给我写个诗
语料添加完之后,可以得到如下结果:
添加槽位
往下滑动页面,找到“槽位管理”页面,分别创建槽位:poetryType(诗歌类型), poetryName(诗歌名称), acrostic(藏头诗)三个槽位。 槽位是触发意图的关键信息 。
然后点击“添加槽位”按钮,按照如下指导,添加poetryType槽位:
关联槽位:不关联
槽位标识:poetryType
槽位名称:诗歌类型
是否必须:是
输入框:请问诗歌类型是什么?
词典选择:POETRY_TYPE
答案候选:勾选
然后点击“确定”按钮。
再次点击“添加槽位”按钮,按照如下指导,添加poetryName槽位:
关联槽位:不关联
槽位标识:poetryName
槽位名称:诗歌名称
是否必须:是;
输入框:请问诗歌名称是什么?
词典选择:sys.any
答案候选:不勾选
然后点击“确定”按钮。
再次点击“添加槽位”按钮,按照如下指导,添加acrostic槽位:
关联槽位:不关联
槽位标识:acrostic
槽位名称:藏头诗
是否必须:是
输入框:请问需要藏头诗么?
词典选择:ACROSTIC
答案候选:不勾选
然后点击“确定”按钮。
三个槽位添加完成后,可以得到如下列表:
语料标注
往上滑动页面,回到“用户问法管理”,对“用户问法语料”列表中的语料进行标注。
选中关键词,然后使用槽位对关键词标注。例如:七言绝句——poetryType,秋思——poetryName。
标注完成后,如下图所示:
添加用户问法模板
在“用户问法管理”中的“用户问法模板”页面中添加模板。
点击“添加模板”按钮。模板内容如下图所示,在相应位置点击下方槽位名称插入相应槽位。完成配置后用户即可使用模板的问法与机器人进行对话。
添加第一个模板:
添加第二个模板:
两个问法模板添加完成后,可以看到如下列表:
机器人回复管理
配置通过函数的方式调用作诗接口。
创建函数
向下滑动页面,找到“机器人回复管理”页面。
选择“调用函数回复”,并点击右侧“创建新函数”按钮进入函数工作流控制台,如下图所示:
按照如下指导,填写参数:
模板:使用空模板函数名称:poem
所属应用:default
委托名称:不使用任务委托
运行时语言:Python2.7
函数执行入口:index.handler
代码上传方式:默认代码。
# -*- coding:utf-8 -*-
import json
import sys
import requests
import json
reload(sys)
sys.setdefaultencoding("utf-8")
type_dict = {"五言绝句":0,"七言绝句":1,"五言律诗":2,"七言律诗":3}
def handler (event, context):
token_response = requests.post("https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens",
headers={"Content-Type": "application/json"},
json={"auth": {"identity":{"password": {"user": {"domain": {"name": "账号名"},
"name": "用户名", "password": "密码"}},"methods": ["password"]},
"scope": {"project": {"name": "cn-north-4"}}}})
token = token_response.headers.get("X-Subject-Token")
project_id = json.loads(token_response.content).get("token").get("project").get("id")
slot_temp = json.dumps(event, ensure_ascii=False)
slot_info = json.loads(slot_temp)
poem_name = slot_info["slots"]["poetryName"][0]
poem_type = type_dict[slot_info["slots"]["poetryType"][0].encode("utf-8")]
poem_acrostic = slot_info["slots"]["acrostic"][0]
if (poem_acrostic == "true"):
poem_acrostic = True
else :
poem_acrostic = False
base_uri = "https://nlp-ext.cn-north-4.myhuaweicloud.com/v1/{}/nlg/poem"
response = requests.post(base_uri.format(project_id),
headers={"X-Auth-Token": token, "Content-Type": "application/json"},
json = {"type": poem_type, "title": poem_name, "acrostic": poem_acrostic})
if response.status_code == 200:
poem = json.loads(response.text.encode("utf-8"))["poem"]
return "\n".join(poem)
else:
return response.text
注意:
1. 需要修改代码中的账号名、用户名、密码为自己的真实信息(如果是主账号,用户名和账户名相同)
2. 代码中会调用自然语言处理服务的诗歌生成接口,该接口为收费接口,接口详情如下
https://apiexplorer.developer.huaweicloud.com/apiexplorer/debughistory?product=NLP&api=RunPoem
代码主要功能:获取槽位信息,调用写诗接口,返回接口调用结果。
最后点击“创建函数”按钮:
创建成功后,会自动跳转到函数配置页面。
配置函数
配置函数的超时时间,点击“配置”页签, 然后将执行超时时间改为10,如下图所示:
配置测试用例
点击右上角的“请选择测试事件”下拉框中的“配置测试事件”按钮,如下图所示:
在测试事件输入框中填入:
{"slots":{"poetryType":["五言绝句"],"poetryName":["秋思"],"acrostic":["true"]}}
保存测试事件后,点击“测试”按钮,查看测试结果,测试结果如下:
可以看见报错了,原因是我们还没订阅这个api,接下来去订阅一下
访问 https://console.huaweicloud.com/nlp/#/nlp/overview
找到下图的诗歌生成api,点击开通服务
继续测试就成功了!!!
选择函数回复返回 poem 意图管理页面,选择调用函数回复,在下拉框中选择已创建的函数 poem ,如下图所示:
然后点击页面下方的“保存”按钮,保存意图所有配置信息。
模型训练发布
在“写诗技能”页面中,进入“训练发布”页面,点击“训练新版本”按钮,勾选“用户常用问法”,技能阈值默认即可。点击确认开始模型训练,训练时长大概3-5分钟。
模型训练完成后,点击“发布”按钮发布模型。
体验作诗技能
模型发布完成后,即可通过点击机器人管理页面中右上角的“对话体验”按钮体验写诗机器人。(诗歌类型槽位已配置开启候选项,因此用户可通过点击响应类型进行自动回复。) 下图是一组对话样例:
{
"poem": [
"秋思",
"秋色已寥落,客心空自惊。",
"残荷余宿露,高柳失寒声。",
"岁月悲欢异,山川今昔情。",
"西风动归思,无复听砧声。"
]
}
到这里,对话机器人可以生成诗歌了,接下来大家可以结合不同的需求为机器人配置各项技能,实现不同场景下的多轮对话能力。
总结
关于此次的对话机器人实操就到这里了,整个过程挺容易上手,遇到小问题也能自己看文档解决,整个配置和实现过程是非常有趣的,华为云社区的产品也非常强大,基本满足了开发者的需求,继续加油!!
【我的华为云体验之旅】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/309059
- 点赞
- 收藏
- 关注作者
评论(0)