打造一个能够在线部署的深度学习对话系统--开源更新中!


项目说明

一个能够在线部署的全流程对话系统,项目地址:nlp-dialogue。本项目的目标是奔着构建一个能够在线部署、执行、应用的全流程对话系统,即包含语料处理、训练、评估、推断、部署、Web服务的从头到尾的UI化系统功能。项目中计划同时包含开放域和面向任务型两种对话系统,模型的思路来源即为针对相关模型进行复现(论文阅读笔记放置在另一个项目:nlp-paper)。本项目中同时使用TensorFlow和Pytorch两种计算框架进行实现,可按需要进行切换,目前实现功能模型如下:

  • TensorFlow模型
    • Transformer
    • Seq2Seq
    • SMN检索式模型
    • Scheduled Sampling的Transformer
    • GPT2
    • Task Dialogue
  • Pytorch模型
    • Transformer
    • Seq2Seq

功能效果

项目可以在开发终端使用命令行进行测试和使用(执行和目录说明见后面小节),下面的demo演示为使用beam size3的BeamSearch进行推断,有时因为语料的原因,对话可能略偏杂乱,词汇量不足也会出现<unk>的情况,命令行终端使用如下:
在这里插入图片描述
Web服务界面进行聊天使用如下(启动server,详细请看后节执行说明):
在这里插入图片描述
在这里插入图片描述

语料

在本项目中的data目录下放着各语料的玩具数据,可用于验证系统执行性,完整语料以及Paper可以在这里查看。语料方面这里知识简单陈列了比较容易找到的,其实还有很多丰富的对话语料,包括逻辑学习语料等,可自行收集:

  • LCCC
  • CrossWOZ
  • 小黄鸡
  • 豆瓣
  • Ubuntu
  • 微博
  • 青云
  • 贴吧

执行说明

  • Linux执行run.sh,项目工程目录检查执行check.sh(或check.py)
  • 根目录下的actuator.py为总执行入口,通过调用如下指令格式执行(执行前注意安装requirements.txt):
python actuator.py --version [Options] --model [Options] ...
  • 通过根目录下的actuator.py进行执行时,--version--model--act为必传参数,其中--version为代码版本tf/torch--model为执行对应的模型transformer/smn...,而act为执行模式(缺省状态下为pre_treat模式),更详细指令参数参见各模型下的actuator.py或config目录下的对应json配置文件。
  • --act执行模式说明如下:
    • pre_treat模式为文本预处理模式,如果在没有分词结果集以及字典的情况下,需要先运行pre_treat模式
    • train模式为训练模式
    • evaluate模式为指标评估模式
    • chat模式为对话模式,chat模式下运行时,输入ESC即退出对话。
  • 正常执行顺序为pre_treat->train->evaluate->chat
  • 各模型下单独有一个actuator.py,可以绕开外层耦合进行执行开发,不过执行时注意调整工程目录路径

目录结构说明

  • dialogue下为相关模型的核心代码放置位置,方便日后进行封装打包等
    • checkpoints为检查点保存位置
    • config为配置文件保存目录
    • data为原始数据储存位置,同时,在模型执行过程中产生的中间数据文件也保存在此目录下
    • models为模型保存目录
    • tensorflow及pytorch放置模型构建以及各模组执行的核心代码
    • preprocess_corpus.py为语料处理脚本,对各语料进行单轮和多轮对话的处理,并规范统一接口调用
    • read_data.py用于load_dataset.py的数据加载格式调用
    • metrics.py为各项指标脚本
    • tools.py为工具脚本,保存有分词器、日志操作、检查点保存/加载脚本等
  • docs下放置文档说明,包括模型论文阅读笔记
  • docker(mobile)用于服务端(移动终端)部署脚本
  • server为UI服务界面,使用flask进行构建使用,执行对应的server.py即可
  • tools为预留工具目录
  • actuator.py(run.sh)为总执行器入口
  • check.py(check.sh)为工程目录检查脚本

SMN模型运行说明

SMN检索式对话系统使用前需要准备solr环境,solr部署系统环境推荐Linux,工具推荐使用容器部署(推荐Docker),并准备:

  • Solr(8.6.3)
  • pysolr(3.9.0)

