本系列记录大模型 (LLMs) 以及 RAG 项目背景下的问答提取工程化相关背景、理论、技术与实践,分 3 篇(即基础入门、技术综述、项目与实践)。本文是最后一部分,主要是相关开源项目介绍、特点,实践优化思路。
摘要
介绍 7 个QA提取项目(论文)的特定、场景、思路。
以下是正文。
QA 提取开源项目
Github 上关于 QA 提取的资源并不多,检索到一部分还处于论文阶段。我们主要搜集了以下 7 个项目,总结如下:
-
roberta-base-chinese-extractive-qa
- 特点:此项目是基于 RoBERTa 基础模型的中文抽取式问答模型,经过了中文语料的微调。它支持 PyTorch 和 TensorFlow 格式,并提供了通过 Hugging Face Transformers 库直接使用的 API。该模型在 cmrc 2018、webqa 和 laisi 三个数据集上进行了训练。
- 应用场景:适用于需要处理中文文本并从中抽取准确答案的应用场景。
- 项目地址:
https://gitee.com/hf-models/roberta-base-chinese-extractive-qa
-
OneStop QAMaker
- 特点:OneStop 采用了一种全新的端到端方法来生成问答对,而不是传统的流水线方式。它直接优化了问题生成和答案提取之间的兼容性,确保生成的问题和对应的答案更加匹配。此外,OneStop 只需要一个模型就能完成复杂的 QA 生成任务,这使得它在工业环境中更容易部署。
- 应用场景:适合于那些需要高质量且相互匹配的问答对的数据集构建任务。
- 论文地址:OneStop QAMaker: Extract Question-Answer Pairs from Text in a One-Stop Approach
-
Question Extractor
- 特点:利用非微调的语言模型如 ChatGPT 自动从现有文本中提取问答对。它可以处理长文档,并实现了并发处理以提高效率。项目还支持智能文本分割,当文本过长时会沿 Markdown 标题进行分割。
- 性能表现:能够在 6 分钟内处理完 NERSC 文档集(318 个 Markdown 文件),生成 8005 个问答对,仅需$29 的成本。(注:这个项目是采用的收费接口,因此对于那些离线部署的场景不可用!)
- 潜在改进:项目自述提到这些——考虑引入 GPT-4 来提升答案质量,实现中间结果保存以便恢复中断的任务,以及减少对 Langchain 的依赖。
- 应用场景:适用于需要快速生成大量高质量问答对的研究人员和开发者。
- 项目地址:
https://github.com/nestordemeure/question_extractor
-
WikiHowQAExtractor-mnbvc
- 特点:该项目旨在从
WikiHow
页面中抽取中文/英文问答数据。它可以接受 HTML 文件或 CSV 文件作为输入,输出为 JSONL 格式的文件。每个问答条目包含问、答、来源等信息,且能够处理超过 500 MB 大小的结果文件。 - 应用场景:场景受限,特别适合用于创建教育类内容或者帮助文档的知识库。
- 项目地址:
https://github.com/wanicca/WikiHowQAExtractor-mnbvc
- 特点:该项目旨在从
-
Haystack Extractive QA Pipeline
- 特点:Haystack 是一个灵活的框架,允许用户轻松地构建和运行各种 NLP 工作流,包括问答系统。其抽取式问答管道可以使用预训练的模型来定位文档中的确切答案位置,保证了较高的准确性。
- 应用场景:非常适合希望集成最先进的 NLP 技术到自己应用中的开发者,尤其是那些关注可解释性和高精度的应用。
- 项目地址:
https://github.com/deepset-ai/haystack
-
synthetic-LLM-QA-dataset-generator
- 特点:用于生成合成问答对(QA pairs)的开源工具,特别设计用于增强和扩展现有的语言模型训练数据集。该项目利用预训练的语言模型(如 GPT 或 BART),通过提供上下文和问题模板,自动生成高质量的问答对。其核心特点是高度可定制化,用户可调整生成参数、选择不同的模型和提示策略,以适应特定领域的需求。此外,该工具支持批量处理,能在短时间内生成大量多样化的 QA 对,显著减少人工标注的工作量。项目还提供了详细的日志记录和评估功能,帮助用户监控生成过程并确保数据质量。
- 应用场景:适用于需要大规模高质量问答数据的场景。例如,在开发和训练对话系统、聊天机器人时,它可以快速生成大量的训练样本,提升模型的泛化能力和响应质量。在教育领域,教师可以使用该工具从教材或讲义中生成练习题和测试题,帮助学生更好地理解和掌握知识点。
- 项目地址:
https://github.com/nalinrajendran/synthetic-LLM-QA-dataset-generator
-
QA-Pair-Generator
- 特点:一个用于自动生成问答对(QA pairs)的开源工具,具备以下关键特性:基于预训练模型:利用 BERT 和 T 5 等预训练语言模型,生成高质量的问题和答案。任务学习框架:整合问题生成和答案提取,确保 QA 对的一致性和相关性。多种输入格式支持:处理纯文本、HTML 和 CSV 文件,适应不同数据源。灵活配置:用户可调整模型参数,如选择不同的预训练模型、控制生成问题数量等。高效批处理:快速生成大量 QA 对,适用于大规模数据集构建。
- 应用场景:这自动构建训练数据集、知识库构建、文本摘要与理解。
- 项目地址:
https://github.com/MalaiarasuGRaj/QA-Pair-Generator
不同 QA 提取项目各有侧重,有的专注于特定语言支持,有的则强调生成过程中的智能化和高效性;而有些则为了满足特定类型的内容需求而设计。
改进点
上面有一篇是论文提出的 OneStop QAMaker 框架:
- 传统方法:大多数现有的 QA 对生成方法采用的是流水线式方法,即先选择最有可能的答案片段(answer span),然后根据该答案生成相应的问题。这种方法忽略了问题生成与答案提取之间的联系,可能导致生成的 QA 对不兼容。
- OneStop 方法:OneStop 模型直接优化了联合目标 P(q,a∣d)P(q,a∣d),即同时生成问题 q 和其对应的答案片段 a,并且这两个任务在生成过程中相互影响。具体来说,答案提取任务会促使问题生成模型生成更易回答的问题,而问题生成任务则会增强答案提取模型的表现。
- 由于 OneStop 模型将问题生成和答案提取整合到了一个单一的模型中,因此相比于传统的流水线方法,它在训练和推理阶段都更加高效。此外,OneStop 模型的参数量相对较少,使得它在工业场景中更容易部署和扩展。
实践经验
-
构建高质量的知识库:知识库的质量直接影响问答系统的性能,“Garbage in, garbage out” 说明如果你输入的是无用或低质量数据,那输出的结果也将是无用或错误的。
-
加强语义理解:利用语义角色标注、实体链接等技术,深入理解用户问题的语义信息,提高答案的准确性和相关性。
-
智能选择语境:根据用户历史问题和兴趣,智能推荐相关问题或答案,提升用户满意度;在某些领域中,只有代入语境才能准确解读问题的含义。
-
模型微调:利用大模型开发与服务平台,对语义理解模型、答案生成模型等进行微调,提升模型的准确性和泛化能力。
-
性能监控与调优:采用性能监控工具对系统进行实时监控,及时发现并解决性能瓶颈。