首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Watson Conversation 对话原理以及高级应用-1

Watson Conversation 对话原理以及高级应用-1

IBM 云平台提供了认知计算的解决方法,其中 Watson Conversation 提供了构建聊天机器人的服务,本系列文章主要介绍了                Conversation 服务中的 dialog 的原理以及高级应用构建。
Watson                Conversation 对话介绍对话功能是 Watson Conversation 里的又一特点,对话与简单的 QA                问答不太一样,它是一个系列的对话组合,并且要理解上下文,而如何定义一个对话,以及如何理解上下文是 Watson Conversation                Dialog 的处理重点。对话系统是根据用户输入的意图和实体,根据上下文与用户交互,并返回用户有用的信息。 Watson                返回给用户的结果可能是类似于"where can I get some                gas?"的结果或者是一些类似于命令的执行,比如"打开收音机"。意图和实体的丰富程度决定了 Watson 回答问题的准确程度,或者 Watson                通过与用户的更多交互来自我学习,使机器越来越智能。例如:一个用问: "Where can I get some food?"                ,你需要明确是需要找一个餐厅还是找一个快餐店打包。
对话框概览对话通过一个树形结构来标示逻辑关系的。一个分支表示一个意图。分支由对话节点、对话流等内容构成:
对话节点每一个对话节点至少包括一个条件和一个返回内容。
图 1. 对话节点示意图 1
  • 条件:指定用户在输入内容时触发节点的指定的条件信息。这些条件信息包括一个指定的意图和实体值,或者上下文变量。
  • 返回内容: Watson 返回给用户的表达内容。
我们可以把上面的条件和返回内容看成是 if / then 的形式,如果条件为真,就返回内容。
例如,当用户输入的内容通过 NLP 处理后包含 #cupcake-menu 意图就会触发以下节点。
图 2. 对话节点示意图 2
一个条件和返回内容的单节点可以处理简单的内容。但是更多的时候并不是这样,用户有更多复杂的请求内容,此时我们需要新增更多的子节点来满足问题的复杂性处理。
图 3. 对话节点示意图                    3
对话流对话流的处理流程如下:
图 4. 对话流示意图 1
当它沿树向下行时,如果服务找到满足的条件,它将触发该节点。 然后,它在触发节点上从左到右移动,以针对任何子节点条件检查用户输入。                当它检查子节点时,它会从上到下再次移动。
服务继续通过对话框从上到下,从左到右,从上到下,从左到右,直到它到达分支中的最后一个节点。
图 5. 对话流示意图 2
当您开始构建对话框时,必须确定要包括的分支以及放置它们的位置。 分支的顺序很重要,因为节点是从上到下进行评估。 使用条件匹配输入的第一个基本节点;                任何树中较低的节点都不会被触发。
条件 节点条件确定会话中是否使用该节点。 响应条件决定向用户显示哪个响应。 您可以使用任何组合中的一个或多个以下工件来定义条件:
  • 上下文变量:如果您指定的上下文变量表达式为 true,则使用该节点。 使用语法 $variable_name:value or $variable_name == 'value';
  • 实体:当在用户输入中识别实体的任何值或同义词时,将使用该节点。 使用语法 @{entity_name};
  • 实体值:如果在用户输入中检测到实体值,则使用该节点。 使用语法 @ {entity_name} : {value} 。                    为实体指定一个定义的值,而不是同义词。如果您检查对等节点中的关联实体,请确保将检查此特定实体值的节点放在其上。
  • 意图:最简单的条件是单一意图。 如果用户的输入映射到该意图,则使用该节点。 使用 sytnax#{intent-name}。                    例如,#weather 检查用户输入中检测到的意图是否为天气。 如果是,则处理该节点。
  • 特殊条件:可用于执行常用对话功能的服务提供的条件。
特殊条件内容描述
条件名  描述  anything_else                             您可以在对话框的末尾使用此条件,当用户输入与任何其他对话框节点不匹配时进行处理。 任何其他节点由此条件触发。                         conversation_start  在第一个对话转弯期间,这个条件被评估为真。                            与欢迎不同,无论应用程序的初始请求是否包含用户输入都是真实的。 具有 conversation_start                            条件的节点可用于初始化上下文变量或在对话框开头执行其他任务。  false  这个条件总是被评估为 false。                            您可能会在正在开发中的分支的顶部使用它,以防止它被使用,或者作为提供通用功能的节点的条件,并且仅用作跳转到动作的目标。                         irrelevant  如果用户的输入被确定为与会话服务无关,则此条件将被判定为真。                         true  这个条件总是被评估为真。                            您可以在节点或响应列表的末尾使用它来捕获与以前任何条件不匹配的任何响应。  welcome                             在第一个对话框转换(对话开始时),只有来自应用程序的初始请求不包含任何用户输入时,此条件被评估为真。                            在随后的对话转弯中,它被评估为 false。 Welcome 节点由此条件触发。                            通常,具有该条件的节点用于向用户打招呼,例如,显示诸如"欢迎来到我们的比萨订购应用程序"的消息。 条件语法使用以下语法选项之一在条件中创建有效的表达式:
Spring Expression (SpEL) language : 它是一种表达式语言,支持在运行时查询和操作对象图。 有关更多信息,请参阅                 。
指向意图,实体和上下文变量的简短符号。 请参阅
使用正则表达式检查。 例如 , 要找到匹配的字符串,可以使用 String.find 方法。 有关详细信息,请参阅方法
条件使用提示
  • 如果仅评估实体类型的第一个检测到的实例的值,则可以使用语法 @entity == 'specific-value' 替换                     @entityspecific-value) 格式。例如,当您使用 @appliance ==' 空调 '                    时,您只评估第一个检测到的 @appliance 实体的值。 但是,使用 @appliance 空调)扩展到实体                    ['appliance'] ,包含( " 空调 " ),只要在用户输入中检测到至少一个价值 " 空调 " 的 @appliance                    实体就匹配。
  • 使用数值变量时,请确保变量有值。 如果变量没有值,则在数值比较中将其视为空值(0)。 例如,如果您检查条件@price <100                    的变量的值,并且@price 实体为空,则该条件将被计算为 true,因为 0 小于 100,即使价格未设置。 为了防止检查 null                    变量,请使用@price AND @price <100 等条件。如果@price 没有值,则此条件正确返回 false。
  • 如果您使用实体作为条件并启用了模糊匹配,则只有匹配的置信度大于 30%时,@entity_name 才会计算为真。 也就是说,只有当@                    entity_name.confidence> .3。
返回列表