第一节:问答系统的搭建与 IO
事实上,所有的以 LLM 为基础的软件都需要经历这样的过程,我们需要让我们的 LLM 程序接收到数据源,数据源不仅包括了代码和以SQL为代表的结构化数据,而且需要让处理非结构化的数据。然后,我们需要以大模型为逻辑引擎,生成我们需要的回复。最后,我们可以将大模型嵌入到实际的软件项目中,构建出聊天系统或者机器人系统。
如果细分的话,问答系统 LangChain 为我们实现了以下五个步骤:
Loading:使用文档加载器加载文档,使其能被读取 Splitting:使用文本分割器把文档切分为指定大小的分割,有助于实现嵌入和向量存储 Storage:“文档块”以“嵌入”(Embedding)的形式存储到向量数据库(Vector DB)中,形成一个个的“嵌入片”。
名词解析:嵌入
简单地说,词嵌入就是一个为每个词分配的数字列表。这些数字不是随机的,而是捕获了这个词的含义和它在文本中的上下文。因此,语义上相似或相关的词在这个数字空间中会比较接近。比如说,国王和皇帝的向量差距明显大于国王和香蕉。
名词解析:向量数据库
向量数据库是一种专门用于存储和检索向量数据的数据库系统。在计算机科学中,向量通常指的是具有一定维度的数值数组,这些数组可以表示各种类型的数据,比如图像、文本、音频等的特征向量。向量数据库的主要特点和用途包括:
高维数据存储、相似性搜索、向量空间模型、索引结构、并行处理和分布式存储、被广泛的应用于机器学习和深度学习,具有较强的实时性。
- Retrieval:应用程序从存储中检索分割后的文档。
- Output:把问题和相似的嵌入片传递给语言模型(LLM),使用包含问题和检索到的分割的提示生成答案。
第二节:提示工程(prompt)
- 指令:类似于计算机组成原理中提示 CPU 的指令集, 大模型的指令可以告诉模型这个任务大概要做什么、怎么做,比如如何使用提供的外部信息、如何处理查询以及如何构造输出。
举个例子:在开发面试助理时,开发者会使用以下的 prompt 提醒大模型:“你是一个具有 XX 年开发经验的 XX 工程师,现在你即将作为一个面试官与应届毕业生进行问答交流,你应当结合问题听取该毕业生的回答,给出有效的评价并进行合理追问。”
- 上下文(Context)则充当模型的额外知识来源。这些信息可以手动插入到提示中,通过矢量数据库检索得来,或通过其他方式(如调用API、计算器等工具)拉入。
对于开发者来说,常见的上下文工具有两种,一种是使用编程语言自带的数学工具来弥补大模型的不足,另外一种是使用 API 外接网络服务,用于处理上下文信息。
- 提示输入(Prompt Input)既可以与指令合而为一,也可以单独拆出来便于开发者使用。笔者此前开发LLM的重心会放在提示输入的模板设计上。
- 输出指示器(Output Indicator)在LangChain中的代理在构建提示模板时,经常性的会用一个“Thought:”(思考)作为引导词,指示模型开始输出自己的推理(Reasoning)。
三种样本的对比:
Zero-shot 零样本学习,通俗易懂的话讲叫做顿悟
One-shot 单样本学习,通俗易懂的话讲叫做举一反三
Few-shot 少样本学习,是单样本学习的进阶版
在机器学习中,如何让机器学习模型在极少量甚至没有示例的情况下学习到新的概念或类别,对于许多现实世界的问题是非常有价值的,因为我们往往无法获取到大量的标签化数据。
笔者曾经阅读了机器学习排课的相关文章,其中有一个难点问题就是排课的一手全数据不对外共享,从所有学生那里获取排课样本的成本又过大。此时,少样本学习在这个课题的研究中就非常有意义了。
参考论文:Language Models are Few-Shot Learners
论文摘要(精简版):近期的工作强调预学习在 NLP 中的重要作用。但是这种方法仍然需要成千上万条数据去训练机器模型。与之相对应的是,人类只需要很少的样例就可以完成即使给大模型足量的数据都无法完成的简单的指令。在本篇文章中,研究者由浅入深地证明了 GPT-3 模型与传统模型不同的点 —— Few-Shot Learners,并且为未来 GPT-3 的边界界定打下基础。
第三节:小专题(思维链 COT Chain of Thought)
思维链在具体应用中指的是,如果开发者在使用 LLM 模型时能更详细地把推理步骤说明出来,那么 LLM 模型回复的准确率将会大幅度提高。
如果以Marscode AI为例子,那么 Chain of Thought 就是在训练 AI 刷题助手的追问之前添加一步 —— 看看老师是如何根据学生的代码进行修改的的。
Zero-Shot:请你根据这一段代码出追问。
One-Shot:《代码随想录》这一本书中指出了回溯算法的模板如下所示。我结合了书目的内容将代码补充完整了,但是发现了XXX问题,请问你能结合问题进行纠正吗?