大发1分快3平台Uber 开源 Plato:扩展性极强的开发测试会话 AI 平台,可实现多智能体并行训练!

  • 时间:
  • 浏览:208
  • 来源:彩神app官方-彩神大发快3网站

雷锋网 AI 科技评论按:在过去的几十年中,智能会话系统意味着 分析处在了显著的变化,从关键字识别交互式语音应答(IVR)系统到跨平台智能被委托人助理,一定会 慢慢成为日常生活中不可或缺的一次要。在假如有一天的背景环境下,亲们需要一四个多多 直观、灵活和全面的研发平台,用来帮助亲们进行新算法评估、快速原型创建以及可靠地部署会话 AI 智能体。

假如有一天,大发1分快3平台ub大发1分快3平台er AI 发布了名为大发1分快3平台「柏拉图学好话系统」(Plato Research Dialogue System)的开源人工智能平台,来补救这人 难题。雷锋网(公众号:雷锋网) AI 科技评论将其文章分类整理编译如下。

柏拉图学好话系统(Plato)简介

Plato 是一四个多多 用于构建、训练和部署会话 AI 智能体的平台。它才能使亲们在会话 AI 中进行最先进的研究,快速创建原型和演示系统,以及更便捷的分类整理会话数据。假如有一天该系统有「简洁」和「易于理解」的特点,并与现有的深度学习和与现有深度学习框架和贝叶斯优化框架(用于模型调优)集成,可减少编写代码的需要。假如有一天不论是经验丰沛 的研究人员还是会话 AI 背景有限的兴趣爱好者,都才能轻松掌握其使用法律最好的辦法 。

同去,亲们也在平台拓展性方面做出了或多或少努力,如一般研究或特定用例所用工具,包括 Olympus,PyDial,ParlAI,Virtual Human Toolkit,Rasa,DeepPavlov,ConvLab 等。在评估是否利用有有哪些工具时,亲们发现或多或少用户需要熟悉特定于平台的源代码,关注特定的用例。这既不灵活也无法可靠地支持或多或少用户使用,假如有一天有时还需要使用许可证。

Plato 则才能补救有有哪些难题,并旨在构建、训练和部署会话 AI 智能体。它支持通过语音、文本或形态学 化信大发1分快3平台息(会话行为)进行交互,假如有一天每个会话智能体能才能与人类用户、或多或少会话智能体(在多智能体设置中)或数据进行交互。最重要的是,Plato 能才能为每个会话智能体组件合并现有的预训练模型,假如有一天每个组件都能才能在线(在交互期间)或离线(从数据)进行训练。

Plato 咋样运作?

从概念上讲,会话智能体需要经过各种步骤才能补救它接收的大发1分快3平台输入信息(这人,「今天天气咋样?」)并产生恰当的输出(「有风但不太冷」)。主要步骤对应于标准体系形态学 的主要组件(见图 1): 

  • 语音识别(将语音转录为文本)

  • 语言理解(从该文本中提取意义)

  • 情況跟踪(迄今为止所说和所做工作的汇总信息)

  • API 调用(搜索数据库,查询 API 等)

  • 会话策略(生成智能体响应的抽象含义)

  • 语言生成(将抽象意义转换为文本)

  • 语音合成(将文本转换为语音)

亲们使 Plato 的设计尽意味着 分析模块化且具有灵活性,它支持传统的和自定义的会话 AI 架构。更重要的是,它支持多方交互,其中的多个智能体意味着 分析具有不同的角色,能才能相互交互,同去进行训练,并补救分布式难题。

下面的图 1 和图 2 描绘了与人类用户和模拟用户交互时 Plato 会话智能体架构的示例。与模拟用户交互是研究社区中用于快速过后过后刚开始 英文学习的常见做法(即在与人类交互前一天学习或多或少基本行为)。每个单独的组件都能才能用任意机器学习库(这人,Ludwig,TensorFlow 或 PyTorch)进行在线或离线的训练。意味着 分析 Plato 是一四个多多 通用框架,Uber 的开源深度学习工具箱 Ludwig 是一四个多多 很好的选者,意味着 分析 Ludwig 需要编写代码假如有一天与 Plato 全部兼容。

 

