生成式人工智能:个人深度探索——我的笔记和见解
大家好!随着世界日益转向人工智能驱动的解决方案,作为一名全栈开发者,我对生成式人工智能的潜力产生了浓厚的兴趣。出于对它的能力和挑战的好奇,我决定深入研究。在过去的几个月里,我一直在学习和记录我的旅程,收集关于生成式人工智能的见解。今天,我很高兴能与大家分享我一路走来积累的知识和经验!
我把关于生成式人工智能、嵌入、向量数据库、RAG 等内容的所有笔记都整理在我的个人博客里。如果你有兴趣探索我收集的所有资源和见解,欢迎在这里查看。
揭开变形金刚的魔力
当我刚开始深入研究法学硕士(LLM)时,我立刻被“Transformer”架构所吸引。作为一个热爱理解底层工作原理的人,我知道这是维系一切的基础。但让我告诉你——一开始掌握它并不容易。Transformer 的核心是使用注意力机制,让模型能够衡量序列中不同单词的重要性。这与之前的 RNN 或 LSTM 等模型相比是一个巨大的飞跃,因为之前的模型在处理文本中的长距离依赖关系时遇到了困难。
Transformer 之所以如此具有变革性(这可不是双关语!),是因为它们能让模型高效地处理大量文本数据,同时在较长的段落中保持上下文信息。然而,尽管我学了很多,但仍然未能完全理解这些模型运作的每一个细节。例如,虽然注意力的概念很清晰,但其背后更深层次的数学运算仍然显得抽象。话虽如此,我整理了一份资源清单,帮助我理解这些概念,或许对任何想要开启探索之旅的人都会有所帮助:
YouTube视频:
- Transformer(LLM 的工作原理)的直观解释
- Transformer 神经网络、ChatGPT 的基础,解释得清清楚楚!!!
- 大型语言模型简介 (1 小时讲座)
- 深入理解 Transformer 架构——你只需要注意力
- 注意力机制背后的数学原理:键、查询和值矩阵
- 机器学习中最重要的算法
博客:
- Transformer:架构
- 图解变压器
- 教程 14:Transformers I - 简介
- Transformers 架构详解:法学硕士 (LLM) 背后的魔力是什么
- https://rbcborealis.com/research-blogs/tutorial-14-transformers-i-introduction/
- 运用中学数学从零开始理解法学硕士
- 语言模型如何将注意力权重置于长上下文之上?
- Inspectus GitHub 存储库
- LLM Transformer 模型如何与交互式可视化协同工作
快速工程
在我对 Transformer 稍稍熟悉之后,我将注意力转向了提示工程的艺术与科学。我很快意识到,虽然 Transformer 可以生成令人印象深刻的文本,但它们的输出质量往往取决于输入提示的制作水平。这时,诸如思维链 (COT)、REACT 和思维树等技术就派上用场了。通过引导模型的推理过程,我们可以获得更加精准的结果。
然而,提示工程并非万能的解决方案。提示的措辞方式会显著影响模型的性能。例如,对同一个问题进行简单的改写,就可能导致截然不同的回答。有很多资源帮助我改进了提示设计的方法:
YouTube视频:
- AI 提示工程:Anthropic 的深度探索
- 与 Anthropic Claude 一起建造:与 Zack Witten 一起参加 Promise 工作坊
- 一位 AI Prompt 工程师分享她的秘密
- 高级快速工程:OpenAI Hackathon
博客:
- 快速工程指南
- 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
- 即时优化
- 用于快速构建的 CO-STAR 框架
- Anthropic 的即时工程交互式教程
- Brex 的快速工程指南
- Meta 的即时工程指南
- Google 的 Gemini 提示工程指南
- 我对法学硕士(LLM)快速工程的看法(Francois Chollet,2023 年)
我阅读了一些关于快速工程的研究论文,可能对你有帮助
- 异步计划推理中的图形增强大型语言模型
- 利用 ChatGPT 增强即时工程的即时模式目录
- 思路链提示在大型语言模型中引发推理
- 大型语言模型中的自动思维链提示
- 自洽性改善了语言模型中的思维链推理
- 语言模型中的推理与行动协同
- 实例自适应零样本思维链提示
- 更大的语言模型以不同的方式进行上下文学习(Wei et al., 2023)
提升您的快速工程技能的工具
与任何技艺一样,拥有合适的工具至关重要。虽然提示设计可能是一个耗时的过程,但市面上有一些工具可以帮助简化这一过程。例如,像Zenbase这样的平台可以自动化模型选择和提示生成,从而减少所需的手动工作量。同样,像Prompt Optimizer和EvalLM这样的工具提供了交互式功能,可以通过根据用户定义的标准评估提示来帮助微调。这些资源让我能够更轻松地尝试不同的策略,并找到最有效的方法。
抹布
下一个激动人心的进展是探索检索增强生成 (RAG)。如果您一直关注人工智能和大型语言模型 (LLM) 的发展,您可能知道这些模型非常强大,但也存在局限性:它们只能根据训练过的数据生成答案。但是,当您需要它们回答从未遇到过的主题或领域的问题时,会发生什么呢?这时,RAG 便可以发挥作用,它使 LLM 能够实时访问外部知识库,从而变得更加智能。
什么是 RAG?
RAG的核心是一种将 LLM 的生成能力与外部数据库的检索能力相结合的技术。这种结合使模型能够从知识库或数据集中提取相关信息,然后利用这些信息生成更明智、更符合语境的答案。这相当于让 LLM 能够访问一个庞大且不断更新的信息池,使其能够提供即使是从未直接训练过的主题的答案。
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-Fusion:检索增强生成的新视角
- 校正检索增强生成
- 检索交错生成 (RIG)
- LightRAG
- 图形抹布
- HippoRAG:受神经生物学启发的大型语言模型的长期记忆
- Astute RAG:克服大型语言模型的不完善检索增强和知识冲突
- HtmlRAG:在 RAG 系统中,HTML 比纯文本更适合对检索到的知识进行建模
- LightRAG:对于 RAG 系统来说比 GraphRAG 更有效的解决方案?
- GraphRAG:基于 LLM 的 RAG 知识图谱
RAG优化
高级 RAG 概念
分块方法
- 简单的分块将文本分成固定长度的字符块,速度快但缺乏对文档结构的考虑。
- 句子拆分使用 NLTK 或 SpaCy 等 NLP 工具将文本分解为句子,从而提供更高的精度。
- 递归字符文本分割结合了基于字符和结构感知的分块,在保留文档流的同时优化了块大小。
- 结构化分块器根据文档模式(例如 HTML 或 Markdown)拆分文本,并添加上下文元数据。
- 语义分块使用嵌入模型将语义相似的句子分组,以更高的计算成本创建更连贯的块。查看精彩文章,以可视化分块
检索算法在 RAG 系统中发挥着关键作用,有助于有效地找到相关数据。
- 余弦相似度和欧氏距离测量向量之间的相似度,而基于图的 RAG和精确最近邻 (k-NN)搜索相关信息。
- HNSW和产品量化 (PQ)通过创建可扩展的图形结构和减少存储要求来优化搜索。
- 局部敏感散列 (LSH)通过对相似向量进行散列来加速查找,而基于术语的算法BM25则根据查询术语频率和相关性对文档进行排名。
RAG 系统中使用的检索类型可提高信息检索的质量和相关性:
-
Rank GPT:查询向量数据库后,系统会要求 LLM 根据与查询的相关性对检索到的文档进行排序。重新排序后的文档随后被发送回 LLM 进行最终生成,从而提高响应质量。
-
多查询检索:此方法并非依赖于单个查询,而是首先将用户查询发送到 LLM,并要求其建议其他或相关的查询。然后,这些新查询将用于从数据库中获取更多相关信息,从而丰富响应。
-
上下文压缩:LLM 需要提取并提供文档中最相关的部分,从而减少需要处理的上下文量。这有助于优化 LLM 的输入,确保回复更加集中高效。
-
假设文档嵌入:LLM 的任务是生成一个能够最佳回答查询的“假设”文档。然后,该假设文档将作为提示,从数据库中检索相关数据,从而使响应更贴近用户的需求。
RAG 评估依靠一组关键指标来评估检索增强生成输出的质量。这些指标确保响应不仅准确,而且与检索到的上下文紧密相关。
-
上下文相关性:衡量检索到的文档是否与用户查询真正相关。如果上下文不相关,最终的响应很可能不准确或不完整。
-
答案相关性:这检查模型的响应是否有效地解决了查询。即使上下文相关,答案也必须与其直接相关才能发挥作用。
-
扎实性:这确保回答能够得到检索到的上下文的有力支持。扎实的回答是指回答能够明确地得到相关文档中的信息支持,避免出现虚构或捏造的细节。
以下是一些开始使用高级 RAG 的资源:
- RAG 技术:一个 GitHub 存储库,汇集了使用 RAG 系统的技术、方法和最佳实践。
- 超越 RAG 的基础知识:突破 RAG 技术极限的高级主题和概念。
向量数据库
如果您深入研究过RAG(检索增强生成) ,您可能已经了解矢量数据库在优化检索和生成过程中发挥的关键作用。矢量数据库存储嵌入(数据的高维表示),从而实现快速的相似性搜索和高效的相关信息检索。
与依赖关键字匹配的传统数据库不同,矢量数据库使用算法来测量矢量空间中数据点的接近度(例如余弦相似度或欧几里得距离),使其非常适合处理文本、图像和音频等非结构化数据。
一些流行的矢量数据库解决方案包括:
- 卡德兰特
- 松果
- 威维特
- Faiss(来自 Facebook)
- Milvus
- 色度
在深入研究矢量数据库的工作原理之前,理解“嵌入”的概念至关重要,因为它构成了矢量数据库中数据表示和搜索的基础。嵌入是数据(例如文本、图像或音频)的数值表示,用于在高维空间中捕捉其语义含义。这些嵌入允许算法测量不同数据点之间的相似性,这对于语义搜索和推荐系统等任务至关重要。
以下是一些了解嵌入的优秀资源:
一旦你熟悉了嵌入,深入研究向量数据库就会容易得多,因为不同数据库中的大多数核心概念都相似。主要区别通常在于语法和每个数据库提供的一些特定功能。向量数据库旨在存储、索引和检索高维向量(例如由嵌入生成的向量),从而实现快速的相似性搜索。
向量数据库中的高级概念
- 量化
- 索引和性能优化
- 我们如何让 PostgreSQL 像 Pinecone 一样快速处理矢量数据
- 使用 Pgvector 和 Cohere 的 PostgreSQL 混合搜索
- 使用 PostgreSQL 的 pgvector 进行向量相似性搜索——深入探究
- 使用 postgress 构建、扩展和管理面向用户的检索增强生成应用程序
- 矢量搜索:幕后
今天就到这里
现在,您已经掌握了Transformer、嵌入、向量数据库和RAG(检索增强生成)等相关资源,奠定了坚实的基础,可以更深入地探索生成式 AI。我们涵盖的概念是构建生成式 AI 的基础,它们将帮助您理解 AI 模型如何根据训练数据检索、处理和生成信息。
无论您是使用 RAG 构建应用程序还是探索大规模矢量搜索的复杂性,这些资源都将指导您逐步掌握该领域。
敬请期待我的下一篇博文,我将深入探讨更高级的主题,例如LLM 的结构化输出、LLM 可观测性、LLM 评估以及使用生成式 AI的代理和项目。这些领域至关重要,它们将提升您对大型语言模型的理解和使用,从而帮助您构建更复杂、更高效、更可靠的 AI 系统。敬请关注即将发布的更多精彩见解!
祝您探索愉快!😊
最后,如果文章对你有帮助,请点赞👏并关注,谢谢!
文章来源:https://dev.to/programmerraja/generative-ai-a-personal-deep-dive-my-notes-and-insights-1ph0如果您觉得这些笔记很有帮助,并且希望看到更多类似的内容,欢迎在Buy me a coffee上支持我。您的支持能激发我的好奇心,并激励我继续与您分享我的学习之旅!