以下提供简要说明,更详细可参见文章:搞定检索式对话系统的候选response检索–使用pysolr调用Solr

Solr环境

需要保证solr在线上运行稳定,以及方便后续维护,请使用DockerFile进行部署,DockerFile获取地址:docker-solr

仅测试模型使用,可使用如下最简构建指令:

docker pull solr:8.6.3
# 然后启动solr
docker run -itd --name solr -p 8983:8983 solr:8.6.3
# 然后创建core核心选择器,这里取名smn(可选)
docker exec -it --user=solr solr bin/solr create_core -c smn

关于solr中分词工具有IK Analyzer、Smartcn、拼音分词器等等,需要下载对应jar,然后在Solr核心配置文件managed-schema中添加配置。

特别说明:如果使用TF-IDF,还需要在managed-schema中开启相似度配置。

Python中使用说明

线上部署好Solr之后,在Python中使用pysolr进行连接使用:

pip install pysolr

添加索引数据(一般需要先安全检查)方式如下。将回复数据添加索引,responses是一个json,形式如:[{},{},{},…],里面每个对象构建按照你回复的需求即可:

solr = pysolr.Solr(url=solr_server, always_commit=True, timeout=10)
# 安全检查
solr.ping()
solr.add(docs=responses)

查询方式如下,以TF-IDF查询所有语句query语句方式如下:

{!func}sum(product(idf(utterance,key1),tf(utterance,key1),product(idf(utterance,key2),tf(utterance,key2),...)

使用前需要先将数据添加至Solr,在本SMN模型中使用,先执行pre_treat模式即可。

参考代码和文献

  1. Attention Is All You Need | 阅读笔记:Transformer的开山之作,值得精读 | Ashish et al,2017
  2. Sequential Matching Network: A New Architecture for Multi-turn Response Selection in Retrieval-Based Chatbots | 阅读笔记:SMN检索式对话模型,多层多粒度提取信息 | Devlin et al,2018
  3. Massive Exploration of Neural Machine Translation Architectures | 阅读笔记:展示了以NMT架构超参数为例的首次大规模分析,实验为构建和扩展NMT体系结构带来了新颖的见解和实用建议。 | Denny et al,2017
  4. Scheduled Sampling for Transformers | 阅读笔记:在Transformer应用Scheduled Sampling | Mihaylova et al,2019
已标记关键词 清除标记
相关推荐
在线作业要求: 从一下题目选择5道题目论述。 1. 结合实际项目案例,说明组织是如何开展项目论证与评估来支持决策的?开展了哪些具体方面的论证与评估? 2. 结合一个实际项目案例,对项目生命周期进行划分,并说明在项目生命周期的不同阶段需要进行哪些方面的项目论证与评估,进行的这些论证与评估的主要依据和目的是什么。 3. 针对某一项目实例,对项目所处的竞争环境进行分析,并根据项目竞争环境综合评估结果进行决策。 4. 结合项目案例,说明进行工艺技术方案经济性论证与评估的过程,并通过计算对备选的工艺方案做出选择。 5. 结合给出的不同项目案例数据,从财务评估的角度做出选择哪个项目实施的决策,并说明计算和分析过程。 6. 结合给定的案例,对该项目的国民经济可行性进行分析,并据此根据项目情景做出相应的决策。 7. 结合案例,分析项目的实施给环境带来的益处和不利影响,并说明应采取什么措施降低项目的实施对环境的不利影响。 8. 结合某项目实例,对其进行社会影响综合评价,并说明所采用的综合评价方法对评估的结果有什么样的影响?如何去减少这些影响? 9. 结合给定的项目实例,划分项目的生命周期,并对项目生命周期每个阶段的风险因素进行识别,采用合适的方法对其进行风险的综合评价。 10.结合给出的项目背景资料及数据,编写一份项目综合论证与评估报告,并指出采用的项目综合论证与评估集成方法存在的局限性。 11.结合某已完成项目实例,从多个方面对其实施效果进行项目后评估,并总结项目管理和决策过程的经验教训。 12.就某一种类项目实例,结合其独特的特点,在充分分析项目实际情况基础上,对其进行评估与论证。
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页