嗨,我是艾娃,如果对我的服务满意,请点赞!——跨领域虚拟助理是如何构造的?...

2023-11-11 23:59

本文主要是介绍嗨,我是艾娃,如果对我的服务满意,请点赞!——跨领域虚拟助理是如何构造的?...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

导语:看过电影《超能陆战队(Big Hero 6)》的朋友,想必对那个健康助手机器人——大白(Baymax)印象深刻吧?这里,也有一款很酷的智能助手——艾娃(AWA),其全名为“跨领域虚拟助理”(Agnostic Virtual Assistant,AWA)。如果说大白还是一个虚幻的角色,那么“艾娃”则是一个真实的、在研的、你我都能参与的开源项目。如果你也想开发一个类似于大白的智能助手,那么“艾娃”这个项目,就是一个绝佳的练手机会(至少让你知道“猪”是怎么跑的)。


以下为“艾娃”项目说明文档部分编译内容,读者朋友可点击此处查看原文

c710afeacebcc5caa383879363d37d2a4c6c354e

“艾娃”项目的主要目的在于,为任意领域辅助创建一个聪慧的、快速反映的虚拟助手。这是一个基于NodeJS的开源项目,任何对此项目感兴趣的人,都可以出点力、发点热,让“艾娃”愈发聪明、贴心。

如今,已有很多智能助手,渗透于我们的工作和生活之中。在未来几年,这样的趋势,将会愈发明显。我们知道,在本质上,这些助手,都是一些应用程序,依靠人工智能引擎,协助人类便捷地完成某类工作。

很显然,在未来,人们会越来越少利用点击/动作(click/action),来操控这类智能程序,而更多的是,利用对话式(conversational)的交互,来表明自己的目的。出于这个原因,“艾娃”项目就是为了创建一个跨领域的和可重用的系统,以帮助开发者创建任意领域的虚拟助理。

关于语言处理的小故事...以及“艾娃”是如何工作的?

如果你还从没跟虚拟助理/机器人打过交道,那么你需要了解一点这类智能程序的基本运行模式,通常来说,它需要分析一个给定的输入(通常是一句话),然后给出一个语义值(即它的理解和反应)。

要做到这一点,不可避免地,我们要用到自然语言处理(Natural Language Processing,NLP)技术,“艾娃”利用NLP技术,结合上下文场景,做出必要反应。例如,你给“艾娃”下一个指令:

"I need an appointment with the dentist tomorrow at 2pm in London"(明天下午在伦敦我需要预约一个牙医)

为了理解这句话的内涵,“艾娃”就需要为这句话创建一个分析场景,例如:

主语:我(I)

行为:需要(need)

:1

宾语:预约(appointment)

项目:牙医(the dentist)

何时:周五2016年6月11日14:00:00

位置:伦敦(London)

“艾娃”据此给出一个上下文信息:

语言=英语(EN)

类型=陈述句

情绪=0(中性)

分类器=/旅游/过境

特征文件:如果当前用户以前与“艾娃”聊过,则返回聊天记录

“艾娃”的行为取向,自然取决于“构造者”的设置。接下来的一步是,处理“构造者”设置的所有意图。所谓意图呢,无非就是在理解场景(句子要素之间的关系)和上下文信息基础上,给出一系列的规则。例如:

有位置信息吗?是的,伦敦

是负面情绪吗?不,是中性的

知道在什么时候吗?是的,明天下午2点以后

如果上下文理解是成功的,那么意图就显而易见了。它会落实为一个或多个行为,这些行为,将以应答的模式,反馈给用户。例如说,“艾娃”会自动做到:

•在$ { LOCATION}$ {DATE}和${ITEM}为要素,自动在用户的手机日历中设置预约。

以$开头并以花括号括起来的是变量,在这里,它们分别是伦敦、2016年6月11日14:00:00、牙医

请注意,在手机日历中设置预约,是“艾娃”在正确理解语意的基础上的自主行为,否则“智能”何以体现?

有点心动吧?心动不如行动,接下来,我们要做到的就是——

安装“艾娃”

“艾娃”(AVA)是可以用npm来安装(注:NPM全称为node package manager,是随同NodeJS一起安装的包管理工具):


$ npm install --save ava-ia

