(二)基于文本的智能QA问答系统——项目进展1

面向问题的信息检索系统

1、查找关键词抽取算法

​ 尝试了textRank和FastTextRank抽取算法

​ 跑通了textRank

​ 实现截图:

(二)基于文本的智能QA问答系统——项目进展1_第1张图片

2、实现段落分割

(二)基于文本的智能QA问答系统——项目进展1_第2张图片

3、实现简单python和java通信

(二)基于文本的智能QA问答系统——项目进展1_第3张图片

基于预训练模型的文档语义检索系统

1、实现hugging face预训练模型加载

(二)基于文本的智能QA问答系统——项目进展1_第4张图片

2、crossencoder方法实现

注意分数越大,相关度越高,第三条相关度最高,经人工检验符合要求。
(二)基于文本的智能QA问答系统——项目进展1_第5张图片

3、测试不同的prompt

4、biencoder方法实现

在这里插入图片描述

第三条是最符合query的答案,但是相关度较低,需要进一步改进。

面向问题的问题库生成

学习预备知识

  • Introduction and Word Vector (1 hour 24 min)
  • Lecture 7 - Translation, Seq2Seq, Attention (1 hour 18 min)
  • Lecture 8 - Final Project Practice Tips (the early 25 min)
  • Lecture 11 - Question Answering (1 hour 51 min)
  • Lecture 12 Natural - Language Generation (1 hour 17 min)

收获

1)了解了一个基本的序列生成问题的运作模式
2)知道了为什么需要使用到Attention机制可以是结果更加优秀
3)学习了几个评估模型结果的指标,比如BLEU等
4)了解了SQuAD数据集的基本结构,和使用方法

思路

1)QG任务目前分为两个部分:

  • 首先是从文本中找到可以提问的位置,输出一个答案的首尾index;

  • 其次是输入Answer和Context,返回对应的Question。

前者可以类比QA问题,但是不需要输入两个不同的序列,但是可以考虑使用Attention机制,并采用Bert的预训练模型(Bert这一部分还没有学习到)

后者也是一个序列到序列的问题,但是需要考虑如何将答案位置和Context一起编码,并输出问题。前者和后者都可以充分利用SquAD数据集进行训练。

2)QG问题的一个要求是,需要多角度、多方式提问。我们训练模型如何保障多角度?我考虑可以在Decode的过程中生成一系列的答案,这些答案有着不同的Score,我们选取前K个答案,然后分别生成问题。如何保障多方式?我们可以在对一个答案生成问题的时候一次性生成概率最大的前K个问题,而我们要做的仅仅只是修改Decode的方法。

问答模型

目前该部分已经可以正常运行。

服务器选择

paddlepaddle和paddlenlp已经在自己的电脑上配置完成,但由于个人PC算力有限,在AI Studio上使用模拟我的8G CPU无GPU的环境进行模型训练时,无论如何调节batchsize,内存始终溢出。为了模型训练的效果,最终还是选择了在AI Studio上对模型进行训练。

同样,后续使用模型进行预测时,在数据预处理过程以及后续预测过程都出现了内存溢出的情况,因此拟用AI Studio作为服务器进行后续的预测。

数据集加载

PaddleNLP已经内置SQuAD,CMRC等中英文阅读理解数据集,使用paddlenlp.datasets.load_dataset()API即可一键加载。参考实例加载的是DuReaderRobust中文阅读理解数据集。由于DuReaderRobust数据集采用SQuAD数据格式,InputFeature使用滑动窗口的方法生成,即一个example可能对应多个InputFeature。

答案抽取任务即根据输入的问题和文章,预测答案在文章中的起始位置和结束位置。

由于文章加问题的文本长度可能大于max_seq_length,答案出现的位置有可能出现在文章最后,所以不能简单的对文章进行截断。

那么对于过长的文章,则采用滑动窗口将文章分成多段,分别与问题组合。再用对应的tokenizer转化为模型可接受的feature。doc_stride参数就是每次滑动的距离。滑动窗口生成InputFeature的过程如下图:

(二)基于文本的智能QA问答系统——项目进展1_第6张图片

对代码进行修改以适配我们的任务

参考示例中通过在线下载DuReaderRobust中文阅读理解数据集对模型进行训练。但该数据获取方法无法适配我们的任务。
具体实现请参考个人博客。

总结

截止到本周(第六周)

问答系统、预训练语义检索模型已可以正常跑通。传统检索模型、问题库生成的相关细节和技术路线已经明确。接下来将进一步测试、完善、优化系统。

你可能感兴趣的