Press "Enter" to skip to content

谷歌生成式人工智能转换技术

ETL 即将被转变

Suzanne D. Williams 在 Unsplash 上的照片

这是什么?

大型语言模型(LLMs)可以提取信息和生成信息,但它们还可以转换它,从而使提取、转换和加载(ETL)成为可能完全不同的工作。我将提供一个例子,以说明这些思想,这也应该显示出 LLMs 可以和应该用于许多相关任务,包括将非结构化文本转换为结构化文本。

Google 最近将其大型语言模型(LLM)套件公开预览,并将其品牌化为“生成式 AI 工作室”。简而言之,Google Cloud 平台控制台中的 GenAI Studio 是 Google 的 LLMs 的用户界面。但是,与使用 LLM 的商业应用程序 Google Bard 不同,Google 不会因任何原因保留任何数据。请注意,Google 也发布了许多在此处概述的功能的 API。

使用 GenAI Studio

进入 GenAI Studio 很简单——从 GCP 控制台,只需使用左侧的导航栏,悬停在“Vertex AI”上,然后在“生成式 AI 工作室”下选择概述

作者的图像

截至 2023 年 5 月底,有两个选项——语言和语音。(不久之后,Google 还有望在此发布视觉分类。)每个选项都包含一些示例提示样式,可以帮助您产生想法并将现有想法集中到有用的提示中。但更重要的是,这是一种“安全的”类似于 Bard 的体验,因为 Google 不会保留您的数据。

语言

语言的着陆页面是此示例唯一使用的功能,它具有几种不同的功能,同时也包含了一种简单的方式来调整基础模型(目前只能在某些地区进行调整)。

创建提示

作者的图像

开始使用区域是快速创建与 Google 的模型(一个或多个,取决于时间和交互类型)的非指导交互的地方。

选择文本提示会调用类似于 Bard 的用户界面,但具有一些重要的区别(除了数据隐私):

作者的图像。
  • 底层的 LLM 可以更改。目前,text-bison001 模型是唯一可用的模型,但其他模型将随着时间的推移而出现。
  • 模型参数可以更改。Google 对每个参数使用旁边的问号提供解释。
  • 用于阻止不安全响应的过滤器可以进行调整(选项包括“阻止少量”、“阻止一些”和“阻止大多数”)。
  • 不适当的响应可以轻松举报。

除了与 Bard 的明显差异之外,以这种方式使用模型还缺少一些 Bard 的“附加组件”,例如当前事件。例如,如果输入一个询问昨天芝加哥的天气的提示,这个模型将不会给出正确的答案,但 Bard 会。

大文本部分是输入提示的地方。

作者的图像

通过输入Prompt部分的文本(可选地)调整参数,然后选择SUBMIT按钮创建提示。在这个例子中,提示是“1+1等于多少?”使用text-bison001模型和默认参数值。请注意,该模型只返回数字2,这是对回复温度的影响的很好的例子。重复这个提示(通过反复选择SUBMIT)大部分时间会得到“2”,但是随机地给出一个不同的回复。将温度设置为1.0会产生“答案是2。1+1=2是每个人在小学学习的最基本的数学方程式之一。它是以后学习的所有其他数学的基础。”这是因为温度调整了令牌的概率选择,值越低,回复就越不变(即更确定)。在这个例子中,如果将值设置为0,模型将始终返回“2”。非常酷,很像诗人但更好。您还可以保存提示并查看提示的代码。以下是“What is 1+1?”的代码:

import vertexaifrom vertexai.preview.language_models import TextGenerationModeldef predict_large_language_model_sample(    project_id: str,    model_name: str,    temperature: float,    max_decode_steps: int,    top_p: float,    top_k: int,    content: str,    location: str = "us-central1",    tuned_model_name: str = "",    ) :    """使用大型语言模型进行预测。"""    vertexai.init(project=project_id, location=location)    model = TextGenerationModel.from_pretrained(model_name)    if tuned_model_name:      model = model.get_tuned_model(tuned_model_name)    response = model.predict(        content,        temperature=temperature,        max_output_tokens=max_decode_steps,        top_k=top_k,        top_p=top_p,)    print(f"来自模型的响应:{response.text}")predict_large_language_model_sample(  "mythic-guild-339223",   "text-bison@001", 0, 256, 0.8, 40,   '''What is 1+1?''', "us-central1")

生成的代码包含提示,但很容易看出,函数predict_large_language_model_sample是通用的,可以用于任何文本提示。

开始ETL吧!

在我的日常工作中,我花费大量时间来解析文本中的信息(包括文档)。LLMs可以以惊人的简单和准确的方式完成这项工作,并且在这样做时也可以改变数据。一个例子说明了这种潜力。

假设出于本例的目的,ACME公司收到了以下电子邮件消息:

购买者:Galveston Widgets尊敬的采购部门,您能否向我发送以下物品,并为它们提供发票?项目编号小部件11 22小部件22 4小部件67 1小部件99 44谢谢。亚瑟·加尔维斯顿采购代表(312)448-4492

