这是我现在正在进行的一个项目,我正在尝试为生成式人工智能访谈编制问题和答案列表。
我使用这个参考文献作为基础,感谢他们的编译,但是,我在编辑问题和答案方面有很多自由,它们完全是我自己的。
注意:我试图将自己写的答案保持在最低限度,因为我绝不是或形成该主题的权威来源。我将尽我所能提供参考。我没有添加任何形式的视觉辅助以提高可读性并将维护的复杂性降至最低。我引用的资源和参考文献包含大量信息,其中大部分带有视觉效果。
我计划将其扩展到一般的生成人工智能,而不仅仅是语言,涵盖从扩散模型到视觉语言模型的所有内容。一旦我确定了基本结构并且对初步结果感到满意,我将致力于建立一种有效的方法来为这个存储库做出贡献,然后我将开放它以供贡献,但现在,我想保留它简单而专注。
重要的:
我认为可能有必要澄清一下,我提供的答案,无论它们是我自己写的还是我引用的来源,都不是以任何方式或形式确定的,我想做的是让你开始在正确的道路上,并让您大致了解会发生什么,您绝对应该阅读我提供的所有资源,然后是一些。如果您希望这是您的最后一站,那么这里不适合您。这就是事情的开始。
另外,如果您刚刚开始,我的唯一建议是:
舒适地阅读论文,因为它们永远不会结束。
关于如何阅读论文的论文:如何阅读论文
1. LLM和提示基础知识
2. 检索增强生成(RAG)
3. 分块策略
4. 嵌入检索模型
5.向量检索、数据库和索引
6. 高级搜索算法
7. 语言模型内部工作原理
让我们考虑一个数据集,其中每个数据点代表一只猫。让我们将其传递给每种类型的模型,看看它们有何不同:
让我们从头开始构建大型语言模型 (LLM) 的定义:
延伸阅读:普通爬行
大型语言模型通常分多个阶段进行训练,这些阶段通常称为预训练、微调和对齐。
此阶段的目的是以无监督的方式将模型暴露给所有语言,这通常是训练中最昂贵的部分,并且需要大量计算。预训练通常在 Common Crawl 数据集等数据上进行,数据集的处理版本(例如 FineWeb 和 RedPajama)通常用于预训练。为了促进这种广泛的学习,我们可以使用多种训练任务,例如掩码语言建模(MLM)、下一句预测(NSP)等。
掩码语言建模基于完形填空测试,我们在句子中掩饰一个单词,并要求模型对其进行预测。类似于填空测试。它与要求模型预测句子中的下一个单词不同,因为它要求模型理解句子的上下文,而不仅仅是单词的序列。
下一个句子预测是一项任务,模型被给予两个句子,它必须预测第二个句子是否在第一个句子之后。听起来很简单,它要求模型理解第一个句子的上下文以及两个句子之间的关系。
BERT 论文是了解更多有关这些任务的绝佳资源。
这个阶段比预训练简单得多,因为模型已经学习了很多关于语言的知识,现在我们只需要教它特定的任务。此阶段我们需要的只是输入数据(提示)和标签(响应)。
这个阶段往往是最关键和最复杂的阶段,它需要使用单独的奖励模型,使用不同的学习范式(例如强化学习)等等。
此阶段的主要目的是使模型的预测与人类的偏好保持一致。这个阶段常常与微调阶段交织在一起。这一阶段的必读文章是 InstructGPT 论文,该论文介绍了使用近端策略优化的人类反馈强化学习(RLHF)的概念。
将模型的预测与人类偏好保持一致的其他方法包括:
标记是模型可以理解的最小文本单元,它们可以是单词、子词或字符。
分词器负责将文本转换为标记,它们可以像用空格分割文本一样简单,也可以像使用子词分词一样复杂。分词器的选择会对模型的性能产生重大影响,因为它会影响模型理解文本上下文的能力。
一些常见的分词器包括:
推荐阅读(和观看):
这是一个非常沉重的问题,但这里有一些资源可以进一步探讨这个主题:
参数包括:
可以调整每个参数以提高模型的性能以及生成文本的质量。
推荐阅读:
解码策略用于选择序列中的下一个标记,它们的范围可以从简单的贪婪解码到更复杂的采样策略。
一些常见的解码策略包括:
较新的解码策略包括推测解码(辅助解码),这是一个疯狂的概念,它涉及使用来自较小(因此更快)模型的候选标记来非常快速地从较大模型生成响应。
推荐阅读:
在解码过程中,LLM 一次自回归生成一个标记的文本。有几个停止标准可用于确定何时停止生成文本。一些常见的停止标准包括:
A prompt contains any of the following elements:
Instruction - a specific task or instruction you want the model to perform
Context - external information or additional context that can steer the model to better responses
Input Data - the input or question that we are interested to find a response for
Output Indicator - the type or format of the output.
参考:快速工程指南
推荐阅读:
参考:快速工程指南
推荐阅读:
上下文学习是自然语言处理中非常直观且易于理解的学习范式。它包含诸如小样本学习之类的概念。它可以很简单,只需提供一些您希望模型执行的任务的示例,模型将从这些示例中学习并相应地生成响应。
推荐阅读:
事实证明,只有当模型缩放到一定大小并且模型接受不同任务集的训练时,上下文学习才能出现。当模型无法执行复杂的推理任务时,上下文学习可能会失败。
推荐阅读:
这是一个非常广泛的问题,但以下内容将帮助您对如何为特定任务设计提示形成基本了解:
另外,较新的研究方向研究使用优化提示的算法方式,这已在 DSPy 包中进行了广泛的探索,它提供了实现此目的的方法,他们的工作也发表在本文中。
这个问题没有答案,我把它作为链接这个参考文献的借口:
有多种方法可以让 LLM 生成每次都可解析的结构化输出,常用方法取决于 LLM 中函数调用的概念。
推荐阅读和观看:
The term describes when LLMs produce text that is incorrect, makes no sense, or is unrelated to reality
参考: Nexla 的 LLM 幻觉 — 类型、原因和解决方案
推荐阅读:
众所周知,思维链提示的概念可以增强法学硕士的推理能力。该技术涉及将复杂的任务分解为一系列更简单的任务,并向模型提供每个任务的中间输出,以指导其实现最终输出。
推荐阅读:
检索增强生成 (RAG) 是一种常见的设计模式,用于将 LLM 答案建立在事实基础上。该技术涉及从知识库检索相关信息,并使用它来指导法学硕士生成文本。
推荐阅读:
检索增强生成 (RAG) 由两个主要部分组成:
RAG 背后的直觉是,通过结合基于检索和基于生成的模型的优势,我们可以创建一个能够生成基于事实的文本的系统,从而限制幻觉。
RAG 通常是回答基于知识库的复杂问题的首选技术,因为它允许模型利用外部信息来提供更准确、信息更丰富的答案。在专有数据上微调模型并不总是可行,而 RAG 提供了一种无需微调即可合并外部知识的方法。
利用 RAG 回答基于知识库的复杂问题的完整解决方案将涉及以下步骤:
这是一个非常沉重的问题,但这里有一些资源可以进一步探讨这个主题:
文本分块是将大块文本分解为更小、更易于管理的块的过程。在 RAG 系统的上下文中,分块很重要,因为它允许检索器组件有效地从知识库中检索相关信息。通过将查询分解为更小的块,检索器可以专注于检索与每个块相关的信息,这可以提高检索过程的准确性和效率。
在嵌入模型(通常用作检索器)的训练过程中,使用正文本对和负文本对来指示哪些文本片段相互对应,示例包括维基百科页面上的标题、标题和副标题及其相应的段落、reddit 帖子及其投票最高的评论等。
通常嵌入用户查询并查询索引,如果索引中包含要查询前 k 个命中的整个文档,则检索器将无法返回最相关的信息,因为要查询的文档太大而无法理解。
总而言之,我们对文本进行分块,因为:
假设我们有一本书,包含24章,总共240页。这意味着每章包含 10 页,每页包含 3 个段落。假设每个段落包含 5 个句子,每个句子包含 10 个单词。总共有:每章 10 * 5 * 3 * 10 = 1500 字。整本书我们还有1500 * 24 = 36000字。为了简单起见,我们的分词器是一个空白分词器,每个单词都是一个标记。
我们知道,我们最多有一个能够嵌入 8192 个 token 的嵌入模型:
所有这些都是为了说明,没有固定的方法来对文本进行分块,对文本进行分块的最佳方法是进行实验,看看哪种方法最适合您的用例。
关于这个主题的权威来源是 Greg Kamradt 的优秀笔记本和随附视频,他们在其中解释了不同级别的文本分割。
该笔记本还介绍了评估和可视化不同级别的文本分割的方法,以及如何在检索系统中使用它们。
推荐观看:
向量嵌入是将文本语义映射到 N 维空间,其中向量表示文本,在向量空间内,相似的文本由相似的向量表示。
推荐阅读:
嵌入模型是为了向量化文本而训练的语言模型,它们通常是 BERT 衍生品,并在大型文本语料库上进行训练以学习文本的语义,但最近的趋势也表明可以使用更大的语言模型为此目的,例如 Mistral 或 Llama。
推荐阅读和观看:
嵌入模型通常用作检索器,为了利用其检索功能,使用语义文本相似性,其中使用点积、余弦相似性等指标来测量模型生成的向量的相似性。
推荐阅读:
嵌入模型使用对比损失进行训练,范围从简单的对比损失到更复杂的损失函数,例如 InfoNCE 和 Multiple Negative Ranking Loss。训练期间也使用了一种称为“硬负挖掘”的过程。
推荐阅读:
对比学习是一种用于训练嵌入模型的技术,它涉及学习区分正负文本对。该模型经过训练以最大化正对之间的相似度并最小化负对之间的相似度。
推荐阅读:
交叉编码器和双编码器是用于文本检索任务的两种模型。两者之间的主要区别在于它们如何对查询和文档进行编码。
重排序器通常是交叉编码器,它们将查询和文档一起编码,并计算两者之间的相似度。这使它们能够捕获查询和文档之间的交互,并以更高的计算复杂性为代价产生比双编码器更好的结果。
文本嵌入模型通常是双编码器,它们分别对查询和文档进行编码,并计算两个嵌入之间的相似度。这使得它们比交叉编码器具有更高的计算效率,但它们无法捕获查询和文档之间的显式交互。
单向量密集表示通常是文本嵌入模型中的标准,它们通常是通过在模型前向传递后池化上下文嵌入来生成的,池化技术包括均值池化、最大池化和 CLS 令牌池化。单向量密集表示背后的直觉是它们易于实现,可用于广泛的任务,并且易于索引和检索。密集表示还能够捕获文本的语义,并且经常用于第二阶段排名。
多向量密集表示已被证明可以产生比单向量密集表示更好的结果,它们是通过跳过池化步骤并使用矩阵形式的上下文嵌入来生成的,然后使用查询和文档嵌入来计算查询和文档嵌入之间的相似度第二,ColBERT 等模型已证明可以产生优于单向量密集表示的结果。 MaxSim 等运算符用于计算查询和文档嵌入之间的相似度。多向量密集表示背后的直觉是,它们能够捕获更多有关文本的信息,并产生比单向量密集表示更好的结果,ColBERT 等模型还提供预先计算文档嵌入的能力,从而实现非常高效的检索。密集表示还能够捕获文本的语义,并且经常用于第二阶段排名。
推荐阅读:
稀疏文本表示是信息检索中最古老的向量空间模型形式,它们通常基于 TF-IDF 导数和 BM25 等算法,并且仍然是文本检索系统的基线。它们的稀疏性源于嵌入的维度通常与词汇量的大小相对应。稀疏表示背后的直觉是它们是可解释的、计算效率高、易于实现并且对于索引和检索极其高效。稀疏表示也注重词汇相似性,常用于第一阶段排名。
推荐阅读:
稀疏文本嵌入允许在检索期间使用倒排索引。
推荐阅读:
用于对嵌入模型的性能进行基准测试的指标包括:
推荐阅读和观看:
选择嵌入模型可能是检索系统性能的关键因素,选择时应仔细考虑。这是一个涉及实验的广泛过程,以下资源将帮助您做出明智的决定:
推荐观看:
矢量数据库是针对存储和查询矢量数据进行优化的数据库。它允许有效存储和检索向量嵌入,并且通常用于需要语义相似性搜索的应用程序。矢量数据库是一种新范式,作为满足 GenAI 应用需求所需的技术堆栈的一部分而出现。
推荐观看:
传统数据库针对存储和查询结构化数据(例如文本、数字和日期)进行了优化。它们并不是为有效处理矢量数据而设计的。另一方面,矢量数据库是专门为存储和查询矢量数据而设计的。他们使用专门的索引技术和算法来实现快速准确的相似性搜索,例如向量的量化和聚类。
向量数据库通常包含向量的索引,这些索引包含向量嵌入的矩阵,通常还使用图数据结构,以可以有效查询的方式排序。进行查询时,提供文本或向量嵌入作为输入,在文本的情况下,它被嵌入,并且向量数据库将查询适当的索引以基于距离度量检索最相似的向量。通常,使用余弦相似度、点积或欧几里得距离等指标来比较向量。向量还涉及元数据字典,其中可能包含文档 ID、文档标题、相应文本等信息。
矢量数据库中的搜索策略包括:
推荐阅读:
一旦向量被索引,它们通常会被聚类以减少搜索空间,这样做是为了减少搜索过程中需要比较的向量的数量。聚类是通过将相似的向量分组在一起,然后对聚类进行索引来完成的。进行查询时,首先在簇级别执行搜索,然后在簇内的向量级别执行搜索。 K-means 等算法经常用于聚类。
推荐阅读:
这显然是一个非常沉重的问题,但这里有一些资源可以进一步探讨这个主题:
Vector quantization, also called "block quantization" or "pattern matching quantization" is often used in lossy data compression. It works by encoding values from a multidimensional vector space into a finite set of values from a discrete subspace of lower dimension.
参考:矢量量化
One general approach to LSH is to “hash” items several times, in such a way that similar items are more likely to be hashed to the same bucket than dissimilar items are.
参考:海量数据集挖掘,第3版,第3章,第3.4.1节
推荐阅读:
In short, PQ is the process of:
- Taking a big, high-dimensional vector,
- Splitting it into equally sized chunks — our subvectors,
- Assigning each of these subvectors to its nearest centroid (also called reproduction/reconstruction values),
- Replacing these centroid values with unique IDs — each ID represents a centroid
参考:乘积量化
推荐阅读:
The Inverted File Index (IVF) index consists of search scope reduction through clustering.
参考:倒排文件索引
推荐阅读:
层次可导航的小世界(HNSW)通常被认为是矢量检索中最新的,它是一种基于图的算法,它构建了向量的图形,并使用它来执行近似的最近邻居搜索。
推荐阅读:
矢量检索中使用的距离和相似性指标包括:
建议查看:
这是一个非常活跃的研究主题,没有权威来源,但是这里有一些资源可以进一步探索该主题:
还值得注意的是,在信息检索,推荐系统和搜索引擎的领域中,搜索,检索和重新管理系统建立在既定的模式和架构上。
您可能需要探索的某些系统体系结构包括:
在大规模系统中实现良好的搜索涉及有效的索引,检索和排名技术的结合。在大规模系统中实现良好搜索的一些策略包括:
您可能会注意到整个过程是在复杂性增加的阶段完成的,这被称为分阶段排名或多阶段检索。
推荐阅读:
但是,在大规模系统中实现良好搜索的最重要方面是尝试并迭代您的检索和排名策略,并不断监视和评估系统的性能。
推荐阅读:
推荐的关于改善搜索,检索和抹布系统的讨论:
实现快速搜索涉及优化索引和检索过程,这需要非平凡的工程工作,以下是搜索和检索优化领域当前景观的一些示例:
当前的矢量检索中的最新状态表明多向量嵌入(晚相互作用)的性能优于单个矢量嵌入,但是,优化其检索构成了重大的工程挑战,以下讨论了多矢量嵌入及其深入的检索:
BM25 is a bag-of-words retrieval function that ranks a set of documents based on the query terms appearing in each document, regardless of their proximity within the document.
参考:BM25
重读模型是序列分类模型,训练有素,可以进行一对查询和文档,并输出原始类似分数。
推荐阅读,观看和观看:
评估抹布系统需要尝试并评估系统的各个组件,例如猎犬,发电机和reranker。
推荐阅读:
注意:从这里开始,我将避免尽可能多地回答,并且只需链接论文和参考,这部分可以说是更复杂的部分之一,因此它需要大量的阅读和理解。
要了解注意力,您需要熟悉变压器架构及其前身体系结构。这里有一些可以让您入门的资源:
自我注意的主要瓶颈是相对于序列长度的二次复杂性。要了解自我注意力的缺点,您需要熟悉注意替代方案,以下内容将帮助您入门:
有多种方法可以在LLMS中编码位置信息,最常见的方法是使用正弦位置编码,称为绝对位置编码。其他方法包括相对位置编码和较新的方法,例如旋转位置嵌入。这里有一些可以让您入门的资源:
要了解KV缓存,您需要熟悉变压器体系结构及其局限性。
推荐阅读:
专家的混合是LLMS中的一种体系结构,要了解其工作原理,您应该浏览以下资源,这些资源涵盖了最杰出的MOE模型: