首页 / 利用图像进行搜索

利用图像进行搜索公开 发明

技术内容

利用图像进行搜索 [0001] 相关申请的交叉引用 [0002] 本申请要求2023年4月18日提交的美国临时申请第63/496,833号的权益,其内容通过引用并入本文中。 背景技术 [0003] 搜索引擎是促进例如在数据库中定位电子存储的信息的计算机程序。搜索引擎通常用在分布式计算机系统中,诸如连接到因特网的那些,用于向用户提供信息。在一个示例实现中,用户可以以搜索查询的形式向搜索引擎提供输入,该搜索查询可以包括与所寻找的信息相关的一个或多个词。搜索引擎搜索满足搜索查询的信息并将该信息作为搜索结果的集合返回给用户。 发明内容 [0004] 本说明书涉及例如在交易平台上处理用户对信息的查询,并且特别地涉及响应于使用图像的用户查询处理该查询并且从图像的数据集(例如,来自交易平台(exchange platform)上的列表(listing)的图像)返回与该查询中包括的图像相似的图像的集合。 [0005] 一般而言,本说明书中描述的主题的一个创新方面可以体现在如下方法中,该方法包括以下动作:从客户端设备接收请求使用第一输入图像搜索图像的数据集的查询,其中该查询包括针对第一输入图像的第一图像数据;将第一图像数据输入到多任务分类模型中,该多任务分类模型被训练成响应于特定图像的图像数据从图像的数据集标识一个或多个图像,其中多任务分类模型是使用对应于多个分类任务的多个分类头(classification head)来训练的神经网络,其中多任务分类模型是使用针对每个相应分类任务的单独损失函数(loss function)来训练的,并且其中多个分类任务包括基于单独训练数据集的一个或多个分类任务;获得用于第一图像数据的第一嵌入(embedding)作为来自用于训练的多个分类头之前的神经网络的层以及响应于第一图像数据的输出;使用第一嵌入并从与图像的数据集中的图像相对应的多个嵌入中标识与第一输入图像相似的图像的集合;以及响应于接收到的查询并针对在客户端设备上的显示提供图像的集合。该方面的其他实施例包括对应的计算机系统、装置以及记录在一个或多个计算机存储设备上的计算机程序,每个都被配置为执行所述方法的动作。 [0006] 前述和其他实施例中的每个都可以可选地单独或组合地包括以下特征中的一个或多个。特别地,一个实施例组合地包括以下所有特征。在一些实现中,动作包括使用多任务分类模型生成用于图像的数据集中的图像的多个嵌入。在一些实现中,标识与第一输入图像相似的图像的集合包括:使用最近邻算法计算第一嵌入和多个嵌入中的每个嵌入之间的相应距离度量;从多个嵌入中标识对应距离度量满足预定阈值的嵌入的集合;以及确定对应于所标识的嵌入的集合的图像的集合。在一些实现中,从多个嵌入中标识对应距离度量满足预定阈值的嵌入的集合包括以下之一:从计算的距离度量中标识具有前N个距离度量的嵌入的集合,其中N是预定阈值并且N是大于1的整数,或者标识具有每个都满足或超过预定阈值的相应距离度量的嵌入的集合。 [0007] 在一些实现中,多个分类任务包括基于低分辨率图像的细粒度分类学(taxonomy)分类以及以下中的至少一个或多个:细粒度分类学分类;顶级分类学分类;或主要颜色(primary color)分类。在一些实现中,基于低分辨率图像的细粒度分类学分类是基于用户上传的图像而不是平台上传的专业图像的细粒度分类学分类。 [0008] 在一些实现中,动作包括训练多任务分类模型,包括:为每个分类头及其对应的分类任务标识训练图像和对应的标签的集合的相应训练数据集,其中训练数据集是单独的(separate)并且每个训练数据集用于训练特定的分类头;从每个训练数据集采样多个训练图像和对应的标签以形成训练小批次(mini‑batch);将训练小批次作为输入提供给多任务分类模型;使用多任务分类模型为训练图像的小批次中的每个训练图像生成嵌入;针对多个分类头中的每个分类头计算损失值,损失值基于从对应于分类头的训练数据集获得的训练图像的分类头的输出的比较;以及使用针对分类头的相应计算的损失值来优化多个分类头中的每个分类头。在一些实现中,从每个训练数据集采样多个训练图像和对应的标签以形成训练小批次包括:针对于每个分类头,从每个训练数据集采样相等数量的训练图像和对应的标签。在一些实现中,使用稀疏分类交叉熵函数(sparse categorical cross entropy function)来计算损失值。 [0009] 在一些实现中,多任务分类模型包括:基于EfficientNet或ResNext的神经网络; 用于每个分类任务的单独分类头;以及用于每个相应分类头的softmax激活。在一些实现中,使用分类头的相应计算的损失值来优化多个分类头中的每个分类头包括:标识给定训练图像和标签的索引值;确定索引值是第一分类头的有效索引值;以及响应于确定索引值是第一分类头的有效索引值,使用使用给定训练图像和标签计算的损失值来优化第一分类头。在一些实现中,确定索引值是第一分类头的有效索引值包括:确定索引值包括在第一分类头的有效索引值的集合中。 [0010] 一般而言,本说明书中描述的主题的第二创新方面可以体现在用于训练多任务分类模型的方法中,其中该多任务分类模型是一种神经网络,该神经网络使用对应于多个分类任务的多个分类头来训练,并且使用针对每个相应分类任务的单独的损失函数来训练,其中训练包括动作,所述动作包括针对每个分类头及其对应的分类任务标识训练图像和对应的标签的集合的相应训练数据集,其中训练数据集是单独的并且每个训练数据集用于训练特定的分类头;从每个训练数据集采样多个训练图像和对应的标签以形成训练小批次; 将训练小批次作为输入提供给多任务分类模型;使用多任务分类模型为小批次训练图像中的每个训练图像生成嵌入;为多个分类头中的每个分类头计算损失值,损失值基于从对应于分类头的训练数据集获得的训练图像的分类头的输出的比较;以及使用分类头的相应的计算的损失值来优化多个分类头中的每个分类头。该方面的其他实施例包括对应的计算机系统、装置以及记录在一个或多个计算机存储设备上的计算机程序,每个都被配置为执行所述方法的动作。 [0011] 前述和其他实施例中的每个都可以可选地单独或组合地包括以下特征中的一个或多个。特别地,一个实施例组合地包括以下所有特征。在一些实现中,使用稀疏分类交叉熵函数来计算损失值。 [0012] 可以实现本说明书中描述的技术以实现以下优势中的一个或多个。例如,通过在嵌入引擎的训练中包括多个分类,在本文档中描述的搜索系统技术可以改进用于标识相似项的生成的嵌入,相似项例如是类似于由客户端设备提供的诸如用户拍摄的照片之类的搜索输入的项。通过将单独的数据库——例如,数据存储、数据源或诸如此类——用于训练,包括用于审视(review)具有类似于可能作为搜索输入上传的照片的特性的照片的数据库,所描述的技术可以进一步改进嵌入生成,例如,通过生成表示第一对象的用户拍摄的照片的嵌入,所述用户拍摄的照片类似于表示相同的第一对象的专业人员拍摄的照片(例如,用于交易平台上的产品列表)。 [0013] 在一些实现中,单独的数据源用于训练。例如,具有稀有属性的训练图像可以例如在用于训练之前被下采样。可以对具有在数据集中或要搜索的数据项中更频繁地看到的属性的训练图像进行上采样——例如,复制或重复地用于训练和调整所描述的相关模型。 [0014] 所描述的技术可以改进生成的嵌入,例如,用于用户拍摄的照片或专业照片。例如,要搜索的图像可以包括用户拍摄的照片或专业照片——例如,来自在线资源或来自交易平台中的列表的照片。所描述的技术可以改进对任何类型的输入数据的嵌入的生成,任何类型的输入数据包括用户拍摄的照片或专业照片。改进的嵌入可以改进从数据库,例如,任何数据源,检索相关图像或其他项。 [0015] 所描述的技术可以包括学习如何生成嵌入的模型,所述嵌入可以捕捉任意数量的可视属性,可视属性除其他之外诸如是类别、子类别、颜色、材料、形状。通过学习捕捉这些信号,训练的模型可以改进对那些属性中相似的项的检索。例如,曾经仅关于颜色和类别训练的模型可能能够更有效地检索相似类别和颜色的相似项,但不一定是相似材料的相似项。为了提供相关的有关项,包括多个属性可以是有益的。 [0016] 所描述的技术还可以改进下游过程。例如,用于检索或推荐者排名(ranking)模型的多模式(multimodal)嵌入模型可以通过使用捕捉可视属性的不同集合的嵌入来改进,例如,所述可视属性对于给定下游任务是重要的,诸如用于检索或推荐者排名模型的多模式嵌入模型。 [0017] 本说明书的主题的一个或多个实施例的细节在附图和下面的描述中阐述。根据说明书、附图和权利要求书,主题的其他特征、方面和优势将变得清楚。 附图说明 [0018] 图1示出了示例搜索环境。 [0019] 图2是使用多任务分类模型执行搜索的示例过程的流程图。 [0020] 图3是用于训练多任务分类模型的示例过程的流程图。 [0021] 各个图中的相同的附图标记和命名表示相同的元素。 具体实施方式 [0022] 本说明书涉及例如在交易平台上处理用户对信息的查询,并且特别地涉及响应于使用图像的用户查询处理该查询并且从图像的数据集(例如,来自交易平台上的列表的图像)返回与该查询中包括的图像相似的图像的集合。 [0023] 技术可以包括使用多个分类任务训练的多任务分类模型。每个分类任务可以使用单独的训练数据库。在训练之后,可以使用由处理来自客户端设备的搜索输入的多任务分类模型生成的——中间嵌入——和一个或多个其他嵌入的数据集来执行嵌入搜索以标识类似于搜索输入的项。 [0024] 这里描述的技术适用于使能在最终用户和提供商(provider)之间交换商品、内容和服务的交易平台。提供商可以在交易平台上列出或提供他们的商品、内容和服务,并且最终用户经由交易平台从提供商获得商品、内容和服务。这里描述的技术也适用于其他应用,其他应用包括但不限于搜索引擎应用、推荐系统等。为了简洁和易于描述,在交易平台的上下文中描述以下描述。 [0025] 通常,交易平台被配置为在处理用户查询后提供与用户查询对应的数据。可以从与交易平台的用户账户的用户相对应的用户设备接收用户查询。用户设备可以包括智能电话、智能平板计算机或智能可穿戴设备(例如,智能手表)、计算机或其他合适的用户设备。 用户账户可以是交易平台的注册账户或平台的访客(例如,未注册)。用户查询可以包括对表示交易平台的用户可以获得的交易平台上的项(例如,商品、服务和内容)的列表的数据的请求。交易平台可以传输对应于用户查询的数据以在用户设备上表示(例如,显示)。 [0026] 在一些实现中,用户查询可以包括由用户输入的图像(例如,使用用户的设备捕捉的图像、由用户从诸如另一在线平台之类的另一源获得的图像)。对应于用户查询的数据可以包括与用户查询相关的对应的图像和项的列表,并且特别地,可以包括具有与用户在查询中输入的图像相似的图像的项。例如,用户查询可以包括戒指的图像。对应于并响应于该用户查询的数据可以是具有类似于用户在提交查询时输入的戒指的图像的图像的交易平台上的列表的集合。 [0027] 可以向用户提供控件(control),允许用户关于这里描述的系统、程序或特征是否以及何时可以使能收集用户信息(例如,关于用户的社交网络、社交动作或活动、职业、用户的偏好或用户的当前位置的信息),以及是否从服务器向用户发送内容或通信进行选择。此外,某数据在其存储或使用之前可能以一种或多种方式处理,使得移除个人可标识信息。例如,可以处理用户的身份,使得针对用户无个人可标识信息可以被确定,或者可以在获得位置信息的情况下概括用户的地理位置(诸如到城市、邮政编码或州级别),使得不能确定用户的具体位置。因此,用户可以控制收集关于用户的什么信息、如何使用该信息以及向用户提供什么信息。 [0028] 多任务分类模型的训练可以利用数据采样方法,该数据采样方法使能来自各种异类数据集的样本,使得类标签跨最终输出数据集被平衡。在交易平台上的列表的上下文中的一些实现中,诸如项目颜色和材料之类的卖家输入属性是可选的,并且因此可以是非常稀疏的。而且,随着更多的分类任务被添加到多任务分类模型,跨分类相等地采样训练数据变得越来越困难。为了克服这一限制,这里描述的技术利用可以从完全不相交(disjoint)的数据集读取的数据采样器(sampler),每个分类任务一个数据采样器,并且每个数据采样器具有其自己的唯一标签集合。在训练时,数据采样器可以将来自每个数据集的相等数量的样本组合成小批次。所有样本都可以由多任务分类模型处理,但是来自每个分类头的损失可以仅针对来自分类头的对应源数据集的示例计算。唯一聚集损失函数(gathered loss function)允许跨所有任务和数据源的优化。此外,采样器允许关于不同形式的数据的训练,不同形式的数据比如是清晰(crisp)或专业的产品列表图像以及颗粒状或低分辨率的用户或买家评论照片。 [0029] 下面参考图1‑3描述这些和附加细节。 [0030] 图1示出了示例搜索环境100。搜索环境100包括搜索系统103和客户端设备130。使用一个或多个计算机将搜索系统103配置为执行参考图1描述的操作。搜索系统103可以被配置为训练嵌入引擎107。嵌入引擎107可以包括多任务分类模型的一部分,该多任务分类模型本身包括训练的模型108和任务引擎,例如任务引擎110a‑c。嵌入引擎107可以针对由任务引擎执行的分类任务进行训练。为了生成嵌入,嵌入引擎107可以输出在任务引擎的分类阶段之前生成的嵌入。可以使用诸如最近邻之类的距离搜索算法或其他类型的距离搜索算法在嵌入搜索引擎142中使用这些嵌入来生成可以提供给客户端设备130的结果144。 [0031] 在阶段A中,搜索系统103的采样器引擎104生成训练数据106。搜索系统103可以使用训练数据106来训练嵌入引擎107。训练数据106可以包括来自数据库102a‑c的数据的部分。在一些情况下,数据库102a‑c中的每个数据库对应于任务引擎110a‑c中包括的任务引擎。例如,第一任务引擎110a可以被配置为对图像是否是特定颜色进行分类。其他分类任务除其他之外可以包括对形状、材料、图案、类别、分类学、颜色、主要颜色、次要颜色进行分类。分类可以包括基于任何可视属性的分类。在一些情况下,分类可以包括指示图像是否包括给定项的项标识符——例如,相同项的多于一个的图像。分类任务可以包括对以下内容中的一个或多个进行分类:类别,否则称为分类学,除其他之外包括例如附件、家居和生活、电子产品;细粒度项类别,除其他之外例如是皮带扣、餐椅;主要颜色;次要颜色。 [0032] 在一些实现中,分类任务包括使用用户点击数据对相似图像进行分类。例如,分类任务可以包括将训练项的给定图像分类为属于相关图像的集合,其中相关图像表示由用户在给定会话中导航的交易平台上的列表的图像。在一些情况下,仅当用户在列表上导航持续多于阈值时间量的时间时,将图像添加到图像的集群(cluster)。在一些情况下,仅当多于阈值数量的用户还针对列表在两个或更多相关图像之间导航时,将图像添加到集群。包括用于分类图像是否与一个或多个相关图像相关的任务引擎,嵌入引擎107可以被训练为生成相似的相关图像的嵌入。这样,基于嵌入的搜索可以返回包括一些或所有这样的相关图像的结果。在一些情况下,当用户将多个图像与相同项相关联时——例如,标记或手动关联操作,可以形成图像的组。 [0033] 在一些实现中,任务引擎110a‑c针对顶级分类学、细粒度分类学和主要颜色中的每个进行分类。例如,第一任务引擎110a可以对训练数据的训练图像表示的大致类别(broad category)进行分类。第二任务引擎110b可以对训练图像表示的具体类别进行分类。第n个任务引擎110c可以对训练图像中表示的主要颜色进行分类。 [0034] 诸如第一数据库102a之类的数据库可以存储用于第一任务引擎110a的训练数据。 该训练数据可以特定于分类任务。在一些情况下,用于任务的训练数据包括特定于该任务的一个或多个标签。标签可以指示基准真实值(ground truth value)。对于分类颜色的任务引擎,标签可以包括图像的颜色。 [0035] 在一些实现中,采样器引擎104通过包括来自例如数据库102a‑c之类的一个或多个数据库的相等数量的项来生成训练数据106。例如,采样器引擎104可以包括来自第一数据库102a的被配置为训练第一任务引擎110a的三个项、来自第二数据库102b的被配置为训练第二任务引擎110b的三个项、以及来自第N个数据库102c的被配置为训练第N个任务引擎 110c的三个项。通常,可以使用任何数量的数据库和任务引擎。在一些情况下,包括其他数量的训练项。在一些情况下,采样器引擎104生成具有来自不同数据库的不同数量,例如不相等,的项的训练数据106。 [0036] 通常,数据库102a‑c中的数据可以是单独的。例如,现有数据的一个问题可以是例如由诸如交易平台的用户之类的用户提供的属性是稀疏的。可以使用从不相交的数据集读取的采样器引擎104的版本来克服用于一些任务引擎110a‑c的基准真值和训练过程的一些标签的稀疏性,例如,每个任务一个,并且每个具有其自己的唯一标签集合。对于训练,样本引擎104可以将来自每个数据集的相等数量的样本组合成用于训练的小批次,例如训练数据106。所有示例都可以由嵌入引擎107处理,但是来自每个分类头,例如,任务引擎110a‑c,的损失可以仅针对来自头的对应源数据集的示例计算。 [0037] 训练数据106中的训练项可以包括图像和标签。图像可以包括来自交易平台中的列表的图像。图像可以包括来自对交易所平台上列出的产品的评论的图像。标签可以由上传用户提供或可以由其他系统或用户添加。对于用于颜色分类的图像,标签可以包括针对颜色的标签。对于用于类别分类的图像,标签可以包括图像中显示的项属于什么类别。通常,任何合适的分类任务都可以用对应的图像和标签来设置(setup)以促进学习给定的分类。 [0038] 在一些实现中,训练数据106被配置用于三元组(triplet)损失。在一些情况下,三元组损失可用于帮助针对具有相似颜色、材料、图案或其他特性的图像生成相似嵌入。为了缓解该问题,技术包括利用三元组损失的深度度量学习方法。对比损失(contrastive loss),诸如三元组损失,可用在分类损失上,比如分类交叉熵,以对比相似与不相似的图像,而不是仅对具有相同类别标签的图像进行分类。 [0039] 在一个示例三元组损失方法中,搜索系统103关于示例的三元组训练训练的模型 108或任务引擎110a‑c,其中每个三元组包括锚(anchor)、正例(positive example)和反例(negative example)。搜索系统103可以使用三元组损失函数,该函数基于为三个示例中的每个生成的嵌入,将锚和正例推近在一起,而将反例推得远离。在一些情况下,锚和正例可以包括来自交易平台中的相同列表项的图像对。可以使用来自不同列表的图像作为反例。 锚、正例或反例中的每个都可以被包括在训练数据106中。不同的预训练的模型可以用作训练的模型108的起点,不同的预训练的模型包括EfficientNet、CLIP、Image‑GPT、VGG‑16、Resnet‑50、Inception或MobileNet。 [0040] 在阶段B中,训练的模型108获得训练数据106。训练的模型108可以包括卷积神经网络的层。训练的模型108可以包括来自基于EfficientNet或ResNext的神经网络的层。在一些情况下,训练的模型108至少被部分地预训练——例如,用于检测图像中的对象或对图像的元素进行分类。在一些情况下,可以在训练期间设置和不更新预训练的权重的一部分。 [0041] 在一些情况下,模型中的层或权重越早,该层或权重编码的概念就越抽象。类似的原理可以应用衰弱(wither)较晚的层或权重,倾向于编码较高级别的概念。作为示例,当训练的模型处理人的图像时,模型中的层的第一集合可能编码基本的可视概念,诸如点、线或轮廓。接下来的几层可能编码更复杂的概念,诸如圆。较晚的层可能编码眼睛。最终的层可能编码脸或人。 [0042] 按照该理解,本文档中描述的技术可以冻结一个或多个权重或层——例如,模型 108的权重或层的第一集合。因为新的训练数据可能不太可能改变通常包括在权重或层的第一集合中的基本概念,所以这些权重或层可以在训练期间保持恒定,同时根据包括的训练数据的具体元素微调更高级别的概念。通过冻结N个数据层或权重进行训练可以增加训练诸如模型108之类的模型的速度。通过使用不同的参数进行实验并根据评估度量确定层或权重的最优集合可以确定保持多少层或权重恒定的确切数量。在一些情况下,可以根据停止条件自主地确定层或权重的数量——例如,要冻结的阈值准确度水平或阈值最大层或权重。例如,虑及训练减少的时间和准确度的优化算法可以确定要冻结的层或权重的最大数量,同时将训练的模型的准确度保持在准确度的阈值水平内——例如,90%的准确度。 [0043] 训练的模型108生成中间嵌入109。中间嵌入109可以包括表示正被处理的给定训练图像的一个或多个值。这些值可以是向量(vector)的形式。 [0044] 任务引擎110a‑c从训练的模型108获得中间嵌入109。任务引擎110a‑c生成进一步的嵌入并最终生成指示是否可以根据每个执行的分类任务对图像进行分类的分类。任务引擎110a‑c可以包括被配置为基于输入调整输出值的神经网络的一个或多个层。 [0045] 任务引擎110a‑c可以执行相似的但使用不同数据操作的任务。例如,任务引擎 110a‑c之一可以使用来自交易平台上的列表的图像来执行分类学分类。任务引擎110a‑c中的另一个可以使用来自交易平台上的评论的不同图像来执行相似或相同的分类学分类。这可以帮助所得到的嵌入引擎107生成与列表相关联的专业外观、高分辨率或其他特征的嵌入,其类似于非列表用户例如使用电话、不同背景、低分辨率或其他特征拍摄的相似对象的嵌入。 [0046] 在一些实现中,使用使用不同类型数据的一个或多个不同任务引擎可以改进生成的嵌入。例如,通过使用例如由第一任务引擎110a执行的单独的分类过程,仅对来自用户评论的图像并且不对来自交易平台的列表的图像进行操作,嵌入引擎107可以为相似的专业照片和用户照片生成嵌入。这可以帮助用户使用他们的电话获得的图像来搜索相似的图像,使用他们的电话获得的图像可能与用于产品列表的图像类型不相似——例如,除了特性的其他改变之外,没有专业照明、更嘈杂的背景。 [0047] 一般来说,卖家在交易平台上上传的照片通常是高质量的,具有专业的照明,或者是在白色或预先考虑的背景下拍摄的。但来自诸如智能电话之类的客户端设备的照片可能是模糊的、光线不佳的或者在从用户正在搜索的对象分散注意力的多种背景上。深度学习可以是强大且有用的工具,但训练深度学习模型可能高度易受数据分发中的偏差的影响并且关于高质量、卖方提供的产品图像的训练可以使训练的模型偏离相对较低质量的用户照片。通过使用包括至少一个数据集的单独数据集,至少一个数据集只包括来自用户评论的图像或图像的大部分,搜索系统103可以减少图像偏向于看起来专业的照片并改进使用用户拍摄的照片搜索项目的能力。 [0048] 任务引擎110a‑c可以向损失引擎120提供输出。损失引擎120生成结果122。然后,更新引擎124使用结果122来使用更新126来更新训练的模型108或任务引擎110a‑c的一个或多个权重或参数。在一些情况下,要更新的权重可以排除如本文档中所讨论的被冻结以帮助减少模型108的训练时间的那些权重或参数。损失引擎120可以通过将任务引擎110a‑c生成的一个或多个分类与训练数据106中包括的标签进行比较来生成122结果。 [0049] 在一些实现中,搜索系统103使用梯度行为(gradient behavior)来训练嵌入引擎 107。在一些情况下,通过将缺失标签设置为哨值(sentinel value)并实现用于在遇到占位符标签时将损失设置为零的损失或度量类的定制包装器(wrapper),搜索系统103可以基于具体训练数据——例如,针对诸如特定任务引擎之类的嵌入引擎107的特定子集标识的训练数据来训练嵌入引擎107的具体权重或参数。通过使用单独的数据集和训练,搜索系统 103可以是模块化的——允许通过使用任务引擎为特定分类指定例如单独生成的附加特定数据集以进一步精炼生成的嵌入来进行改进。 [0050] 在一些实现中,搜索系统103使用带有权重衰减(Weight Decay)优化器的随机梯度下降(Stochastic Gradient Descent)(SGDW)进行训练。在一个示例中,搜索系统103可以使用64的批次大小和0.8的学习率(learning rate)(所使用的每个GPU 0.01),其中对于 9个历元(epoch)每3个历元应用0.1的“伽马(gamma)”(每3个历元将学习率除以10)。在一些情况下,当部分地或端到端地训练嵌入引擎107时,可以使用这些或其他超参数。在一些情况下,当针对批次大小调整学习率时,搜索系统103可以使用低一个数量级的(an order偶发magnitude lower)学习率来避免NaN损失。在一些情况下,搜索系统103可以使用学习速率调度,该学习速率调度限制学习速率的降低以帮助避免验证(validation)损失增加。 [0051] 在一些实现中,损失引擎120包括包装器引擎,该包装器引擎被配置成调整使用哪些训练项来更新哪个任务引擎。例如,训练项可以来自数据库102a‑c之一。在一些情况下,仅当源自给定数据库的训练项损失时——从处理该训练项生成的——才用于更新对应于该给定数据库的任务引擎。如果第一数据库102a包括第一任务引擎110a的所有训练项,则损失引擎120的包装器引擎可以确定第一任务引擎110a处理的训练项是否源自第一数据库 102a。如果该项没有,则包装器引擎可以排除该损失被用于更新第一任务引擎110a或其他值。在一些情况下,使用有效索引的集合来完成排除。例如,可以为训练数据106中的每个训练项分配索引。每个训练项可以对应于训练任务引擎110a‑c之一。搜索系统103可以标识并存储那些训练项的对应索引。损失引擎120可以获得任务引擎110a‑c中的每个的有效索引并使用有效索引的集合滤除用于更新的损失值。在一些情况下,当损失引擎120遇到占位符值或标识无效索引时,损失被设置为0。包装器类可以在张量流(tensorflow)库周围使用,以省略对给定任务引擎无效的训练项的梯度更新。 [0052] 在阶段C中,客户端设备130提供搜索输入132。客户端设备130可以使用应用编程接口或其他系统来提供搜索输入132。在一些情况下,客户端设备130是配备有照相机的智能电话类型。搜索输入132可以包括由客户端设备130的照相机获得的图像。搜索输入132可以除其他之外包括其他元素,诸如文本或视频。搜索输入132的图像可以由客户端设备130或由另一设备获得,并且稍后由客户端设备130获得。客户端设备130和搜索系统103可以使用任何适当形式的连接来连接,除其他之外例如是因特网、有线、无线。 [0053] 搜索系统103可以处理搜索输入132以生成结果144,并且然后将结果146提供给客户端设备130。结果146可以是结果144的重新格式化版本、结果144的子集或这些的组合。 [0054] 在阶段D中,搜索系统103向嵌入引擎107提供搜索输入134。嵌入引擎107可以类似于训练数据106来处理搜索输入134。不是对搜索输入进行分类,嵌入引擎107可以生成搜索嵌入140——例如,在一个或多个分类之前已经生成的嵌入。搜索嵌入140可以表示与在任务引擎110a‑c之前的训练中生成的嵌入类似的嵌入。 [0055] 所生成的搜索嵌入140可以是值的列表,例如,值的向量。在一些情况下,搜索嵌入 140是由任务引擎110a‑c的一个或多个第一层——例如,任务引擎110a‑c的最终分类层之前的层——生成的嵌入的组合。在一些情况下,搜索嵌入140在被提供给任务引擎110a‑c之前由训练的模型108生成。 [0056] 嵌入引擎107将搜索嵌入140提供给嵌入搜索引擎142。嵌入搜索引擎142可以执行搜索算法,诸如距离搜索算法,以找到与搜索输入134相似的项。在一些情况下,项是列表图像。例如,嵌入搜索引擎142可以获得由嵌入引擎107生成的表示交易平台上的列表的一个或多个嵌入。在一些情况下,嵌入搜索引擎142基于搜索输入134标识与由嵌入引擎107生成的嵌入最相似的嵌入。然后,可以使用最相似的嵌入来生成结果144——例如,使用被配置为从一个或多个嵌入生成诸如图像之类的结果的引擎,诸如解码器。 [0057] 在一些实现中,嵌入搜索引擎142被配置为使用倒排文件(inverted file)(IVF)算法来执行近似最近邻(ANN)索引。IVF算法可以将嵌入空间划分为嵌入的集群,例如,表示交易平台上的数千或数百万项的嵌入。稍后,在查询时,嵌入搜索引擎142可以标识与查询嵌入——例如,搜索嵌入140——最近的集群的子集。通过仅搜索最近的集群的子集,嵌入搜索引擎142可以在对准确度影响最小的情况下减少搜索等待时间(latency)。 [0058] 在一些实现中,交易平台上的列表图像被成批地离线索引。用户可以拍摄例如包括在搜索输入132中的查询照片。搜索系统103使用搜索输入132生成的嵌入必须实时发生以将结果提供给请求设备。由于CNN模型的大小,在CPU上进行推断可能花费很长时间。为了帮助克服该问题,搜索系统103可以至少部分地使用一个或多个GPU来执行操作。 [0059] 图2是用于使用多任务分类模型执行搜索的示例过程200的流程图。为方便起见,过程200将被描述为由位于一个或多个位置的并且根据本说明书适当地编程的一个或多个计算机的系统执行。例如,适当编程的例如图1的搜索系统103之类的搜索系统可以执行过程200。 [0060] 过程200包括从客户端设备接收请求使用第一输入图像搜索图像的数据集的查询,其中该查询包括第一输入图像的第一图像数据(202)。例如,图1的客户端设备130可以向搜索系统103提供搜索输入134。搜索输入134可以包括由客户端设备130捕捉的一个或多个图像。 [0061] 过程200包括将第一图像数据输入到多任务分类模型中,该多任务分类模型被训练成例如响应于特定图像的图像数据而从图像的数据集标识一个或多个图像(204)。例如,多任务分类模型可以包括一个或多个模型——例如,使用任务引擎110a‑c训练的以对除其他之外的诸如类别、颜色、材料之类的多个属性进行分类的模型108。多任务分类模型可以包括嵌入搜索引擎142,该嵌入搜索引擎142被训练成接收搜索嵌入,诸如由训练的模型108生成的搜索嵌入140,以对相似的嵌入进行集群并返回一个或多个图像。 [0062] 过程200包括获得用于第一图像数据的第一嵌入作为来自用于训练的多个分类头之前的神经网络的层以及响应于第一图像数据的输出(206)。例如,嵌入搜索引擎142可以获得从训练的模型108生成的搜索嵌入140。 [0063] 过程200包括例如使用第一嵌入并且从对应于图像的数据集中的图像的多个嵌入中标识与第一输入图像相似的图像的集合(208)。例如,嵌入搜索引擎142可以使用搜索嵌入140与每个表示一个或多个数据项的一个或多个其他嵌入的比较来搜索数据项的集合。 在一些情况下,嵌入搜索引擎142通过计算搜索嵌入140一个或多个或所有其他预存储的或预生成的嵌入的余弦距离来执行搜索。嵌入搜索引擎142可以返回例如按距离排名的前K个最相似的嵌入。嵌入搜索引擎142可以确定诸如图像之类的哪些数据项与所述K个嵌入相关联并且返回表示数据项的数据——除其他之外,例如,文本、图像、缩略图像。 [0064] 过程200包括响应于所接收的查询并且针对在客户端设备上的显示提供图像的集合(210)。例如,搜索系统103可以处理搜索输入132以生成结果144并且然后将结果146提供给客户端设备130——例如,生成一个或多个传输以沿着可通信地连接搜索系统103和客户端设备130的通信信道发送消息。 [0065] 图3是用于训练多任务分类模型的示例过程300的流程图。为方便起见,过程300将被描述为由位于一个或多个位置的并且根据本说明书适当地编程的一个或多个计算机的系统执行。例如,适当编程的例如图1的搜索系统103之类的搜索系统可以执行过程300。 [0066] 过程300包括针对每个分类头及其对应的分类任务标识训练图像和对应的标签集合的相应训练数据集,其中训练数据集是单独的并且每个训练数据集用于训练特定的分类头(302)。例如,数据库102a‑c中的每个数据库可以对应于任务引擎110a‑c中包括的任务引擎。例如,第一任务引擎110a可以被配置为对图像是否为特定颜色进行分类。 [0067] 过程300包括从每个训练数据集采样多个训练图像和对应的标签以形成训练小批次(304)。例如,采样器引擎104可以包括来自第一数据库102a的N个项,其被配置为训练第一任务引擎110a,来自第二数据库102b的N个项,其被配置为训练第二任务引擎110b,以及来自第N个数据库102c的N个项,其被配置为训练第N个任务引擎110c。 [0068] 过程300包括将训练小批次作为输入提供给多任务分类模型(306)。例如,搜索系统103的采样器引擎104可以向训练的模型108提供训练数据106。 [0069] 过程300包括使用多任务分类模型为训练图像的小批次中的每个训练图像生成嵌入(308)。例如,训练的模型108可以生成中间嵌入109。 [0070] 过程300包括例如针对多个分类头中的每个分类头计算损失值,该损失值基于从对应于分类头的训练数据集获得的训练图像的分类头的输出的比较(310)。例如,任务引擎 110a‑c可以生成分类。损失引擎120可以计算结果122中的一个或多个损失值。 [0071] 过程300包括使用针对分类头的相应的计算的损失值来优化多个分类头中的每个分类头(312)。例如,更新引擎124可以使用结果122来更新一个或多个权重或参数。如果一些层或权重被冻结,则更新引擎124可以更新未被冻结的层或权重。 [0072] 在本说明书中,术语“数据库”被广泛地用来指代任何数据集合:数据不需要以任何特定方式结构化或根本不被结构化,并且它可以存储在一个或多个位置中的存储设备上。 [0073] 在本说明书中,术语“引擎”被广泛用于指代被编程以执行一个或多个特定功能的基于软件的系统、子系统或过程。通常,引擎将被实现为安装在一个或多个位置的一个或多个计算机上的一个或多个软件模块或部件。在一些情况下,一个或多个计算机将专用于特定引擎;在其他情况下,可以在相同的一个或多个计算机上安装和运行多个引擎。 [0074] 本说明书中描述的主题以及动作和操作可以在数字电子电路中、在有形体现的计算机软件或固件中、在计算机硬件中,包括在本说明书中公开的结构及其结构等价物、或者在它们中的一个或多个的组合中实现。本说明书中描述的主题以及动作和操作可以被实现为一个或多个计算机程序或在其中实现,例如编码在计算机程序载体上的计算机程序指令的一个或多个模块,以由数据处理装置执行或控制其操作。载体可以是有形的非暂时性计算机存储介质。可替代地或另外地,载体可以是人工生成的传播信号,例如,机器生成的电、光或电磁信号,其被生成以编码信息以传输到适当的接收器装置来由数据处理装置执行。 计算机存储介质可以是机器可读存储设备、机器可读存储衬底、随机或串行存取存储器设备、或它们中的一个或多个的组合或其一部分。计算机存储介质不是传播的信号。 [0075] 术语“数据处理装置”包括用于处理数据的所有种类的装置、设备和机器,例如包括可编程处理器、计算机或多个处理器或计算机。数据处理装置可以包括专用逻辑电路,例如,FPGA(现场可编程门阵列)、ASIC(专用集成电路)或GPU(图形处理单元)。除了硬件之外,该装置还可以包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或它们中的一个或多个的组合的代码。 [0076] 计算机程序可以用任何形式的编程语言编写,包括编译或解释语言,或声明性或过程性语言;并且它可以以任何形式部署,包括作为独立程序,例如作为小应用程序,或作为适合在计算环境中执行的模块、部件、引擎、子例程或其他单元,该环境可以包括在一个或多个位置通过数据通信网络互连的一个或多个计算机。 [0077] 计算机程序可以但不需要对应于文件系统中的文件。计算机程序可以存储在保持其他程序或数据的文件的一部分中,例如,存储在标记语言文档中的一个或多个脚本,存储在专用于所讨论的程序的单个文件中,或存储在多个协调文件中,例如,存储一个或多个模块、子程序或代码的部分的文件。 [0078] 本说明书中描述的过程和逻辑流程可以由执行一个或多个计算机程序的一个或多个计算机来执行,以通过对输入数据进行操作并生成输出来执行操作。过程和逻辑流程也可以由例如,FPGA、ASIC或GPU之类的专用逻辑电路执行,或者由专用逻辑电路和一个或多个编程的计算机的组合来执行。 [0079] 适合于执行计算机程序的计算机可以基于通用或专用微处理器或两者,或基于任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本元件是用于执行指令的中央处理单元和用于存储指令和数据的一个或多个存储器设备。中央处理单元和存储器可以由专用逻辑电路补充或并入专用逻辑电路中。 [0080] 通常,计算机还将包括或可操作地耦合到一个或多个大容量存储设备,并且被配置为从大容量存储设备接收数据或向大容量存储设备传输数据。大容量存储设备可以是例如磁、磁光或光盘或固态驱动器。然而,计算机不需要有这样的设备。此外,计算机可以嵌入到另一设备中,仅举几例,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收器或便携式存储设备,例如通用串行总线(USB)闪存驱动器。 [0081] 为了提供与用户的交互,本说明书中描述的主题可以在一个或多个计算机上实现,该一个或多个计算机具有用于向用户显示信息的显示设备,例如LCD(液晶显示器)监视器或虚拟现实(VR)或增强现实(AR)显示器,以及用户可以通过其向计算机提供输入的输入设备,例如键盘和定点设备,例如鼠标、跟踪球或触摸板,或者被配置为与它们通信。也可以使用其他种类的设备来提供与用户的交互;例如,提供给用户的反馈和响应可以是任何形式的感觉反馈,例如,视觉、听觉、语音或触觉反馈或响应;并且可以以任何形式接收来自用户的输入,包括声学、语音、触觉或眼睛跟踪输入,包括触摸运动或手势,或运动移动或手势或定向移动或手势。此外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户交互;例如,通过响应于从web浏览器接收的请求而将web页发送到用户设备上的web浏览器,或者通过与在用户设备上运行的小应用交互,用户设备例如是智能电话或电子平板计算机。此外,计算机可以通过向例如运行消息收发应用的智能电话之类的个人设备发送文本消息或其他形式的消息并从用户接收作为回应的响应消息来与用户交互。 [0082] 本说明书结合系统、装置和计算机程序部件使用术语“被配置为”。一个或多个计算机的该系统被配置为执行特定操作或动作意味着该系统已在其上安装了软件、固件、硬件或它们的组合,这些软件、固件、硬件或它们的组合在操作中使系统执行该操作或动作。 该一个或多个计算机程序被配置为执行特定操作或动作意味着一个或多个程序包括指令,当由数据处理装置执行时,指令使得装置执行操作或动作。该专用逻辑电路被配置为执行特定操作或动作意味着该电路具有执行该操作或动作的电子逻辑。 [0083] 本说明书中描述的主题可以在计算系统中实现,该计算系统包括后端部件,例如作为数据服务器,或者包括中间件部件,例如应用服务器,或者包括前端部件,例如具有图形用户界面、web浏览器或小应用的客户端计算机,用户可以通过该客户端计算机,或者一个或多个这样的后端、中间件或前端部件的任何组合与本说明书中描述的主题的实现交互。系统的部件可以通过任何形式的数字数据通信或数字数据通信的介质的互连,数字数据通信例如是通信网络。通信网络的示例包括局域网(LAN)和广域网(WAN),例如因特网。 [0084] 计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离并且通常通过通信网络进行交互。客户端和服务器的关系是通过在相应的计算机上运行并且彼此具有客户端‑服务器关系的计算机程序而产生的。在一些实现中,服务器向用户设备传输例如HTML页之类的数据,例如,为了向与充当客户端的设备交互的用户显示数据并从该用户接收用户输入。在用户设备处生成的数据,例如用户交互的结果,可以在服务器处从该设备接收。 [0085] 虽然本说明书包含许多具体的实现细节,但这些细节不应被解释为对权利要求本身所限定的要求保护的内容的范围的限制,而应被解释为对可能特定于特定发明的特定实施例的特征的描述。本说明书中在单独实施例的上下文中描述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例的上下文中描述的各种特征也可以在多个实施例中单独实现或在任何合适的子组合中实现。此外,尽管特征可以在上面被描述为在某些组合中起作用并且甚至最初被这样要求保护,但是在一些情况下可以从组合去除来自所要求保护的组合的一个或多个特征,并且权利要求可以针对子组合或子组合的变体。 [0086] 类似地,虽然在附图中以特定顺序描绘操作并在权利要求中以特定顺序记载操作,但这本身不应被理解为要求以所示的特定顺序或按顺序执行此类操作,或要求执行所有所示的操作以实现期望的结果。在一些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和部件的分离不应该被理解为在所有实施例中都需要这样的分离,并且应该理解,所描述的程序部件和系统通常可以在单个软件产品中集成在一起或打包到多个软件产品中。 [0087] 已经描述了该主题的特定实施例。其他实施例在以下权利要求的范围内。例如,权利要求书中记载的动作可以以不同的顺序执行并且仍然实现所需的结果。作为一个示例,附图中描绘的过程不一定需要所示的特定顺序或顺序次序来实现期望的结果。在一些情况下,多任务和并行处理可能是有利的。 [0088] 在一些情况下,可以使用用于训练可视嵌入模型的其他训练方法。一种包括使用多任务分类关于标签的多个集合训练神经网络的方法可以生成嵌入的集合,其编码与本文档中描述的嵌入相似的信息。生成在检索或下游任务中使用的可视嵌入的其他方法可以包括:(1)关于成对的相似示例训练模型,例如,使用两塔架构和对比损失;(2)训练图嵌入模型,其中图节点由图像表示。 [0089] 生成要用来代替在本文档中,例如图1中描述的嵌入系统或与其组合使用的可视嵌入的不同方式包括: [0090] 不同的模型架构:所描述的技术可与更简单的多层感知器(MLP)架构或更高级的视觉变换器(Transformer)(VIT)架构一起使用,而不是卷积神经网络。 [0091] 自动编码器:自动编码器包括编码器和解码器。编码器将输入图像压缩成低维表示(例如,嵌入),并且解码器根据该表示重构输入。 [0092] t‑SNE:(T‑分布式随机邻居嵌入)是降维技术的一个示例,该降维技术对于可视化高维数据可以是特别有用的。它可以应用来将图像特征减少到2D或3D空间。 [0093] 散列技术:位置敏感散列(LSH)或深度散列方法可用于将图像映射到二进制代码,其作为紧凑嵌入。 [0094] 几何方法:专注于捕捉图像中的几何关系。这可以包括诸如空间金字塔匹配或可视词的袋子(Bag ofVisual Words)之类的技术。 [0095] PCA(主成分分析):一种应用来减少图像数据的维度的技术,并且所得到的主成分可以作为嵌入。 [0096] 生成损失的不同方式代替本文档中描述的损失生成和训练技术或与其组合使用,本文档中描述的损失生成和训练技术例如是参考图1讨论的分类损失和三元组损失,所述不同方式包括: [0097] 对比损失:对比损失通过最小化相似对之间的距离和最大化不相似对之间的距离来学习嵌入。它定义了损失函数,当正对之间的距离大并且负对之间的距离较小时,该损失函数惩罚模型。 [0098] 基于边界(margin)的损失:铰链损失或基于边界的损失,如边界排名损失,专注于产生正和负对之间的边界。思想是如果正样本和负样本之间的边界不满足,则惩罚该模型。 [0099] N对损失:N对损失将三元组损失扩展到处理多个正样本。它鼓励网络产生嵌入,其中正样本比负样本更接近锚样本。 [0100] 角损失:角损目的在于通过在样本之间强制具体的角关系来学习有区别的嵌入。 它考虑了嵌入空间中的向量之间的角度。