基于简单表格的问答系统

为什么要做这个工具?

如果你要做一套基于领域知识库的自然语言问答系统,可以把数据拆分成若干个excel表格,针对每个excel的自然语言查询,易于开发和升级维护。

应用场景:

你有一些简单表格数据:

人名 职业 年龄 性别 兴趣

张三 老师 45岁 男 看书

李四 学生 18岁 女 画画

王五 厨师 30岁 男 电影

赵六 司机 30岁 女 画画

表格的第一列看作实体列表,第一行,看作属性列表,表中内容是值。

你想让机器能根据表格回答用户的问题: 张三兴趣是什么 ,查表得知--"看书"。

王五的性别是什么?

。。。。。。

在实际应用中,表格的行列字段可能变换,但我们希望程序能够自适应各种字段,支持百万以上条数据,读懂数据内容,解答关于各个表的自然语言问题。

有的问题是查询表中的值,有的问题是已知值查实体,或属性,或者值关联的实体的属性的另一个值......

这样任意update数据,字段,无需再编程。

把用户的自然语言问答需求,转化成对一个excel表格的自然语言查询,你的开发成本会降低很多。

如果你觉得系统支持的问题不够多,可以输入一条简单的问答示例,系统就能从你的例子里学习到你的回答逻辑和知识发现思路,完成触类旁通的字段问答。


安装和启动服务方法:

硬件需求:8G内存 30G磁盘空间 ubuntu linux 16.04+ docker版本Docker version 18.09.7,

在linux系统安装docker后使用命令安装镜像:

docker pull zb1840/kbqa:v1

在你的系统新建一个空的目录 /opt/user 来放入日志和系统生成的各种临时文件。

mkdir /opt/user

用命令启动docker里的服务服务: docker run -it -v /opt/user:/opt/user -p 29999:29999 -p 3004:3004 -d zb1840/kbqa:v1 /bin/bash &

running...... 三分钟后 ,服务加载数据启动完成,并自动生成自测日志 /opt/user/firstrun.log. 然后你可以登陆系统自带的ssh服务管理虚拟环境中的服务, ssh -p 29999 root@127.0.0.1 密码是六个空格,登陆。

现在可以开始使用服务,测试脚本/mnt/sdb/shell2/demo2.sh


使用方法:

1.准备好数据文件,写入"测试.txt" .编码要求utf-8. cd /mnt/sdb/shell2/

cat 测试.txt

人名 职业 年龄 性别 兴趣

张三 老师 45岁 男 看书

李四 学生 18岁 女 画画

王五 厨师 30岁 男 电影

赵六 司机 30岁 女 画画

2.运行./demo2.sh 进行数据处理。大约几秒钟后。

3.输入问题 :李四的性别是什么

访问3004的端口服务:

运行命令:curl http://127.0.0.1:3004/api/xlsqa/test6/李四的性别是什么

输出: 李四 性别 女,

curl http://127.0.0.1:3004/api/xlsqa/test6/谁的职业是老师

输出:张三, 职业 老师

你可以更改 测试.txt 里的数据,csv格式,列之间用"\t" tab符号间隔。第一行是属性,第一列是实体,针对实体和属性问答。

默认支持相似语义句型的查询: curl http://127.0.0.1:3004/api/xlsqa/test6/李四的兴趣是什么 李四 兴趣 画画, curl http://127.0.0.1:3004/api/xlsqa/test6/李四的爱好是什么 李四 兴趣 画画

更加智能的理解数据,从而回答更多问题?

你可以调教这个系统,使它学会你的问答解题模式。

基于问答例子的学习: 针对测试.txt这个csv文件,的问答对场景的学习的配置文件路径是/mnt/sdb/shell2/testqa22.txt 修改/mnt/sdb/shell2/testqa22.txt 后,运行./demo2.pl使之生效。 在testqa22.txt里输入一行:

张三的个人爱好是什么 看书

运行./demo2.pl 原本不能回答的问题“ 李四的个人爱好是什么” 现在也能回答了。

当你在/mnt/sdb/shell2/testqa22.txt 增加一条配置:

谁是司机 赵六

运行demo2.pl

输入问题:

”谁是老师“

系统就可以回答"张三"了

这个例子里,你在配置文件里用 谁是XX 答案是YY 交给了系统如何解决谁是XX这样的问题。

再如:

调教:Q:老师几岁 A:答案45岁

再问系统,Q:厨师几岁, A:30岁。

数值大小比较:

curl http://127.0.0.1:3004/api/xlsqa/test6/张三年龄大还是李四年龄大

输出:张三 .因为张三年龄 45岁,,李四 年龄 18岁,

其他更多复杂多跳问题正在开发测试中。

如果希望开启同义词泛化问题支持,需要在/opt/user/loaddic写入1 重启docker镜像服务即可。服务会载入向量词典帮助自动扩充多样化的问法。

数据与资源

其他信息

价值
https://github.com/zb1841/qa
作者 zhangbo
维护者 zhangbo
最近更新 十二月 11,2019,11:59(Asia/Shanghai)
创建的 十二月 11,2019,11:16(Asia/Shanghai)