AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


spRAG:适用于金融等密集非结构化文本的RAG框架
发布日期:2024-05-07 05:19:46 浏览次数: 2106 来源:子非AI


RAG(Retrieval-Augmented Generation)模型在自然语言处理和信息检索领域展现出巨大潜力,但在处理复杂的PDF文档和密集的非结构化文本数据时,存在一些挑战。SuperpoweredAI开源的spRAG是一种用于非结构化数据的RAG框架。它在处理密集文本的复杂查询方面表现出色,例如财务报告、法律文件和学术论文。


spRAG关键技术架构

AutoContext:注入文档级上下文

AutoContext技术是spRAG框架中的一项关键创新,它解决了传统RAG模型忽略文档整体信息的局限性。其核心思想是在嵌入文本块之前,自动将文档级别的上下文信息注入到每个块中,使得嵌入的表示更加准确和完整。

# auto_context.py
from sprag.llm import LLMimport tiktoken
# ... (PROMPT, TRUNCATION_MESSAGE 等常量定义)
def truncate_content(content: str, max_tokens: int):# ... (使用 tiktoken 库进行文本截断)
def get_document_context(auto_context_model: LLM, text: str, document_title: str, auto_context_guidance: str = ""):# ... (截断文本,构建 prompt,调用 LLM 生成文档摘要)
def get_chunk_header(file_name, document_context):# ... (将文件名和文档摘要拼接成 chunk header)

在auto_context.py中,get_document_context函数使用LLM模型和预设的prompt来生成文档摘要,这个摘要包含1-2个句子,概括了文档的主题和关键信息。该函数定义了prompt模板,根据文档内容长度进行截断,并填充到模板中,最后调用LLM生成摘要。

get_chunk_header函数将文件名和文档摘要结合,形成chunk header,添加到每个文本块的开头,为每个块提供上下文。这样,文本块的嵌入更准确,更能反映文档的整体信息。

这种方法的优势在于注入文档级上下文信息提升了嵌入质量,使得文本块更好地捕捉内容和含义,提高了检索结果的准确性和相关性。同时,为语言模型提供更完整的上下文信息,减少模型对文本的误解,提高下游任务(如问答、摘要等)的性能


Relevant Segment Extraction (RSE):智能组合相关文本块

RSE是spRAG框架的关键技术之一,它通过智能识别和组合相关文本块,克服了传统RAG模型固定长度块的限制,为语言模型提供更丰富的上下文信息。

# rse.py
import numpy as np
# ... (convert_rank_to_value 函数定义)
def get_best_segments(all_relevance_values: list[list], document_splits: list[int], max_length: int, overall_max_length: int, minimum_value: float) -> list[tuple]:# ... (利用优化算法寻找最佳文本段组合)
def get_meta_document(all_ranked_results: list[list], top_k_for_document_selection: int = 7):# ... (获取所有相关文档的信息,包括文档分割点和每个文档在元文档中的起始位置)
def get_relevance_values(all_ranked_results: list[list], meta_document_length: int, document_start_points: dict[str, int], unique_document_ids: list[str], irrelevant_chunk_penalty: float, decay_rate: int = 20):# ... (计算每个文本块的 relevance value)

工作原理包括:

  1. 文本块聚类:将检索到的相关文本块进行聚类,归类内容相似或语义相关的块。

  2. 文本段构建:根据需求选择和组合聚类后的文本块,形成信息相关的文本段。

  3. 上下文提供:将构建的文本段提供给语言模型,以更好地理解查询意图。

RSE的优势在于:

  • 更丰富的上下文:根据需求灵活组合文本块,提供更完整的上下文信息。

  • 更高的准确性:帮助语言模型生成更准确的答案。

核心函数包括:

convert_rank_to_value:转换检索结果排序为relevance value,get_best_segments:寻找最佳文本段组合,get_meta_document:获取所有相关文档信息,get_relevance_values:计算文本块的relevance value。


spRAG核心技术组件

VectorDB:存储嵌入向量

BasicVectorDB: 用于存储文本嵌入向量和少量元数据,支持高效的相似度搜索和检索。

ChunkDB:存储文本块内容

BasicChunkDB: 以嵌套字典格式存储文本块内容,供RSE技术检索和组合相关文本。

Embedding:定义嵌入模型

OpenAIEmbedding: 利用OpenAI提供的文本嵌入模型,例如text-embedding-ada-002,将文本数据映射到向量空间。

CohereEmbedding: 使用Cohere提供的文本嵌入模型进行文本向量化。

VoyageAIEmbedding: 使用Voyage AI提供的文本嵌入模型进行文本向量化。

Reranker:优化搜索结果

CohereReranker: 使用Cohere提供的文本重排序模型对检索结果进行重新排序,提升查询的准确性。

LLM:用于文档摘要

OpenAIChatAPI: 利用OpenAI的GPT-3模型,例如text-davinci-003、gpt-3.5-turbo等,进行文档摘要,提取关键信息。

AnthropicChatAPI: 使用Anthropic提供的Claude模型进行文档摘要和信息提取。


spRAG应用场景

金融领域: 分析财务报告、研究报告等,提取关键信息,辅助投资决策。

法律领域: 检索法律文件、案例等,为律师提供支持。

学术领域: 检索学术论文、研究报告等,辅助科研工作。

智能客服: 构建智能客服系统,提供更准确、更个性化的服务。

信息检索: 提升搜索引擎的检索效果,为用户提供更精准的搜索结果。


spRAG性能及效果

spRAG在处理复杂查询任务方面表现出色,例如在FinanceBench基准测试中,spRAG的准确率高达83%,远超传统的RAG模型。其出色的性能得益于AutoContext和RSE等关键技术的应用,以及灵活的技术架构和可定制的组件。spRAG能够有效地处理各种类型的非结构化文本数据,为用户提供更准确、更全面的信息检索服务。


项目地址:https://github.com/SuperpoweredAI/spRAG


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询