The recurrent of KBQA by using Mysql to storage the triple data, using Bert for NER and Sentence Similarity
-
需要下载BERT的中文预训练模型配置文件
Chinese_L-12_H-768_A-12
到ModelParams
文件夹中。 -
Data文件夹存放原始数据和处理好的数据
python construct_dataset.py
:生成NER_Data的数据python construct_dataset_attribute.py
:生成Sim_Data的数据python triple_clean.py
:生成三元组数据
-
服务器创建mysql数据库:
-
安装msql:
$ sudo apt-get update $ sudo apt-get install mysql-server mysql-client libmysqlclient-dev
-
安装后查看是否安装成功
$ sudo netstat -tap | grep mysql
-
查看
load_dbdata.py
代码中包含的数据库信息:- user="root",
- password="123456",
- host="127.0.0.1",
- port=3306,
- db="KB_QA",
- charset="utf8"
-
使用root用户登录,创建数据库,创建用户并授权
# root为你的root名,yourpassword为你root用户的密码 $ mysql -uroot -p123456 # testDB为创建的数据库名 $ mysql>create database KB_QA; # 退出 $ mysql>quit;
-
数据库信息查看命令:https://www.cnblogs.com/yangyuqiu/p/6391395.html
- 查看端口号:
show global variables like 'port';
- https://www.linuxidc.com/Linux/2018-05/152413.htm
- 查看端口号:
-
问题解决:
-
安装完成后出现问题
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
-
错误原因:可能是因为初始密码为空;按空格回车后还是报一样的错
-
解决方案:这时你需要mysql提供给你的密码,在终端输入`sudo vim /etc/mysql/debian.cnf
-
获得默认的password:
-
再使用
mysql -udebian-sys-maint -p
进入mysql后,输入上面获取的密码。 -
结合两者按此步骤:
-
重置root账号的密码:
$ use mysql; $ update user set authentication_string=PASSWORD("123456") where User='root';
-
更新缓存密码和权限:
$ update user set plugin="mysql_native_password"; $ flush privileges; $ quit $ sudo /etc/init.d/mysql stop $ sudo kill -9 $(pgrep mysql) $ sudo /etc/init.d/mysql start
-
-
-
others
-
-
Data文件夹存放原始数据和处理好的数据
-
python load_dbdata.py
:将数据导入mysql db -
查看导入的内容:
# root为你的root名,yourpassword为你root用户的密码 $ mysql -uroot -p123456 # 显示数据库 $ mysql>show databases; # 选择数据库 $ mysql>use KB_QA; # 显示表 $ mysql>show tables; # 显示表中的所有数据 $ mysql>select * from nlpccQA;
-
问题报错解决:
-
插入数据成功:
-
others
-
-
命名实体识别的调参和训练:
-
模式选择:
- terminal_ner.sh do_predict_online=True NER线上预测 do_predict_outline=True NER线下预测 - args.py train = True 预训练模型 test = True SIM线上测试
-
基于Bert的句子相似度计算模块训练:
-
基于KB的问答测试:
-
运行:
python kbqa_test.py
-
测试结果:
-
dataset_test测试:用训练问答对中的实体+属性,去知识库中进行问答测试准确率上限
-
kb_fuzzy_classify_test测试:
-
-
-
Original artical: https://github.com/WenRichard/KBQA-BERT ,https://zhuanlan.zhihu.com/p/62946533
-
技术细节分析:
-
基于知识图谱的自动问答拆分为2 个主要步骤:命名实体识别步骤和属性映射步骤。其中,实体识别步骤的目的是找到问句中询问的实体名称,而属性映射步骤的目的在于找到问句中询问的相关属性。
-
命名实体识别:基于Bert+BiLSTM+CRF 的方法,另外加上一些规则的映射,提高覆盖度。
- 采用BIO标注法。只需要识别出实体便可,包括人名,地名,机构名都囊括为统一的标签B-LOC, I-LOC。
- 与以前一样的训练过程。
-
属性映射:将其转换为文本相似度的问题,采用Bert作二元分类训练模型。
-
数据集构造:
- 构造测试集的整体关系集合,提取+去重,获得 4373 个关系 RelationList;
- 一个 sample 由“问题+关系+Label”构成,原始数据中的关系值置为 1;
- 从 RelationList 中随机抽取五个属性作为 Negative Samples(反例);
- question-triple相似度训练集如下:
-
模型架构:
-
1、 实体检索:输入问题,ner得出实体集合,在数据库中检索与输入实体相关的所有三元
-
2、 属性映射——bert分类/文本相似度
-
非语义匹配:如果所得三元组的关系(attribute)属性是 输入问题 字符串的子集,将所得三元组的答案(answer)属性与正确答案匹配,correct +1
-
语义匹配:利用bert计算输入问题(input question)与所得三元组的关系(attribute)属性的相似度,将最相似的三元组的答案作为答案,并与正确的答案进行匹配,correct +1
-
-
3、 答案组合与返回答案。
-
-
-
-