Plato Research Dialogue System

创建、训练和部署会话 AI 代理
授权协议 Apache-2.0
开发语言 Python HTML/CSS
所属分类 神经网络/人工智能、 机器学习/深度学习
软件类型 开源软件
地区 不详
投 递 者 袁宜
操作系统 跨平台
开源组织 Uber
适用人群 未知
 软件概览

柏拉图(Plato)研究对话系统是一个灵活的框架,可用于在各种环境中创建、训练和测试会话 AI 代理。它支持通过语音、文本或对话行为进行交互,每个会话代理可以与数据、人类用户或其他会话代理进行交互(在多代理设置中)。每个代理商的每个组成部分都可以在线或离线独立培训,只要遵守 Plato 的界面,Plato 就可以轻松地绕过几乎任何现有的模型。

柏拉图(Plato)研究对话系统如何运作?

从概念上讲,会话代理需要经过各种步骤才能处理它作为输入接收的信息(例如,“今天天气如何?”)并产生适当的输出(“有风但不太冷”。)。与标准体系结构的主要组件(参见图1)相对应的主要步骤是:

  • 语音识别(将语音转录为文本)
  • 语言理解(从该文本中提取意义)
  • 状态跟踪(到目前为止已经说过和完成的内容的汇总信息)
  • API 调用(搜索数据库,查询 API 等)
  • 对话策略(生成代理人回应的抽象含义)
  • 语言生成(将抽象意义转换为文本)
  • 语音合成(将文本转换为语音)

Plato 的设计尽可能模块化和灵活,它支持传统和自定义会话 AI 架构,重要的是,支持多方交互,其中多个代理可能具有不同的角色,可以相互交互,同时训练和解决分布式问题。

下面的图1和图2描述了与人类用户和模拟用户交互时的示例 Plato 对话代理体系结构。与模拟用户交互是研究社区中用于快速开始学习的常见做法(即,在与人类交互之前学习一些基本行为)。每个单独的组件都可以使用任何机器学习库(例如,Ludwig、 TensorFlowPyTorch、用户自己的实现)在线或离线进行培训,因为 Plato 是一个通用框架。Uber 的开源深度学习工具箱 Ludwig 是一个很好的选择,因为它不需要编写代码并且与 Plato 完全兼容。

PlatoRDS,人类图1:Plato 的模块化架构意味着任何组件都可以在线或离线进行培训,可以通过自定义或预先训练的模型进行替换。(此图中的灰色组件不是核心 Plato 组件。)

PlatoRDS模拟器图2:使用模拟用户而不是人类用户,如图1所示,我们可以预先训练 Plato 各种组件的统计模型。然后,这些可以用于创建原型会话代理,该代理可以与人类用户交互以收集更多自然数据,这些数据随后可用于训练更好的统计模型。(此图中的灰色组件不是 Plato 核心组件。)

除了单代理交互之外,Plato 还支持多代理对话,其中多个 Plato 代理可以相互交互并相互学习。具体来说,Plato 将产生会话代理,确保输入和输出(每个代理听到和说出的内容)被适当地传递给每个代理,并跟踪对话。

这种设置可以促进多代理学习的研究,其中代理需要学习如何生成语言以执行任务,以及研究多方交互的子领域(对话状态跟踪,轮流等)。 )。对话原则定义了每个代理可以理解的内容(实体或含义的本体;例如:价格,位置,偏好,烹饪类型等)以及它可以做什么(询问更多信息,提供一些信息,调用 API)等)。代理可以通过语音,文本或结构化信息(对话行为)进行通信,并且每个代理都有自己的配置。下面的图3描述了这种架构,概述了两个代理和各种组件之间的通信:

PlatoRDS,多代理图3:Plato 的架构允许对多个代理进行并发培训,每个代理具有可能不同的角色和目标,并且可以促进多方交互和多代理学习等领域的研究。(此图中的灰色组件不是核心 Plato 组件。)

最后,Plato 通过图4所示的通用代理体系结构支持自定义体系结构(例如,将 NLU 分成多个独立组件)和联合训练的组件(例如,文本到对话状态,文本到文本或任何其他组合)。此模式远离标准会话代理体系结构并支持任何类型的体系结构(例如,使用联合组件,文本到文本或语音到语音组件,或任何其他设置)并允许加载现有或预先训练有素的模型进入 Plato。

PlatoRDS-GenericAgent图4:Plato 的通用代理体系结构支持广泛的自定义,包括联合组件,语音到语音组件和文本到文本组件,所有这些组件都可以串行或并行执行。

