除了混合搜索,RAG 还需要哪些基础设施能力?

【Ragflow】2. rag检索原理和效率解析 本文是ragflow内容解析系列的第二篇。本文将详细解析Ragflow是进行一轮信息检索的过程,并通过实验对比 Elasticsearch和 Infinity在检索效率上的差异。 阅读详情
AI摘要

本文介绍了专为RAG设计的Infinity数据库,它具备向量搜索、全文搜索等能力,能满足GraphRAG存储需求,未来还会围绕计算层添加执行逻辑。同时提到记忆管理需数据库保证实时性,Infinity也已做好准备。此外,作者分享了大模型学习的资料和路线。

Infinity 是一款专门为 RAG 设计的,在功能和性能上全面领先的数据库,针对向量,稀疏向量,还有文本类数据,分别提供高性能的向量搜索、稀疏向量搜索以及全文搜索,并且提供这些数据之上的高性能范围过滤,除此之外,还提供了基于 Tensor 的重排序,这使得数据库内置不亚于 Cross Encoder 的排序能力成为可能,并且还是多模态 RAG (还有个流行的说法叫做 VisualRAG)的强力助推器。因此,如下图所示,Infinity 本质上是一款针对各种数据的全索引数据库。

在这里插入图片描述

这些能力,已经在工程和学术上形成共识,是 RAG 的必备能力,那么除此之外,还有哪些能力是现在,还有未来的 RAG 所必备的呢?

GraphRAG

首先来看看 GraphRAG。在这里,GraphRAG 并不单指微软开源的工作,而是指以知识图谱自动构建为基础,辅助 RAG 召回,从而解决问答中较为难处理的“语义鸿沟问题”(根据问题搜不到答案)的一类方法论集合。

既然涉及到知识图谱,就不可避免涉及到图数据库这一个单独品类。图数据库是应对复杂图结构查询的一类数据库。例如以下查询:返回由用户 Alice 完成的所有 2 跳汇款的全部来源账户和目标账户。用 SQL 表达如下:

SELECT a.owner, c.owner
FROM Accounts a, b, c, Transactions t1, t2
WHERE b.owner = Alice AND a.owner=t1.From AND t1.To=b.owner AND t1.To=t2.From AND t2.to=c.owner

这需要有 2 张表:账户表和交易表。执行操作如下:

  1. 在账户表中找到所有属于 Alice 的账户 (b.owner = Alice)
  2. 在交易表中找到所有向 Alice 发起交易的账户 (a.owner = t1.From And t1.To = b.owner)
  3. 接着找到 Alice 作为发起者的账户 (t1.To = t2.From)
  4. 最后找到这些交易的最终目标账户 (t2.To = c.owner)

因此可以看到,这类查询有 3 个特点:

  1. 尽管本查询只有 2 张表,但查询需要涉及非常多的多表 Join。
  2. 用关系型数据库建模非常别扭。
  3. 采用关系型数据库查询效率非常低下,因为这些多表 Join ,都需要做表的非顺序扫描,但是每个操作只需要返回几条记录,这么多的 Join,在做查询计划时,非常困难,传统的关系型数据库实现很容易导致中间结果的过度膨胀出现 OOM 。

因此,图数据库的特点包含:

  1. 为规避表的非顺序扫描,引入索引,尤其是倒排索引。所谓倒排索引,其实就是:把节点和边,分别按列保存,然后针对边来构建倒排索引,索引的内容就是节点 ID。
  2. 优化多表 Join ,一些 SOTA 的系统会引入多路 Join 实现如因子化——Worst Case Optimal Join 【参考 1】。

回到知识图谱,我们需要以上复杂的图查询么?先不考虑 GraphRAG,一个标准的知识图谱,我们最需要的查询是,根据实体,获取它的图谱上的邻居,复杂一些,需要提供一些子图遍历,就是根据若干实体,获取它们的邻居,以及多跳邻居,这些都可以比较方便地通过索引来实现,因此,对知识图谱的支持,可以算是一种相对简化的图数据库需求。

回到 GraphRAG ,我们以 LightRAG【参考 2】为例来看 GraphRAG 都会涉及到哪些查询。之所以采用 LightRAG,是因为它对于 GraphRAG 查询的总结更加全面和体系化,如下图所示。

在这里插入图片描述

这里需要的查询有:

  1. 根据关键词向量找到 Top 最接近的实体
  2. 根据这些实体在知识图谱中找到它们连接的关系
  3. 根据关键词向量找到 Top 最接近的关系(边)
  4. 根据这些关系在知识图谱中找到它们连接的实体

可以看到,GraphRAG 对知识图谱查询的需求相当简单。在 GraphRAG 中,对于知识图谱的抽象和定义是一种简化,实体之间的关系只被简化成为一种。这是因为 LLM 对于实体以及关系的定义并不够准确,因此构建的知识图谱,通常是作为 RAG 的补充而提供辅助召回使用。近期,蚂蚁也公开了自己在 GraphRAG 方面的布局 KAG 【参考 3】,它对于知识图谱的定义更加完整,对实体之间的关系扩展到了 6 种,并引入了逻辑 Reasoning 框架,但落实到对数据的检索本身,并没有发生显著变化。因此,一种朴素的想法,服务当下以及未来的 GraphRAG,是否把一个裁剪后的图数据库移植过来,就可以满足要求?

最近,来自滑铁卢大学的资深搜索引擎研究员 Clarke 提出了一种新型索引 Annotative Indexing【参考 4】,目的是希望统一列存,全文搜索,以及图数据库。这里所谓的 Annotative,其实就是在倒排索引的结构上进行调整,通过引入注释,可以让倒排索引以更加灵活的方式来创建。基于这些观察,我们来看看,作为一个全索引数据库,Infinity 是否已经可以满足当下及未来 GraphRAG 的要求。

如下图所示,我们可以很容易的对知识图谱的实体,边进行建模。在 GraphRAG 中,知识图谱的实体、边,这些都是文字描述,此外还有根据实体之间聚类得到的社区以及由此生成的总结。因此,这些文本都可以用全文索引来创建关联。Infinity 的全文索引提供了非常全面和强大的语法,除了进行相似度得分计算,还可以基于关键词提供过滤能力。因此,对边的<源实体名,目标实体名>字段建立全文索引提供关键词过滤,既可很方便的进行基于边和实体的子图检索。除此之外,全文索引和向量索引,在 Infinity 内部是无缝衔接的,因此,基于这种数据建模,可以非常方便的提供针对 GraphRAG 的混合搜索,所有边,实体,乃至社区,它们的描述都被纳入全文搜索的范畴,连同向量一起,就提供了基于 GraphRAG 的 2 路混合召回。并且,从以下的 Schema 也可以看出,这些数据,只需要再增加一个类型字段,就可以连同原始的文本 Chunk 一起保存在一张表,这就是把 GraphRAG 和 RAG 结合的 HybridRAG 【参考5】。显然,采用一个具备丰富索引能力的数据库,可以极大降低让这些复杂逻辑落地的工程难度。

在这里插入图片描述

因此,可以得出结论,当下的 Infinity,已经满足了 GraphRAG 当前以及未来的存储需求。在未来,Infinity 会围绕计算层添加更多的执行逻辑,使得部分在应用层的代码可以下沉到数据库内,提升性能和易用性,比如:

  1. 有一类 GraphRAG 是直接把 Text Chunk 当作图的节点,Chunk 之间的相似度(基于各种选项)决定了它的边。这显然也可以采用倒排索引建模。那么把创建这类索引的工作,可以实现为 Infinity 的一个后台任务。
  2. GraphRAG 需要跟模型紧密交互,未来不可避免地会引入一些图计算的能力:例如基于一个子图的遍历结构,生成Graph Embedding,这种任务,也可以实现为 Infinity 的一个后台任务。

等等诸如此类,都可以通过后台任务或者函数来完成,但是,它们都只需要采用 Infinity 当前的引擎架构即可完成而无需大的调整。这显然也符合 Infinity 自身不断随着 RAG 发展和演进的需求。

Long-term Memory

接下来看看记忆管理。记忆管理和 Agent 密切相关,可以说是 Agent 必备组件。在 RAGFlow 中,已经提供了 Agent 框架。当前的 Agent ,大多数场景是跟工作流紧密挂钩的,例如通过工作流实现 RAG 跟外部系统之间的交互,通过工作流实现 Agentic RAG 等等。然而,Agent 的未来是以 Multi-Agent 为代表的更加智能的系统,它们将用来辅助 LLM 共同提供 Reasoning 能力。Multi-Agent 跟 RAG 的交互会更加频繁,下图是一个典型的架构【参考 6】:

在这里插入图片描述

在这些架构中,Agent 需要管理自己的记忆,例如用户的对话 Session,用户的个性化信息,等等。有很多 Agent 框架会采用短期记忆模块来管理这些数据,区分于长期记忆。前者主要用一些内存临时数据来完成,随着 Agent 使用量增多,由于所有的用户信息都要保存,因此比较可靠的方式,是直接采用长期记忆组件来管理所有记忆,也就是用数据库,来保存所有用户的上述信息,信息的格式,既包含文本,也包含向量。对于记忆管理来说,它所需要的接口,其实核心就 2 类:

  1. 过滤。根据用户 ID,以及 Agent ID 和时间范围,来获取特定 Agent 和用户的记忆信息。
  2. 搜索。根据上下文信息(包括文本和向量),来查询用户记忆模块中相关的信息。

由于Agent对于记忆的获取,是实时性非常高的行为,因此,长期记忆管理的数据库,除了必须支持以上 2 类需求,还必须保证实时性:数据必须插入即可见,因此,这本质上是一种 Streaming Search 的需求—— 在 Infinity 内部,所有索引,都满足这个要求。对于向量来说,索引的构建是一个非常耗时的工作,因此,Infinity 在内部,对于刚插入的数据是直接采用 Brute Force 扫描,来提供实时查询。因此,即使是应对即将到来的 Multi Agent 系统,Infinity 也已经做好了准备。

Infinity 作为一款专门服务于 RAG 而设计的数据库,经过一路演进,已经具备了完整的服务能力。在 RAGFlow 最新发布的 0.14 版本中, Infinity 终于被集成到了 RAGFlow ,作为 Elasticsearch 的备选。经过充分测试和验证后,Infinity 将作为 RAGFlow 的首选,从那时起,许多更加高级的功能,将逐步被释放出来。欢迎持续关注 Infinity 和 RAGFlow :

https://github.com/infiniflow/infinity

https://github.com/infiniflow/ragflow

​

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

下面这些都是我当初辛苦整理和花钱购买的资料,现在我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

Ragflow技术栈分析及二次开发指南 Ragflow是目前团队化部署大模型+RAG的优质方案,不过其仍不适合直接部署使用,本文将从实际使用的角度,对其进行二次开发 阅读详情

相关推荐

【AIGC】AI如何匹配RAG知识库:混合检索

混合检索技术通过结合关键词检索和语义检索的优势,实现了多路召回,从而提高了检索的准确性和全面性。掌握上面我们提到的混合检索,不仅你可以根据自己的实际情况去对多种检索方式的权重进行加权,还可以根据自己的实际情况去调整对应的召回策略,对我们自建RAG检索有着极大帮助,希望本文能对你有启示。

智兔唯新的博客 1万+

实测!RAGFlow存储后端性能大比拼:Infinity/Elasticsearch全解析

你还在为RAGFlow选择存储后端发愁?部署时纠结用Infinity还是Elasticsearch?本文通过实测对比两种主流存储方案的查询速度、资源占用和适用场景,帮你3分钟锁定最佳选择。读完你将获得:不同场景下的存储后端选型指南、性能优化配置示例、完整部署流程图解。 ## 存储后端核心架构解析 RAGFlow作为基于深度文档理解的开源RAG引擎,其存储层设计直接影响检索性能。目前官方支持两种

gitblog_00021的博客 1797

腾讯云通过ES实现rag 混合检索功能

闪亮登场,以AI搜索增强版内核为底座,进一步优化了对全文与向量混合搜索的能力支持,从原始文档解析、向量化等原子能力,到查询性能、混合排序效率、搜索结果精准度等提供了全方位的支持和优化,让搜索有了更多想象空间。本身支持常用的中文分词,如IK 分词、QQ分词,同时支持用户上传自定义插件,在内核层面,针对典型向量场景特点做了深度优化,例如分片架构优化,查询并行化,lucene查询缓存锁改造等,10亿级向量检索平均响应延迟控制在毫秒级,整体查询性能提升3 - 10倍,极大程度的提升了混合搜索的效率。

张伟的专栏 1241

10分钟完成!RAGFlow文档引擎无缝迁移:从Elasticsearch到Infinity全指南

你是否正在为RAGFlow的Elasticsearch配置复杂而烦恼?是否需要更轻量、更高效的文档存储方案?本文将带你10分钟完成从Elasticsearch到Infinity的无缝迁移,解锁RAGFlow的深度文档理解能力。读完本文你将获得: - 零数据丢失的引擎切换方案 - Infinity专属配置优化技巧 - 常见迁移问题解决方案 - 性能对比与监控方法 ## 为什么选择Infinity引

gitblog_00494的博客 801

ragflow-nightly

releases at 2025-02-12

RAG检索增强生成的技术全景解析.pdf

RAG检索增强生成的技术全景解析.pdf

除了混合搜索,RAG 还需要哪些基础设施能力

