与基本搜索模型相比,调优后的搜索模型可以提供质量更高的结果。
如果您有特定于行业或公司的查询,而一般的大语言模型无法很好地处理这些查询,那么搜索调优特别有用。它可用于进一步训练搜索模型。
限制
搜索调优只能应用于非结构化数据存储区。
关于训练数据
如需对搜索模型进行调优,首先需要整理训练数据。
训练数据应包含您预计最终用户会提出的查询,以及包含回答查询所需相关信息的文本片段(250 到 500 字)。 一个查询可以与多个片段相关联,前提是每个片段都包含回答查询的信息。
训练数据还应包含未与查询配对的文本片段,但这些片段在风格和长度方面与答案类似。 这些没有关联查询的片段提供了随机负样本,用于对模型进行调优。Google 建议您提供至少 10,000 个此类片段。
下面是一些术语,用于描述您需要提供的训练数据:
训练查询 :您预计最终用户会提出的查询。请务必重点关注包含特定网域或公司术语的查询。
请至少提供 100 个。
提取片段 :片段(通常是多个段落)必须从数据存储区中的文档中逐字提取。数据存储区中的所有文档统称为“语料库”。
您必须提供两种类型的提取片段:
包含回答训练查询所需相关信息的片段。这些片段与查询具有正向匹配。
未与任何训练查询相关联的片段。这些片段在模型调优中用作随机负样本。
一两句话不足以成为提取片段;片段需要包含足够的上下文以进行训练。例如,对于“谁创立了 Google”之类的查询,简短的提取内容(如“Larry Page”)是不够的。如需查看足够长的片段示例,请参阅下表。
请为每个查询提供至少一个提取片段,并提供至少 10,000 个额外的提取片段。
相关性得分 :相关性得分是非负整数,用于估计提取片段与查询的相关性。您需要为每个查询和提取片段对提供一个得分值。得分为 0 表示提取片段与查询完全无关。得分大于 0 表示具有一定的相关性。为了快速评分,Google 建议为所有相关片段提供 1 分,为不相关片段提供 0 分。或者,如果您想对相关性进行排名,可以分配 0 到 10(例如)的相关性得分,其中 10 分表示相关性最高的片段,0 分表示完全不相关的片段。
请至少提供 100 个相关性得分,并可选择提供额外的非相关性得分。
查询和提取片段对示例
下表提供了一些查询和提取片段对示例。这些一般示例取自维基百科。不过,为了进行有用的调优,您需要提供来自专有数据集的文档,这些文档包含特定于您的业务且难以在网络上找到的信息。
此表中的最后一对是零分对的示例,其中答案与查询无关。
| 训练查询 | 提取片段 | 得分 |
|---|---|---|
| 谁创立了 Google? | Google 由美国计算机科学家 Larry Page 和 Sergey Brin 于 1998 年 9 月 4 日创立,当时他们是加利福尼亚州斯坦福大学的博士生。他们共同拥有 Google 公开上市的股份约 14%,并通过超级投票权股票控制着 56% 的股东投票权。该公司于 2004 年通过首次公开募股 (IPO) 上市。2015 年,Google 重组为 Alphabet Inc. 的全资子公司。Google 是 Alphabet 最大的子公司,也是 Alphabet 互联网资产和权益的控股公司。Sundar Pichai 于 2015 年 10 月 24 日被任命为 Google 首席执行官,接替 Larry Page,后者成为 Alphabet 的首席执行官。2019 年 12 月 3 日,Pichai 还成为 Alphabet 的首席执行官。[...] 在最具价值的品牌榜单中,Google 在福布斯榜单中排名第二,在 Interbrand 榜单中排名第四。 | 1 |
| 血液离开右心室后会泵到哪里? | 含氧血液通过肺静脉离开肺部,肺静脉将其送回心脏的左侧,完成肺循环。然后,血液进入左心房,左心房通过二尖瓣将其泵入左心室。血液从左心室通过主动脉瓣进入主动脉。然后,血液通过体循环分布到全身,然后再返回肺循环。动脉 主要文章:肺动脉 血液从右心室通过半月形肺动脉瓣泵入左右肺动脉(每个肺部一条),左右肺动脉分支成较小的肺动脉,分布在整个肺部。[...] 心脏分流是心脏各部分之间不自然的连接,会导致血流(量)绕过肺部。 | 1 |
| 保龄球名人堂位于哪里? | 世界保龄球作家协会 ( WBW) 国际保龄球名人堂成立于 1993 年,位于德克萨斯州阿灵顿国际保龄球园区内的国际保龄球博物馆和名人堂。历史 国际保龄球博物馆和名人堂位于美国密苏里州圣路易斯市体育场广场 11 号,与圣路易斯红雀队名人堂博物馆共用同一栋建筑,直到 2008 年 11 月 8 日。它搬到了阿灵顿,并于 2010 年初重新开放。2012 年,WBW 与国际保龄球媒体协会合并。合并后,WBW 名人堂入选者成为 IBMA Luby 名人堂的一部分。世界保龄球作家协会的官员,他们组成了名人堂的董事会。][...] 获得最多选票的男性和女性当选。 | 1 |
| 天空为什么是蓝色的? | “Hello, World!”程序通常是一个简短的计算机程序,它会向屏幕(通常是控制台)输出(或显示)类似于“Hello, World!”的消息,同时忽略任何用户输入。该程序是大多数通用编程语言中的一小段代码,用于说明语言的基本语法。“Hello, World!”程序通常是学习新编程语言的学生编写的第一个程序,但此类程序也可用于检查旨在编译或运行源代码的计算机软件是否已正确安装,以及其操作员是否了解如何使用它。 [...] C 语言版本之前是 Kernighan 于 1972 年编写的《A Tutorial Introduction to the Language B》,其中第一个已知版本的程序出现在用于说明外部变量的示例中 | 0 |
关于测试
训练后,会对调优后的搜索进行测试,以确定调优是否改进了结果。您可以明确提供要测试的查询。如果您不提供测试查询,则 Agent Search 会使用 20% 的训练查询作为测试查询。
训练文件
训练数据需要上传到三个(可选四个)特定文件中:
一个语料库文件,其中包含提取片段
一个查询文件,仅包含查询
一个将查询与片段关联并 包含相关性得分的训练标签文件
可选:一个测试标签文件,该文件与训练标签 文件类似,但用于评估调优后的模型,而不是训练模型
这三个训练文件(语料库文件、查询文件和训练标签文件)以及(可选)测试标签文件需要位于 Cloud Storage 中。文件的路径由 trainCustomMethod 调用中的字段定义。
语料库文件
语料库文件包含提取片段:包含回答查询文件中查询的信息的片段,以及许多额外的片段,在调优模型时用作随机负样本。 您应至少有 100 个包含查询答案的片段;查询可以由多个片段回答。您还应至少有 10,000 个随机片段。
如果数据存储区中的文档包含的字数少于 500 字,则可以将整个文档用作片段。否则,请以编程方式从数据存储区中的文档创建 250-500 字的随机片段,并将其添加到语料库文件中。
语料库文件是一个 JSONL(JSON 行)文件,其中每一行都包含具有字符串值的字段 _id 和 text。
例如:
{"_id": "doc1", "text": "Google was founded on September 4, 1998, by American computer scientists Larry Page and Sergey Brin while they were PhD students at Stanford University in California. Together they own about 14% of its publicly listed shares and control 56% of its stockholder voting power through super-voting stock. The company went public via an initial public offering (IPO) in 2004. In 2015, Google was reorganized as a wholly owned subsidiary of Alphabet Inc. Google is Alphabet's largest subsidiary and is a holding company for Alphabet's internet properties and interests. Sundar Pichai was appointed CEO of Google on October 24, 2015, replacing Larry Page, who became the CEO of Alphabet. On December 3, 2019, Pichai also became the CEO of Alphabet. [...] On the list of most valuable brands, Google is 105 ranked second by Forbes and fourth by Interbrand."}
{"_id": "doc2", "text": "Oxygenated blood leaves the lungs through pulmonary veins, which return it to the left part of the heart, completing the pulmonary cycle. This blood then enters the left atrium, which pumps it through the mitral valve into the left ventricle. From the left ventricle, the blood passes through the aortic valve to the aorta. The blood is then distributed to the body through the systemic circulation before returning again to the pulmonary circulation. Arteries Main article: Pulmonary artery From the right ventricle, blood is pumped through the semilunar pulmonary valve into the left and right main pulmonary artery (one for each lung), which branch into smaller pulmonary arteries that spread throughout the lungs. [...] Cardiac shunt is an unnatural connection between parts of the heart that leads to blood flow that bypasses the lungs."}
{"_id": "doc3", "text": "The World Bowling Writers ( WBW ) International Bowling Hall of Fame was established in 1993 and is located in the International Bowling Museum and Hall of Fame , on the International Bowling Campus in Arlington , Texas. History The International Bowling Museum and Hall of Fame was located at 11 Stadium Plaza, St. Louis, Missouri, USA, and shared the same building with the St. Louis Cardinals Hall of Fame Museum, until November 8, 2008. It moved to Arlington and reopened in early 2010. In 2012, the WBW was merged with the International Bowling Media Association. After the merger, the WBW Hall of Fame inductees became part of the IBMA Luby Hall of Fame. officers of the World Bowling Writers, which formed the Hall's Board.][...] The man and woman who receive the most votes are elected."}
{"_id": "doc4", "text": "A \"Hello, World!\" program is generally a simple computer program which outputs (or displays) to the screen (often the console) a message similar to "Hello, World!" while ignoring any user input. A small piece of code in most general-purpose programming languages, this program is used to illustrate a language's basic syntax. A "Hello, World!" program is often the first written by a student of a new programming language, but such a program can also be used as a check to ensure that the computer software intended to compile or run source code is correctly installed, and that its operator understands how to use it. [...] The C-language version was preceded by Kernighan's own 1972 A Tutorial Introduction to the Language B, where the first known version of the program is found in an example used to illustrate external variables."}
该文件的最大大小为 500,000 行。
查询文件
查询文件包含将用于调优模型的示例查询。每个查询在语料库文件中应有一个或多个对应的提取片段。您应至少提供 100 个正向匹配查询。您还可以提供不相关的查询:这些查询对应于相关性得分为零的提取片段。
查询文件采用 JSONL 格式,并且与语料库文件具有相同的字段。
例如:
{"_id": "query1", "text": "who founded Google?"}
{"_id": "query2", "text": "where is blood pumped after it leaves the right ventricle?"}
{"_id": "query3", "text": "where is the bowling hall of fame located?"}
{"_id": "query4", "text": "why is the sky blue?"}
该文件中允许的最大查询数为 40,000。
训练标签
训练标签文件将查询与提取片段关联起来,并为每个查询和片段对评分。
如果测试标签文件不存在,则训练标签文件中的 20% 的查询将保留用于在训练后评估调优后的模型。
该文件包含查询的 ID、其匹配(或不匹配)的提取片段的 ID,以及片段与查询的相关性得分。
每个查询必须至少有一行;如果一个查询由两个片段回答,则该查询有两行。Score 是一个非负整数值。任何大于零的分数都表示文档与查询相关。数字越大表示相关性越高。如果省略得分,则默认值为 1。
训练标签文件是一个带标题的 TSV(制表符分隔值)文件。
该文件必须包含 query-id、corpus-id 和 score 列。query-id 是与查询文件中的 _id 键匹配的字符串,corpus-id 是与语料库文件中的 _id 匹配的字符串。
例如:
query-id corpus-id score
query1 doc1 1
query2 doc2 1
query3 doc3 1
query3 doc9 1
query4 doc4 0
训练标签文件必须至少包含 100 个唯一查询 ID。训练标签文件中的查询 ID 数量与测试标签文件中的查询数量之和必须小于 500,000。
测试标签
与训练标签文件类似,此可选文件包含查询和提取片段的 ID 以及相关性得分。它包含的查询比训练标签文件中的查询更少且不同。如果存在,则文件中的查询和提取片段对用于评估调优。如果测试标签文件不存在,则训练标签文件中的查询和提取片段对用于评估。
此文件的格式与训练标签文件的格式相同。
例如:
query-id corpus-id score
query200 doc200 1
query201 doc201 1
query202 doc202 1
虽然测试标签文件是可选的,但如果您提供该文件,则该文件必须包含至少三个唯一查询 ID。
准备工作
为应用启用企业版功能。
调优搜索
如需使用自己的训练数据调优搜索模型,请按以下步骤操作。
控制台
如需使用 Google Cloud 控制台调优模型,请按以下步骤操作:
准备训练数据,并可选择准备测试数据文件。使用 训练文件中描述的格式。
将文件上传到 Cloud Storage。
在 Google Cloud 控制台中,前往 AI Applications 页面。
在应用 页面上,点击您要为其训练模型的应用的名称。
在导航菜单中,点击配置 。
点击调优 标签页。
点击对基本模型进行调参 。
指定您在上述步骤 1 和 2 中准备的语料库、查询、训练和(可选)测试文件。
点击开始调优 。
刷新页面,即可在调优 标签页上的近期调优活动 表中查看状态。
REST
如需使用 trainCustomModel 方法调优数据存储区,
请按以下步骤操作:
准备训练数据(并可选择准备测试数据)文件。使用 训练文件中描述的格式。
将文件放入 Cloud Storage 存储桶中。
运行以下 curl 命令,将文件从 Cloud Storage 存储桶上传到 Agent Search:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID:trainCustomModel" \ -d '{ "gcsTrainingInput": { "corpusDataPath": "CORPUS_JSONL_GCS_PATH", "queryDataPath": "QUERY_JSONL_GCS_PATH", "trainDataPath": "TRAIN_TSV_GCS_PATH", "testDataPath": "TEST_TSV_GCS_PATH" }, "modelType": "search-tuning" }'替换以下内容:
PROJECT_ID:您的 Google Cloud 项目的 ID。DATA_STORE_ID:您要调优的数据存储区的 ID。CORPUS_JSONL_GCS_PATH:Cloud Storage 中的语料库 JSONL 文件路径,例如gs://my-bucket/corpus.jsonl。QUERY_JSONL_GCS_PATH:Cloud Storage 中的查询 JSONL 文件路径,例如gs://my-bucket/query.jsonl。TRAIN_TSV_GCS_PATH:Cloud Storage 中的训练标签 TSV 文件路径,例如gs://my-bucket/train.tsv。TEST_TSV_GCS_PATH:一个可选字段,用于 指定您的 测试标签 TSV 文件的 Cloud Storage 路径,例如gs://my-bucket/test.tsv。如果您没有测试标签文件,请移除testDataPath字段或将其留空。
如需了解此方法的一般信息,请参阅
trainCustomModel。上传数据文件后,调优会自动开始。
点击查看示例 curl 命令和响应。
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" "https://discoveryengine.googleapis.com/v1/projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321:trainCustomModel" -d '{ "dataStore": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321", "gcsTrainingInput": { "corpusDataPath": "gs://my-bucket/corpus.jsonl", "queryDataPath": "gs://my-bucket/query.jsonl", "trainDataPath": "gs://my-bucket/train.tsv" }, "modelType": "search-tuning" }
{ "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/operations/train-custom-model-6071430366161939774", "metadata": { "@type": "type.googleapis.com/google.cloud.discoveryengine.v1.TrainCustomModelMetadata" }, "response": { "@type": "type.googleapis.com/google.cloud.discoveryengine.v1.TrainCustomModelResponse", "modelStatus": "in-progress" } }
记下
name值,该值由trainCustomModel方法返回,然后按照 获取有关长时间运行的操作的详细信息 中的说明查看搜索调优操作何时完成。
Python
如需了解详情,请参阅 Agent Search Python API 参考文档。
如需向 Agent Search 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅 为本地开发环境设置身份验证。
测试调优后的搜索并将其用于单个搜索查询
调优完成后,您可以进行测试,方法是将使用调优后模型查询的结果与使用基本模型查询的相同结果进行比较。
控制台
如需使用 Google Cloud 控制台预览调优后模型的行为,请按以下步骤操作:
前往调优 标签页:
在 Google Cloud 控制台中,前往 AI Applications 页面。
点击您要预览的应用的名称。
点击配置 。
点击调优 标签页。
点击调优后的模型 ,然后使用右侧的预览面板发出使用调优后模型的查询。
点击基本模型 ,然后使用右侧的预览面板发出使用原始模型的查询。
比较结果的质量。
REST
如需评估调优的效果,您可以将 enableSearchAdaptor 字段设置为 true,然后设置为 false,并比较结果。将 enableSearchAdaptor 字段设置为 true 表示该查询使用调优后的搜索版本。
如需发出使用调优后模型的搜索查询,请执行以下操作:
在查询方法调用中,将
customFineTuningSpec字段中的enableSearchAdaptor字段设置为true。例如:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \ -d '{ "query": "QUERY", "customFineTuningSpec": { "enableSearchAdaptor": true } }'替换以下内容:
PROJECT_ID:您的 Google Cloud 项目的 ID。APP_ID:您要查询的应用的 ID。
如需详细了解搜索查询,请参阅获取搜索
结果和
servingConfigs.search方法。
Python
如需了解详情,请参阅 Agent Search Python API 参考文档。
如需向 Agent Search 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅 为本地开发环境设置身份验证。
启用调优后的搜索
测试调优后的搜索并确定要将其用于所有搜索查询后,您可以将其设为默认搜索模型。
控制台
如需将调优后的模型设为默认模型并将其应用于主预览页面、小部件和 API 调用,请按以下步骤操作:
前往调优 标签页:
在 Google Cloud 控制台中,前往 AI Applications 页面。
点击应用的名称。
点击配置 。
点击调优 标签页。
点击调优后的模型 。
点击发布 。
REST
将调优后的模型设置为默认模型后,您无需像上述过程那样在搜索查询中指定 customFineTuningSpec 字段。
如需默认将调优后的搜索版本用于所有搜索查询,请按以下步骤操作:
如需将调优后的搜索设置为默认模型,请运行以下 curl 命令:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -H "X-Goog-User-Project: PROJECT_ID" \ "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search?updateMask=customFineTuningSpec.enableSearchAdaptor" \ -d '{ "customFineTuningSpec": { "enableSearchAdaptor": true } }'如需了解此方法的一般信息,请参阅
servingConfigs.patch。
Python
如需了解详情,请参阅 Agent Search Python API 参考文档。
如需向 Agent Search 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅 为本地开发环境设置身份验证。
关闭调优后的搜索
如果您不再想使用调优后的搜索版本(例如,如果您发现结果与调优前相比没有更好,甚至更差),则可以停用调优后的搜索。
控制台
如需恢复使用基本模型作为默认模型,请按以下步骤操作:
前往调优 标签页:
在 Google Cloud 控制台中,前往 AI Applications 页面。
点击应用的名称。
点击配置 。
点击调优 标签页。
点击基本模型 。
点击发布 。
REST
如需停止使用调优后的模型,请运行类似于上述的 curl 调用,但将 enableSearchAdaptor 设置为 false:
运行以下 curl 命令:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -H "X-Goog-User-Project: PROJECT_ID" \ "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search?updateMask=customFineTuningSpec.enableSearchAdaptor" \ -d '{ "customFineTuningSpec": { "enableSearchAdaptor": false } }'如需了解此方法的一般信息,请参阅
servingConfigs.patch。
Python
如需了解详情,请参阅 Agent Search Python API 参考文档。
如需向 Agent Search 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅 为本地开发环境设置身份验证。
后续步骤
- 如需了解搜索调优对搜索质量的影响,请评估搜索质量。如需了解详情,请参阅 评估搜索质量。