首页 > 其他分享 >Denser Retriever: 企业级AI检索器,轻松构建RAG应用和聊天机器人

Denser Retriever: 企业级AI检索器,轻松构建RAG应用和聊天机器人

时间:2024-07-23 20:54:58浏览次数:9  
标签:RAG passages AI Denser 企业级 搜索 denser retriever Retriever

Denser Retriever是一个企业级AI检索器,将多种搜索技术整合到一个平台中。在MTEB数据集上的实验表明,可以显著提升向量搜索(VS)的基线(snowflake-arctic-embed-m模型, 在MTEB/BEIR排行榜达到了最先进的性能)。

Denser Retriever官网Read our collection of blogs about tips and tricks of our software, or common practices within the industry. Learn AI powered semantic search and chat.icon-default.png?t=N7T8https://retriever.denser.ai/?utm_source=CSDN&utm_medium=article&utm_campaign=retriever_intro

它来自Denser.ai公司,创始人是黄志恒,曾担任 AWS 首席科学家,领导 Amazon Kendra 和 Amazon Business Q 项目,现在他将自己对深度学习和 NLP 的热情投入到 Denser,旨在通过自己丰富的专业知识推动创新和生产力。Denser Retriever是完全开源的,您可以使用其构建自己专属的RAG应用和聊天机器人。

DenserRetriever 的GitHub地址Cutting-edge AI Retriever for RAGicon-default.png?t=N7T8https://github.com/denser-org/denser-retriever/tree/main

检索增强生成 (RAG) 是将检索模型与生成模型结合起来,以提高生成内容的质量和相关性的一种有效的方法。RAG 的核心思想是利用大量文档或知识库来获取相关信息。各种工具支持 RAG,包括 Langchain 和 LlamaIndex。

AI Retriever 是 RAG 框架的基础,确保 AI 应用中的准确和无缝体验。Retriever 大致分为两类:关键词搜索和向量搜索。关键词搜索依赖于关键词匹配,而向量搜索则关注语义相似性。流行的工具包括用于关键词搜索的 Elasticsearch 和用于向量搜索的 Milvus、Chroma 和 Pinecone。

在大语言模型时代,从工程师和科学家到市场营销等各个领域的专业人士,都热衷于开发 RAG AI 应用原型。像 Langchain 这样的工具对此过程至关重要。例如,用户可以使用 Langhian 和 Chroma 快速构建一个用于法律文档分析的 RAG 应用。

DenserAI 团队推出的 Denser Retriever 在快速原型设计方面表现突出。用户可以通过一个简单的 Docker Compose 命令快速安装 Denser Retriever 及其所需工具,从而构建自己的RAG应用。同时还提供了自托管解决方案,支持企业级生产环境的部署。

此外,Denser Retriever 在 MTEB 检索数据集上提供了全面的检索基准测试,以确保部署中的最高准确性。用户不仅可以享受 Denser Retriever 的易用性,还可以享受其最先进的准确性

Denser Retriever 能做什么?

Denser Retriever 的初始版本提供了以下功能:

  • 支持异构检索器,如关键词搜索、向量搜索和机器学习模型重排序

  • 利用 xgboost 机器学习技术有效结合异构检索器。

  • 在MTEB检索基准测试上达到最先进的精确度

  • 演示如何使用 Denser Retriever 来驱动端到端应用,如聊天机器人和语义搜索。

  • 提供了详细的开发文档和安装指南。

为什么选择 Denser Retriever?

  • 开源承诺:Denser Retriever 是开源的,提供透明性和持续的社区驱动改进机会。

  • 生产就绪:设计用于生产环境的部署,确保在实际应用中的可靠性和稳定性。

  • 最先进的精度:提供最先进的准确性,提高 AI 应用质量。

  • 可扩展性:无论是处理不断增长的数据需求还是扩展用户需求,Denser Retriever 都能无缝扩展以满足要求。

  • 灵活性:该工具适应广泛的应用,并可根据具体需求进行定制,是多种行业的多功能选择。

在这篇文章中,我们将展示如何安装 Denser Retriever,从文本文件或网页页面构建检索索引,并在此索引上进行查询。

由于篇幅限制,本文不会涵盖更多高级主题,如使用自定义数据集训练 Denser Retriever、在 MTEB 基准数据集上进行评估以及创建端到端RAG AI 应用(如聊天机器人)。有兴趣的用户可参考以下资源获取这些高级主题的信息。

Denser Retriever文档

Denser Retriever仓库

设置

安装 Denser Retriever

我们使用 Poetry 安装和管理 Denser Retriever 包。在仓库根目录下使用以下命令安装 Denser Retriever。

git clone https://github.com/denser-org/denser-retriever
cd denser-retriever
make install

