安徽省建设工程资料上传网站,sem培训机构,腾讯企业qq,电商的运营模式有几种Node 后处理器模块
LlamaIndex 是一个旨在连接大型语言模型#xff08;LLMs#xff09;与外部数据的框架#xff0c;允许开发者构建能够处理和回应复杂查询的应用程序。在这个框架内#xff0c;NodePostProcessor 扮演着优化数据处理流程的重要角色。为了更好地理解 NodeP…Node 后处理器模块
LlamaIndex 是一个旨在连接大型语言模型LLMs与外部数据的框架允许开发者构建能够处理和回应复杂查询的应用程序。在这个框架内NodePostProcessor 扮演着优化数据处理流程的重要角色。为了更好地理解 NodePostProcessor 在 LlamaIndex 中的作用及其具体实现方式我们需要从其定义入手并探讨其功能。
NodePostProcessor定义
在 LlamaIndex 的上下文中NodePostProcessor 是一个在数据节点Node被处理之后进行额外操作的组件。这些操作可以包括但不限于数据的清洗、增强、过滤或转换等目的是确保最终提供给LLM的数据是最优的从而提高模型响应的质量。NodePostProcessor 是通过继承自 BaseNodePostprocessor 接口实现的该接口定义了 _postprocess_nodes 方法此方法接受一系列节点并返回经过处理后的节点列表。
NodePostProcessor功能详细介绍
数据清洗与隐私保护
NodePostProcessor 可用于对节点数据进行清洗如移除无关的信息或者进行数据格式标准化。此外它还能用于隐私信息的掩蔽masking。例如NERPIINodePostprocessor 就是用来识别并掩蔽个人身份信息PII的 NodePostProcessor。通过使用命名实体识别NER模型它可以检测并替换掉节点中的 PII 。
数据增强
另一个重要的功能是数据增强这可以通过添加前后文相关的其他节点来实现以此来丰富LLM的上下文理解。例如PrevNextNodePostprocessor 可以用来向前或向后扩展节点以便为模型提供更多的上下文信息这对于提高问答系统的准确性和连贯性尤其有用 。
结果重排Reranking
在一些场景下NodePostProcessor 也可以用来对检索到的结果进行重排。通过重新评估和排序检索出的文档片段可以确保最相关的信息优先呈现给用户。这种重排可以通过自定义 Rerank 功能的 NodePostProcessor 来实现例如在 RAGRetrieval-Augmented Generation系统中 。
动态捕捉视频后处理
虽然这不是 LlamaIndex 的直接应用场景但从更广泛的视角来看NodePostProcessor 的概念也被应用到了诸如动态捕捉视频数据的后处理中。在这种情况下它被用来处理节点数据以创建运动捕捉视频 。尽管这超出了 LlamaIndex 的原始设计范围但它展示了 NodePostProcessor 概念的灵活性和可扩展性。
总结来说NodePostProcessor 在 LlamaIndex 中是一个极其灵活的工具它不仅限于上述功能还可以根据具体的应用需求进行定制开发。无论是为了改善数据质量、增加上下文信息、保护隐私还是优化检索结果NodePostProcessor 都能够发挥关键作用使得 LlamaIndex 成为一个强大的工具箱帮助开发者构建更加智能和高效的应用程序。
相似性节点后处理器SimilarityPostprocessor
用于删除低于相似性分数阈值的节点。
from llama_index.core.postprocessor import SimilarityPostprocessorpostprocessor SimilarityPostprocessor(similarity_cutoff0.7)postprocessor.postprocess_nodes(nodes)关键字节点后处理器 KeywordNodePostprocessor
用于确保排除或包含某些关键字。
from llama_index.core.postprocessor import KeywordNodePostprocessorpostprocessor KeywordNodePostprocessor(required_keywords[word1, word2], exclude_keywords[word3, word4]
)postprocessor.postprocess_nodes(nodes)元数据替换后处理器 MetadataReplacementPostProcessor
用于将节点内容替换为节点元数据中的字段。如果元数据中不存在该字段则节点文本将保持不变。与
.SentenceWindowNodeParserfrom llama_index.core.postprocessor import MetadataReplacementPostProcessorpostprocessor MetadataReplacementPostProcessor(target_metadata_keywindow,
)postprocessor.postprocess_nodes(nodes)LongContextReorder 长上下文重排序处理器
模型难以访问在扩展上下文中心找到的重要细节。一项研究观察到当关键数据位于输入上下文的开头或结尾时通常会出现最佳性能。此外随着输入上下文的延长性能会显著下降即使在为长上下文设计的模型中也是如此。
此模块将对检索到的节点重新排序这在需要大量 top-k 的情况下会很有帮助。
from llama_index.core.postprocessor import LongContextReorderpostprocessor LongContextReorder()postprocessor.postprocess_nodes(nodes)句子嵌入优化器 SentenceEmbeddingOptimizer
此后处理器通过删除与查询无关的句子来优化令牌使用这是使用 embeddings 完成的。
百分位截止值是使用相关句子的最高百分比的度量。
可以改为指定阈值截止值它使用原始相似度截止值来选择要保留的句子。
from llama_index.core.postprocessor import SentenceEmbeddingOptimizerpostprocessor SentenceEmbeddingOptimizer(embed_modelservice_context.embed_model,percentile_cutoff0.5,# threshold_cutoff0.7
)postprocessor.postprocess_nodes(nodes)Cohere重排处理器 CohereRerank
使用“Cohere ReRank”功能对节点重新排序并返回前N个节点。
from llama_index.postprocessor.cohere_rerank import CohereRerankpostprocessor CohereRerank(top_n2, modelrerank-english-v2.0, api_keyYOUR COHERE API KEY
)postprocessor.postprocess_nodes(nodes)句子转换推理重排 SentenceTransformerRerank
使用包中的交叉编码器对节点重新排序并返回前N个节点
from llama_index.core.postprocessor import SentenceTransformerRerank# We choose a model with relatively high speed and decent accuracy.
postprocessor SentenceTransformerRerank(modelcross-encoder/ms-marco-MiniLM-L-2-v2, top_n3
)postprocessor.postprocess_nodes(nodes)另请参阅 sentence-transformer 文档以获取更完整的模型列表并且还显示了速度/准确性的权衡。默认模型是 cross-encoder/ms-marco-TinyBERT-L-2-v2它提供的速度最块的。
LLM 重新排名 LLMRerank
使用 LLM 对节点重新排序方法是要求 LLM 返回相关文档及其相关性的分数。返回排名前 N 的节点。
from llama_index.core.postprocessor import LLMRerankpostprocessor LLMRerank(top_n2, service_contextservice_context)postprocessor.postprocess_nodes(nodes)Jina重排器 JinaRerank
使用 Jina ReRank 功能对节点进行重新排序并返回前 N 个节点。
from llama_index.postprocessor.jinaai_rerank import JinaRerankpostprocessor JinaRerank(top_n2, modeljina-reranker-v1-base-en, api_keyYOUR JINA API KEY
)postprocessor.postprocess_nodes(nodes)FixedRecencyPostprocessor 固定新近度后处理器
此 postproccesor 返回按日期排序的前 K 个节点。这假定每个节点的元数据中都有一个要解析的字段。date
from llama_index.core.postprocessor import FixedRecencyPostprocessorpostprocessor FixedRecencyPostprocessor(tok_k1, date_keydate # the key in the metadata to find the date
)postprocessor.postprocess_nodes(nodes)EmbeddingRecencyPostprocessor 嵌入近期后处理器
这个后处理器在按日期排序后返回前K个节点并在测量嵌入相似度后删除过于相似的旧节点。
from llama_index.core.postprocessor import EmbeddingRecencyPostprocessorpostprocessor EmbeddingRecencyPostprocessor(service_contextservice_context, date_keydate, similarity_cutoff0.7
)postprocessor.postprocess_nodes(nodes)TimeWeightedPostprocessor 时间加权后处理器
该后处理器对每个节点应用时间加权重排序返回前K个节点。每次检索节点时都会记录检索节点的时间。这会使搜索偏向于那些尚未在查询中返回的信息。
from llama_index.core.postprocessor import TimeWeightedPostprocessorpostprocessor TimeWeightedPostprocessor(time_decay0.99, top_k1)postprocessor.postprocess_nodes(nodes)(Beta) PIINodePostprocessor 个人敏感信息处理器
PII(个人可识别信息)后处理器可删除可能存在安全风险的信息。它通过使用NER(或者使用专用的NER模型或者使用本地的LLM模型)来实现这一点。
LLM Version
from llama_index.core.postprocessor import PIINodePostprocessorpostprocessor PIINodePostprocessor(service_contextservice_context # this should be setup with an LLM you trust
)postprocessor.postprocess_nodes(nodes)NER Version
这个版本使用的是当你运行.pipeline(“ner”)时加载的hug Face的默认本地模型。
from llama_index.core.postprocessor import NERPIINodePostprocessorpostprocessor NERPIINodePostprocessor()postprocessor.postprocess_nodes(nodes)A full notebook guide for both can be found here.
(Beta) PrevNextNodePostprocessor 上一页下一页节点处理器
使用预定义的设置读取关系并获取前面、后面或两者的所有节点。节点
当您知道这些关系指向重要数据(在检索节点之前、之后或两者都指向重要数据)时这些数据应该发送给LLM这将非常有用。
from llama_index.core.postprocessor import PrevNextNodePostprocessorpostprocessor PrevNextNodePostprocessor(docstoreindex.docstore,num_nodes1, # number of nodes to fetch when looking forawrds or backwardsmodenext, # can be either next, previous, or both
)postprocessor.postprocess_nodes(nodes)BetaAutoPrevNextNodePostprocessor 自动上一页下一页节点处理器
与 PrevNextNodePostprocessor 相同但让 LLM 决定模式下一个、上一个或两者。
from llama_index.core.postprocessor import AutoPrevNextNodePostprocessorpostprocessor AutoPrevNextNodePostprocessor(docstoreindex.docstore,service_contextservice_context,num_nodes1, # number of nodes to fetch when looking forawrds or backwards)
)
postprocessor.postprocess_nodes(nodes)#测试版RankGPT( GPT排名处理器)
使用 RankGPT 代理根据相关性对文档进行重新排序。返回排名前 N 的节点。
from llama_index.postprocessor.rankgpt_rerank import RankGPTRerankpostprocessor RankGPTRerank(top_n3, llmOpenAI(modelgpt-3.5-turbo-16k))postprocessor.postprocess_nodes(nodes)ColbertRerank Colbert重排处理器
使用 Colbert V2 模型作为 reranker根据 query token 和 passage token 之间的细粒度相似性对文档进行重新排序。返回排名前 N 的节点。
from llama_index.postprocessor.colbert_rerank import ColbertRerankcolbert_reranker ColbertRerank(top_n5,modelcolbert-ir/colbertv2.0,tokenizercolbert-ir/colbertv2.0,keep_retrieval_scoreTrue,
)query_engine index.as_query_engine(similarity_top_k10,node_postprocessors[colbert_reranker],
)
response query_engine.query(query_str,
)完整的笔记本指南可在此处获取。
rankLLM (LLM排名处理器)
使用rankLLM中的模型对文档进行重新排序。返回排名前 N 的节点。
from llama_index.postprocessor.rankllm_rerank import RankLLMRerank# RankZephyr reranker, return top 5 candidates
reranker RankLLMRerank(modelrank_zephyr, top_n5)
reranker.postprocess_nodes(nodes)以上所有处理器用例参考 https://docs.llamaindex.ai/en/stable/examples/node_postprocessor/CohereRerank/