Infinity 是一款专门为 RAG 设计的,在功能和性能上全面领先的数据库。除了 RAG 必备的混合搜索之外,还有哪些能力是当下,以及未来的 RAG 必备的能力呢?

datageek的博客 1610

立创EDA手动拼板实战:当自带功能不够用,如何用‘复制粘贴’搞定异形拼版与特殊布局

本文详细介绍了立创EDA手动拼板技术在异形拼版与特殊布局中的应用实战。通过CTRL+SHIFT+V等核心操作技巧,解决混合尺寸拼板、特殊间距需求等复杂场景,提升PCB设计效率与灵活性,特别适合需要高精度控制的射频电路和医疗设备项目。

weixin_31967485的博客 386

利用语义搜索和混合查询策略提升RAG系统的准确性

人工智能咨询培训老师叶梓 转载标明出处在构建基于大模型(LLM)的生成式问答系统(Generative Q&A)时,检索增强生成(Retrieval-Augmented Generation, RAG)方法被广泛采用。RAG通过结合检索器(Retriever)和生成器(Generator)来实现,其中检索器负责从大量文档中提取最相关的信息,为语言模型提供上下文支持。然而,随着文档库规模的扩大,RAG的准确性面临挑战。

人工智能前沿分享 2089

手把手教你用Simulink给C2000配置SCI串口发送数据(附模型与避坑点)

本文详细介绍了如何使用Simulink为C2000系列微控制器配置SCI串口发送数据,包括硬件资源分配、模型搭建、参数设置及调试技巧。通过代码生成和串口通信实践,帮助开发者高效实现嵌入式系统开发,避免常见通信问题。

weixin_30831529的博客 295

Hyper-V集群部署指南

工欲善其事,必先利其器。搭建一个方便管理的服务集群,是分布式学习很重要的环境。 目前流行的虚拟机产品主要为Vmware 和 win10自带的Hyper-V(win10家庭版无此功能),网上关于Vmware的教程更多,显然它更容易上手,但Hyper-V也算是一个很不错的产品,这里记录一下我的学习过程: 目录 Hyper-V的安装 服务集群的搭建 虚拟机的网络通信 NAT网络的搭建 端口映射 Linux的静态IP 虚拟机的自启动问题 Hyper-V的安装 也不能算说是安装,如果你的win1

Swing 6919

使用混合搜索提高 RAG 管道的检索性能

混合搜索是一种将两种或更多搜索算法结合起来的搜索技术,以提高搜索结果的相关性。尽管没有定义哪些算法被结合,但混合搜索最常见的是指传统基于关键词的搜索与现代向量搜索的结合。传统上,基于关键词的搜索是搜索引擎的明显选择。但随着机器学习(ML)算法的出现,向量嵌入使一种新的搜索技术成为可能——称为向量或语义搜索——它允许我们在语义上跨数据搜索。

龙哥盟 884

Comsol 弧形声学换能器声聚焦仿真

1. 弧度和曲率半径:弧形声学换能器的形状和曲率半径对声聚焦效果有重要影响。通常,较小的曲率半径和较大的弧度可以实现更强的声聚焦效果。弧形声学换能器声聚焦是指将声波能量集中在弧形声学换能器的特定区域内,以实现更强的声场强度和分辨率。4. 数值仿真和优化:使用声学仿真软件进行数值仿真可以帮助设计和优化弧形声学换能器的声聚焦效果。通过调整几何参数、材料特性和激励信号等参数,可以模拟和优化声聚焦效果。2. 激励信号:通过调整激励信号的频率和幅值,可以实现声波在弧形声学换能器中的聚焦效果。

声学黑洞仿真工作室 1617

【深入浅出RAG】LlamaIndex:在 RAG 的混合搜索中使用 Alpha 调优

在构建高效的检索增强型生成(RAG)应用中,检索适当的块、节点或上下文是至关重要的。然而,基于向量或嵌入的搜索可能并不适用于所有类型的用户查询。为了解决这个问题,混合搜索结合了基于关键词的方法(BM25)和向量(嵌入)搜索技术。混合搜索有一个特定的参数Alpha,用于平衡关键词(BM25)和向量搜索在检索RAG应用正确上下文时的权重。(alpha=0.0 - 关键词搜索(BM25),alpha=1.0 - 向量搜索)但这里有趣的是:微调Alpha不仅仅是一项任务;它是一种艺术形式。

m0_59164520的博客 1486

一文读懂Cache一致性原理

本文介绍了为什么需要维护cache一致性、一致性协议的本质和类别,以及如何设计一致性协议。

W1Z1Q的专栏 6845