更多细节可以在 DEVELOPMENT 文档中找到。

安装 Elasticsearch 和 Milvus

运行 Denser Retriever 需要 Elasticsearch 和 Milvus,它们分别支持关键词搜索和向量搜索。我们按照以下指示在本地计算机(例如,您的笔记本电脑)上安装 Elasticsearch 和 Milvus。

要求:docker 和 docker compose,它们都包含在 Docker Desktop 中,适用于 Mac 或 Windows 用户。

  • 手动下载 docker-compose.dev.yml 并保存为 docker-compose.yml,或者使用以下命令。

wget https://raw.githubusercontent.com/denser-org/denser-retriever/main/docker-compose.dev.yml \
-O docker-compose.yml
  • 使用以下命令启动服务。
docker compose up -d
  • 或者,我们可以运行以下命令来验证 Milvus 是否正确安装。
poetry run python -m pytest tests/test_retriever_milvus.py

索引和查询用例

在索引和查询用例中,用户提供一组文档,如文本文件或网页,以构建检索器。然后用户可以查询该检索器以从提供的文档中获取相关结果。此用例的代码可在 index_and_query_from_docs.py 中找到。要运行此示例,请导航到 denser-retriever 仓库并执行以下命令:

poetry run python experiments/index_and_query_from_docs.py

如果运行成功,我们预期会看到类似以下的输出。

2024-05-27 12:00:55 INFO: ES ingesting passages.jsonl record 96
2024-05-27 12:00:55 INFO: Done building ES index
2024-05-27 12:00:55 INFO: Remove existing Milvus index state_of_the_union
2024-05-27 12:00:59 INFO: Milvus vector DB ingesting passages.jsonl record 96
2024-05-27 12:01:03 INFO: Done building Vector DB index
[{'source': 'tests/test_data/state_of_the_union.txt',
'text': 'One of the most serious constitutional responsibilities...',
'title': '', 'pid': 73,
'score': -1.6985594034194946}]

在接下来的部分中,我们将解释其中的基础过程和机制。

概述

下图说明了 Denser Retriever 的结构,它由三个组件组成:

关键词搜索依赖于使用精确关键词匹配的传统搜索技术。我们在 Denser Retriever 中使用 Elasticsearch

向量搜索使用神经网络模型将查询和文档编码为高维空间中的密集向量表示。我们使用向量数据库 Milvus snowflake-arctic-embed-m 模型,该模型在 MTEB/BEIR 排行榜的各个尺寸变体中均实现了最先进的性能。

ML 交叉编码器重排序器可用于进一步提升上述两种检索方法的准确性。我们使用 cross-encoder/ms-marco-MiniLM-L-6-v2,该模型在准确性和推理延迟之间具有良好的平衡。

配置文件

我们在以下 yam 文件中配置上述三个组件(可在repo中找到)。大多数参数是不言自明的。关键字、向量、重排序的部分分别配置 Elasticsearch、Milvus 和reranker。

我们使用 combine: model 通过一个 xgboost 模型(experiments/models/msmarco_xgb_es+vs+rr_n.json)来结合 Elasticsearch、Milvus 和reranker,该模型是使用 mteb msmarco 数据集训练的(有关如何训练此类模型,请参阅训练指南)。

除了模型组合,我们还可以使用linearrank来结合 Elasticsearch、Milvus 和reranker。在 MTEB 数据集上的实验表明,模型组合可以显著提高准确性,优于linear 或 rank方法。

一些参数,例如 es_ingest_passage_bs,仅在训练 xgboost 模型时使用(即查询阶段不需要)。

 

version: "0.1"

# linear, rank or model
combine: model
keyword_weight: 0.5
vector_weight: 0.5
rerank_weight: 0.5
model: ./experiments/models/msmarco_xgb_es+vs+rr_n.json
model_features: es+vs+rr_n

keyword:
  es_user: elastic
  es_passwd: YOUR_ES_PASSWORD
  es_host: http://localhost:9200
  es_ingest_passage_bs: 5000
  topk: 100

vector:
  milvus_host: localhost
  milvus_port: 19530
  milvus_user: root
  milvus_passwd: Milvus
  emb_model: Snowflake/snowflake-arctic-embed-m
  emb_dims: 768
  one_model: false
  vector_ingest_passage_bs: 2000
  topk: 100

rerank:
  rerank_model: cross-encoder/ms-marco-MiniLM-L-6-v2
  rerank_bs: 100
  topk: 100

output_prefix: ./denser_output_retriever/

max_doc_size: 0
max_query_size: 10000

生成 passages (段落)

我们现在描述如何从给定的文本文件(state_of_the_union.txt)构建一个检索器。以下代码显示如何读取文本文件,将文件拆分为文本块并将其保存为 jsonl 文件(passages.jsonl)。

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from denser_retriever.utils import save_HF_docs_as_denser_passages
from denser_retriever.retriever_general import RetrieverGeneral

