细致调整、再培训和超越:个性化硕士法学(LLMs)的突破

个性定制:个性化硕士法学(LLMs)的全新突破

介绍

我相信你们大多数人已经使用过ChatGPT。这太棒了,因为你们已经迈出了在本文中即将踏上的旅程的第一步!你看,对于掌握任何新技术,你首先要做的事情就是使用它。这就像跳入水中学习游泳一样!🏊‍♂️

如果你想探索GenAI,就选择一个真实的问题并开始构建一个解决方案的应用程序。在所有GenAI的事物中,核心是一个大型语言模型(LLM),一些人称之为基础模型(FM)。

你可能听说过模型的使用者、调节者和构建者。但等一下,我们马上就要更详细地介绍它。

麦肯锡将其称为接受者、塑造者和创造者,他们在他们的GenAI认知课程中提到过。

在本文中,我们将更详细地研究每个层次。

平台扩散作为一个用例

为了更深入地探讨这个问题,我们将转向一个现实生活中的例子,这将使一切变得清晰明了。在当今的技术领域中,大多数应用程序需要在多个平台上运行是一种常态。然而,问题在于:每个平台都具有独特的界面和特点。对于支持额外平台的应用程序扩展和维护这样的多平台应用程序同样具有挑战性。

但这正是GenAI的用武之地。它赋予我们创建一个统一且用户友好的界面,无论这些应用程序面向哪些平台。魔法的成分是什么呢?大型语言模型(LLMs)将这个界面转化为自然和直观的语言。

Linux、Windows、Mac的命令

为了使其更具体,以便更好地理解,假设我们想要知道在我们的机器上针对不同情况运行的确切命令,这些情况可以是Linux、Windows或Mac。以下图表说明了一个情景:

对终端用户和应用程序开发者的价值

作为终端用户,你不必学习或了解每个平台的命令,可以自然而直观地完成你的任务。作为应用程序的开发者,你不必明确地将每个用户界面与支持的底层平台翻译成每个用户界面。

参考架构

包括GPT3、GPT3.5和GPT4在内的几个LLMs属于云端,由Open AI和Azure Open AI等各种供应商提供支持。它们通过完成、聊天完成等各种API变得容易访问。

AI编排器使得在模型和供应商之间的访问更加无缝和统一。这就是为什么现在的GenAI应用程序通常通过与AI编排器进行交互,而不是直接与底层供应商和模型进行交互。然后它根据应用程序的需求处理配置和/或可能的多个底层供应商和模型。

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

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

参考技术

  • AI编排器:LangChain,语义核心
  • 云端模型:Azure Open AI

配置

在配置本身中,有许多可以调整以实现预期结果的内容。这是一个来自语义核心插件的典型配置:

{  "schema": 1,  "description": "我的应用程序",  "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": "命令执行场景",        "defaultValue": ""      }    ]  }}

“type”指定您要在底层LLM上执行的API类型。在这里,我们正在使用“completion” API。 “temperature”确定模型的变化性或创造性。例如,在聊天过程中,您可能希望AI在不同时间以不同短语作出回应,尽管它们都可能传达相同的意图,以保持对话的吸引力。但在这种情况下,我们始终希望得到相同准确的答案。因此,我们使用0的值。您的结果可能包含不同的部分,并且使用一些预定义的分隔符。如果您只想将第一个部分作为响应输出,就像在我们的情况中的精确匹配命令一样,您可以使用“stop_sequences”进行输出。您可以仅使用此案例中的一个参数定义输入。

提示工程

现在让我们深入讨论备受关注的提示工程以及如何利用它。

系统消息

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

您是一个根据用户输入为Linux bash机器生成命令的有用助手。您的回应应只包含命令,不包含解释。对于所有用户输入,你将只生成一个考虑Linux bash命令的解决方案的回应。

这指定了其系统消息。

少量示例和示例

如果您提供一些问题和相应答案的示例,它将帮助模型给出准确答案。这也被称为少量示例提示。例如,我们的Linux bash插件可能在其skprompt.txt中跟随上述系统消息提到的示例中有以下内容:

示例

User: 获取我的IPAssistant: curl ifconfig.me++++++User: 获取旧金山的天气Assistant: curl wttr.in/SanFrancisco++++++User:"{{$input}}"Assistant:

您可能需要调整系统以选择您想要的正确示例/短片。

AI编排

我们将在我们的简单示例中将此配置和提示工程组合起来,看看如何在语义核心中管理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 (response)

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

对于您的前几个用例,您可能希望仅对此有所尝试,因为LLM已经具有很多智能。这种简单的配置和提示工程单独就可以提供非常接近您所期望的行为的结果,而且速度非常快。

以下技术当前相对较高级,需要更多的努力和知识,并且应根据投资回报进行选择。这项技术在此领域仍在不断发展和成熟。此时,为了完整性和我们对未来前景的了解,我们只对它们进行了大致了解。

微调

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

openai tools fine_tunes.prepare_data -f <LOCAL_FILE>

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

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

自定义LLMs

如果您足够勇敢并且想深入探索和进一步实验,请继续阅读!我们将了解如何构建自定义模型。

重新训练

这与前面所见的微调非常相似。下面是使用transformers进行重新训练的方法:

from transformers import AutoTokenizer# 准备您的数据tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")def tokenize_function(examples):    return tokenizer(examples["text"], padding="max_length", truncation=True)# 假设我的数据集已加载到my_datasettokenized_datasets = my_dataset.map(tokenize_function, batched=True)# 加载您的模型from transformers import AutoModelForSequenceClassificationmodel = AutoModelForSequenceClassification.from_pretrained("bert-base-cased", num_labels=5)# 训练from transformers import TrainingArguments, Trainertraining_args = TrainingArguments(output_dir="mydir")trainer.train()# 保存模型,以后可以通过指向保存的目录进行加载和使用trainer.save_model()

从头开始训练

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

全新模型

您可以定义自己的模型结构,潜在地改进现有模型,然后按照上面的过程进行操作。亚马逊的Titan和Codewhisperer属于该类别。

结论

GenAI在各种用例中具有巨大潜力。本文展示了其在多平台支持和快速解决方案构建中的应用。尽管人们对GenAI持怀疑态度,但掌握其力量的道路是清晰的。然而,当涉及模型调优和训练时,这个过程会变得复杂。

主要观点:

  • 正如您所看到的,GenAI非常迷人,可以实现多种用例。
  • 我们展示了其中一个用例,并了解了如何快速开始构建解决方案。
  • 有人怀疑GenAI是否只是一个泡沫。您可以选择自己喜欢的用例,并试着使用本文中提供的步骤来回答这个问题!
  • 一旦开始涉及模型调优、训练和构建等领域,这个过程很快就会变得复杂而繁琐。

常见问题

本文中显示的媒体内容不属于Analytics Vidhya所有,仅由作者自行决定使用。