首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DeepPavlov:一个训练对话系统和聊天机器人的开源库

选自GitHub

机器之心编译

参与:思源、刘晓坤

本文介绍了一个构建端到端对话系统和训练聊天机器人的开源项目 DeepPavlov,该开源库的构建基于 TensorFlow 和 Keras,并旨在推动 NLP 和对话系统的研究,提升复杂对话系统的实现和评估效果。机器之心简要介绍了该项目和基本技术,希望实现对话机器人的读者可进一步阅读原项目。

项目地址:https://github.com/deepmipt/DeepPavlov

这是一个开源的对话 AI 库,建立在 TensorFlow 和 Keras 上,其用途是:

NLP 和对话系统研究;

复杂对话系统的实现和评估。

我们的目标是为研究者提供:

用于实现和测试他们自己的对话模型并随后将模型共享的框架;

一系列预定义的 NLP 模型/对话系统组件(机器学习/深度学习/规则系统)和流程模板;

对话模型的基准测试环境和对相关数据的系统性评估。

并为 AI 应用开发者提供:

建立对话软件的框架;

将应用与对应基础建设(通讯、技术支持软件等)相集成的工具。

项目特征

格位填充组件(Slot filling component):基于命名实体识别(NER)神经网络和模糊 Levenshtein 搜索,以从文本中提取归一化的格位值(slot values)。NER 网络组件根据论文《Application of a Hybrid Bi-LSTM-CRF model to the task of Russian Named Entity Recognition》重新生成了架构,由《Neural Architectures for Named Entity Recognition》中的 LSTM+CRF 架构所启发。

专用分类组件:基于论文《Convolutional Neural Networks for Sentence Classification》中的 shallow-and-wide CNN 架构。该模型允许语句的多标签分类。

自动拼写和校正组件:基于论文《An Improved Error Model for Noisy Channel Spelling Correction》,并使用基于统计学的误差模型、一个静态词典和一个 ARPA 语言模型以校正拼写错误。

目标导向的对话机器人:基于论文《Hybrid Code Networks: practical and efficient end-to-end dialog control with supervised and reinforcement learning》中的 Hybrid Code Networks 架构。它允许在目标导向任务的对话中预测回应。该模型是相当可定制的:嵌入、格位填充器和专用分类器可以根据需要使用或者不用。

为俄语预训练的嵌入:在联合俄语 Wikipedia 和 Lenta.ru 语料库词向量上进行预训练得到的词嵌入。

简单示例

用 Telegram 部署目标导向的对话机器人和格位填充(slot-filling)的视频 demo:

用 Telegram 接口运行目标导向的对话机器人:

用控制台接口运行目标导向的对话机器人:

用 Telegram 接口运行格位填充模型:

用控制台接口运行格位填充模型:

概念简述

原则

这个库遵循以下原则设计:

将端到端学习架构作为长期目标;

目前采用混合的机器学习/深度学习/规则系统的架构;

模块化的对话系统架构;

基于组件的软件工程,最大化复用性;

易于扩展和基准测试;

为单个 NLP 任务提供多个组件,通过数据驱动选择合适的组件。

目标架构

我们的库的目标架构:

DeepPavlov 建立在机器学习库(TensorFlow、Keras)之上。可以用其它外部的库建立基础组件。

关键概念

Agent(智能体):对话智能体用自然语言(文本)和用户进行交流。

Skill(技能):用于满足用户需求的交互单元。通常可以通过展示信息或完成任务(例如,通过 FAQ 回答问题等);然而,根据经验,某些任务的成功会被定义成连续的进展(例如,闲聊)。

Components(组件):基础功能模块:

Rule-based Components(基于规则的组件)—无法训练;

Machine Learning Components(机器学习组件)—仅能独立训练;

Deep Learning Components(深度学习组件)—可以独立地训练,也能以端对端的方式结合到工作链中。

Switcher(转换器):智能体排序和选择向用户展示的最终应答的机制。

Components Chainer(组件链接器):从各种组件(Rule-based/ml/dl)构建智能体/组件管道的工具,允许以整体的形式训练和推理管道。

技术概览

项目模块

配置

NLP 的流程配置为 JSON 文件,它包含四个元素:

配置文件中每一个类都有一个 name 参数,它是注册的代码名。通过重复它的__init__() 方法参数,我们可以定义其它任何参数。__init__() 参数的默认值在类的实例初始化中被配置值覆盖。

数据集读取器

数据集

词汇

模型

训练

所有在实验中可以改变的训练参数(如 Epoch 数、批量大小、容忍度、学习率个优化器等)都应该传递到模型的构造函数__init__(),且__init__() 中的默认参数值将会被 JSON 配置值覆盖。要改变这些值,我们不需重写代码,只需要修改配置文件就行。

训练过程由 train_now 属性控制。如果 train_now 为真,表示模型正在执行训练。在使用 Vocab 时,这个参数十分有用,因为可以在单个模型中训练一些词汇,而另一些词汇只会在流程中的其它模型上执行推断。JASON 配置文件中的训练参数以设置成:

推断

本文为机器之心编译,转载请联系本公众号获得授权。

?------------------------------------------------

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180227B0J1X500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com