# Generate text chunks
documents = TextLoader("tests/test_data/state_of_the_union.txt").load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
texts = text_splitter.split_documents(documents)
passage_file = "passages.jsonl"
save_HF_docs_as_denser_passages(texts, passage_file, 0)

 passages.jsonl 中的每一行都是一个段落,包含 source、title、text pid(段落 ID)字段。

{
  "source": "tests/test_data/state_of_the_union.txt",
  "title": "",
  "text": "Madam Speaker, Madam Vice President, our First Lady and Second Gentleman...",
  "pid": 0
}

 

构建 Denser 检索器

我们可以使用给定的 passages.jsonlexperiments/config_local.yaml 配置文件来构建 Denser 检索器。

# Build denser index
retriever_denser = RetrieverGeneral("state_of_the_union", "experiments/config_local.yaml")
retriever_denser.ingest(passage_file)

 

查询 Denser 检索器

我们可以简单地使用以下代码来查询检索器以获得相关段落。

# Query
query = "What did the president say about Ketanji Brown Jackson"
passages, docs = retriever_denser.retrieve(query, {})
print(passages)

每个返回的段落都会接收一个置信分数,以指示它与给定查询的相关性。我们得到类似以下的结果。

[{'source': 'tests/test_data/state_of_the_union.txt',
'text': 'One of the most serious constitutional...',
'title': '', 'pid': 73,
'score': -1.6985594034194946}]

 

将所有内容整合在一起

我们将所有代码整合如下。代码也可在 repo 中找到。

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from denser_retriever.utils import save_HF_docs_as_denser_passages
from denser_retriever.retriever_general import RetrieverGeneral

# Generate text chunks
documents = TextLoader("tests/test_data/state_of_the_union.txt").load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
texts = text_splitter.split_documents(documents)
passage_file = "passages.jsonl"
save_HF_docs_as_denser_passages(texts, passage_file, 0)

# Build denser index
retriever_denser = RetrieverGeneral("state_of_the_union", "experiments/config_local.yaml")
retriever_denser.ingest(passage_file)

# Query
query = "What did the president say about Ketanji Brown Jackson"
passages, docs = retriever_denser.retrieve(query, {})
print(passages)

从网页构建检索器

与上述方法类似,除了段落语料库的生成。index_and_query_from_webpage.py 源代码可以在这里找到。

要运行这个用例,请进入 denser-retriever repo 并运行:

poetry run python experiments/index_and_query_from_webpage.py

 如果成功的话,我们希望看到类似以下的内容。

2024-05-27 12:10:47 INFO: ES ingesting passages.jsonl record 66
2024-05-27 12:10:47 INFO: Done building ES index
2024-05-27 12:10:52 INFO: Milvus vector DB ingesting passages.jsonl record 66
2024-05-27 12:10:56 INFO: Done building Vector DB index
[{'source': 'https://lilianweng.github.io/posts/2023-06-23-agent/',
'text': 'Fig. 1. Overview of a LLM-powered autonomous agent system...',
'title': '',
'pid': 2,
'score': -1.6985594034194946}]

进一步阅读

由于篇幅限制,我们在这篇博客中未包括以下主题。

  • 使用客户数据集训练 Denser Retriever。用户提供一个训练数据集来训练一个 xgboost 模型,该模型决定如何结合关键字搜索、向量搜索和重排序。训练和测试的工作流程如下图所示。​​​​​​
  • MTEB 数据集上评估 Denser Retriever。通过 xgboost 模型结合关键字搜索、向量搜索和重排序可以进一步提高向量搜索基线。例如,我们最好的 xgboost 模型在所有 MTEB 数据集上的 NDCG@10 得分为 56.47,相比向量搜索基线(NDCG@10 得分 54.24)绝对提高了 2.23,相对提高了 4.11%。
  • 端到端搜索和聊天应用。我们可以轻松使用 Denser Retriever 构建RAG应用,如端到端的聊天机器人。
  • 过滤器 (Filters)。上述索引和查询用例假设搜索项仅包含非结构化文本。此假设可能不成立,因为数据集可能包含数值、分类和日期属性。过滤器可用于为这些属性设置约束。

感兴趣的用户可以参考以下有关上述主题的资源。

Denser Retriever文档

Denser Retriever仓库

与我们联系

希望期待您使用Denser Retriever构建属于您自己的RAG应用,如有任何疑问,非常欢迎在Github 仓库中创建issue留下您的问题,或者也可以发邮件到[email protected]与我们联系。

如想了解更多关于Denser Retriever的咨询,欢迎阅读我们的博客

