Skip to content
中文知识库问答代码,在CCKS2019 CKBQA评测获得67.6%的F值,第四名
Python Jupyter Notebook
Branch: master
Clone or download

Latest commit

Latest commit 135dc22 Mar 4, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
PKUBASE Create r.md Oct 15, 2019
corpus
data Add files via upload Nov 5, 2019
helper Update readme.md Oct 30, 2019
pdf Add files via upload Oct 15, 2019
src Add files via upload Mar 4, 2020
DUTIR中文知识库问答评测报告.pdf Add files via upload Oct 15, 2019
README.md
ccks2018 COQA 2nd paper.pdf Add files via upload Oct 15, 2019

README.md

ccks2019-ckbqa-4th-codes

中文知识库问答代码,在CCKS2019 CKBQA评测获得67.6%的F值,第四名

任务介绍

这个评测任务主要是基于中文开放域知识库的智能问答,主办方是北京大学的邹磊、胡森老师。知识库是他们搭建的PKUBASE,语料在https://github.com/pkumod/CKBQA 上。我们主要是参考了ccks2018 COQA评测第二名的方法,在此基础上加入了基于Bert的序列标注、语义匹配等模型,以及桥接等回答复杂问题的环节。具体方法在评测论文里,和本次比赛前三名的方法一起放在了/pdf下供参考。

注意:因为这个程序依赖自己在本地服务器搭的知识库,所以不搭好知识库的话,entity_extractor及之后的程序都是无法运行的。

代码介绍

文件结构:

  • src: 主要的程序文件
  • helper: 用于生成一些字典/语料集预处理的程序文件
  • data: 存放各种字典,中间文件及最终答案
  • corpus: 原始语料集文件
  • PKUBASE: 评测方提供的知识库文件

依赖字典:

这些字典均可通过helper中的程序生成

  • segment_dic.txt: 分词词典
  • prop_dic.pkl: 知识库中的属性值字典
  • mention2entity_dic.pkl: 实体链接字典,实际就是评测方提供的文件存成了pkl格式
  • char_2_prop.pkl:知识库中字符to属性值的倒排索引,用于属性值模糊匹配

将PKUBASE知识库搭建在本地服务器

  1. 下载neo4j图数据库的linux版本,地址https://neo4j.com/ ,上传到服务器上解压即可。配置好conf,具体参考https://blog.csdn.net/u013946356/article/details/81736232
  2. 使用大规模导入工具 ./neo4j-admin import 来导入知识库,这里需要把PKUBASE知识库源文件处理成一定格式,参考:生成neo4j文件和各种词典.ipynb

训练流程(按顺序):

  • train_ner.py 根据语料集反向标注问题,训练一个NER模型
  • mention_extractor.py: 同时使用jieba分词和bert序列标注来抽取问题中的实体mention
  • prop_extractor.py: 使用规则抽取问题中的属性值
  • entity_extractor.py: 将实体mention和属性值链接到知识库,得到候选实体,并为每个实体生成一些人工特征
  • entity_filter.py: 根据特征,对候选实体进行逻辑回归筛选,保存逻辑回归模型
  • similiary.py 根据该语料微调bert文本匹配模型;需要配置src/data/train.xls等文件。正例就是每个问题和对应的正确关系路径,负例可以随机选n个错误路径。
  • tuple_extractor.py: 根据候选实体从知识库中抽取两跳内的关系作为候选答案,并根据微调后的bert文本匹配模型,生成问题+候选答案的相似度特征
  • tuple_filter.py: 根据bert相似度特征对候选答案进行排序筛选
  • kb.py:连接知识库,定义了一些查询函数。由于连接的是自行搭建的数据库,无法直接执行。

测试流程

  • answer_bot.py: 该程序会依次调用上述文件,并针对双实体问题进行桥接,最终输出基于神经网络的方法可提交的结果
  • 语义解析模块.ipynb:针对上述基于神经网络方法难以回答且结构清晰的问题,写了一些正则式进行补充,主要还是得到最终可提交结果

主要参考

You can’t perform that action at this time.