图 1:Plato 的模块化架构利于组件的在线或离线训练,能才能通过自定义或预先训练的模型进行替换。(图中的灰色组件一定会 核心柏拉图组件)

图 2:使用模拟用户而一定会 人类用户,如图 1 所示,亲们能才能预先训练柏拉图各组件的统计模型。假如有一天,有有哪些能才能用于创建原型会话智能体,该智能体能才能与人类用户交互以分类分类整理更多自然数据,有有哪些数据过后可用于训练更好的统计模型。(图中的灰色组件一定会 柏拉图核心组件)

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

这人 设置能才能利于多智能体学习的研究,其中智能体需要学习咋样生成语言以执行任务,以及在多方交互的子领域中进行研究(会话情況跟踪、会话轮控制等等)。会话原则定义了每个智能体能才能理解的内容(实体或含义的本体,这人:价格、位置、偏好、烹饪类型等)以及它能才能做有哪些(询问更多信息、提供或多或少信息、调用 API 等)。智能体能才能通过语音、文本或形态学 化信息(会话行为)进行通信,假如有一天每个智能体一定会 被委托人的配置。下面的图 3 描述了这人 架构,概述了一四个多多 智能体和各种组件之间的通信:

 

图 3:Plato 的架构允许对多个智能体进行并行训练,每个智能体意味着 分析具有不同的角色和目标,假如有一天能才能利于多方交互和多智能体学习等领域的研究。(图中的灰色组件一定会 核心柏拉图组件)

最后,Plato 通过图中所示的通用智能体体系形态学 支持自定义体系形态学 (这人:将 NLU 拆分为多个独立组件)与生合训练的组件(这人:文本到会话情況、文本到文本或任何或多或少组合)。如图 4 所示:

图 4:Plato 的通用智能体体系形态学 支持广泛的自定义,包括联合组件、语音到语音组件和文本到文本组件,所有有有哪些组件都能才能串行或并行执行。

此模式脱离了标准会话智能体体系形态学 ,支持任何类型的体系形态学 (这人:使用联合组件、文本到文本或语音到语音组件或任何或多或少设置),并允许将现有或预先训练有素的模型加载进 Plato 中。

用户只需为模块提供 Python 类名和包路径,以及模型的初始化参数,或将被委托人的组件载入 Plato 中,就能才能自行定义这人 体系形态学 。用户简单的按照应该执行的顺序将模块列出前一天,Plato 就能才能负责其余次要了,包括:包装输入/输出、链接模块和补救会话。Plato 支持模块的串行和并行执行。

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

Plato 安装及运行

版本 Plato(v.1.1)需要实际安装,意味着 分析它允许用户修改次要代码或扩展现有用例以获得更大的灵活性。假如有一天,Plato 我我确实依赖于或多或少内外部库,需要安装有有哪些库。能才能按照以下一四个多多 步骤完成此过程:

注意:Plato 是用 Python 3 开发的。

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.tx

Windows:

        pip install -r requirements.txt

为了支持语音,则需要安装 PyAudio,它具有开发人员机器上意味着 分析不处在的或多或少依赖项。意味着 分析上述步骤不成功,PyAudio 安装错误这篇文章(https://stackoverflow.com/questions/5921947/pyaudio-installation-error-command-gcc-failed-with-exit-status-1)蕴含了有关咋样获取有有哪些依赖项并安装 PyAudio 的说明。

或多或少常见安装难题的补救方案可在 Commonsues.md.

3. 运行:

有关配置文件以及咋样运行 Plato 的快速介绍,请参见下文。

运行 Plato 会话智能体

要运行 Plato 会话智能体,用户需要使用相应的配置文件运行以下命令(请参阅示例/ simulate_agenda.yaml 以获取示例配置文件,其中包蕴含关环境和要创建的智能体的或多或少设置以及亲们的组件):

python runPlatoRDS.py -config <PATH TO yaml CONFIG FILE>

下面列出了或多或少示例模式和配置:

1)运行单个会话智能体

  • 使用 Cambridge Restaurants 域中基于议程的用户模拟器运行模拟:

python runPlatoRDS.py -config examples / config / simulate_agenda.yaml

  • 使用 Cambridge Restaurants 域中基于议程的模拟器运行基于文本的交互:

python runPlatoRDS.py -config examples / config / simulate_text.yaml

  • 使用 Cambridge Restaurants 域中基于议程的模拟器运行基于语音的交互:

python runPlatoRDS.py -config examples / config / simulate_speech.yaml

2)运行多个会话智能体

柏拉图的主要功能之一是允许一四个多多 智能体互相交互。每个智能体能才能具有不同的角色(这人,系统和用户)、不同的目标,并接收不同的奖励信号。这人,要在基准剑桥餐厅域上运行多个 Plato 智能体,亲们运行以下命令来训练智能体的会话策略并对其进行测试:

  • 训练阶段

python runPlatoRDS.py -config 示例/ config / CamRest_MA_train.yaml

  • 测试阶段

python runPlatoRDS.py -config 示例/ config / CamRest_MA_test.yaml

3)运行通用 Plato 会话智能体

本文中的大多数讨论和示例都围绕传统的会话智能体体系形态学 展开。然而,Plato 需要坚守这条规则,它的通用智能体支持任何范围的自定义模块,包括:将自然语言理解分解成或多或少组件、将多个组件并行运行以及只一四个多多多 文本到文本模型等等。

通用智能体允许用户将其自定义模块作为 Python 类对象加载。对于配置文件中列出的每个模块,Plato 将使用给定的路径和参数实例化该类模型。假如有一天在每次会话期间,通用智能体将按顺序调用每个模块(按照其配置文件中提供的顺序),并将当前模块的输出传递给列表中的下一四个多多 模块,最后通用智能体将返回最后一四个多多 模块的输出。

以下是在通用模块模式下运行单个 Plato 智能体或多个 Plato 智能体的一四个多多 示例。

  • 单一通用智能体,用于实现自定义体系形态学 或使用现有的预先训练的统计模型:

python runPlatoRDS.py -config 示例/ config / simulate_agenda_generic.yaml

  • 多个通用智能体,与上述相同,但适用于多个智能体(假设该智能体已使用 Examples / config / CamRest_MA_train.yaml 训练过会话策略):

python runPlatoRDS.py -config examples / config / MultiAgent_test_generic.yaml

数据训练

Plato 支持使用任何深度学习框架在线(在交互期间)或离线(从数据)法律最好的辦法 训练智能体的内内外部组件。实际上,假如有一天符合 Plato 接口输入/输出的类型,任何模型都能才能加载到 Plato 中。这人:目标模型是自定义 NLU,它只需要具有 Plato 的 NLU 抽象类,实现必要的功能,并将数据打包/解压到自定义模型中即可。

Plato 内内外部经验数据追踪

为了便于在线学习、调试和评估,Plato 在一四个多多 称为会话情节记录器的形态学 中跟踪其内内外部经验数据,包蕴含关先前的会话情況、采取的行动、当一定会话情況、收到语录语信息和产生语录语信息、收到的奖励以及或多或少或多或少形态学 ,如:一四个多多 可用于跟踪上述类别无法分类分类整理的任何或多或少内容的自定义字段。

在会话过后过后刚开始 英文或按照指定时间间隔过后过后刚开始 英文时,每个会话智能体将调用其内内外部组件的 train()函数,意味着 分析话经验数据作为训练数据传递;假如有一天每个组件一定会选者训练所需的信息次要。

