文章目录

  • 项目地址
  • 任务描述
  • 1. 观察数据
  • 2. 提取数据
  • 3. 过滤数据
  • 4. 人工过滤
  • 5. 问答机器人
  • 备注
  • 参考文献


项目地址

本文所有代码及数据集已上传 Retrieval-Bot


任务描述

基于百度中文问答数据集WebQA构建问答机器人,共 45247 条数据。

属于检索式问答系统,采用倒排索引+TFIDF+余弦相似度。

语料地址已失效,已附带在本项目中,43.6Mb,若下载速度较慢可使用百度网盘(frph)

相关论文:Dataset and Neural Recurrent Sequence Labeling Model for Open-Domain Factoid Question Answering

基于nlp的智能问答应用 基于python的智能问答系统_nlp


1. 观察数据

文件列表

文件

描述

me_test.ann

一个问题一个证据

me_test.ir

一个问题多个证据

me_train

混合训练语料

me_validation.ann

一个问题一个证据

me_validation.ir

一个问题多个证据

解析JSON数据得到构成:

{
  "问题编号": {
    "question": "",
    "evidences": {
      "证据编号1": {
        "answer": "",
        "evidence": ""
      },
      "证据编号n": {
        "answer": "",
        "evidence": ""
      }
    }
  }
}

材料中没有答案的话默认为 ‘no_answer’

存在问题编号相同但内容完全不同的情况


2. 提取数据

提取字段有:

字段

描述

question

问题

answer

答案

evidence

证据

answer1

不同的答案1

answern

不同的答案n

提取数据共 48265 条,部分结果:

{
  "8284": {
    "question": "世界上最大的岛屿是",
    "answer": "格陵兰岛",
    "evidence": "答:世界上最大的岛屿—格陵兰岛",
    "answer1": "格陵兰",
    "evidence1": "答:世界上最大的岛屿—格陵兰岛"
  },
  "8285": {
    "question": "世界上最大的岛屿在哪里?",
    "answer": "格陵兰岛",
    "evidence": "答:中国最大的岛屿是台湾岛,总陆地面积为35915平方公里,属于台湾省;其次是海南岛,总陆地面积为32198平方公里,属于海南剩世界上最大的岛格陵兰岛(greenland)是世界最大岛,面积2,166,086平方公里(836,330平方哩)。在北美洲东北,北冰洋和大..."
  },
  "8286": {
    "question": "世界上最大的平原是什么",
    "answer": "亚马孙平原",
    "evidence": "亚马孙河是世界流域面积最大的河流,亚马孙河流经的亚马孙平原是世界上面积最大的平原."
  }
}


3. 过滤数据

观察数据发现:

  1. 最多有两个回答,即 ‘answer’ 和 ‘answer1’ 字段
  2. 答案有2个的数据共 44 条


4. 人工过滤

人工过滤上述数据中有问题的 8 条数据(加粗为正确答案):

question

answer

answer1

第一位任国际足联副主席的华人是

李惠

李惠堂

世界上最大的金字塔叫什么名字

胡夫金字塔

埃及金字塔

西游记作者是谁

罗贯中

吴承恩

西游记的作者是谁

吴承恩

罗贯中

妙应寺白塔始建于元朝至元八年(公元1271年),由当时哪国的工艺家阿尼哥奉敕主持修建

尼泊尔

尼伯尔

典故"负荆请罪"中的"负荆"者是向谁请罪的?

蔺相

蔺相如

《白雪歌送武判官归京》的作者是


岑参

台湾最大的湖是什么湖?

日月潭

澎湖


5. 问答机器人

利用 gensim 库构建问答机器人

主要步骤:

  1. 读取语料库,分词,去停用词
  2. 加载或生成Gensim字典
  3. 语料转词袋表示
  4. 构建TFIDF模型
  5. 比较文本相似度


备注

首次运行会进行分词、转向量任务,需要约25s,将保存多个文件,下一次运行仅需0.2s

文件名

用途

dictionary

语料处理后的gensim字典

splitdata.json

原始语料的分词结果

tfidf.index

文本相似度序列

tfidf.index.0

文本相似度序列缓存文件

tfidf.index.1

文本相似度序列缓存文件

tfidf.model

TFIDF模型