做旅游的网站,单页面网站模板,网站设计风格方案,南昌公司网站建设公司RAGRerank原理
上一篇【RAG实践】基于LlamaIndex和Qwen1.5搭建基于本地知识库的问答机器人
我们介绍了什么是RAG#xff0c;以及如何基于LLaMaIndex和Qwen1.5搭建基于本地知识库的问答机器人#xff0c;原理图和步骤如下#xff1a; 这里面主要包括包括三个基本步骤#…RAGRerank原理
上一篇【RAG实践】基于LlamaIndex和Qwen1.5搭建基于本地知识库的问答机器人
我们介绍了什么是RAG以及如何基于LLaMaIndex和Qwen1.5搭建基于本地知识库的问答机器人原理图和步骤如下 这里面主要包括包括三个基本步骤
1. 索引 — 将文档库分割成较短的 Chunk并通过编码器构建向量索引。
2. 检索 — 根据问题和 chunks 的相似度检索相关文档片段。
3. 生成 — 以检索到的上下文为条件生成问题的回答。
更加完善的RAG技术还包含了很多点如下是RAG技术的大图魔搭社区也将逐步分析希望提供更多更好更详细的RAG技术分享。 本文主要关注在Rerank本文中Rerank可以在不牺牲准确性的情况下加速LLM的查询实际上可能提高准确率Rerank通过从上下文中删除不相关的节点重新排序相关节点来实现这一点。
本文RerankRAG原理图 技术交流资料
技术要学会分享、交流不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。
成立了大模型面试和技术交流群相关资料、技术交流答疑均可加我们的交流群获取群友已超过2000人添加时最好的备注方式为来源兴趣方向方便找到志同道合的朋友。 方式①、微信搜索公众号机器学习社区后台回复加群 方式②、添加微信号mlc2040备注来自CSDN 技术交流 重磅消息《大模型面试宝典》(2024版) 正式发布重磅消息《大模型实战宝典》(2024版) 正式发布 Rerank模型bge-reranker-v2-m3
与embedding模型不同Reranker使用问题和文档作为输入直接输出相似度而不是embedding。本文通过向Reranker输入查询和段落来获得相关性分数。Reranker是基于交叉熵损失进行优化的因此相关性得分不受特定范围的限制。bge-reranker-v2-m3适用于中英文双语Rerank场景。 LLM模型通义千问1.5
Qwen1.5版本年前开源了包括0.5B、1.8B、4B、7B、14B、32B、72B和A2.7B-MoE在内的8种大小的基础和聊天模型同时也开源了量化模型。不仅提供了Int4和Int8的GPTQ模型还有AWQ模型以及GGUF量化模型。为了提升开发者体验Qwen1.5的代码合并到Hugging Face Transformers中开发者现在可以直接使用transformers4.37.0而无需trust_remote_code。
RAG框架LLaMaIndex
LlamaIndex 是一个基于 LLM 的应用程序的数据框架受益于上下文增强。 这种LLM系统被称为RAG系统代表“检索增强生成”。LlamaIndex 提供了必要的抽象可以更轻松地摄取、构建和访问私有或特定领域的数据以便将这些数据安全可靠地注入 LLM 中以实现更准确的文本生成。 Embedding模型GTE文本向量
文本表示是自然语言处理(NLP)领域的核心问题, 其在很多NLP、信息检索的下游任务中发挥着非常重要的作用。近几年, 随着深度学习的发展尤其是预训练语言模型的出现极大的推动了文本表示技术的效果, 基于预训练语言模型的文本表示模型在学术研究数据、工业实际应用中都明显优于传统的基于统计模型或者浅层神经网络的文本表示模型。GTE主要关注基于预训练语言模型的文本表示。 GTE-zh模型使用retromae初始化训练模型之后利用两阶段训练方法训练模型第一阶段利用大规模弱弱监督文本对数据训练模型第二阶段利用高质量精标文本对数据以及挖掘的难负样本数据训练模型。
环境配置与安装 python 3.10及以上版本 pytorch 1.12及以上版本推荐2.0及以上版本 建议使用CUDA 11.4及以上
安装依赖库
!pip install transformers -U
!pip install llama-index llama-index-llms-huggingface ipywidgets
!pip install sentence-transformersimport logging
import sys
from abc import ABC
from typing import Any, Listimport pandas as pd
import torch
from IPython.display import display, HTML
from llama_index.core import QueryBundle
from llama_index.core import (SimpleDirectoryReader,VectorStoreIndex,Settings,ServiceContext,set_global_service_context,
)
from llama_index.core.base.embeddings.base import BaseEmbedding, Embedding
from llama_index.core.postprocessor import SentenceTransformerRerank
from llama_index.core.prompts import PromptTemplate
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.llms.huggingface import HuggingFaceLLM
from modelscope import snapshot_download
from transformers import AutoModelForSequenceClassification, AutoTokenizerlogging.basicConfig(streamsys.stdout, levellogging.INFO)
logging.getLogger().addHandler(logging.StreamHandler(streamsys.stdout))加载大语言模型
因为Qwen本次支持了Transformers使用HuggingFaceLLM加载模型模型为Qwen1.5-4B-Chat
# Model names
qwen2_4B_CHAT qwen/Qwen1.5-4B-Chatselected_model snapshot_download(qwen2_4B_CHAT)SYSTEM_PROMPT You are a helpful AI assistant.
query_wrapper_prompt PromptTemplate([INST]SYS\n SYSTEM_PROMPT /SYS\n\n{query_str}[/INST]
)llm HuggingFaceLLM(context_window4096,max_new_tokens2048,generate_kwargs{temperature: 0.0, do_sample: False},query_wrapper_promptquery_wrapper_prompt,tokenizer_nameselected_model,model_nameselected_model,device_mapauto,# change these settings below depending on your GPUmodel_kwargs{torch_dtype: torch.float16},
)下载数据并加载文档
!wget https://modelscope.oss-cn-beijing.aliyuncs.com/resource/rag/xianjiaoda.md
!mkdir -p /mnt/workspace/custom_data
!mv /mnt/workspace/xianjiaoda.md /mnt/workspace/custom_data
documents SimpleDirectoryReader(/mnt/workspace/data/xianjiaoda/).load_data()
documents构建embedding类
加载GTE模型使用GTE模型构造Embedding类
embedding_model iic/nlp_gte_sentence-embedding_chinese-base
class ModelScopeEmbeddings4LlamaIndex(BaseEmbedding, ABC):embed: Any Nonemodel_id: str iic/nlp_gte_sentence-embedding_chinese-basedef __init__(self,model_id: str,**kwargs: Any,) - None:super().__init__(**kwargs)try:from modelscope.models import Modelfrom modelscope.pipelines import pipelinefrom modelscope.utils.constant import Tasks# 使用modelscope的embedding模型包含下载self.embed pipeline(Tasks.sentence_embedding, modelself.model_id)except ImportError as e:raise ValueError(Could not import some python packages. Please install it with pip install modelscope.) from edef _get_query_embedding(self, query: str) - List[float]:text query.replace(\n, )inputs {source_sentence: [text]}return self.embed(inputinputs)[text_embedding][0].tolist()def _get_text_embedding(self, text: str) - List[float]:text text.replace(\n, )inputs {source_sentence: [text]}return self.embed(inputinputs)[text_embedding][0].tolist()def _get_text_embeddings(self, texts: List[str]) - List[List[float]]:texts list(map(lambda x: x.replace(\n, ), texts))inputs {source_sentence: texts}return self.embed(inputinputs)[text_embedding].tolist()async def _aget_query_embedding(self, query: str) - List[float]:return self._get_query_embedding(query)建设索引
加载数据后基于文档对象列表或节点列表建设他们的index就可以方便的检索他们。
embeddings ModelScopeEmbeddings4LlamaIndex(model_idembedding_model)
service_context ServiceContext.from_defaults(embed_modelembeddings, llmllm)
set_global_service_context(service_context)index VectorStoreIndex.from_documents(documents)加载Rerank模型
rerank_llm_name AI-ModelScope/bge-reranker-v2-m3
downloaded_rerank_model snapshot_download(rerank_llm_name)
rerank_llm SentenceTransformerRerank(modeldownloaded_rerank_model, top_n3)首先我们尝试使用Rerank同时对查询问答进行计时检索召回top_k10Rerank重排top_n3看看处理检索到的上下文的输出需要多长时间。
from time import timequery_engine index.as_query_engine(similarity_top_k10, node_postprocessors[rerank_llm])now time()
response query_engine.query(西安交大由哪几个学校合并的)
print(response)
print(fElapsed: {round(time() - now, 2)}s)输出和计时 打印上下文context 然后我们尝试不加Rerank的情况下查询和问答并计时
from time import timequery_engine index.as_query_engine(similarity_top_k10)now time()
response query_engine.query(西安交大由哪几个学校合并的)
print(response)
print(fElapsed: {round(time() - now, 2)}s)输出和计时 打印上下文context 正如我们所看到的具有Rerank功能的retrieval引擎在更短的时间本文速度提升了约2倍内生成了准确的输出。虽然两种响应本质上都是正确的但未经rerank的retrieval引擎包含了大量不相关的信息从而影响了查询和推理的速度 - 我们可以将这种现象归因于“上下文窗口无效数据的污染”。
通俗易懂讲解大模型系列 重磅消息《大模型面试宝典》(2024版) 正式发布 重磅消息《大模型实战宝典》(2024版) 正式发布 做大模型也有1年多了聊聊这段时间的感悟 用通俗易懂的方式讲解不要再苦苦寻觅了AI 大模型面试指南含答案的最全总结来了 用通俗易懂的方式讲解我的大模型岗位面试总结共24家9个offer 用通俗易懂的方式讲解大模型 RAG 在 LangChain 中的应用实战 用通俗易懂的方式讲解一文讲清大模型 RAG 技术全流程 用通俗易懂的方式讲解如何提升大模型 Agent 的能力? 用通俗易懂的方式讲解ChatGPT 开放的多模态的DALL-E 3功能好玩到停不下来 用通俗易懂的方式讲解基于扩散模型Diffusion,文生图 AnyText 的效果太棒了 用通俗易懂的方式讲解在 CPU 服务器上部署 ChatGLM3-6B 模型 用通俗易懂的方式讲解使用 LangChain 和大模型生成海报文案 用通俗易懂的方式讲解ChatGLM3-6B 部署指南 用通俗易懂的方式讲解使用 LangChain 封装自定义的 LLM太棒了 用通俗易懂的方式讲解基于 Langchain 和 ChatChat 部署本地知识库问答系统 用通俗易懂的方式讲解在 Ubuntu 22 上安装 CUDA、Nvidia 显卡驱动、PyTorch等大模型基础环境 用通俗易懂的方式讲解Llama2 部署讲解及试用方式 用通俗易懂的方式讲解基于 LangChain 和 ChatGLM2 打造自有知识库问答系统 用通俗易懂的方式讲解一份保姆级的 Stable Diffusion 部署教程开启你的炼丹之路 用通俗易懂的方式讲解对 embedding 模型进行微调我的大模型召回效果提升了太多了 用通俗易懂的方式讲解LlamaIndex 官方发布高清大图纵览高级 RAG技术 用通俗易懂的方式讲解为什么大模型 Advanced RAG 方法对于AI的未来至关重要 用通俗易懂的方式讲解使用 LlamaIndex 和 Eleasticsearch 进行大模型 RAG 检索增强生成 用通俗易懂的方式讲解基于 Langchain 框架利用 MongoDB 矢量搜索实现大模型 RAG 高级检索方法 用通俗易懂的方式讲解使用Llama-2、PgVector和LlamaIndex构建大模型 RAG 全流程