要使用在 Plato 中实现的学习算法,任何内外部数据(如 DSTC2 数据)都需要被解析为 Plato 类型的经验数据,以便有有哪些内外部数据能才能由训练中相应的组件进行加载和使用。意味着 分析用户能才能解析数据,并在 Plato 之外训练亲们的模型;假如有一天在需要将有有哪些数据用于 Plato 智能体时简单地加载训练模型。

在线/离线训练

在线训练的过程就跟用户希望将所训练每个组件配置中的「Train」标志转换为「True」一样简单。而以数据进行训练的离线训练中,用户只需加载亲们从数据集中解析的经验数据。亲们将使用 DSTC2 数据集作为 Plato 离线训练的一四个多多 例子,该数据集能才能从「第二会话情況跟踪挑战网站」(http://camdial.org/~mh521/dstc/downloads/dstc2_traindev.tar.gz)中获得。

该 runDSTC2DataParser.py 脚本将解析 DSTC2 数据,并将其保存为 Plato 的经验数据。假如有一天,它将加载该经验数据并训练受监督的策略:

               python runDSTC2DataParser.py -data_path 

<PATH_TO_DSTC2_DATA> / dstc2_traindev / data /

能才能使用以下配置文件测试经过训练的策略:

       python runPlatoRDS.py -config 

Examples/ config / simulate_agenda_supervised.yaml

注意:用户能才能将经验数据从过去的交互或从数据加载到 Plato,假如有一天通过强化学习或或多或少学习法律最好的辦法 继续训练亲们的模型。

用 Plato 和 Ludwig 进行训练

Ludwig 是一四个多多 由 Uber 发布的开源深度学习框架,它允许用户在不编写任何代码的情況下训练模型。用户只需将其数据解析为 CSV 文件,创建 Ludwig 配置文件,假如有一天在终端中简单执行运行命令即可。用 YAML 编写的 Ludwig 配置文件描述了神经网络的架构,其中蕴含在 CSV 文件中使用到的功能以及或多或少参数。

在上一节中,runDSTC2DataParser.py 脚本实际上生成了或多或少 CSV 文件,可用于训练自然语言理解与生成,可在以下位置找到:Data/data。作为一四个多多 例子,亲们将都看咋样训练系统端自然语言生成器。为此,用户需要编写 yaml 配置文件,这人于下面所示。

Input_features:

       name:nlg_input

       type:sequence

       encoder:rnn

       cell_type:lstm

Output_features:

       name:nlg_output

       type:sequence

       decoder:generator

       cell_type:lstm

training:

       epochs:20

       learning_rate:0.001

       dropout:0.2

并训练亲们的模型:

               ludwig experiment –model_definition_file

Examples/config/ludwig_nlg_train.yaml –data_csv

Data/data/DSTC2_NLG_sys.csv –output_directory Models/CamRestNLG/Sys/

接下来是在 Plato 中加载模型。用户应该转到 simulate_agenda_nlg.yaml 配置文件,并在必要时更新 Ludwig 模型的路径:

...

NLG:

    nlg:CamRest

    model_path:<PATH_TO_YOUR_LUDWIG_MODEL>/model

...

并测试该模型的工作原理:

        python runPlatoRDS.py -config 

Examples / config / simulate_agenda_nlg.yaml

请记住,Ludwig 每次调用时一定会创建一四个多多 新的 experiment_run_i 目录,假如有一天用户需要确保 Plato 配置文件中的模型路径是最新的。

Ludwig 还提供了并需要在线训练模型的法律最好的辦法 ,假如有一天在实践中,用户只需要编写非常少的代码来构建、训练和评估 Plato 中新的深度学习组件。

Plato 智能体新域生成

为了给面向任务的应用守护进程(如插槽填充)构建会话智能体,用户需要一四个多多 项目数据库和一四个多多 描述其域的本体。Plato 提供了一四个多多 脚假如有一天自动执行此过程。

这人,假设用户你要为在线花店构建会话智能体,在 CSV 文件中蕴含以下项目:

物品 ID,类型,颜色,价格,场合

1,玫瑰,红色,1,任何

2,玫瑰,白色,2,周年纪念

3,玫瑰,黄色,2,庆祝

4,莉莉,白色,5,任何

5,兰花,粉红色,200,任何

6,大丽花,深蓝色,15,任何

用户只需调用 createSQLiteDB.py 即可自动生成 DB SQL 文件和 JSON 本体文件。用户能才能在配置文件中指定信息、请求和系统可请求的插槽,如下所示:

-

GENERAL:

      csv_file_name:Data / data / flowershop.csv 

      db_table_name:

      estore db_file_path:Ontology / Ontologies / flowershop.db 

      ontology_file_path:Ontology / Ontologies / flowershop.json

ONTOLOGY(本体):

      informable_slots:[类型,价格,场合]

      requestable_slots:[价格,颜色]

      system_requestable_slots:[价格,场合]

注意:ONTOLOGY 次却说 可选的。意味着 分析 ONTOLOGY 未被提供,脚本将假定所有插槽一定会 信息性的、可请求的和系统可请求的。

并运行脚本:

       python createSQLiteDB.py -config

Examples / config / create_flowershop_DB.yaml

A flowershop-rules.json 和 a flowershop-dbase.db 能才能在 Domain/Domains 中找到。亲们现在能才能简单地使用虚拟组件运行 Plato 并与简单智能体进行交互作为全部性检查:

           python runPlatoRDS.py -config 

Examples / config / flowershop_text.yaml

Plato 智能体新模块生成

根据其功能,亲们有并需要法律最好的辦法 能才能创建新模块。意味着 分析模块采用了执行 NLU 或会话策略的新法律最好的辦法 实现,没办法 用户应该编写一四个多多 自相应抽象类的类。

假如有一天,意味着 分析一四个多多 模块不适合单个智能体基本组件之一,这人:它执行命名实体识别或从文本预测会话行为,没办法 用户需要编写一四个多多 直接从 ConversationalModule 得到的类,假如有一天这人 类只由通用智能体使用。

自抽象类

用户需要创建一四个多多 自相应 Plato 抽象类的新类,并实现抽象类定义的接口以及亲们希望的任何或多或少功能。此类应具有唯一名称(这人「myNLG」),用于在解析配置文件时将其与或多或少选项区分开来。在此版本中,除非用户使用通用智能体,假如有一天需要手动换成解析配置文件的或多或少条件(这人:会话智能体、会话管理器等)。

构建新模块

要构造新模块,用户需要将其代码换成到从会话模块得到的新类中。假如有一天亲们能才能通过在配置中提供适当的包路径、类名和参数,用通用智能体来加载模块。



MODULE_i:

    package:myPackage.myModule

    Class:myModule

    arguments:

      model_path:Models/myModule/parameters/

      …

用户负责确保新模块才能适当处在理前面模块的输出,假如有一天新模块的输出能才能按照其通用配置文件中的规定,由或多或少模块恰当地使用。

未来计划

由 Uber AI 研发的项目 Plato 被用于利于 SIGDial 2019 的工作,即同去训练一四个多多 通过自生成语言相互交流的会话智能体。在这项工作中,亲们能才能利用 Plato 轻松对这人 个多多 会话智能体进行训练,使它们中一四个多多 能实现餐馆信息询问,而假如有一天则能才能提供该难题回答的信息。假如有一天随着时间的推移,亲们的谈话将变得没办法 自然。

亲们相信,Plato 才能在 Ludwig、TensorFlow、PyTorch、Keras 以及或多或少开源项目的深度学习框架中更加无缝地进行会话智能体的训练,从而改进学术和行业应用中的会话 AI 技术。

原文链接:

https://eng.uber.com/plato-research-dialogue-system/

GitHub 地址:

https://github.com/uber-research/plato-research-dialogue-system

更全部的使用法律最好的辦法 :

https://uber-research.github.io/plato-research-dialogue-system/

雷锋网 AI 科技评论

雷锋网原创文章,未经授权禁止转载。详情见转载须知。