还假设系统的目标是从电子邮件中提取特定数据,为输入的每个物品应用价格(和小计),并生成总计。

如果您认为LLM不能做到这一点,请再想一想!

有一种称为提取式问答的提示样式非常适合某些情况(如果通过调整模型而不是简单的提示工程应用,则可能适用于所有情况)。这个想法很简单:

  1. 提供背景,即原始文本。
  2. 提供Q(代表Question,即问题),应该是一些可以提取的东西,例如“将所有信息提取为JSON。”
  3. 可选地提供一个A(代表Answer,即答案)具有所需的输出。

如果没有提供A,则应用零-shot工程(这比我预期的效果要好)。您也可以提供一次性或多次性,直到一定程度。提示的大小有限制,这限制了您可以提供多少个样本。

总之,一个抽取式的 Q&A 提示如下:

背景: [文本]Q: [抽取式问题]A: [没有,或期望的输出示例]

在这个示例中,电子邮件是文本,而“抽取所有信息作为 JSON”是抽取式问题。如果没有提供A:,LLM 将尝试执行抽取式(零射击)。(JSON 代表 JavaScript 对象表示法。它是一种轻量级的数据交换格式。)

以下是零射击输出:

背景: 采购商: Galveston Widgets亲爱的采购商,请给我寄以下物品,并提供发票?项目        编号Widget 11    22Widget 22     4Widget 67     1Widget 99    44谢谢。亚瑟·加尔维斯顿采购代理(312)448-4492Q: 抽取所有信息作为 JSONA:

您不需要将背景、Q 和 A 粗体化,我只是为了更清晰地表达。

在 UI 中,我将提示保留为自由格式,并在提示区域中输入上面的提示。然后,我将温度设置为 0(我希望每次输入相同的答案)并将令牌限制增加到 512,以允许更长的响应。

以下是零射击提示和回复的样子:

Image by Author

“E”xtract 起作用,并且甚至可以很好地将行项目列表放在 JSON 中。但这已经足够了。假设我的要求是具有数据的特定标签,并且假设我想捕获采购代理和他们的电话。最后,假设我想要行项目小计和总计(这个假设需要存在行项目价格)。

我的理想输出既是“E”xtract 也是“T”ransform,如下所示:

{"company_name": "Galveston Widgets","items" : [   {"item_name": "Widget 11",    "quantity": "22",    "unit_price": "$1.50",    "subtotal": "$33.00"},   {"item_name": "Widget 22",    "quantity": "4",    "unit_price": "$50.00",    "subtotal": "$200.00"},   {"item_name": "Widget 67",    "quantity": "1",    "unit_price": "$3.50",    "subtotal": "$3.50"},   {"item_name": "Widget 99",    "quantity": "44",    "unit_price": "$1.00",    "subtotal": "$44.00"}],"grand_total": "$280.50","purchasing_agent": "Arthur Galveston","purchasing_agent_phone": "(312)448-4492"}

对于这个提示,我将 UI 从自由格式改为结构化,这使得布置数据变得更容易。在这个 UI 中,我可以为 LLM 设置上下文(它对模型响应有惊人的影响)。然后,我提供一个示例——包括输入文本和输出文本——以及一个测试输入。

结构化和自由格式的参数是相同的。以下是发票 ETL 示例的上下文和示例(包括输入和输出)。

Image by Author

我添加了一个测试电子邮件,其中包含完全不同的数据(相同的小部件)。下面的图像显示了所有内容的 UI。然后,我选择提交,填写了测试 JSON,在图像的右下角。

Image by Author.

这就是巫术。 是的,数学完全正确。

“L”是什么?

到目前为止,我已经展示了提取和转换 – 现在是加载的时候了。那部分实际上非常简单,使用零射击(如果使用API完成,那么是两个调用 – 一个用于E+T,一个用于L)。

我提供了上一步骤的JSON作为背景,并将问题:更改为“将JSON转换为SQL插入语句。” 这是结果,它推断出了发票表和发票项表。 (您可以使用问题和/或示例SQL微调该SQL。)

Image by Author

这意味着什么

这个例子展示了一个相当惊人的LLM能力,它很可能改变ETL工作的性质。我毫不怀疑LLM在这个领域能做什么,不能做什么,以及应该用LLM做什么,这些都有限制。

未来看起来很光明,GenAI Studio可以让您快速上手。请记住,UI提供了一些简单的复制/粘贴代码,因此您可以使用API而不是UI,后者是执行此类型工作所必需的。

这也意味着锤子仍然不能造房子。我是指模型没有找出这个ETL示例。 LLM是非常复杂的“锤子” – 我是木匠,就像你一样。

免责声明

本文是作者的观点和看法,不代表其雇主的观点和看法。(以防万一Google正在观察。)

Leave a Reply

Your email address will not be published. Required fields are marked *