艾娃”的基本用法,读者可以参阅该项目文档说明下面我们简要介绍有关“艾娃”的2个重要的实例方法。

艾娃”中的实例方法

intent()

在“艾娃”中,第一个重要的方法就是intent(),intent意为“意图”,顾名思义,这种方法的目的,就是教懂“艾娃”,以用什么样的形式来答复你。如前文介绍,“艾娃”的核心部分,就是由若干“意图”(intents)和“行为”(Actions)构成的。在实现上,这些意图”和“行为”,实质上,都是一些是简单的函数,它们接收状态参数,通过“运算”,然后据此给出一个内部反应。

intent方法是可链接的(chainable),这意味着,你可以将所有你要表达的意图,层层附加起来。意图越多,遇事时,“艾娃”就会有为多元的表现,看起来就会更聪明。intent方法通常需要两个参数:

  • intent: 想要链接的函数
  • actions: 行为函数(或者行为函数数组),当“意图”被充分理解后,这些函数就会被调用。

现在举例如下:

import { weather } from `ava-ia/lib/intents`;
import { forecastYahoo } from `ava-ia/lib/actions`;ava.intent(weather, forecastYahoo);

上面代码前两行的功能是,分别从“意图库”导入“天气”,从“行为库”导入“雅虎天气预报”然后第三行代码是用“(天气,雅虎天气预报)”作为参数对,形成intent方法:ava.intent(weather, forecastYahoo)。

如果我们想把同一个intent方法,附加两个行为(action),也非常简单,仅仅需要导入新的行为库,然后在行为参数里用方括号[]将多个“行为”,以逗号“,”隔开,形成一个“行为”数组即可,如下所示:


import { forecastYahoo, forecastMSN } from `ava-ia/lib/actions`;ava.intent(weather, [forecastYahoo, forecastMSN]);

  单一方案,不存在抉择。 那么倘若有多个行为方案呢,又该如何抉择呢,就要看哪个行为反应快了。比如说,上面的代码中,在了解天气“意图”中,有两个行为方案:来自雅虎的天气预报和有来自MSN的天气预报,采取何种行为,这就要看雅虎和MSN哪个网站响应的快了!

 

如果你想创建一系列的“意图(intent)”方法,这也非常方便,你需要做的就是导入更多的“意图”库和“行为”库,然后通过“.”操作,追加更多(意图,行为)对,如下所示:


import { weather, movie } from `ava-ia/lib/intents`;
import { forecastYahoo, movieDB } from `ava-ia/lib/actions`;ava.intent(weather, forecastYahoo).intent(movie, movieDB);

listen()

第二个比较重要的方法就是listen()了。这个方法的目的就是,想办法和“艾娃”交谈,让它能听懂我们的话。

listen()方法接收的是一个字符串(string)参数,输出的就是一个“意愿”(Promise),如下所示:

 
ava.listen('Do you know if tomorrow will rain in Bangkok?').then(state => console.log(state)).catch(error => console.log(state)) 


如果“意愿”得以成功描述,那么将返回一个包括若干状态(state)的对象,这些状态包含了意图的结果。这些状态属性包括:

  • rawSentence(原句):原始句子的字符串。
  • language(语言):原始句子的符合ISO(CCA2)语言规范的字符编码。
  • sentence(句子):原始句子字符串的英文翻译版
  • taxonomy(分类):如果配置文件config.json 包含了AlchemyAPI 编码,则有此项。这套编码包括了一个有关分类的数组
  • classifier分类器):包含一个单词数组,以确定句子的意义。
  • type(类型):句子有三种类型:陈述句、疑问句或感叹句。
  • Topics主题):一个数组,包含判断句子主旨的最重要的单词
  • Tokens令牌):包含一个根词的数组。
  • 关系(relations):描述一个句子中各个对象之间的关系:
    • 主语
    • 副词
    • 行为
    • 宾语
    • 何时
    • 位置
  • sentiment(情绪):一个描述情绪的数值(-5为最消极,0表示中性,+5为最积极)。