DenserAI博客icon-default.png?t=N7T8https://denser.ai/blog/?utm_source=CSDN&utm_medium=article&utm_campaign=retriever_intro

 期待您的使用和反馈。

标签:RAG,passages,AI,Denser,企业级,搜索,denser,retriever,Retriever
From: https://blog.csdn.net/DanserAI_Chris/article/details/140629655

相关文章

  • Modelsim仿真时报错Error (vlog-7) Failed to open design unit file XXXXX in read m
    根据之前遇到的问题Vivado关联Modelsim仿真时一直卡在Executinganalysisandcompilationstep…的解决我在TclConsole窗口查看出现的Error信息。出现报错:Error:(vlog-7)Failedtoopendesignunitfile“XXXXX”inreadmode查阅网上解决办法VivadoError:(vlog-......
  • pip更新openai的时候提示系统找不到指定文件XXXXXX
    pip更新openai的时候提示系统找不到指定文件XXXXXX简单来说就是下面这样,本来在anaconda3里面存在一个版本,想要更新成最新版,结果一直报错而且本身系统就有另一个Python版本,使用的是vscode的界面进行的内核选择,自带env,总是更新不到anaconda3中的版本这种想了下,很简单,直接将对应......
  • 【专题】2024AI人工智能体验营销行业研究报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=37084原文出处:拓端数据部落公众号 随着体验经济与智能新时代的双重浪潮席卷而来,既有的传统营销框架与初始体验营销理念逐渐显露出对快速膨胀的数字化生态及企业多元化需求的适应性不足。在此背景下,构建一个契合数智化时代脉搏的全新营销理论体系......
  • 未来已来:LLMops如何重塑AI-native新范式的运维格局[行业范式]、以及主流LLMops推荐
    未来已来:LLMops如何重塑AI-native新范式的运维格局[行业范式]、以及主流LLMops推荐1.LLMops是当前AIinfra必争新标地行业格局:AIinfra蓬勃发展,359个应用总估值13T,融资$29.8B,从DevOps->MLOps->LLMOps演进;LLMOps是all-in-one的大模型原生应用的开发和运营新......
  • 笔记本电脑第一次开机显示丢失msvcp140_ATOMIC_WAIT.dll怎么办?笔记本电脑系统找不到ms
    如果您的笔记本电脑系统找不到msvcp140_ATOMIC_WAIT.dll,不用太过焦虑。您可以尝试通过重新安装相关软件、检查系统更新、进行病毒查杀等方法来解决。也可以手动下载该文件并放置到正确位置。本篇将为大家带来系统找不到msvcp140_ATOMIC_WAIT.dll解决方法的内容,感兴趣的小伙伴们......
  • 昇腾AI基础软硬件平台介绍
    面向训练场景的有Ascend910系列和Ascend310系列 AICORE是昇腾AI处理器的计算核心,采用华为自研究的达芬奇架构。具有矩阵计算单元,向量计算单元,标量计算单元,累加器CANN逻辑架构介绍。是华为针对AI推出的异构计算架构。 服务层 计算编译层 ......
  • 大模型实战—你的个人AI数字大脑Khoj
    Khoj是你的开源个人AI伴侣,提供即时答案。Khoj轻松地深入知识,简化复杂信息,整合你的个人背景,并根据你的独特需求量身定制响应。在线问题:如果你有一个问题需要从互联网获取最新的信息,Khoj可以进行在线搜索,找到相关答案。例如,查询当前的天气情况或某个新闻事件的最新动态。......
  • 数业智能心大陆:把AI心理咨询师装进口袋
    在数字时代,心理健康的重要性日益凸显,而科技的进步为我们提供了全新的解决方案。"数业智能心大陆",将人工智能的深度洞察力和专业心理咨询的个性化关怀完美结合。想象一下,随时随地,只需打开手机,就能与一个专业的AI心理咨询师进行深入交流,它不仅能倾听你的心声,还能提供科学、专业的建......
  • OLOR:已开源,向预训练权值对齐的强正则化方法 | AAAI 2024
    随着预训练视觉模型的兴起,目前流行的视觉微调方法是完全微调。由于微调只专注于拟合下游训练集,因此存在知识遗忘的问题。论文提出了基于权值回滚的微调方法OLOR(OnestepLearning,OnestepReview),把权值回滚项合并到优化器的权值更新项中。这保证了上下游模型权值范围的一致性,有......
  • VMware Tanzu Kubernetes Grid (TKG) 2.5.1 - 企业级 Kubernetes 解决方案
    VMwareTanzuKubernetesGrid(TKG)2.5.1-企业级Kubernetes解决方案VMware构建、签名和支持的开源Kubernetes容器编排平台的完整分发版请访问原文链接:https://sysin.org/blog/vmware-tkg-2/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgTanzuKubernetes......