Python快速构建中文问答机器人——检索式机器人

项目地址

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




任务描述

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

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

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

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

在这里插入图片描述




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 条数据(加粗为正确答案):

questionansweranswer1
第一位任国际足联副主席的华人是李惠李惠堂
世界上最大的金字塔叫什么名字胡夫金字塔埃及金字塔
西游记作者是谁罗贯中吴承恩
西游记的作者是谁吴承恩罗贯中
妙应寺白塔始建于元朝至元八年(公元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.modelTFIDF模型




参考文献

  1. 【语料】百度的中文问答数据集WebQA - 科学空间
  2. Dataset and Neural Recurrent Sequence Labeling Model for Open-Domain Factoid Question Answering
  3. Python解析JSON数据构成
  4. Python库Gensim用于主题建模、文档索引、语料相似性检索
  5. brightmart/nlp_chinese_corpus: 大规模中文自然语言处理语料 Large Scale Chinese Corpus for NLP
  6. NLP民工的乐园: 几乎最全的中文NLP资源库
  7. codemayq/chinese_chatbot_corpus: 中文公开聊天语料库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XerCis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值