一个能够在线部署的全流程对话系统,项目地址:nlp-dialogue。本项目的目标是奔着构建一个能够在线部署、执行、应用的全流程对话系统,即包含语料处理、训练、评估、推断、部署、Web服务的从头到尾的UI化系统功能。项目中计划同时包含开放域和面向任务型两种对话系统,模型的思路来源即为针对相关模型进行复现(论文阅读笔记放置在另一个项目:nlp-paper)。本项目中同时使用TensorFlow和Pytorch两种计算框架进行实现,可按需要进行切换,目前实现功能模型如下:
项目可以在开发终端使用命令行进行测试和使用(执行和目录说明见后面小节),下面的demo演示为使用beam size
为3
的BeamSearch进行推断,有时因为语料的原因,对话可能略偏杂乱,词汇量不足也会出现
的情况,命令行终端使用如下:
Web服务界面进行聊天使用如下(启动server,详细请看后节执行说明):
在本项目中的data目录下放着各语料的玩具数据,可用于验证系统执行性,完整语料以及Paper可以在这里查看。语料方面这里知识简单陈列了比较容易找到的,其实还有很多丰富的对话语料,包括逻辑学习语料等,可自行收集:
python actuator.py --version [Options] --model [Options] ...
--version
、--model
和--act
为必传参数,其中--version
为代码版本tf/torch
,--model
为执行对应的模型transformer/smn...
,而act为执行模式(缺省状态下为pre_treat
模式),更详细指令参数参见各模型下的actuator.py
或config目录下的对应json配置文件。--act
执行模式说明如下:
SMN检索式对话系统使用前需要准备solr环境,solr部署系统环境推荐Linux,工具推荐使用容器部署(推荐Docker),并准备:
以下提供简要说明,更详细可参见文章:搞定检索式对话系统的候选response检索–使用pysolr调用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中开启相似度配置。
线上部署好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模式即可。