最近参加了CCF BDCI的比赛,获得了A榜第一,B榜第二的成绩。该赛题要求使用运营商相关的文档构建知识库,根据用户问题检索知识库并返回答案所在的文本块。这个赛题对检索要求很高,在检索到正确文本块的情况下还需要精确地找到答案对应的句子。在比赛过程中,我们开发了一系列文本压缩策略,从简单到复杂逐步优化。下面详细介绍每个版本的实现思路:
V1: 基础Reranker压缩
在开发文本压缩策略的初期,我们首先想到了使用reranker模型来实现。这个想法源于检索增强生成(RAG)中常用的reranker,它可以有效地对文本片段进行相关性排序。我们认为,如果reranker能够准确评估文本片段与问题的相关性,那么它也应该能够帮助我们找到最精确的答案文本。
具体实现时,我们先将原文切分成若干句子,然后生成这些句子的所有可能连续组合。每个组合都会通过 reranker 模型与问题进行匹配并得到一个相关性分数。最终,我们选择得分最高的句子组合作为压缩后的答案。
然而在实践中我们发现,仅依靠 reranker 模型可能会错过一些重要信息。因为 reranker 更关注整体的语义相关性,而对于一些关键但篇幅较小的细节可能不够敏感。这促使我们思考如何提高压缩的准确性,因此发展出了 V2 版本。
V2: Reranker + 单关键词压缩
为了解决V1版本可能丢失关键信息的问题,我们开始思考如何在压缩过程中保留最重要的内容。经过分析发现,问答模型在定位关键答案片段方面有着独特的优势,它能够准确理解问题并从上下文中提取出最相关的信息。这启发我们将问答模型引入到压缩策略中。
在新的方案中,我们首先使用预训练的BERT问答模型从原文中抽取出关键答案片段作为核心关键词。这个关键词代表了问题最想获得的信息。然后在生成句子组合,我们只保留包含这个关键词的组合,这样可以显著减少需要评估的文本数量。最后再使用reranker对过滤后的句子组合进行打分,选择最优的压缩结果。
这种方法既保持了V1版本使用reranker进行相关性排序的优势,又通过问答模型的关键词提取确保了最重要的信息不会丢失,并且相比 V1 版本提高了计算效率。实践证明,这种结合两种模型优势的方案能够产生更准确的压缩结果。不过我们也发现,仅依赖单个关键词有时候可能还不够全面,这促使我们进一步改进,发展出了V3版本。
V3: Reranker + 多关键词压缩
在使用V2版本的过程中,我们发现BERT问答模型虽然能够提取关键答案片段,但往往只能识别出单个最相关的片段。这种单一关键词的方式在处理复杂问题时显得不够全面,因为答案文本块可能涉及多个关键信息点。
为了解决这个问题,我们分析BERT模型输出的start_logits和end_logits概率分布,使用阈值过滤和topk操作提取出多个高概率的答案片段。每个答案片段都会获得一个综合得分,这个得分结合了起始位置和结束位置的概率。最终,我们选择得分最高的前n个片段作为关键词集合。
在压缩过程中,我们要求保留的文本必须同时包含所有这些关键词。这种方式确保了压缩后的文本能够完整地覆盖问题所关注的各个方面。同时,我们仍然使用reranker对满足条件的文本片段进行最终排序,以确保压缩结果不仅包含所有关键信息,还要保持良好的可读性和连贯性。
实践表明,这种多关键词的方案能够更好地处理复杂问题答案,产生的压缩结果更加全面和准确。特别是在处理需要多个信息点互相支撑的答案时,这种方法的优势更为明显。
V4:段落级压缩
在实现了基于关键词的压缩策略后,我们开始思考一个更直接的问题:既然BERT问答模型能够定位关键词的位置,那么是否可以直接利用这个能力来提取包含答案的完整段落呢?这种思路的优势在于可以在保持段落的完整性和连贯性前提下,去除 reranker 模块,大幅提高计算效率。
具体实现时,我们进一步分析V3 BERT问答模型的输出start_logits和end_logits的概率分布,相比 V3 找出更多 topk(默认 top 20)个可能答案片段的起始和结束位置。但与之前 V3 版本不同的是,我们不是简单地提取这些位置对应的文本,而是以topk个位置中的最小的起始位置和最大的结束位置为基准,向两端扩展到最近的自然段落边界(如句号、换行符等)。
这种方法有几个显著的优点。首先,它能够自动识别答案所在的语义完整单元,避免了生硬的截断。其次,这种方法的计算效率更高,因为不需要生成和评估大量的文本组合。最后,这种压缩方法在实际 RAG 系统中相比前者的实用性最高,可以用比较低成本的方案提高检索质量。
实践证明,段落级压缩在保持答案完整性的同时,也能达到不错的压缩率。特别是对于那些答案信息分散在相邻句子中的情况,这种方法表现出了明显的优势。
小结
通过四个版本的迭代,我们逐步完善了文本压缩策略。从最初简单的reranker打分,到引入问答模型提取关键词,再到多关键词策略,最后发展出段落级压缩方案,每个版本都针对前一个版本的不足进行了改进。
- V1版本:虽然简单直接,但容易丢失重要信息;
- V2版本:通过引入问答模型提高了准确性,但单一关键词的局限性逐渐显现;
- V3版本:多关键词策略很好地解决了复杂问题的处理,但计算开销较大;
- V4版本:通过直接提取段落,在保持语义完整性的同时也提高了计算效率。
从实践效果来看,不同版本各有优势。对于常规场景,V4已经足够;对于追求较高精确度,建议 V3+V4;而在实际的RAG系统中,V4因其良好的效率和可用性成为最实用的方案。这些压缩策略不仅帮助我们在比赛中取得了好成绩,也为实际应用中的文本检索系统提供了有价值的参考。