用户可以通过简单地提供该类模块的 Python 类名和包路径以及模型的初始化参数来定义自己的体系结构和/或将自己的组件插入到 Plato 中。用户需要做的就是按照应该执行的顺序列出模块,Plato 负责其余部分,包括包装输入/输出,链接模块和处理对话。Plato 支持模块的串行和并行执行。

Plato 还通过组合结构的贝叶斯优化(BOCS)为对话 AI 架构或单个模块参数的贝叶斯优化提供支持。

安装

  1. 克隆此存储库:

    git clone git@github.com:uber-research/plato-research-dialogue-system.git
    
  2. 安装要求:

    对于 MacOS:

    brew install portaudio
    pip install -r requirements.txt
    

    对于 Ubuntu/Debian:

    sudo apt-get install python3-pyaudio
    pip install -r requirements.txt
    

    对于 Windows:

    pip install -r requirements.txt
    
  3. 运行

    有关配置文件以及如何运行第一个 Plato 代理的快速介绍,请参见文档

为了支持语音,有必要安装 PyAudio,它具有许多开发人员机器上可能不存在的依赖项。如果上述步骤不成功, PyAudio 安装错误的这篇文章包含有关如何获取这些依赖项并安装 PyAudio 的说明。

 

  • 一.使用plato构建一个对话系统主要包含三个部分: Domain:相当于数据,主要包含两个部分Ontology和Database,Ontology相当于rasa domain中slot和intent,主要包括informable_slots、requstable_slots、System_requestable_slots。Database相当于对话的原始数据。 Controller:各个age

 相关资料
  • 有了能做出惊人预测的模型之后,要做什么呢?当然是部署生产了。这只要用模型运行一批数据就成,可能需要写一个脚本让模型每夜都跑着。但是,现实通常会更复杂。系统基础组件都可能需要这个模型用于实时数据,这种情况需要将模型包装成网络服务:这样的话,任何组件都可以通过 REST API 询问模型。随着时间的推移,你需要用新数据重新训练模型,更新生产版本。必须处理好模型版本,平稳地过渡到新版本,碰到问题的话需要

  • 我的要求是像这样分析句子。“给我找一本饥饿的潮汐书。”或者“饥饿的潮水或破碎的镜子,哪一个更好。”饥饿的潮汐和破碎的镜子是书的名字,为此我需要创建一个自定义模型,在给定的令牌数组中找到书的标题。因此,稍后我可以根据给定的句子创建一个查询。请让我知道我如何做到这一点,或者如果有任何其他方法来分析这样的句子。

  • 我可能需要为OpenNLP创建一个自定义训练集,这将需要我手动注释很多条目。 为了让事情变得更容易,GUI解决方案可能是最好的主意(手动编写注释标签并不酷),我刚刚发现了看起来像我需要的BRAT。 BRAT可以导出带注释的文件(. ann),但我在OpenNLP的手册中没有找到任何对该文件类型的引用,我不确定这是否可行。 我想做的是从BRAT导出这个带注释的文件并使用它来训练OpenNLP的模型,

  • 当会话仅是一个未来的且还没有被建立的会话时被认为是“新”的。因为 HTTP是一种基于请求-响应的协议,直到客户端“加入”到 HTTP 会话之前它都被认为是新的。当会话跟踪信息返回到服务器指示会话已经建立时客户端加入到会话。直到客户端加入到会话,否则不能假定下一个来自客户端的请求被识别为同一会话。 如果以下之一是 true,会话被认为是“新”的: 客户端还不知道会话 客户端选择不加入会话。 这些条件

  • 错误为: 谁能帮帮我吗?

  • 我试图使用Spring Cloud的Zuul、Eureka和我自己的服务实现微服务架构。我有多个具有UI和服务的服务,每个服务都可以使用x509安全性对用户进行身份验证。现在我想把祖尔放在那些服务机构的前面。由于Zuul无法将客户端证书转发到后端,我认为下一个最好的方法是在Zuul的前门对用户进行身份验证,然后使用Spring会话在后端服务中复制他们的身份验证状态。我遵循了Dave Syer的教程

  • org.openqa.selenium.SessionNotCreatedException:无法创建新会话。(原始错误:命令失败:C:\Windows\system32\cmd.exe/s/C“C:\Program Files(x86)\Android\Android sdk\platform tools\adb.exe”-s 69c7aa170104安装“C:\Program Files(x8

  • 刚从ML开始,创建了我的第一个CNN来检测人脸图像的方位。我得到的训练和测试精度高达约96-99%超过2组不同的1000张图片(128x128RGB)。然而,当我自行从测试集中预测一个图像时,模型很少预测正确。我认为在测试和预测期间,我将数据加载到模型中的方式肯定有区别。下面是我如何将数据加载到模型中进行训练和测试: 下面是我如何加载图像来进行预测: ImageDataGenerator处理图像的