提示词工程: 大语言模型的Embedding(嵌入和Fine-tuning(微调)

发布时间:2024年01月19日

本文是针对这篇文章(https://www.promptengineering.org/master-prompt-engineering-llm-embedding-and-fine-tuning/)的中文翻译,用以详细介绍Embedding(语义嵌入)和Fine Tuning(微调)的概念和比较。

LLM(GPT-3/3.5/4)已经成为一个热门的讨论话题,因为人们寻求利用这种先进的语言模型来实现各种应用,如问答(QA)和信息检索。虽然语义嵌入和微调都是用来适应特定任务的LLM技术,但它们有不同的目的和优势。我们将一起探讨这两个概念,因为它们是相关的,而且经常有关于何时使用哪种技术的困惑。

语义嵌入:表示和应用

语义嵌入是文本的数值向量表示,能够捕捉单词或短语的语义含义。通过比较和分析这些向量,可以辨别文本元素之间的相似性和差异性。利用语义嵌入进行搜索可以快速有效地检索相关信息,特别是在大型数据集中。语义搜索相比微调有几个优势,如更快的搜索速度、降低计算成本以及防止杜撰或事实捏造。由于这些优势,当目标是访问模型中的特定知识时,语义搜索通常是首选。嵌入在各个领域都有应用,包括推荐引擎、搜索功能和文本分类。例如,在为一个流媒体平台设计一个电影推荐引擎时,嵌入可以根据它们的文本描述来识别具有相似主题或类型的电影。通过将这些描述表示为向量,引擎可以计算它们之间的距离,并推荐向量空间中距离较近的电影,确保更准确和相关的用户体验。

微调:提高模型响应

微调是一种用来改善预训练模型性能的技术,如聊天机器人。通过提供示例并调整模型参数,微调使模型能够为特定任务生成更准确和上下文相关的响应。这些任务可以从聊天机器人对话和代码生成到问题形成等不同范围,确保与期望输出更好地对齐。这个过程类似于神经网络在训练过程中调整其权重。例如,在客服聊天机器人中,微调可以提高聊天机器人对行业特定术语或行话的理解,从而更准确和恰当地回答客户询问。作为一种迁移学习形式,微调使预训练模型能够执行新任务,而无需进行大量的重新训练。

LLM嵌入和向量搜索的概述:

嵌入过程是大型语言模型(LLM)如GPT-3/Gpt-3.5/GPT-4的一个重要组成部分,因为它允许以数值格式对文本进行语义理解和表示。以下是LLM嵌入过程的逐步概述的内容:

  • 首先,LLM接收一个文本输入,如一个单词或一个句子,并将其分割成一系列的标记(tokens)。标记是文本的最小单位,通常是单个字符或子词。例如,单词“prompt”可以被分割成两个标记:“prom”和“pt”。

  • 然后,LLM将每个标记映射到一个嵌入矩阵中的一个向量。嵌入矩阵是一个包含数千个向量的大型表格,每个向量代表一个标记。这些向量的维度通常为768或1024,取决于LLM的大小。例如,“prom”和“pt”的向量可能分别为[0.2, -0.1, 0.3, …]和[-0.4, 0.5, -0.2, …]。

  • 接下来,LLM将这些向量相加,得到一个表示整个文本输入的单个向量。这个向量被称为语义嵌入(semantic embedding),因为它捕捉了文本的语义信息。例如,“prompt”的嵌入可能是[0.2, -0.1, 0.3, …] + [-0.4, 0.5, -0.2, …] = [-0.2, 0.4, 0.1, …]。

  • 最后,LLM使用这个嵌入向量作为输入,通过一系列的神经网络层来生成输出。输出可以是文本、图像或其他类型的数据,取决于LLM的目标。例如,如果LLM的目标是生成一个与“prompt”相关的句子,它可能会输出“Prompt engineering is a skill that involves crafting text-based prompts for AI systems.”。

使用向量搜索进行语义检索:

当我们想要从LLM中检索特定的知识时,我们可以利用向量搜索(vector search)技术。向量搜索是一种基于语义嵌入进行信息检索的方法,它可以在大型数据集中快速找到最相关的结果。以下是使用向量搜索进行语义检索的步骤:

  • 首先,我们需要准备一个包含我们想要检索的知识的数据集。数据集可以是任何类型的文本数据,如文章、书籍、百科全书等。例如,如果我们想要从维基百科中检索关于太阳系行星的知识,我们可以使用维基百科文章作为数据集。

  • 然后,我们需要对数据集中的每个文本元素(如标题、段落或句子)进行嵌入,并将它们存储在一个索引中。索引是一个包含所有嵌入向量及其对应文本元素的数据库。例如,如果我们对维基百科文章中的每个标题进行嵌入,并将它们存储在一个索引中,我们可能会得到类似于以下内容的结果:

嵌入向量标题
[0.1, -0.2, 0.3, …]太阳
[-0.4, 0.5, -0.1, …]地球
[0.2, -0.3, 0.4, …]火星
  • 接下来,我们需要提供一个查询(query),即我们想要检索的知识的描述。查询可以是一个单词、一个短语或一个问题。例如,如果我们想要知道太阳系中哪个行星最大,我们可以提供以下查询:“太阳系中最大的行星是什么?”

  • 然后,我们需要对查询进行嵌入,并将其与索引中的嵌入向量进行比较。我们可以使用不同的度量来比较向量之间的相似性,如余弦相似度(cosine similarity)或欧几里得距离(Euclidean distance)。一般来说,相似度越高或距离越小,表示向量之间的语义关系越强。例如,如果我们对查询“太阳系中最大的行星是什么?”进行嵌入,并将其与索引中的嵌入向量进行比较,我们可能会得到类似于以下内容的结果:

嵌入向量标题相似度
[0.1, -0.2, 0.3, …]太阳0.4
[-0.4, 0.5, -0.1, …]地球0.2
[0.2, -0.3, 0.4, …]火星0.3
[0.3, -0.4, 0.5, …]木星0.8
  • 最后,我们需要从索引中返回与查询最相似的文本元素,即最相关的结果。我们可以根据相似度或距离对结果进行排序,并选择前几个或一个作为答案。例如,如果我们根据相似度对结果进行排序,并选择最相似的一个作为答案,我们可能会得到以下答案:“太阳系中最大的行星是木星。”

微调LLM:方法和应用

微调LLM是一种用来改善预训练模型性能的技术,它可以使模型更好地适应特定的任务或领域。微调的过程涉及提供一些示例数据,以及调整模型的参数,如学习率、批次大小或优化器。通过微调,模型可以学习到与示例数据相关的特征和规律,从而生成更准确和上下文相关的响应。以下是微调LLM的步骤:

  • 首先,我们需要选择一个预训练的LLM,如GPT-3/Gpt-3.5/GPT-4。预训练的LLM是一个已经在大量的通用文本数据上进行过训练的模型,它具有强大的语言理解和生成能力。我们可以根据我们的目标和需求来选择不同的LLM版本,如大小、速度或精度。

  • 然后,我们需要准备一些示例数据,即一些与我们想要执行的任务相关的输入和输出对。示例数据可以是任何类型的文本数据,如对话、代码、问题等。例如,如果我们想要微调一个能够生成编程问题的LLM,我们可以准备一些类似于以下内容的示例数据:

输入输出
Write a function in Python that takes a list of numbers and returns the sum of the squares of the numbers.def sum_of_squares(numbers):<br> total = 0<br> for n in numbers:<br> total += n**2<br> return total
Write a function in Java that takes a string and reverses it.public static String reverseString(String s) {<br> StringBuilder sb = new StringBuilder();<br> for (int i = s.length() - 1; i >= 0; i–) {<br> sb.append(s.charAt(i));<br> }<br> return sb.toString();<br>}
  • 接下来,我们需要将示例数据分成训练集、验证集和测试集。训练集是用来训练模型的数据,验证集是用来评估模型性能并调整参数的数据,测试集是用来在最后测试模型效果的数据。一般来说,我们可以按照80/10/10或70/15/15的比例来划分数据集。

  • 然后,我们需要使用训练集来微调模型。微调的过程涉及将输入传递给模型,并与输出进行比较。如果输出与期望不符,模型会根据误差反向传播算法来调整其内部参数,以减少误差。这个过程会在训练集上重复多次,直到模型达到一个合理的性能水平。

  • 接下来,我们需要使用验证集来评估模型性能,并根据需要调整参数。评估模型性能的方法可以根据不同的任务而不同,如准确率、召回率或F1分数等。根据评估结果,我们可以调整一些影响模型学习速度和稳定性的参数,如学习率、批次大小或优化器等。

  • 最后,我们需要使用测试集来测试模型效果,并检查是否存在过拟合或欠拟合等问题。过拟合是指模型在训练集上表现很好,但在新数据上表现很差的情况。欠拟合是指模型在训练集和新数据上都表现不佳的情况。如果存在这些问题,我们可以采取一些措施来解决,如增加或减少数据量、增加或减少模型复杂度、添加或删除正则化等。

微调LLM的应用:

微调LLM可以用于各种类型的任务,如聊天机器人、代码生成、摘要生成等。以下是一些微调LLM的应用示例:

  • 聊天机器人:我们可以微调一个LLM来创建一个能够与用户进行自然和有趣的对话的聊天机器人。我们可以提供一些与我们想要的聊天风格和主题相关的对话示例,如幽默、友好或专业等。例如,如果我们想要微调一个能够提供旅游建议的聊天机器人,我们可以提供一些类似于以下内容的对话示例:

输入输出
Hi, I’m looking for a place to visit in Europe.Hi, welcome to TravelBot. I’m here to help you find your ideal destination in Europe. What kind of place are you interested in?
I like historical and cultural sites.I see. In that case, you might want to consider visiting Rome, Paris, or Athens. They are all rich in history and culture, and have many attractions to offer.
  • 代码生成:我们可以微调一个LLM来创建一个能够根据自然语言描述生成代码的工具。我们可以提供一些包含不同编程语言和任务的代码示例,如Python、Java或C++等。例如,如果我们想要微调一个能够根据自然语言描述生成Python代码的工具,我们可以提供一些类似于以下内容的代码示例:

输入输出
Write a function in Python that takes a list of numbers and returns the sum of the squares of the numbers.def sum_of_squares(numbers):<br> total = 0<br> for n in numbers:<br> total += n**2<br> return total
Write a function in Python that takes a string and reverses it.def reverse_string(s):<br> return s[::-1]
  • 摘要生成:我们可以微调一个LLM来创建一个能够根据长文本生成简短摘要的工具。我们可以提供一些包含不同类型和领域的文本和摘要示例,如新闻、科学或文学等。例如,如果我们想要微调一个能够根据新闻文章生成摘要的工具,我们可以提供一些类似于以下内容的文本和摘要示例:

输入输出
Scientists in South Korea have managed to sustain a nuclear fusion reaction running at temperatures in excess of 100 million°C for 30 seconds for the first time. The experiment was conducted at the Korea Superconducting Tokamak Advanced Research (KSTAR) facility, which aims to replicate the fusion process that powers the Sun. Nuclear fusion is considered a potential source of clean and unlimited energy, but it is extremely difficult to achieve and maintain. The KSTAR team said their achievement was a major step towards the development of fusion reactors.South Korean scientists achieve nuclear fusion milestone by running a reaction at over 100 million°C for 30 seconds.

总结和结论:掌握LLM嵌入和微调

LLM嵌入和微调是两种用来适应特定任务的LLM技术,它们有不同的目的和优势。语义嵌入是文本的数值向量表示,能够捕捉语义信息。利用语义嵌入进行搜索可以快速有效地检索相关信息,特别是在大型数据集中。语义搜索通常在目标是访问模型中的特定知识时被首选。微调是一种用来改善预训练模型性能的技术,能够使模型更好地适应特定的任务或领域。通过提供示例数据并调整模型参数,微调可以使模型生成更准确和上下文相关的响应。微调通常在目标是生成特定类型或格式的输出时被首选。

通过掌握LLM嵌入和微调,我们可以充分利用LLM的强大能力,为各种应用创建高质量的解决方案。无论是聊天机器人、代码生成、摘要生成,还是其他类型的任务,我们都可以通过选择合适的技术来优化我们的模型和输出。LLM嵌入和微调是LLM工程师的重要技能,值得我们深入学习和实践。

往期精彩内容(直接点击阅读):

解读网信办发布的《生成式人工智能服务管理暂行办法》

AIGC在农业领域的创新应用

ChatGPT最强竞品Claude2来了:代码、GRE成绩超越GPT-4,免费可用

AI炒股回报超500%?ChatGPT能否成为韭菜们的最强股市“外挂”?

两天百万关注,北大法律大模型ChatLaw火了:直接告诉你张三怎么判

如何用AIGC技术讲好中医药文化故事

如何用AI帮助撰写应急预案

AIGC技术在文旅领域的应用

基辛格:ChatGPT预示着一场智能革命,而人类还没准备好

AIGC在心理咨询领域的应用

AI虚拟人如何助力中医药文化传播

AutoGPT太火了,无需人类插手自主完成任务,大步迈向自主人工智能时代

盘点全球提供法律机器人的公司

李彦宏:大模型即将改变世界(全文及完整PPT)

从本质看ChatGPT:当知识、人性、价值观皆可训练时,AI是什么?

欢迎关注“AI演进”并加入AI演进社群

文章来源:https://blog.csdn.net/simoncool23/article/details/135671197
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。