学习工作记录
这是第十四周。考完试了,开始认真做项目、刷代码、学建站了。
一 、 文献阅读
《Almond: The Architecture of an Open, Crowdsourced,Privacy-Preserving, Programmable Virtual Assistant》
www的文章,写的很好,学到了很多
Abstract
本文介绍了Almond的架构,这是一个开放的,众包的,隐私保护和可编程的虚拟助手,用于在线服务和物联网。Thingpedia是一个开源API及其自然语言界面的众包公共知识库。我们的提案解决了虚拟助理技术面临的四大挑战:通用性,互操作性,隐私性和可用性。通用性由Thingpedia众包解决,而互操作性由ThingTalk提供,ThingTalk是一种高级特定语言,通过开放API连接多个设备或服务。为了保护隐私,用户凭据和用户数据,由我们的开源软件ThingSystem管理,可以在个人手机或家庭服务器上运行。Almond是第一个允许用户以自然语言指定触发操作任务的虚拟助手。尽管缺乏真实的使用数据,但我们的实验表明,当熟悉其功能的用户可以正确说出指令时,Almond可以理解大约40%的复杂任务。
I. INTRODUCTION
1.1 简介
虚拟助手可以极大地简化和改善我们的生活。今天,一个两岁大的孩子可以通过简单地说“Alexa,播放一首我最喜欢的歌曲”来播放她喜欢的歌曲。我们可以简单地使用自然语言让我们的虚拟助手与社交媒体互动,购买电影票,甚至管理我们的财务和医疗记录。
虚拟助手最终可能是我们所有数字服务的接口。作为中介,虚拟助手将查看我们的所有个人数据。 因此,从亚马逊,苹果,Facebook,谷歌到微软等所有主要公司都在竞争创造最好的虚拟助手。就像今天有一个占主导地位的搜索引擎一样,是否会有一家专门的公司提供世界上占主导地位的虚拟助手?
1.2 Almond架构
Almond的架构
-
Thingpedia:是一个众包存储库,包含用于任何设备或服务的自然语言接口和开放API
-
ThingSystem:为了保护隐私,所有个人数据和凭证都存储在ThingSystem中,ThingSystem的代码是开源的,可以在个人电话或家庭服务器上运行
-
ThinkTalk:是我们开发的一种高级语言,用于将来自不同服务的开放API连接在一起
1.3 IFTTT(If This Than That)
Almond是唯一允许用户以自然语言指定触发器-动作命令的虚拟助手。例如,用户可以指示Almond“在警报开启时安全摄像头检测到动作时通知他”。Almond是可编程的:它可以将这样的句子翻译成ThingTalk代码,只要功能“通知”,“检测安全摄像头上的动作”和“警报开启”都可以在Thingpedia中找到。
最接近的可用系统是If This Than That(IFTTT),它为用户提供了将两个API连接在一起的Web界面。然而,IFTTT没有自然的语言界面,也没有像ThingTalk这样的正式语言,它无法处理“警报开启时”等条件。
IFTTT 可以代替你执行各种强大的任务。在其中关联多个账户,如Facebook、Twitter、Google日历、印象笔记等,便可调用无数的触发方案。当符合设定的条件时,便触发相应的动作。如图,当uber司机到来的时候,打开飞利浦电灯;将做好的印象笔记发送到slack群聊天中;让亚马逊Alexa与谷歌各App相连从而执行更多的功能。遗憾的是它们并不是靠自然语言来设定的。
II. ALMOND VIRTUAL ASSISTANT
2.1 通用性
本节介绍了Almond可以做什么以及用户如何与Almond互动。Almond的独特之处在于它可以根据自然语言命令执行触发操作任务。此外,它是完全可扩展的:它的功能随着Thingpedia的增长而增长。
Almond从Thingpedia中获得了它的通用性。Thingpedia是一个存储库,旨在捕获所有不同Web服务和IoT设备的接口。 虽然Almond可以访问公共服务,如天气频道或优步,但它的优势在于管理个人网络帐户和具有隐私的设备并与之接口。
2.2表达形式
我们将Almond接受的命令分类为原始操作和复合操作。最基本的原始命令是对设备的直接操作或查询。Almond还支持常设查询或监视器,以在触发感兴趣的事件时通知用户。
图2所示,可以通过电子邮件向每日天气更新发送电子邮件,说“每天早上6点获取最新天气并通过电子邮件发送给bob”,其中“每天早上6点”是触发器,“获取最新天气 “是一个查询,”向bob发送电子邮件“是一个动作。
2.3 UI
为了向新手用户展示Almond的功能范围,我们开发了一个Almond命令的“备忘单”。 备忘单按接口列出条目以及一个小图标,以便用户可以一目了然地直观地扫描整个文档。 在每个接口下面是按触发器,查询,以自然形式通过关键字when,get,do分别列出的操作排序的命令列表。以便用户迅速掌握
-
用户还可以通过单击上方的Help按钮来浏览应用程序,然后Almond以菜单的形式按类别列出支持的设备与服务。 然后,选择社交网络,再选择推特,这时候会给出一些选项,让用户自己填写,完成命令。
-
为了帮助高级用户最大化Almond的功能,我们提供了一种基于菜单的简单方法来创建复合命令。 用户可以通过单击相应的when,get,do按钮来选择构成复合命令的基本命令。 然后Almond提示用户输入,并询问后续问题以填补剩下的空白。
-
设置复合命令:当我在instagram上上传一张照片的时候,almond会问该选择什么操作,选择do,然后almond会问要do 什么东西,这时候回答在推特上推一张图片,almond会问什么图片。这时候可以选择来自instagram的图片,也就是你上传到instagram上的那张。然后你以后每次在instagram上传照片的时候,almond会帮你将这张照片发到推特上。
2.4 用户实例
- 1.简单,通用的界面:Alice喜欢Almond,因为它为许多设备提供了统一的界面。 当她醒来时,她告诉Almond“打开灯”并询问“天气怎么样?”,“优步的价格是多少?”。 一旦她到达工作岗位,她就要求Almond“在我日历上的活动开始时将手机设置为静音”。
- 2.量化自我:Bob使用Almond来监控他的习惯,他完全清楚他可以在保持通用界面的同时切换设备。 他目前使用Almond作为他的Jawbone UP的界面,找到“我昨晚睡了多少?”,“我今天采取了多少步骤?”。由于健康数据是敏感的,因此Bob关注隐私,并希望数据仅存储在此手机上。 此外,通过使用Almond,Bob可以随时切换到Fitbit而无需学习新界面。
- 3.媒体过滤:Carol是一名软件开发人员,通过使用Almond根据自己的喜好自定义所有社交帐户来节省时间。例如,她告诉Almond“在Twitter上关注@justinbieber”,这样她会在@justinbieber发推文时得到通知。在所有社交媒体上,Almond让Carol专注于她感兴趣的内容。她还通过设置“Monitor pushes to Github”和“Monitor Slack在频道#urgent上更新”来使用Almond进行工作。
- 4.家庭自动化:Dan喜欢使用Almond轻松连接他的小工具。为了节省能源,他要求Almond“如果温度低于70华氏度,请关掉我的暖通空调。”他的妻子夏娃是一个鸟类爱好者。所以,他设置了一个蜂鸟喂食器并指向它的相机,并要求Almond“如果我的相机上有动静,通过Omlet聊天将视频发送给爱娃”。
III. SYSTEM ARCHITECTURE
3.1 Thingpedia
-
Thingpedia是物联网应用程序的百科全书。 就像维基百科存储有关世界的知识一样,Thingpedia存储有关世界各地设备的知识。 (本文中设备既可以指物理设备如灯泡,也可以指软件如推特)维基百科是围绕文章组织的; Thingpedia围绕设备进行组织,例如Twitter,灯泡或恒温器。 每个设备都有Thingpedia上的条目。 Thingpedia条目存储表示人类如何引用设备并与设备交互的自然语言界面,以及与设备API相对应的可执行规范。
-
该条目的完整属性列表如图5所示。每个条目包括诸如版本号,包名,通信协议和发现信息之类的信息。 此外,它还有一个或多个功能,可以是触发器(即监听事件),查询(即检索数据)和动作(即改变状态)。 这些函数是通过将低级设备API包装在JavaScript包中实现的,可以根据需要由ThingSystem下载。 对于每个函数,制造商还提供参数规范,一些自然语言注释,我们在图6中描述,以及一些用于激活它的示例句子。
- 1.不带参数的句子,打开LG 网络电视
- 2.解释这个参数,Power参数是枚举类型,为on或者off
- 3.跟进询问:对于带参数的power来说,需要指明状态是on或者off
- 4.模板例句:对于带power参数的例句来讲,power的值可以是用户填写或者由自然语言处理算法得出。
- 5.用户可以在命令执行前确认该命令,用户可以清楚地知道这条命令是控制LG网络电视开关的。
3.2ThingTalk
ThingTalk是我们为连接物联网而开发的高级语言。 它将设备的API连接在一起,同时隐藏设备的配置和通信的细节。
例如,这是一个ThingTalk程序,它使用包含“cat”作为图片的标签在Facebook上发布Instagram照片:
上面的代码读作“如果我在Instagram上上传一张带有某图片网址,标题和主题标签的图片,而hashtags包含值‘cat’,则将图片发布到Facebook,其中文本与url均来自于instagram中的信息 “。 ThingTalk程序是有以下形式的规则:
触发条件(过滤条件)执行询问(过滤条件)执行操作
对于上面的例子,是没有执行询问的。直接是触发器 –动作
原始Almond命令在ThingTalk中使用简并规则表示,现在使用内置触发器,表示现在要执行规则,内置动作notify,表示将结果报告给用户。 图7总结了Almond命令和ThingTalk表单之间的对应关系。
action用thingtalk表示 即now指向action,query也是如此,但是多一个内置动作notify表示将结果报告给用户,而监测到某种状态将引发一个trigger变化,进而触发notify将结果报告给用户。下面的操作即上面原始操作的组合。
3.3 ThingSystem
ThingSystem维护属于该用户的所有设备的列表。对于每个设备,ThingSystem存储实例标识符,IP或蓝牙地址以及访问它的凭据。 设备列表上形成用户的命名空间,其中设备可以按类型调用。然后,命名空间用于将抽象名称“twitter”映射到用户拥有的特定Twitter帐户,或“tv”映射到特定电视及其网络地址。
虽然Thingpedia包含所有公共信息,但每个用户都有自己的ThingSystem来存储有关其配置的设备和命令的信息。ThingSystem是可移植的,可以在手机或云端运行。
用户配置设备时添会将设备加到列表中。配置包括4个步骤:映射,加载,验证和保存。 例如,要配置“twitter”,将执行以下操作:
-
1.映射:“twitter”被映射到其Thingpedia条目(“com.twitter”,版本:22,配置类型:OAuth)
-
2.加载:从Thingpedia服务器下载代码包“com.twitter-v22.zip”并加载
-
3.身份验证:用户被定向到Twitter的OAuth登录页面并要求提供凭据
-
4.保存:将用户ID和访问令牌添加到命名空间,并保存条目
IV. LANGUAGE TO CODE
4.1数据训练
在此使用Amazon Mechanical Turk worker(亚马逊人工智能劳工),要求其创建正确的培训样本是不合理的,因为它需要创建
- (1)ThingTalk程序,其中包含参数
- (2)其自然语言的完整规范。
我们的方法是使用每个Thingpedia条目中的信息来创ThingTalk程序的样本及其相应的自然语言描述; 然后,我们众包释义,以达到更自然的句子。
首先,我们使用ThingTalk语法生成一组随机候选程序,均匀地采样支持的函数对并随机分配参数。Thingpedia中的每个条目都包含一个确认字符串,虚拟助手会在执行任何操作之前询问用户。 我们将与生成的程序中的每个函数相关联的确认字符串组合在一起以创建合成句子。请注意,这些句子通常非常笨拙且难以理解; 我们使用一组启发式方法使它们更容易理解。
接下来,我们要求劳工为每个合成句提供三个释义。使用3种不同的释义确保了训练集的可变性,并扩展了机器学习在训练期间可以观察到的词汇量。 另外,因为这些程序是随机生成的,所以它们可能没有意义。 因此,当句子难以理解时,我们允许劳工回答“不知道”,并且我们从训练集中删除这些程序。
图8显示了3个ThingTalk程序,它们相应的合成句子以及可能的释义。如第一个thingtalk程序,时间间隔为1天,获得某张照片,然后触发通知操作。可以人工合成一句,每一天取得一张关于猫的照片,它的释义是每天给我发送一张关于猫的图片
V. CROWDSOURCING THINGPEDIA
开发者可以为Thingpedia做出贡献吗? 我们让一个班级的60名学生向Thingpedia提交参赛作品。 这些大多是计算机科学研究生水平的学生,有一些本科生。 我们提供了一个建议设备列表供学生选择,但学生们也自己想出了一些设备。 他们共写了57个条目,其中45个有效。 这些设备涵盖各种领域,包括媒体,社交网络,家庭自动化,通信,数据管理,健康和其他各种服务。 图9显示了提交的设备类别,以及每个类别中的设备,功能和句子数量。
写一条Thingpedia条目有多难? 大多数工作在于查找文档,选择正确的API并将它们映射到有用的句子。 通过众包,不同人的不同专业知识可以极大地帮助这一过程。
VI. VIRTUAL ASSISTANT EXPERIMENT
6.1训练Almond
为了训练我们的机器学习算法,我们使用3个数据集:基本集,释义集和作者集。
基本集是通过Thingpedia示例句子自动生成的,通过用代表值替换每个参数占位符(例如,给定Thingpedia示例“turn $power my tv”我们生成“打开我的电视”和“关闭我的电视”)。基本集为原始命令提供了有效的培训,并保证了新设备的基本可扩展性。
释义集由Mechanical Turk劳工生成,如4.1节所述。 释义集的目标是为过滤器和参数组合提供覆盖,以及学习复合命令的释义。
作者集是本文作者编写的一小组现实命令,用于指导机器学习向有用的程序学习。
每当Almond不确定它是否能理解自然语言输入时,它会返回多个答案供用户选择。因此,为了评估Almond,我们判断正确的答案在前1个,3个和5个匹配中选择。
-
1.如柱形图,每个测试集的左边为原始语句,右边为符合语句,三种颜色从深蓝到浅蓝代表正确答案的候选个数的准确率,很明显,给的越多正确的可能性越高。并且通过释义解析对于原始句子表现良好,因为测试句子与训练句子具有显着的词汇重叠。 复合命令很难解析,因为参数组合和值有更多可能的选择。
-
2.解析器获得了原始句子的前1个准确度为34%,前3个为54%,前5个为65%。 在复合句中,它实现了前1个准确度为22%,前3个为31%,前5个为33%。 与通过释义测试获得的基线准确度相比,准确度显着下降。 我们提供菜单驱动界面以及自然语言界面的方法提供了随着时间的推移获得更多训练数据的方法
-
3.解析器在原始命令前1个获得80%的准确率,在前3个和5个中获得94%,复合命令中在前1个获得41%,在前3个和5个分别获得50%和53% 。
尽管没有真实的用户数据,解析器的准确率达到了40%; 我们希望当用户体验我们的系统并生成更多真实数据时,可以获得更好的结果。
VII. RELATED WORK
-
虚拟助手。亚马逊的Alexa是唯一可以通过第三方将自己提供的“技能”与第三方服务互动结合的系统。其他商业系统仅响应由制造它们的公司定义的固定数量的查询。
-
物联网平台。迪克森等人[8]介绍HomeOS,“家庭操作系统”。该项目的目标已被废弃,其目的是为家庭自动化智能设备构建一系列接口。 与Thingpedia不同,HomeOS不是开源的,不允许公开贡献,仅限于家庭自动化研究的用例。
-
在商业方面,有几家公司试图建立自己的物联网堆栈,包括Samsung SmartThings [23],Google Weave [10]和Apple HomeKit [2]。 这些系统是垂直设计的,与虚拟助手和云堆栈一起,是封闭的,不能相互操作。
-
触发动作编程。构建触发器 - 动作编程系统的一个值得注意的尝试是CAMP [25]。它们包括一个有限的“自然语言”系统来描述基于小句子的规则,这些小句子以类似小磁铁的方式粘在一起。
二 、 项目进展
1.Spring boot连接Neo4j
2.解析XML配置文件
3.编写XML配置文件
三 、工作内容
1.这周任务完成情况
任务 | 完成情况 | 备注 |
---|---|---|
好好复习,把算法考好 | 完成 | 考得还可以,笔试题目比平时作业简单多了。。。 |
复习数值分析,看看矩阵的ppt | 未完成 | 没看,光顾着看论文和写代码了 |
连接Neo4j数据库 | 未完成 | 好气,连不上 |
解析XML 文件构建对象 | 未完成 | 完成了解析和生成xml文档,但是还没生成对象 |
2.下周(第15周)任务
- 重温下Node.js,学习下建站
- 连上Neo4j数据库
- 完成解析XML 部分并编写设备映射
- 复习数值分析的矩阵计算部分
四 、 总结心得
这个礼拜主要是在考算法和看论文,并且利用Dom4j完成了XML文件的生成与解析,并编写了设备的XML 配置文件并解析成功,下一步就是完成设备映射和Neo4j数据库的连接,将创建的对象映射到数据库之中。下个学期要工程实践,需要用到前端后台,所以我要尽快重温Node.js,虽然spring也还可以,但是相对起来比较复杂。