一个对象的最重要状态,莫过于它的“行为(action)”,这个“行为”对象包括如下属性:

  • engine(引擎): 一个字符串,表明“行为”的名称。
  • ms毫秒: 一个数字,描述获取一个可用行为的毫秒数。
  • entity(实体): 一个字符串,用以描述行为的内容
  • title(标题): 一个字符串
  • text(文本)一个字符串(可选)
  • value(值): 一个对象,用以描述有关内容的显式信息(可选)。
  • image(镜像): 一个字符串超级连接(可选)
  • url(超级连接): 一个包括更多信息的超级链接(可选)。
  • related(相关信息): 一个带有额外信息的对象 (可选)。
  • date(日期): 一个日期(可选)

为了防止“艾娃”找不到某个语句适用的“行为”,listen()方法允许返回一个错误信息,然后用catch方法来“捕获”这个错误信息,以备调试或后期优化。

进一步了解“艾娃”

如果内置的“艾娃”方法,其功能不能满足你的需求,你还可以扩展“艾娃”的功能。“艾娃”的功能扩展,也是非常容易的。我们知道,所有预定义的“意图”和“行动”,其实都是一些具有固定特征的函数。所以,只要你遵循的函数的输入接口标准,就可以轻松地创建属于自己的“艾娃”,详见文档说明如果你想了解更多有关“艾娃”信息,请看看相关的维基信息。

千里之行,始于足下。“大白”也不是一日构建起来的。现在的“艾娃”可能看起来还比较幼稚,但正是因为如此,才更加期待你的参与,只有这样,“艾娃”的成长,才会更加茁壮。


译者介绍:张玉宏,著有《品味大数据》一书

这篇关于嗨,我是艾娃,如果对我的服务满意,请点赞!——跨领域虚拟助理是如何构造的?...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/393698

相关文章

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

CCF推荐C类会议和期刊总结(计算机网络领域)

CCF推荐C类会议和期刊总结(计算机网络领域) 在计算机网络领域,中国计算机学会(CCF)推荐的C类会议和期刊为研究者提供了广泛的学术交流平台。以下是对所有C类会议和期刊的总结,包括全称、出版社、dblp文献网址以及所属领域。 目录 CCF推荐C类会议和期刊总结(计算机网络领域) C类期刊 1. Ad Hoc Networks 2. CC 3. TNSM 4. IET Com

C++中类的构造函数调用顺序

当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的 构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止。 简而言之,对象是由“底层向上”开始构造的。因为,构造函数一开始构造时,总是 要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时, 如果无专门说明,就调用直接基类的默认构造函数。在对象析构时,其顺序正好相反。

AF透明模式/虚拟网线模式组网部署

透明模式组网 实验拓扑  防火墙基本配置 接口配置 eth1  eth3   放通策略  1. 内网用户上班时间(9:00-17:00)不允许看视频、玩游戏及网上购物,其余时 间访问互联网不受限制;(20 分) 应用控制策略   2. 互联网用户只允许访问内网两台服务器的 WEB、SSH 和远程桌面服务,其余 服务均不允许访问;(20 分) 外网访问内网的限制策略   虚拟网线模式组网 实

BERN2(生物医学领域)命名实体识别与命名规范化工具

BERN2: an advanced neural biomedical named entity recognition and normalization tool 《Bioinformatics》2022 1 摘要 NER和NEN:在生物医学自然语言处理中,NER和NEN是关键任务,它们使得从生物医学文献中自动提取实体(如疾病和药物)成为可能。 BERN2:BERN2是一个工具,

Java构造和解析Json数据的两种方法(json-lib构造和解析Json数据, org.json构造和解析Json数据)

在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。 一、介绍       JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json

PMBOK® 第六版 项目进度管理知识领域

目录 读后感—PMBOK第六版 目录 提到“进度”,大家都能直观理解其含义。有统计指出,现在项目的延迟交付比例越来越高,并且这一趋势持续上升。造成项目延期的原因是多方面的,常见的原因之一是在项目初期,由于时间充裕,往往会做一些与项目无关或超出项目范围的工作,导致项目后期不得不疯狂赶工。 另一种常见问题是过分关注单个活动的精确执行,而忽略了对整个项目进度的宏观把控,这种做法可能会导致团队失

CF #278 (Div. 2) B.(暴力枚举+推导公式+数学构造)

B. Candy Boxes time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/488/problem/B There