0
今年8月,雷锋网将在深圳举办一场盛况空前有全球影响力的人工智能与机器人创新大会。届时雷锋网将发布“人工智能&机器人Top25创新企业榜”榜单。目前,我们正在拜访人工智能、机器人领域的相关公司,从中筛选最终入选榜单的公司名单。
如果你也想加入我们的榜单之中,请联系:2020@leiphone.com。
机器人——这个词是不是每天都会出现在你的科技新闻推送中?从Facebook的机器人开发平台、到微软的机器人框架、到Taco Bell的Slack机器人。新闻也没法免疫。例如Quartz和Purple等平台都使用了机器人,使用了移动APP和短信界面来为新闻增添聊天一样自然的体验,而CNN的机器人会直接通过Facebook Messenger来给你发送定制化新闻。
机器人的诱惑力在于,新闻消费者可以以聊天一样的方式与其互动。但是,要自己打造机器人——这对于新闻媒体机构(以及所有非科技公司)来说,感觉都太惊悚了,不知道从哪儿入手。
此时你需要Wit.ai。它是一个很好的工具,可以帮你快速打造可以与人聊天的APP。它将所有复杂的细节都隐藏,所以你只要专心打造能用的东西就好,不需要自己动手去学习、编写世界上最尖端的机器学习和自然语言处理软件。
那么问题来了,用Wit.ai自己DIY一个聊天机器人,一共分几步?
首先,你需要设立机器人的基本架构。从我的经验来看,要利用Node.js和Express设立一个简单可用的Messenger机器人,可以去查看Facebook的“开始”(Getting Started)文档,非常有用。点击链接可以看到Github教程,例子中有一个完全可用的代码。如果你想用Python来打造自己的机器人,可以点击链接使用这个Flask例子。还有很多非常有料的Slack机器人教程,例如Scotch.io上面,点击链接看看如何用Node.js打造Slack机器人。是不是有非常多的干货?
这样,你就有了设立机器人的代码,你只要好好利用,让Facebook或者Slack可以与之互动就行。用Heroke来利用代码是一个比较方便的办法,传送门在此。
现在,我们就该进入Wit.ai了。首先创建一个账号,然后创建一个新申请。
在Wit.ai上为你的项目创建一个新申请,可以选择语言、是否公开等选项。图片来源:美国西北大学。
申请后,你会进入你APP的“故事”页面。“故事”可以呈现你与机器人之间会进行什么类型的对话。举个例子,我们可以设想我们要打造一个名叫“首都机器人”的APP,机器人会告诉你所有国家的首都是什么。我们的第一个故事可能大概会是这样:
作为“故事”页面,这里展示了用户可以对机器人说什么,例如:“尼日利亚的首都是什么?”图片来源:西北大学。
然后,我们告诉Wit.ai机器人该如何回答。在这个例子中,我们需要“首都”机器人回复用户需要的城市名称。(我猜你想要做的功能应该不是猜首都游戏,不过,这只是一个例子,让你知道Wit.ai如何使用。)
我们的第一步,是抓取地点实体。我们可以在句子中将位置标亮,然后点击“增加一个新按钮”。我们可以注意到,Wit已经有很多预先布置的实体供用户使用,从中我们可以使用wit/location(位置)实体。
我们可以点击右侧的“机器人说…”按钮,来为机器人的回复建立结构。这里,我们可以写明我们希望机器人说什么。因为我们的机器人只要回复位置就好了,不如让它说“你想知道尼日利亚的首都”。我们可以让Wit在句子中自动加入抓取到的位置实体,在位置实体的前后加入大括号。
通过标亮“尼日利亚”,我们可以将其标记为一个wit/location实体。“故事”页面呈现了用户可能如何与我们的机器人互动,这让Wit.ai知道它该在文章中寻找例如“尼日利亚”的位置实体。然后我们可以在“说”功能中增加细节,让Wit.ai知道机器人该如何回复信息。举个例子,我们可以让机器人回复在用户信息中找到的位置实体。图片来源西北大学。
只要点击“~”,我们可以在Wit.ai的网站上直接与Wit.ai服务聊天。虽然我们只写了尼日利亚的例子,但是Wit.ai可以将我们的例子进行抽象总结,并应用到其他用户可能输入的国家名字上。
虽然我们只用尼日利亚的例子训练了机器人,Wit.ai可以抽象总结出我们的概念,然后我们可以将故事覆盖读者提出的所有国家名字和问题结构。图片来源:西北大学。
在“首都”机器人的例子中,我们可以用一个预先定义的Wit.ai实体来抽取用户信息中的位置信息。Wit.ai自带的预定义实体列表已经挺强大了,不过我们还是可以自己定义。
为了理解用户定义实体到底是什么意思,让我们来看一个新的例子:假设我们要打造一个名叫“感觉”的机器人。这个机器人可以给你发信息,来呼应你现在的情绪。例如,如果你感觉很伤感,你可以给机器人发消息说“我很伤感”,机器人就会给你回复一条伤感的信息。和之前一样,我们最开始先让机器人回复用户发给它的情感。
为此我们需要一个新的实体。就叫做“情感”好了。要设立一个新的实体,我们可以跳转去“理解(Understanding)”标签页,在“测试新表达”区域输入一个新的训练例子。针对“感觉”机器人,我们可以输入“我很伤感”。我们可以标记“伤感”,然后加入一个这样的定制实体:
使用Wit.ai的“理解”标签页我们可以创建定制实体,然后训练Wit.ai在用户短信中发现相应实体。图片来源西北大学。
我们可以继续做出更多的情感——开心、激动、忧郁、着迷等等,每增加一种情感后,点击“生效”(Validate)按键。最后,你会看到Wit.ai会开始在你输入的表达案例中自动标记出情感。这样,我们就可以训练Wit.ai识别出我们为自己应用而定制的实体。
需要留意的是,Wit.ai有一些具体的“搜索策略”用于帮助训练实体。为了我们演示起见,我们会想要“自由文本”(free text)和“关键字”(keywords)集合,但是其他更加复杂的表达可能需要选择“特征”(trait)。你可以点击链接,在Wit.ai的文档中了解更多关于其实体搜索策略。
现在,我们可以增加一个“故事”,使用我们的情感实体。可以看到,Wit.ai现在可以根据用户的输入信息中回复情感了。
有一个“故事”和一个定制情感实体,Wit.ai已经可以概括并选出用户发送信息中的情感。图片来源:西北大学。
你可能已经注意到了,每一个“故事”页面的最右边都有一个“融合”(merge)功能。这个功能可以为整个对话语境带来更多数据。这让机器人可以记住用户早前信息中出现过的实体。用我们的“情感”机器人作为例子,例如,用户先说“我很伤感”,机器人回复了一条伤感的信息。如果用户说“跟我说点别的呗”,那么情感机器人就得记住之前用户在第一条信息中所说到的情感,这样才能发送一条不同内容的伤感回复。
只要直接将实体名字加入融合功能,就能为语境增加数据。现在,数据就可以保存下来,并且在聊天期间都一直存在,让机器人可以根据需要参考过往数据。
到这一步,我们通过连接中的教程,应该已经可以打造一个基础的机器人了。但是,我们还得知道如何用Wit.ai来为机器人设定一些基本的回复模式。我们如何整合呢?
因此,最后的一步就是将Wit.ai整合进入你的机器人服务器的代码中。Wit.ai有记录完善的开源数据库和SDK(软件开发工具包),可用于iOS、Ruby、Node.js和Python,你可以进入Wit.ai Github页面获得。这能让你的机器人与Wit.ai平台交互更加简便,每一个仓库都会有文档介绍如何将Wit.ai加入你的服务器。一旦你将Wit.ai的客户端加入服务器代码,你可以发送服务器从用户中抓取的信息,然后使用类似Node.js里面client.messages()的功能,将信息交给Wit.ai。Wit.ai会回复你在“故事”中指明的信息,以及语境和抽取的实体。
恩,要做一个可以聊天的机器人,就是这五步。第六步,就是赶紧动手造一个钢铁侠同款的Jarvis!
雷峰网原创文章,未经授权禁止转载。详情见转载须知。