大家好!随着世界越来越趋向于采用AI驱动的解决方案,作为一名全栈开发人员,我对生成式AI的潜力充满好奇。为了探索生成式AI的能力和挑战,我决定深入研究。过去几个月里,我一直在学习并记录我的旅程的点点滴滴,收集有关生成式AI的各种见解。今天,我非常激动地与大家分享这段时间里获得的知识和经验!
我把我关于生成式人工智能、嵌入向量、向量数据库、检索增强生成(RAG)等的所有笔记整理在我的个人博客里。如果你对所有我整理的资源和见解感兴趣,欢迎点击这里了解 here。
揭秘Transformer的神奇之处
这是一张变形金刚的图片。
当我第一次开始研究大规模语言模型时,我立刻被“transformer”架构所吸引。作为一个喜欢探究内部机制的人,我知道这是一切的关键。但是让我来告诉你,一开始理解它并不容易。最核心的是,transformer 使用注意力机制来评估序列中不同单词的重要性,这相比于之前的 RNN 或 LSTM 模型来说,是一个巨大的进步。这些模型在处理长距离依赖性时常常出现问题。
transformer之所以如此变革性(并非双关!)是因为它们让模型能够高效处理大量文本数据,同时在较长的文本中保持上下文。尽管我学到了很多,我还是不能完全理解这些模型的每一个细节。例如,虽然注意力的概念很清楚,但其背后的数学运算仍然感觉抽象。不过,我整理了一份帮助我理解这些概念的资源清单,对于任何想要开始探索的人来说可能很有用。
YouTube视频:
- Transformer(大型语言模型的工作原理)可视化解说
- Transformer神经网络,ChatGPT的基础,清晰易懂的解释
- 大型语言模型入门: (1小时演讲)
- 深入理解Transformer架构:注意力机制就是一切
- 注意力背后的数学:键、查询和值矩阵的原理
- 机器学习中最重要的算法
博客 :
- Transformers:架构详解
- 插图详解:Transformer
- 教程14:Transformers I — 介绍
- Transformers架构详解:揭秘LLMs的秘密
- https://rbcborealis.com/research-blogs/tutorial-14-transformers-i-introduction/
- 从零开始理解LLMs,只需用中学数学
- 语言模型如何在长上下文中分配注意力权重?
- Inspectus GitHub 代码库
- LLM Transformer模型工作原理及交互式可视化演示
提示设计
一旦我对 transformers 比较熟悉了,我将注意力转向了提示工程的艺术和科学。我很快意识到,虽然 transformers 可以生成令人印象深刻的文本,但它们的输出质量往往取决于输入提示的编写。这时,像 Chain of Thought (COT)、REACT 和 Tree of Thoughts 这样的方法就派上了用场。通过引导模型的推理过程,我们可以获得更加精确和准确的输出结果。
然而,提示工程并不是万能的解决方案。你如何编写提示会对模型的效果产生显著影响。例如,对同一个问题进行简单的改写就能得到完全不同的回应。有很多资源帮我改进了提示设计。
YouTube视频,
博客:
- Prompt Engineering Guide
- Eugene Yan的提示指南
- GitHub上泄露的GPT提示
- https://substack.com/@cwolferesearch/p-143156742
- https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/
- 提示、系统提示和LLM指令的集合页面
- Uber的Prompt Engineering Toolkit
- Prompt Optimization页面
- CO-STAR框架下的提示结构化页面
- Anthropic的Prompt Engineering交互式教程页面
- Brex的提示工程指南页面
- Meta的提示工程指南页面
- Google的Gemini提示工程指南页面
- 我对LLM提示工程的看法 (Francois Chollet, 2023)
我看了些关于提示工程的研究论文,可能会对你有帮助。
- 异步计划推理中增强的大型语言模型
- 增强ChatGPT提示工程的提示模式目录
- 链式思考提示引发大型语言模型中的推理
- 大型语言模型中的自动链式思考提示
- 自我一致性改善语言模型中的链式思考推理
- 语言模型中的推理与行动协同作用
- 实例自适应零样本链式思考提示
- 更大的语言模型以不同的方式执行上下文学习 (Wei et al., 2023)
一些提升您提示工程技术的工具
就像任何手艺一样,拥有正确的工具是必不可少的。虽然提示工程可能耗时较长,但有一些工具可以帮助加快这一流程。例如,像Zenbase这样的平台可以自动化模型选择和提示生成,减少手动操作。同样,Prompt Optimizer和EvalLM这样的工具提供了互动的优化功能,帮助通过评估是否符合用户定义的标准来优化提示。这些资源让我更容易尝试不同的策略并找出哪个最有效。
RAG该图片展示了RAG相关的内容。
接下来令人兴奋的一步是探索检索增强生成(RAG)。如果你一直关注人工智能和大型语言模型(LLMs)的进展,你可能已经知道这些模型非常强大,但也有一个限制:它们只能生成基于训练数据的回答。但是,当你需要它们回答关于以前未接触过的话题或领域的提问时会怎样呢?这时,RAG就发挥作用了,让LLMs能够实时访问外部知识库,从而变得更聪明。
RAG是什么?
本质上来说,RAG将大语言模型的生成能力和外部数据库的检索能力结合起来。这种结合使模型能够从知识库或数据集中提取相关的信息,从而生成更准确、更符合上下文的答案。可以将其视为让大语言模型访问一个庞大且不断更新的信息池,让其能够回答即使从未直接训练过的话题的问题。
RAG系统的组件
一个典型的RAG系统包括三个关键部分。
-
知识库/外部语料:这是检索器会访问的外部数据集或数据库,用于查找相关信息。它可能是一个静态数据库,像搜索引擎这样的动态来源,甚至是一组经常更新的文档集合。
-
检索器:检索器的工作是在知识库中查找相关的文档或信息片段。它会用各种算法找到最相关的数据来回答问题。
- 大型语言模型(LLM):检索器检索到所需信息后,LLM 使用这些数据来生成回复。LLM 实际上通过这些上下文信息来“丰富”其生成过程。
以下是一些帮助您了解并开始使用RAG(检索和生成)的资源。
- 开始学习RAG
- 使用检索增强生成入门
- 2024年如何学习RAG入门
- Google提出的检索增强生成是什么
- 不使用任何框架从零开始构建RAG
- 检索的5个文本拆分层次 (Greg Kamradt,2024)
在熟悉了检索增强生成(RAG)的核心概念后,我迫不及待地想将我的知识付诸实践。接下来,我开始寻找有助于我有效实施RAG的框架。我开始尝试一些流行的工具,包括Langchain,LlamaIndex和RAGFlow。这些框架通过结合外部数据检索和强大的生成模型来快速构建RAG相关的应用程序,我会在另一篇博客文章中分享我的经验。
我想更深入地了解RAG及其更高级的主题和概念。我开始阅读关于RAG的研究论文,越读下去,我越发现RAG比我最初想象的要广泛和丰富得多。存在各种不同的RAG,每一种都针对特定的信息检索和生成需求和挑战。
- RAG-Fusion: 检索增强生成的新方法
- 纠正性检索增强生成
- 检索交织生成(RIG)
- LightRAG
- GRAPH RAG
- HippoRAG: 受神经生物学启发的大型语言模型的长期记忆系统
- Astute RAG: 克服大型语言模型的不完美检索增强和知识冲突的方法
- HtmlRAG: HTML比纯文本更适合RAG系统中的知识建模
- LightRAG: 比GraphRAG更有效的RAG系统解决方案吗?
- GraphRAG: 用于RAG的大型语言模型衍生知识图谱
RAG优化(RAG优化技术)
RAG的高级概念
分块技术
- 简单的分块将文本分成固定长度的字符块,速度快但不考虑文档结构。
- 句子分割使用NLP工具如NLTK或SpaCy将文本拆分成句子,提供更高的精度。
- 递归字符文本分割结合字符和结构感知的分块方法,优化块的大小同时保持文档的流畅性。
- 结构化分块器根据文档结构(例如HTML或Markdown)拆分文本,并添加元数据以提供上下文。
- 语义分块使用嵌入模型将语义相似的句子分组,形成更连贯的块,但计算成本较高。查看这篇文章以可视化语义分块here
检索算法们在RAG系统中起着关键作用,帮助高效地找到相关的信息。
- 余弦相似度 和 欧几里得距离 用于衡量向量之间的相似性,而 基于图的检索和生成 和 准确最近邻(k-NN) 则用于查找相关信息。
- HNSW 和 产品量化(PQ) 通过创建可扩展的图结构和减少存储需求来优化搜索过程。
- 局部敏感哈希(LSH) 通过哈希相似的向量来加速查找,而 BM25,一种基于词的算法,则根据查询词的频率和相关性对文档进行排名。
检索类型在RAG系统中使用以提升信息检索的质量和相关度如下:
-
GPT排名:查询向量数据库后,系统让LLM按照查询的相关性对检索到的文档进行排序。重新排序的文档随后回送LLM进行最终处理,从而提升响应质量。
-
多查询:这种方法不依赖单一查询,而是先将用户的查询发送给大语言模型(LLM),让其提出更多相关的查询。然后使用这些新查询从数据库中获取更多相关信息,从而丰富响应。
-
文档摘要:LLM被要求提取并提供文档中最关键的内容,减少处理的背景信息。这有助于优化输入到LLM的数据,确保更专注和高效的回复。
- 假设文档生成:LLM 会被要求生成一份能够最好地回答查询的“假设”文档。这份假设文档然后会被用作提示,从数据库中检索相关资料,从而使回复更符合用户的需求。
RAG评估依赖于一组关键指标来评估检索增强生成输出的质量。这些指标确保响应不仅准确,还紧密关联到检索到的信息上下文中。
-
上下文相关性:这衡量检索到的文档是否真正与用户的查询相关联。如果内容无关,最终的回复很可能会不准确或不完整。
-
相关性:这检查模型的回答是否有效地回应了查询。即使背景信息相关,回答也必须直接与问题相关才有用。
- 立足性:这确保回复基于检索到的上下文提供了充分的支持。立足的回复指的是由相关文档中的信息明确支持的回复,避免出现虚构或捏造的细节。
这里有一些资源可以让你开始探索高级RAG。
- RAG Techniques:一个GitHub仓库,汇集了RAG系统相关技术、方法和最佳实践。
- 超越RAG基础:超出现有RAG技术的高级主题和概念。
向量数据库
如果你已经研究过RAG(检索增强生成),你可能已经知道向量数据库在优化检索和生成过程中的重要性。向量数据库存储数据的高维表示——这些嵌入向量能够快速进行相似性搜索,并高效地检索相关信息。
与依赖关键词匹配的传统数据库不同,向量型数据库使用算法来计算向量空间中数据点之间的接近程度(例如余弦相似度或欧几里得距离),因此非常适合处理文本、图像和音频等非结构化信息。
一些流行的向量数据库方案有:
- Qdrant
- Pinecone
- Weaviate
- Faiss(Facebook 开发的)
- Milvus
- Chroma(一款软件)
在了解向量数据库如何运作前,了解嵌入的概念非常重要,因为嵌入是数据在向量数据库中的表示和搜索的基础。嵌入能够捕捉数据的语义含义并将其映射到高维空间。这些嵌入让算法可以比较不同数据点之间的相似性,这对语义搜索和推荐系统等应用来说非常重要。
这里有一些很好的资源可以了解嵌入技术:
- 视频:词嵌入和Word2Vec,清晰易懂的解释!!!
- 视频:BERT研究 - 第2集 - WordPiece(词片段)嵌入
- 文章:什么是嵌入以及它们为什么重要
- 视频:词嵌入
- 视频:$0嵌入(OpenAI vs. 免费和开源)
一旦你熟悉了嵌入,研究起来向量数据库就会容易得多,因为大多数核心概念在不同数据库之间是相似的。主要的区别通常在于语法和每个数据库特有的功能。向量数据库被设计用来存储、索引和快速检索高维向量(例如嵌入生成的向量),从而实现高效的相似性搜索。
向量数据库中的高级概念
- 量化入门
- 索引和性能优化
- 我们如何让PostgreSQL处理向量数据的速度赶上Pinecone
- 使用Pgvector和Cohere在PostgreSQL中实现混合搜索
- 深入探讨PostgreSQL的pgvector向量相似性搜索
- 使用PostgreSQL构建、扩展和管理面向用户的检索增强生成应用
- 向量搜索:幕后详解
今天就到这里吧。
现在你已经具备了关于Transformer、嵌入式、向量数据库技术和RAG(检索增强生成技术)的坚实基础,你已经准备好更深入地了解生成式AI。我们所涵盖的概念是理解AI模型如何根据其训练数据进行检索、处理和生成信息的重要基石。
无论你是用RAG构建应用程序,还是探索大规模向量搜索的复杂性,这些资源都会一步步教你搞定这个领域的门道。
期待我下一篇博客,我将深入探讨更高级的主题,如 LLM的结构化输出、LLM的可观测性、LLM的评估,以及 使用生成式AI的智能代理和项目。这些关键领域将帮助你更好地理解和应用大型语言模型,让你能够创建更加复杂、高效且可靠的AI系统。敬请期待更多精彩内容即将发布!
祝你玩得开心,直到那时为止!😊
最后,如果觉得文章有用,请点个赞,拍下手👏并关注我,谢谢你!
如果你发现这些笔记对你有帮助的话,并希望看到更多这样的内容,可以在我的 请我喝杯咖啡 页面支持我。你的支持激励我继续与你分享我的学习之路!
共同学习,写下你的评论
评论加载中...
作者其他优质文章