基于BERT模型的知识库问答(KBQA)系统

一、介绍

本项目的主要目标是构建一个公共的知识库问答系统,从用户所提出的问题,对知识库进行检索,返回一个确定的答案,或者没有答案。项目代码、数据在这个地址中:https://pan.baidu.com/s/1jwhzqtWaSPpZky5luVOOzg?pwd=6ga1
提取码:6ga1

本项目所使用的数据集是已经被预处理好的三元组 ,有两个文件 nlpcc-iccpol-2016.kbqa.training-data,nlpcc-iccpol-2016.kbqa.testing-data,文件内容样式:

二、数据处理

1. 切分数据

training-data样本数14609,testing-data样本数9870 。运行 1_split_data.py 重新切分一下数据,在路径".\bert-kbqa\input\data\NLPCC2016KBQA"得到 train.txt    dev.txt    test.txt三个文件。三个文件的样本数量分别是 14609,4935,4925。

2. 构造命名实体识别(NER)数据集 

 运行  2-construct_dataset_ner.py 得到命名实体识别数据集,在路径 "bert-kbqa\input\data\ner_data"得到。

 txt文件是ner数据集,csv是后面数据库所需要的。

由于只需要识别实体,所以只标记处实体和非实体,供三个类别["O","B-LOC","I-LOC"],ner的数据:

 3.  构建属性相似度的数据

 一个问题(样本)自己的属性为正例,再随机从剩余的,非自身属性中选取5个作为负例。运行文件 

 3-construct_dataset_attribute.py得到。如图: 行末为1的是正例,行末为0是负例。

4. 构建数据库(Mysql)的数据

mysql的安装配置,这里就不展开了。假设各位mysql都已经存在。

        运行文件  5-triple_clean.py  得到所需要数据,运行  6-load_dbdata.py 创建数据库,加载数据。

三、模型介绍

 bert是基于transformer的decoder部分做的预训练模型,这里以项目为主 ,原理部分不展开

       bert 论文:https://arxiv.org/abs/1810.04805

       bert翻译的中文博客 :https://blog.csdn.net/qq_41664845/article/details/84787969#comments

      bert的源代码(pytorch) :https://github.com/huggingface/transformers

      CRF知乎专栏:https://zhuanlan.zhihu.com/p/44042528

模型基于bert,主要有两个模型

     模型1:BertCrf 用 BertForTokenClassification + crf 模型  用于识别出问题中的实体,是查询数据库的基础。

     运行文件 NER_main.py 训练

     模型2: BertForSequenceClassification , 用于句子分类。把问题 和 属性拼接到一起,判断问题要问的是不是这个属性。

   运行文件 SIM_main.py 训练

     需要说明一下,当在数据库查询的属性在问题中已经出现,则此时认为该问题所对应的属性已经找到,不需要经过模型2来判断,以达到节约时间的目的。

   例如:

   问题:《机械设计基础》这本书的作者是谁?   

   在数据库查找的“作者”这个属性在问题中出现了,则直接返回对应的答案。

     项目工作的流程:
 

四、最终结果

 模型1 BertCrf 最佳模型,在测试集的表现:

模型二     BertForSequenceClassification 最佳模型,在训练集的表现

在测试集,找了一些问题,属性没有完全在问题中出现,问答对话的效果:

  • 6
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 计算机理论问答集锦是一个包含不同课程中的问题和答案的集合。其中包括了操作系统(OS)和计算机组成原理等相关课程的内容。 在操作系统方面,一些常见的问题可能涉及到OS的定义、作用和功能。操作系统是计算机系统中的一个重要组成部分,它负责管理和协调系统的硬件和软件资源,提供一个良好的用户界面和各种服务。常见的操作系统包括Windows、macOS和Linux等。 在计算机组成原理方面,可能会涉及到计算机的基本组件和工作原理。计算机由处理器、存储器、输入输出设备和总线等组件组成。处理器(CPU)是计算机的核心部件,负责执行各种计算和指令。存储器包括主存储器(RAM)和辅助存储器(硬盘、SSD等),用于存储数据和程序。输入输出设备负责数据的输入和输出。总线用于不同组件之间的数据传输。 除了这些基本概念,还可能涉及计算机的指令集、CPU的微体系结构、存储器层次结构、流水线技术等更具体的内容。此外,还可能涉及到计算机网络、并行计算和分布式系统等相关问题。 计算机理论问答集锦的目的是为了提供一个综合的、权威的答案库,帮助人们理解和学习计算机科学中的基本理论和原理。通过浏览和研究这些问题和答案,人们可以更全面地了解计算机领域的知识,提升自己的专业能力。 ### 回答2: 计算机理论问答集锦是一个汇总了涉及计算机科学中多个重要课程的问答集合。其中包括操作系统(OS)和计算机组成原理等课程的相关问题和答案。 在操作系统方面,会涉及到诸如操作系统的定义、功能、种类、进程管理、内存管理、文件系统等方面的问题。例如,我们可以回答"操作系统是计算机中负责管理和控制计算机硬件与软件资源的系统软件"。 在计算机组成原理方面,会涉及到诸如计算机硬件的组成、工作原理和性能等方面的问题。例如,我们可以回答"计算机组成原理研究计算机硬件和基本工作原理,包括中央处理器(CPU)、存储器、输入输出设备和总线等"。 另外,计算机理论问答集锦还可以涉及其他课程,如数据结构、算法设计与分析、计算理论等。比如,我们可以回答"数据结构是一种组织和存储数据的方式,常见的数据结构包括数组、链表、栈、队列和树等"。 通过计算机理论问答集锦,我们可以回顾和巩固相关课程的重要知识点,加深对计算机科学核心领域的理解。这对于学生提高计算机理论素养、解决问题和应对学术和职业挑战都具有积极的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值