• 发文
  • 评论
  • 微博
  • 空间
  • 微信

微调、再训练及其他:通过自定义LLM取得进步

磐创AI 2024-04-02 16:48 发文

介绍

很确定你们大多数人已经使用过 ChatGPT 。太好了,因为你已经迈出了我们即将踏上的旅程的第一步!你看,当谈到掌握任何新技术时,你要做的第一件事就是使用它。这就像学习游泳的第一步是跳入水中一样。

你可能听说过模型消费者、调优者和构建者(consumers, tuners, and builders)。但请稍等,我们将进一步分解它。

麦肯锡将其视为他们在 GenAI Recognize 会议中提到的接受者、塑造者和创造者( takers, shapers, and makers)。

目录

平台激增

Linux、Windows、Mac 命令

对最终用户和应用程序开发人员的价值

参考架构和技术

参考技术

从语义内核插件配置 config.json

如何利用Prompt工程?

系统消息

一些少样本提示和示例

如何管理AI编排?

微调LLM模型

构建自定义LLM

再训练LLM模型

从头开始训练

全新模型

常见问题

平台激增

为了更深入地了解这一点,我们将转向一个现实生活中的例子,它将使一切变得清晰明了。在当今的科技环境中,大多数应用程序都需要在多个平台上工作,这是理所当然的。然而,问题是:每个平台都有其独特的界面和特性。将应用程序的支持扩展到其他平台并维护这样的多平台应用程序同样具有挑战性。

但这正是 GenAI 出手的地方。它使我们能够为我们的应用程序创建一个统一且用户友好的界面,无论它们面向什么平台。神奇的成分是什么?大型语言模型(LLM)将此界面转换为自然直观的语言。

Linux、Windows、Mac 命令

为了使其更具体以便更好地理解,假设我们想知道在我们的计算机(可以是 Linux、Windows 或 Mac)上的不同场景中运行什么确切命令。下图说明了一种场景:

对最终用户和应用程序开发人员的价值

作为最终用户,你不必学习/了解每个平台的命令,并且可以自然直观地完成你的工作。作为应用程序的开发人员,你不必将每个面向用户的应用程序界面显式转换为每个底层支持的平台。

参考架构和技术

包括 GPT3、GPT3.5 和 GPT4 在内的多个 LLM 驻留在云中,由 Open AI 和 Azure Open AI 等各种提供商提供。它们可以通过各种 API(例如完成、聊天完成等)轻松访问。

人工智能协调器使跨模型和提供商的访问更加无缝和统一。这就是现在 GenAI 应用程序通常与 AI 协调器交互,而不是直接与底层提供者和模型交互的原因。然后,它根据应用程序的需要,使用可配置和/或可能多个底层提供程序和模型来处理编排。

你可以为你的应用程序想要支持的每个平台提供一个插件,以实现灵活性和模块化。我们将在接下来的部分中深入探讨我们可以使用这些插件和编排器执行的所有操作。

最后,应用程序具有与其想要支持的平台进行交互的连接器,以执行 GenAI 生成的命令。

参考技术

AI编排器: LangChain、语义内核

云模型: Azure Open AI

从语义内核插件配置 config.json

配置本身有很多可以调整以达到所需的结果。这是来自语义内核插件的典型 config.json:

 "schema": 1,

 "description": "My Application",

 "type": "completion",

 "completion": {

   "max_tokens": 300,

   "temperature": 0.0,

   "top_p": 0.0,

   "presence_penalty": 0.0,

   "frequency_penalty": 0.0,

   "stop_sequences": [

       "++++++"

   ]

 },

 "input": {

   "parameters": [

     {

       "name": "input",

       "description": "Command Execution Scenario",

       "defaultValue": ""

     }

   ]

 }

“type”指定你想要在底层 LLM 上执行的 API 类型。这里我们使用“completion”API。

“temperature”决定了模型的可变性或创造性。例如,当你聊天时,你可能希望人工智能在不同时间用不同的短语进行响应,尽管它们都可能传达相同的意图以保持对话的吸引力。然而,在这里我们总是想要相同的精确答案。因此,我们使用值 0。

如果你只想将第一个部分(如本例中的完全匹配命令)作为响应输出,则你的结果可能由带有一些预定义分隔符的不同部分组成,你可以使用这里的“stop_sequences”。你可以使用所有参数定义输入,在本例中仅定义一个参数。

如何利用 Prompt 工程?

现在让我们深入探讨有关 Prompt 工程以及如何利用它的话题。

系统消息

系统消息告诉模型我们希望它的行为到底如何。例如,在我们的例子中,Linux bash 插件的 skprompt.txt 开头可能有类似以下内容

You are a helpful assistant that generates commands for Linux bash machines based on user input. Your response should contain ONLY the command and NO explanation. For all the user input, you will only generate a response considering the Linux bash commands to find its solution.

一些少样本提示和示例

如果你给模型提供一些你正在寻找的问题示例和相应答案,它可以帮助模型给出准确的答案。也称为少样本提示。例如,我们的 Linux bash 插件在其 skprompt.txt 中可能会在上述系统消息之后包含类似以下内容:

例子

User: Get my IP

Assistant: curl ifconfig.me

++++++

User: Get the weather in San Francisco

Assistant: curl wttr.in/SanFrancisco

++++++

User:"{{$input}}"

Assistant:

你可能需要调整你的系统以选择你想要的结果的正确示例。

如何管理AI编排?

我们将在我们的简单示例中将此配置和 prompt 工程组合在一起,并了解如何在语义内核中管理 AI 编排。

import openai

import os

import argparse

import semantic_kernel as sk

from semantic_kernel.connectors.ai.open_ai import AzureTextCompletion

parser = argparse.ArgumentParser(description='GANC')

parser.add_argument('platform', type=str,

                   help='A platform needs to be specified')

parser.add_argument('--verbose', action='store_true',

                   help='is verbose')

args = parser.parse_args()

kernel = sk.Kernel()

deployment, api_key, endpoint = sk.azure_openai_settings_from_dot_env()

kernel.add_text_completion_service("dv", AzureTextCompletion(deployment, endpoint, api_key))

platformFunctions = kernel.import_semantic_skill_from_directory("./", "platform_commands")

platformFunction = platformFunctions[args.platform]

user_query = input()

response = platformFunction(user_query)

print (respone)

此 Python 脚本将“platform”作为必需参数。它从文件夹“platform_commands”中为指定平台选取正确的插件。然后它接受用户查询,调用函数并返回响应。

对于你的前几个用例,你可能只想进行实验直到这里,因为LLMs已经拥有很多智能。仅靠这种简单的配置和快速的工程设计就可以提供非常接近你期望的行为的结果,而且速度非常快。

以下技术目前相当先进,需要更多的努力和知识,应在权衡投资回报时采用。该领域的技术仍在不断发展和成熟。在这个时候,我们只会粗略地看一下它们,以了解它们的完整性和我们对未来的认识。

微调LLM模型

微调涉及更新新任务和数据集上预训练语言模型的权重。它通常用于迁移学习、定制和领域专业化。有多种工具和技术可用于此目的。一种方法是使用 OpenAI 的 CLI 工具。你可以为其提供数据并生成训练数据,以便使用以下命令进行微调:

openai tools fine_tunes.prepare_data -f <LOCAL_FILE>

然后,你可以使用 Azure AI Studio 创建自定义模型:

提供你之前准备的微调数据。

构建自定义LLM

如果你有足够的勇气进行更深入的研究并进行进一步的实验,请继续阅读!我们将研究如何构建我们的自定义模型。

再训练LLM模型

这与我们之前看到的微调非常相似。以下是我们如何使用 Transformer 来做到这一点:

from transformers import AutoTokenizer

# Prepare your data

tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")

def tokenize_function(examples):

   return tokenizer(examples["text"], padding="max_length", truncation=True)

# let's say my dataset is loaded into my_dataset

tokenized_datasets = my_dataset.map(tokenize_function, batched=True)

# load your model

from transformers import AutoModelForSequenceClassification

model = AutoModelForSequenceClassification.from_pretrained("bert-base-cased", num_labels=5)

# Train

from transformers import TrainingArguments, Trainer

training_args = TrainingArguments(output_dir="mydir")

trainer.train()

# save your model which can be loaded by pointing to the saved directory and used later

trainer.save_model()

从头开始训练

在这里,你可以从一些已知的模型结构开始,并从头开始训练它们。尽管构建的模型完全在你的控制之下,但这将需要大量的时间、资源和训练数据。

全新模型

你可以定义模型结构,可能会改进现有模型,然后按照上述过程进行操作。亚马逊的 Titan 和 Codewhisperer 就属于这一类。

结论

GenAI在不同的用例中具有巨大的潜力。本文举例说明了它在多平台支持和快速解决方案构建中的应用。尽管人们对GenAI持怀疑态度,但利用其力量的途径是明确的。然而,当深入研究模型调整和训练时,这段旅程变得复杂起来。

要点:

正如你所看到的,GenAI 非常令人着迷,并且支持多种用例。

我们看到了一个这样的用例,并研究了如何快速开始构建解决方案。

有些人怀疑 GenAI 是否只是一个泡沫。你可以选择你最喜欢的用例,并按照本文中列出的步骤亲自尝试来回答这个问题!

当你开始进入模型调整、训练和构建等领域时,这个过程可能会很快变得复杂且费力。

常见问题

Q1. GenAI 是泡沫吗?

答:我不这么认为。你可以选择你最喜欢的用例,并按照本文中列出的步骤亲自尝试来回答这个问题!

Q2. 什么是生成式 AI 架构堆栈?

答:有最终用户、模型消费者、模型调整者和模型构建者。

Q3. 生成式人工智能的三个组成部分是什么?

答:LLMs、提供商和人工智能协调者。

Q4. 生成式人工智能的基础设施层是什么?

答:GPU、TPU 和云托管服务,例如 Open AI、Azure Open AI 等。

声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    磐创AI

    人工智能前沿技术分享。...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码