FeedGen:使用生成式人工智能优化购物信息流
免责声明:这不是 Google 的官方产品。
FeedGen 最适用于不超过 3 万个商品。想要进一步扩展规模?请加入Product Studio API alpha(联系 hsjd@google.com)或考虑在 BigQuery 中处理您的信息流。
概述 • 开始使用 • 解决的问题 • 工作原理 • 如何贡献 • 社区亮点
更新
- [2024 年 7 月]:添加了使用 BigQuery 优化信息流的指南。
- [2024 年 5 月]:增加对
gemini-1.5-pro
和gemini-1.5-flash
的支持 - [2024 年 4 月]
- 重要提示:自 4 月 9 日起,根据更新后的商家中心产品数据规范,在将 FeedGen 的输出导入商家中心时,请使用
structured_title
和structured_description
替代title
和description
。详情请参阅这些说明。 - 增加对 Gemini 1.5 pro(预览版)的支持:
gemini-1.5-pro-preview-0409
。请注意,模型名称将来可能会(破坏性地)更改。
- 重要提示:自 4 月 9 日起,根据更新后的商家中心产品数据规范,在将 FeedGen 的输出导入商家中心时,请使用
- [2024 年 3 月]
- 将 Gemini 模型重命名为
gemini-1.0-pro
和gemini-1.0-pro-vision
- 增加了检索 JSON 网页的支持
- 将 Gemini 模型重命名为
- [2024 年 1 月]:增加了获取产品网页信息并用于生成高质量标题和描述的功能
- [2023 年 12 月]
- 增加对 Gemini 模型的支持(
gemini-pro
和gemini-pro-vision
) - 统一了描述生成和验证 - 现在由单个提示处理
- 增加了图像理解功能,用于生成更高质量的标题和描述(仅适用于
gemini-pro-vision
) - 增加了 LLM 生成的标题,可以避免重复值,但可能会损失一些属性信息
- 增加对 Gemini 模型的支持(
- [2023 年 11 月]:增加了描述验证作为单独的组件
- [2023 年 10 月]:使标题和描述生成成为可选项
- [2023 年 8 月]:增加对 text-bison-32k 的支持
- [2023 年 6 月]:将 Colab 变体移至
v1
,并在main
分支上切换到 JS/TS
概述
FeedGen 是一个开源工具,它使用 Google Cloud 最先进的大型语言模型(LLM)来改进产品标题、生成更全面的描述,并填补产品信息流中缺失的属性。它以简单且可配置的方式帮助商家和广告主使用生成式人工智能发现并修复信息流中的质量问题。
该工具依赖 GCP 的 Vertex AI API,在 GCP 的基础 LLM 上提供零样本和少样本推理能力。通过少样本提示,您可以使用自己购物信息流中最佳的 3-10 个样本来定制模型对您自己数据的响应,从而实现更高质量和更一致的输出。通过使用您自己的专有数据对基础模型进行微调,可以进一步优化这一过程。了解如何使用 Vertex AI 对模型进行微调,以及这样做的好处,请参阅这个指南。
注意:在使用 FeedGen 之前,请检查您的目标信息流语言是否是 Vertex AI 支持的语言 之一,如果不是,请联系您的 Google Cloud 或账户代表。
开始使用
要开始使用 FeedGen:
- 复制 Google Sheets 电子表格模板
- 按照
Getting Started
工作表中详细说明的说明进行操作
挑战
优化购物信息流是每个使用 Google 商家中心(MC)的广告主的目标,以改善查询匹配、增加覆盖率,并最终提高点击率(CTR)。然而,在 MC 中筛选产品不通过或手动修复质量问题是一项繁琐的工作。
FeedGen 使用生成式人工智能解决这个问题 - 允许用户以自动化的方式发现并修复质量问题,并填补信息流中的属性空白。
解决方案概述
FeedGen是一个基于Apps Script的应用程序,它作为HTML侧边栏(详见HtmlService)在Google Sheets中运行。关联的Google Sheets电子表格模板是所有神奇操作发生的地方;它包含需要优化的输入源,以及控制内容生成方式的特定配置值。该电子表格还用于(可选的)人工验证和在Google Merchant Center (MC)中设置补充源。
Vertex AI中的生成式语言,以及一般而言,是一个新兴的功能/技术。我们强烈建议手动审查和验证生成的标题和描述。FeedGen通过为标题和描述提供评分(以及详细的组成部分)来帮助用户加快这一过程,该评分代表生成内容的"好坏"程度,同时提供了一种基于Sheets的方式,可以通过数据筛选批量审批生成的内容。
首先,复制模板电子表格并按照入门部分中定义的说明进行操作。第一步是通过下图所示的初始化按钮向Apps Script环境进行身份验证。
之后,导航到Config工作表以配置源设置、Vertex AI API设置(包括对将产生的成本的估算),以及控制内容生成的设置。
描述生成
描述生成的工作原理是取Config表中给出的提示前缀,附加Input中的一行数据,并将结果作为提示发送给LLM。这为您塑造措辞、风格和其他可能有的要求提供了极大的灵活性。Input Feed中的所有数据都将作为提示的一部分提供。
如果在输入源中提供了网页链接,您也可以勾选使用落地页信息
复选框,以加载并传递产品网页的净化内容到提示中。从获取的HTML内容中提取所有span
和p
标签并连接在一起,形成一个额外的信息段落,该段落与专门的使用说明一起传递给LLM作为提示的一部分。JSON网络响应将按原样使用,无需额外解析。此外,获取的网页信息会使用Apps Script的CacheService缓存60秒,以避免在生成标题时(这是对Vertex AI API的单独调用)重新获取和重新解析内容。
可选:您还可以在少样本示例部分提供描述示例(见下文)。这些示例将被附加到提示前缀中,并告知模型什么是好的描述。
结果直接输出为生成的描述
描述验证
由于LLM有产生幻觉的倾向,有一个选项可以要求模型(在同一提示中的后续指令中)判断生成的描述是否符合您的标准。模型评估它刚刚生成的描述,并给出数字分数以及理由。提供了示例验证标准和评分,以给出如何指导模型评估描述的一些提示 - 例如,它包括标准以及示例分数值。
标题生成
标题使用少样本提示;这是一种从自己的输入源中选择样本的技术,如下所示,以使模型的响应更适合您的数据。为了帮助这个过程,FeedGen提供了一个实用的Google Sheets公式:
=FEEDGEN_CREATE_CONTEXT_JSON('Input Feed'!A2)
可以通过向下拖动来填充少样本提示示例表中的"Context"信息字段,就像其他Sheets公式一样。这个"Context"代表输入源中该项目的整行数据,它将作为提示的一部分发送给Vertex AI API。
之后,您必须手动填写少样本提示示例表的其余列,这些列定义了LLM的预期输出。这些示例非常重要,因为它们为LLM学习如何为输入源的其余部分生成内容提供了基础。最佳的示例选择是那些:
- 您可以在现有标题中识别与输入源中的列名相匹配的属性。
- 您可以提出比现有标题更好的新标题(例如,包含更多属性)。
- 提议的标题具有可以在您的源中其他产品重复使用的结构。
我们建议为您的源中的每个独特类别至少添加一个示例,特别是如果理想的标题组成会有所不同的话。
FeedGen默认使用输入源中的属性而不是生成的属性值来组成标题,以避免LLM产生幻觉并确保一致性。例如,特定源项目的输入源属性Color中的值Blue
将用于其相应的标题,而不是生成的值,比如Navy
。可以通过标题提示设置的高级设置部分中的首选生成值
复选框来覆盖此行为,这在输入源本身包含错误或质量较差的数据时很有用。
在同一部分中,您还可以指定一个安全词列表,这些词可以在生成的标题中输出,即使它们之前在您的源中不存在。例如,您可以将"Size"一词添加到此列表中,如果您想用它来前缀Size
属性的所有值(即"Size M"而不是"M")。
最后,您还可以通过"使用LLM生成标题"复选框指定是否希望LLM为您生成标题。这允许LLM检查生成的属性值并选择要连接在一起的值 - 避免重复 - 而不是默认逻辑中将所有属性值拼接在一起。这个功能在Gemini模型上比PaLM 2模型效果更好,因为Gemini模型具有更强的推理能力,能更好地遵循提示指令。此外,LLM生成的标题允许您在提示中指定所需的标题长度(商户中心最多150个字符),这在之前是不可能的。
与描述一样,您也可以选择从提供的网页链接加载信息并将其传递给LLM,以生成更高质量的标题。这可以通过"使用落地页信息"复选框来完成。选中后,从网页数据提取的所有特征将列在名为"网站特征"的新属性下。然后,现有属性未涵盖的新词将被添加到生成的标题中。
现在您已完成配置,准备好优化您的feed了。使用顶部导航菜单启动FeedGen侧边栏,并开始在"生成内容验证"工作表中生成和验证内容。
您通常会在此视图中工作,以理解、批准和/或为每个feed项重新生成内容,具体如下:
- "生成"按钮控制生成过程,首先会重新生成所有状态为"空"或"失败"的列,然后继续处理feed的其余部分。例如,清除上面的第7行并点击"生成",将从第7行开始生成过程,然后继续处理下一个feed项。
- 这意味着您可以清除任何feed项的"状态"列的值以重新生成它。
- 要从头开始,请先点击"清除生成的数据",然后再点击"生成"。
- 如果发生错误,它将在"状态"列中显示为"失败"。
- 批准可以通过筛选视图并使用"批准筛选项"按钮批量完成,或者使用"批准"列中的复选框逐个完成。所有得分高于0的条目都将被预先批准(在下面阅读更多关于FeedGen的评分/评估系统)。
- 标题和描述的附加列被分组,您可以展开感兴趣的组进行检查。
完成所有必要的批准并对输出满意后,点击"导出到输出Feed"将所有批准的feed项转移到"输出Feed"工作表。
最后一步是将电子表格作为补充feed连接到MC,对于标准MC账户,可以按照这篇帮助中心文章所述进行操作,对于多客户账户(MCA),可以参考这篇帮助中心文章。
请注意,输出feed中有一个"att-p-feedgen"列。这个列名完全灵活,可以直接在输出工作表中更改。它为补充feed添加了一个自定义属性,用于报告和性能测量目的。
图像理解
由于Gemini(gemini-pro-vision)是一个多模态模型,我们能够额外检查产品图像并利用它们生成更高质量的标题和描述。这是通过在现有的标题和描述生成提示中添加额外的指令来从提供的图像中提取可见的产品特征实现的。
对于标题,提取的特征有两种用途:
- 作为现有feed属性的质量检查。例如,如果给定的产品feed引用了"白色",但提供的图像显示的是"黑色"产品,标题和feed属性将相应地进行调整。
- 通过一个名为"图像特征"的新属性来增强生成的标题。这个属性列出了模型能够从提供的图像中提取的所有可见特征。然后,所有现有属性未涵盖的新词将被添加到生成的标题中。
对于描述,模型使用提取的特征生成更全面的描述,突出产品的视觉方面。这对于视觉吸引力至关重要的领域特别相关;在这些领域中,产品的关键细节是通过视觉而不是feed中的结构化文本格式传达的。这包括时尚、家居装饰和家具、香水和珠宝等。
最后,请注意以下限制(这些信息在Gemini的"公开预览"期间有效):
- 您可以在"输入Feed"工作表的"图像链接"列中指定网络图像和/或Google Cloud Storage(GCS)文件URI。GCS URI会原样传递给Gemini(因为模型本身支持),而网络图像会先下载并作为模型输入的一部分内联提供。
- 无论来源如何,仅支持"image/png"和"image/jpeg" MIME类型。
- GCS URI还必须指向与发送请求的Google Cloud项目相同的存储桶(否则,Gemini将丢弃)。
- 定价也受到影响 - 每张图像将产生额外费用。这已在FeedGen的价格估算器中考虑在内。
评分/评估
描述
得分低于"最小评估批准分数"的描述将不会被预先批准。您可以通过在"生成验证"标签中筛选"描述分数"并删除"状态"值来重新生成这些描述。
标题
FeedGen为生成的标题提供一个介于-1和1之间的分数作为质量指标。正分表示不同程度的良好质量,而负分则代表对生成内容的不确定性。与描述一样,您可以指定一个最低分数(默认为0),FeedGen将预先批准达到该分数的内容。
让我们通过一些虚构的例子来更好地理解标题的评分:
- 原始标题:2XU男士游泳压缩长袖上衣
- 原始描述:2XU男士游泳压缩长袖上衣,轻质透气PWX面料,UPF 50+防晒。
- 生成标题:2XU男士游泳压缩长袖上衣黑色M码PWX面料UV防护
- 分数:-1
- 原因:添加了新词"UV防护",可能是语言模型的"幻觉"。事实上,输入信息中并未明确提及"UV防护"。然而,仔细查看信息项后发现描述中包含"UPF 50+",所以添加"UV防护"实际上是个积极的改进,但由于我们无法评估这一点(除非应用更细致的语义文本分析),我们默认给予负面评分。
让我们看看同一产品的另一个例子:
- 原始标题:2XU男士游泳压缩长袖上衣
- 生成标题:2XU男士游泳压缩上衣M码
- 分数:-0.5
- 原因:标题中删除了关键信息"长袖",这描述了产品类型。FeedGen通过首先检查我们称之为"模板"的标题结构来识别这些信息,然后深入比较组成标题的单词。让我们检查一下我们例子中的模板:
- 原始标题模板:
<品牌> <性别> <类别> <产品类型>
- 生成标题模板:
<品牌> <性别> <类别> <产品类型> <尺码>
- 如您所见,实际上没有删除任何属性,但
产品类型
属性的组成部分发生了不利变化,因此得到负分。
- 原始标题模板:
FeedGen在评分时较为保守;只要有任何词被删除,即使这些词是像"立即购买"或"限量供应"这样的促销短语,它也会给出-0.5的分数。根据商户中心(MC)概述的最佳实践,这些短语不应该出现在标题中。
那么,什么才是好的标题呢?让我们看另一个例子:
- 原始标题:2XU男士游泳压缩长袖上衣
- 生成标题:2XU男士游泳压缩长袖上衣M码
- 分数:0.5
- 原因:原始标题没有改变或丢失任何内容,我们添加了一个新属性"尺码"。如果产品提供不同尺码,这个新标题现在对于防止产品的所有信息项被MC拒绝(因为标题重复)至关重要。
最后,什么是理想情况?让我们看最后一个例子:
- 原始标题:2XU男士游泳压缩长袖上衣
- 输入 - 颜色:缺失
- 生成标题:2XU男士游泳压缩长袖上衣黑色M码
- 输出 - 颜色:黑色
- 分数:1
- 原因:这是最佳情况;我们优化了标题并同时填补了信息属性的空缺,毫无疑问值得1分。
总结一下,评分系统的工作原理如下:
是否有幻觉? | 是否删除了任何词? | 完全没有变化? | 是否优化了标题? | 是否填补了缺失的空缺或提取了新属性? |
---|---|---|---|---|
-1 | -0.5 | 0 | 加0.5 | 加0.5 |
FeedGen还应用了一些基本的MC合规性检查,例如标题和描述的长度分别不得超过150和5000个字符。如果生成的内容未通过这些检查,状态列中将输出未通过合规性检查
。如上所述,每当点击生成按钮时,FeedGen将首先尝试重新生成失败
的项目。
信息空缺和新属性
FeedGen不仅填补您信息中的空缺,还可能创建输入信息中未提供的全新属性。这可以通过配置表中的少量示例提示来控制;通过在这些示例中提供输入中不存在的"新"属性,FeedGen将尝试从输入信息中的其他值中提取这些新属性的值。让我们看一个例子:
原始标题 | 原始标题中的产品属性 | 生成标题中的产品属性 | 生成的属性值 |
---|---|---|---|
ASICS女士高性能跑步七分紧身裤 | 品牌、性别、产品类型 | 品牌、性别、产品类型、合身度 | ASICS、女士高性能、跑步七分、紧身 |
注意这里如何从产品类型中提取出合身度属性。FeedGen现在将尝试对信息中的所有其他产品执行相同操作,例如,它将从标题"Agave男士牛仔裤Waterman宽松"中提取"宽松"作为合身度。如果您不想创建这些属性,请确保在少量示例提示中只使用输入信息中存在的属性。此外,这些全新的信息属性在输出信息中将以**feedgen-**为前缀(例如feedgen-合身度),并会被排序到表格末尾,以便您更容易定位和删除(如果您不想使用它们)。
最佳实践
根据您的业务领域,我们建议标题遵循以下模式:
领域 | 推荐的标题结构 | 示例 |
---|---|---|
服装 | 品牌 + 性别 + 产品类型 + 属性(颜色、尺码、材质) | Ann Taylor 女士黑色毛衣(6号码) |
消耗品 | 品牌 + 产品类型 + 属性(重量、数量) | TwinLab Mega 辅酶Q10,50毫克,60粒 |
硬质商品 | 品牌 + 产品 + 属性(尺寸、重量、数量) | Frontgate 藤编露台椅套装,棕色,4件套 |
电子产品 | 品牌 + 属性 + 产品类型 | 三星88英寸智能LED电视,4K 3D曲面屏 |
图书 | 书名 + 类型 + 格式(精装、电子书)+ 作者 | 《1000道意大利菜谱》,精装版,作者Michele Scicolone |
你可以依靠这些模式来生成FeedGen Config
工作表中定义的少样本提示示例,从而相应地引导模型生成的值。
我们还建议以下几点:
- 提供尽可能多的产品属性,以丰富描述的生成。
- 如果可用,在标题生成中使用尺寸、颜色和性别/年龄组。
- 在标题中不要使用型号、价格或促销文本。
Vertex AI定价和配额
请参阅Vertex AI的定价和配额和限制指南以获取更多信息。
使用structured_title和structured_description
截至2024年4月9日,根据更新的商家中心产品数据规范,用户需要披露是否使用生成式AI来策划标题和描述的文本内容。
这方面的主要挑战在于用户不能在同一个数据源中同时发送title
和structured_title
,或description
和structured_description
,因为原始列值将始终优先于structured_
变体。
因此,用户需要在将批准的生成内容导出到FeedGen的Output Feed标签后执行一系列额外步骤:
- 将FeedGen电子表格作为补充数据源连接到商家中心。
- 创建数据源规则,以通过FeedGen补充数据源清除标题和描述值。
- 您需要创建2个不同的数据源规则,如下所示:
- 将FeedGen的Output Feed标签中的
title
和description
列分别重命名为structured_title
和structured_description
。 - 为所有生成的内容添加前缀
trained_algorithmic_media:
。
有关更多信息,请参阅详细的structured_title和structured_description属性规范。
我们将很快为您自动完成步骤#3和#4 - 敬请关注!
感谢Glen Wilson和Solutions-8团队提供的详细信息和图片。
如何贡献
除了我们的贡献指南中概述的信息外,您还需要遵循以下额外步骤在本地构建FeedGen:
- 确保您的系统安装了最新版本的Node.js和npm。
- 导航到FeedGen源代码所在的目录。
- 运行
npm install
。 - 运行
npx @google/aside init
并点击提示。- 输入与目标Google Sheets电子表格关联的Apps Script
Script ID
。您可以通过在目标表格的顶部导航菜单中单击扩展程序 > Apps Script
,然后在结果Apps Script视图中导航到项目设置
(齿轮图标)来找到这个值。
- 输入与目标Google Sheets电子表格关联的Apps Script
- 运行
npm run deploy
以构建、测试和部署(通过clasp)所有代码到目标电子表格/Apps Script项目。
社区聚焦
- Krisztián Korpa的解锁AI在Google购物数据源优化中的力量。
- Alex van de Pol的AI驱动的成功:如何在PPC广告中利用Google FeedGen的潜力。
- (德语)生成式AI:Home24利用FeedGen提高购物广告的覆盖面和表现 - Think with Google。