在近几年中,问答回答(QA)应用的快速发展彻底改变了我们获取信息的方式。无论是在搜索引擎、聊天机器人,还是在从大量主题数据中检索相关信息的应用程序中,QA应用的身影无处不在。
简而言之,QA应用的主要目的是在文本段落中找到对特定问题最合适的答案。早期的一些方法包括基于关键词的简单搜索或使用正则表达式,但很明显,这些方法并不理想。问题或文本可能包含打字错误,而正则表达式无法识别同义词,这对于查询中的某个词来说可能非常关键。因此,这些早期方法被新的、更为强大的方法所取代,特别是在Transformers和向量数据库时代。
本文将介绍构建现代且可扩展QA应用的三种主要设计方法:
抽取式问答 | 开放式生成问答 | 封闭式生成问答 | |
外部上下文的使用 | √ | √ | × |
答案获取方式 | 抽取 | 生成 | 生成 |
一:抽取式问答
抽取式问答系统由三个核心部件构成:检索模块 、数据库 、解析模块。
问题输入到检索模块。检索模块的目标是生成与问题相对应的嵌入向量。检索模块的实现方式多样,从简单的向量化方法(如TF-IDF、BM-25)到更复杂的模型都有。通常,类似于Transformer的模型(例如BERT)会被整合进检索模块。与仅依赖于词频的简单方法不同,语言模型能构建出能够捕捉文本语义意义的密集嵌入向量。
在从问题中获取到查询向量后,该向量被用来在一个外部文档集合中找到最相似的向量。每个文档都可能包含问题的答案。通常,在训练阶段,文档集合会被传递给检索模块,检索模块输出文档对应的嵌入向量。这些嵌入向量通常存储在数据库中,以便进行有效的搜索。
在问答系统中,向量数据库通常扮演着高效存储和基于相似性搜索嵌入向量的角色。最流行的向量数据库包括Faiss、Pinecone和Chroma。
通过检索与查询向量最相似的_k_个数据库向量,它们的原始文本表示被用来通过另一个称为_解析模块_的组件找到答案。解析模块接收初始问题,并对每个检索到的文档中的文本段落提取答案,并返回这个答案正确的概率。然后,概率最高的答案最终被抽取式问答系统返回。
在解析模块的角色中,通常使用经过微调、专门用于问答下游任务的大型语言模型。
二、开放式生成问答
开放式生成问答(Open Generative QA)与抽取式问答(Extractive QA)采用了相似的框架,不同之处在于它使用了内容生成模块 而非信息解析组件。与信息解析组件不同,内容生成器并不从文本段落中直接提取答案。相反,答案是基于问题和文本段落中提供的信息生成的。与抽取式问答一样,选择概率最高的答案作为最终答案。
正如其名称所示,开放式生成问答系统通常使用像GPT这样的生成模型来生成答案。
由于两种架构结构非常相似,人们可能会疑惑何时使用抽取式问答和何时使用开放式生成问答架构更为合适。事实证明,当信息解析组件能够直接访问包含相关信息的文本段落时,它通常能够检索到精确且简洁的答案。另一方面,生成模型在大多数情况下倾向于为给定上下文产生更长、更泛化的信息。在提出开放式问题的情况下,这可能是有益的,但对于期待简短或确切答案的情况则不然。
三、检索增强式生成
最近,"检索增强式生成 "(Retrieval-Augmented Generation,简称"RAG")这一术语在机器学习领域的流行度急剧上升。简单来说,它是一个基于开放式生成问答系统架构的大型语言模型(LLM)应用创建框架。
在某些情况下,如果一个LLM应用需要处理多个知识领域,RAG检索器可以添加一个额外步骤,试图确定给定查询最相关的知识领域。根据识别出的领域,检索模块随后可以执行不同的操作。例如,可以使用多个向量数据库,每个数据库对应一个特定领域。当查询属于某一领域时,就使用该领域的向量数据库来检索查询最相关的信息。
这种技术使搜索过程更快,因为我们只通过特定的文档子集进行搜索(而不是所有文档)。此外,它可以使搜索更可靠,因为最终检索到的上下文是从更相关的文档中构建的。
RAG流程示例:检索模块从给定问题中构建一个嵌入向量。然后,使用这个嵌入向量将问题分类到某一运动类别中。对于每种类型的运动,相应的向量数据库被用来检索最相似的上下文。问题和检索到的上下文被输入到生成器中以产生答案。如果问题与运动无关,则RAG应用会通知用户。
四、封闭式生成问答
封闭式生成问答(Closed Generative QA)系统独特之处在于,它们仅利用问题中的信息生成答案,而不接触任何外部信息。
这种系统的一个显著优点是,由于无需搜索大量外部文档,因此能够缩短处理时间。然而,这种便利是有代价的,主要体现在训练和准确性上:生成器需要足够强大,拥有广泛的训练知识库,以便能够生成恰当的答案。
此外,封闭式生成QA系统还面临另一个问题:生成器无法识别训练数据后期出现的新信息。为了解决这个问题,可以通过在更新更近的数据集上重新训练生成器来实现。但是,考虑到生成器通常包含数百万甚至数十亿参数,重新训练不仅耗费巨大资源,也是一个极其繁重的任务。相比之下,解决相同问题在抽取式问答(Extractive QA)和开放式生成问答(Open Generative QA)系统中就简单多了:只需向向量数据库中添加新的上下文数据即可。
在大多数情况下,封闭式生成方法主要应用于处理通用问题。而在非常特定的领域,封闭式生成模型的性能往往会下降。通过将复杂的概念简化,我们可以更直接地理解封闭式生成问答系统的工作原理、优点和面临的挑战。
五、总结
前面介绍了构建问答(QA)系统的三种核心方法。重要的是,没有一个方法可以称之为绝对的最佳选择:每种方法都有其独特的优点和局限性。因此,在选择合适的QA系统架构之前,首先需要对问题进行深入分析,以确保所选架构能够提供更优的性能。
值得一提的是,开放式生成问答(Open Generative QA)架构目前在机器学习领域内备受关注,尤其是随着最近出现的创新性检索增强生成(RAG)技术。如果你是一名自然语言处理(NLP)工程师,那么你绝对应该密切关注RAG系统,因为它们目前正以极快的速度发展。