小目标检测难题终结:YOLOv11 + 注意力机制,精度直接拉满

如果你在实操中遇到精度提升不明显或速度下降过多的问题,不妨尝试调整注意力模块的类型(如替换为CA)或插入层级,或针对性优化小目标的数据集增强策略。记住,小目标检测的核心是“特征强化与空间定位”,只要结合业务场景灵活调整注意力模块的组合,你也能让YOLOv11在小目标识别任务中脱颖而出。接下来,我们从模块选型到代码落地,一步步带你打造“小目标检测专精版”YOLOv11,真正帮你解决工业场景中(如安防、质检)的小目标识别痛点。在城市安防场景中,改进后的YOLOv11对远处行人、车辆(小目标)的识别准确率提升。

m0_64661770的博客 199

要在数据库中构建高效的RAG, 除了向量搜索能力还需要什么?

文章介绍了VectorChord Suite,这是在PostgreSQL中构建RAG系统的完整套件,包含VectorChord向量搜索引擎、VectorChord-bm25排序算法和pg_tokenizer文本标记功能三大组件。该套件支持混合搜索和无OCR的多模态检索,简化架构并提高检索准确性,使PostgreSQL成为构建RAG解决方案的强大平台。

Trb701012的博客 323

OpenFeign整合Sentinel实现熔断降级

常用于实现熔断降级的框架有Hystrix、Sentinel,我们常说的Spring Cloud项目说的其实是Spring Cloud Netflix,Hystrix以及前面学习过的Ribbon都是Netflix系的家族成员,所以使用Hystrix可以非常简单的与当前项目中使用到的OpenFeign、Ribbon整合,但笔者并没有选择Hystrix,而是选择阿里系的Sentinel。 为什么选择Sentinel而不是Hystrix?从接入简单考虑可能选择Hystrix是不错的选择,但笔者对Hyst...

吴就业 6718

RAG开发中,如何用Milvus 2.5 BM25算法实现混合搜索

01.背景混合搜索(Hybrid Search)作为RAG应用中Retrieve重要的一环,通常指的是将向量搜索与基于关键词的搜索(全文检索)相结合,并使用RRF算法合并、并重排两种不同检索的结果,最终来提高数据的召回率。全文检索与语义检索不是非此即彼的关系。我们需要同时兼顾语义理解和精确的关键字匹配。比如学术论文的写作中,用户不仅希望在搜索结果看到与搜索查询相关的概念,同时也希望保留查询中使用的...

ZILLIZ 2449

华为OD机考双机位C卷 - 构成正方形的数量 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 成正方形的数量 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 5938

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

揭秘RAG神器!如何通过上下文检索与混合搜索打造超强生成效果

检索增强生成 (RAG) 是自然语言处理 (NLP) 中使用的一种先进方法,用于生成准确、知情的响应。与仅依赖内部知识的传统模型不同,RAG 通过在生成过程中从外部文档或数据库检索相关信息来增强模型的能力。这意味着该模型可以“查找”相关数据并使用它来制定更精确的响应,特别是在处理需要最新或专业信息的主题时。上下文检索和混合搜索是用于增强检索增强生成 (RAG)系统的先进技术。它们属于更广泛的 RAG 范畴,但代表了改进这些系统检索相关信息的更复杂的方法。上下文检索不仅仅是简单的关键字匹配。

star_nwe的博客 1195

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

语义搜索与混合查询:Blended RAG如何提升检索准确性

Blended RAG(Blended Retrieval-Augmented Generation)是一种结合了语义搜索技术如密集向量索引和稀疏编码的方法,它通过混合策略提高了RAG系统的检索效率和精确度。这种方法的提出者通过对IR(Information Retrieval)数据集如NQ和TREC-COVID数据集的研究,实现了更好的检索结果,并为IR设置了新的基准。他们还将这种混合检索器扩展到RAG系统中,在生成式问答数据集如SQUAD上取得了优越的结果,甚至超过了微调性能。

wwlsm_zql的博客 3271

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Trieve: 全方位的搜索、推荐和RAG基础设施

Trieve为开发者提供了一个强大而灵活的平台,大大简化了构建高质量搜索、推荐和RAG系统的过程。无论是初创公司还是大型企业,Trieve都能为其提供所需的工具和基础设施,帮助他们快速构建智能、高效的信息检索和推荐系统。

Nifc666的博客 1012
上一篇: 大模型神级书籍——LangChain入门指南,零基础轻松入门,7天速学
下一篇: # Multilingual embedding 在构建非英语 RAG 系统时很重要
AI_小站
博客等级 码龄3年 6255粉丝 1152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值